2012-01-03 00:16:29 +00:00
|
|
|
|
with import <nix/config.nix>;
|
|
|
|
|
|
|
|
|
|
let
|
|
|
|
|
|
|
|
|
|
builder = builtins.toFile "nar.sh"
|
|
|
|
|
''
|
|
|
|
|
export PATH=${nixBinDir}:${coreutils}
|
|
|
|
|
|
2013-07-01 19:02:36 +00:00
|
|
|
|
if [ $compressionType = xz ]; then
|
|
|
|
|
ext=.xz
|
|
|
|
|
compressor="| ${xz} -9"
|
|
|
|
|
elif [ $compressionType = bzip2 ]; then
|
|
|
|
|
ext=.bz2
|
|
|
|
|
compressor="| ${bzip2}"
|
2012-07-01 22:46:38 +00:00
|
|
|
|
else
|
2013-07-01 19:02:36 +00:00
|
|
|
|
ext=
|
|
|
|
|
compressor=
|
2012-07-01 22:46:38 +00:00
|
|
|
|
fi
|
|
|
|
|
|
2012-01-03 00:16:29 +00:00
|
|
|
|
echo "packing ‘$storePath’..."
|
|
|
|
|
mkdir $out
|
2013-07-01 19:02:36 +00:00
|
|
|
|
dst=$out/tmp.nar$ext
|
2012-01-03 00:16:29 +00:00
|
|
|
|
|
|
|
|
|
set -o pipefail
|
2013-07-01 19:02:36 +00:00
|
|
|
|
eval "nix-store --dump \"$storePath\" $compressor > $dst"
|
2012-01-03 00:16:29 +00:00
|
|
|
|
|
2012-06-29 18:26:31 +00:00
|
|
|
|
hash=$(nix-hash --flat --type $hashAlgo --base32 $dst)
|
|
|
|
|
echo -n $hash > $out/nar-compressed-hash
|
2012-01-03 00:16:29 +00:00
|
|
|
|
|
2013-07-01 19:02:36 +00:00
|
|
|
|
mv $dst $out/$hash.nar$ext
|
2012-01-03 00:16:29 +00:00
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
in
|
|
|
|
|
|
2012-07-01 22:46:38 +00:00
|
|
|
|
{ storePath, hashAlgo, compressionType }:
|
2012-01-03 00:16:29 +00:00
|
|
|
|
|
|
|
|
|
derivation {
|
|
|
|
|
name = "nar";
|
2012-04-14 16:48:11 +00:00
|
|
|
|
system = builtins.currentSystem;
|
2012-01-03 00:16:29 +00:00
|
|
|
|
builder = shell;
|
|
|
|
|
args = [ "-e" builder ];
|
2012-07-01 22:46:38 +00:00
|
|
|
|
inherit storePath hashAlgo compressionType;
|
2012-05-10 02:14:36 +00:00
|
|
|
|
|
|
|
|
|
# Don't build in a chroot because Nix's dependencies may not be there.
|
|
|
|
|
__noChroot = true;
|
2013-08-14 19:35:13 +00:00
|
|
|
|
|
|
|
|
|
# Remote machines may not have ${nixBinDir} or ${coreutils} in the same prefixes
|
|
|
|
|
preferLocalBuild = true;
|
2012-01-03 00:16:29 +00:00
|
|
|
|
}
|