4911a10a4e
XZ compresses significantly better than bzip2. Here are the compression ratios and execution times (using 4 cores in parallel) on my /var/run/current-system (3.1 GiB): bzip2: total compressed size 849.56 MiB, 30.8% [2m08] xz -6: total compressed size 641.84 MiB, 23.4% [6m53] xz -7: total compressed size 621.82 MiB, 22.6% [7m19] xz -8: total compressed size 599.33 MiB, 21.8% [7m18] xz -9: total compressed size 588.18 MiB, 21.4% [7m40] Note that compression takes much longer. More importantly, however, decompression is much faster: bzip2: 1m47.274s xz -6: 0m55.446s xz -7: 0m54.119s xz -8: 0m52.388s xz -9: 0m51.842s The only downside to using -9 is that decompression takes a fair amount (~65 MB) of memory.
35 lines
704 B
Nix
35 lines
704 B
Nix
with import <nix/config.nix>;
|
||
|
||
let
|
||
|
||
builder = builtins.toFile "nar.sh"
|
||
''
|
||
export PATH=${nixBinDir}:${coreutils}
|
||
|
||
echo "packing ‘$storePath’..."
|
||
mkdir $out
|
||
dst=$out/tmp.nar.xz
|
||
|
||
set -o pipefail
|
||
nix-store --dump "$storePath" | ${xz} -9 > $dst
|
||
|
||
hash=$(nix-hash --flat --type $hashAlgo --base32 $dst)
|
||
echo -n $hash > $out/nar-compressed-hash
|
||
|
||
mv $dst $out/$hash.nar.xz
|
||
'';
|
||
|
||
in
|
||
|
||
{ storePath, hashAlgo }:
|
||
|
||
derivation {
|
||
name = "nar";
|
||
system = builtins.currentSystem;
|
||
builder = shell;
|
||
args = [ "-e" builder ];
|
||
inherit storePath hashAlgo;
|
||
|
||
# Don't build in a chroot because Nix's dependencies may not be there.
|
||
__noChroot = true;
|
||
}
|