* Support adding the closure of a set of store paths to the ISO
image (along with an /init symlink for stage 2 of the boot process). svn path=/nixu/trunk/; revision=6944
This commit is contained in:
parent
1aa35c8267
commit
14cc7b8828
|
@ -9,6 +9,15 @@
|
||||||
# grafted in the file system at path `target'.
|
# grafted in the file system at path `target'.
|
||||||
contents
|
contents
|
||||||
|
|
||||||
|
, # In addition to `contents', the closure of the store paths listed
|
||||||
|
# in `packages' are also placed in the file system.
|
||||||
|
packages ? []
|
||||||
|
|
||||||
|
, # `init' should be a store path, the closure of which is added to
|
||||||
|
# the image, just like `packages'. However, in addition, a symlink
|
||||||
|
# `/init' to `init' will be created.
|
||||||
|
init ? null
|
||||||
|
|
||||||
# Whether this should be an El-Torito bootable CD.
|
# Whether this should be an El-Torito bootable CD.
|
||||||
, bootable ? false
|
, bootable ? false
|
||||||
|
|
||||||
|
@ -23,6 +32,7 @@ stdenv.mkDerivation {
|
||||||
name = "iso9660-image";
|
name = "iso9660-image";
|
||||||
builder = ./make-iso9660-image.sh;
|
builder = ./make-iso9660-image.sh;
|
||||||
buildInputs = [cdrtools];
|
buildInputs = [cdrtools];
|
||||||
inherit isoName bootable bootImage;
|
inherit isoName packages init bootable bootImage;
|
||||||
graftList = map ({source, target}: target + "=" + source) contents;
|
sources = map ({source, target}: source) contents;
|
||||||
|
targets = map ({source, target}: target) contents;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,5 +6,26 @@ if test -n "$bootable"; then
|
||||||
bootFlags="-b $bootImage -c boot.cat -no-emul-boot -boot-load-size 4"
|
bootFlags="-b $bootImage -c boot.cat -no-emul-boot -boot-load-size 4"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
graftList=
|
||||||
|
sources_=($sources)
|
||||||
|
targets_=($targets)
|
||||||
|
for ((i = 0; i < ${#targets_[@]}; i++)); do
|
||||||
|
graftList="$graftList ${targets_[$i]}=$(readlink -f ${sources_[$i]})"
|
||||||
|
done
|
||||||
|
|
||||||
|
# !!! Just as with make-initrd.nix, the call to Nix here needs to be
|
||||||
|
# fixed.
|
||||||
|
packagesClosure=$(/nix/bin/nix-store -qR $packages $init)
|
||||||
|
|
||||||
|
for i in $packagesClosure; do
|
||||||
|
graftList="$graftList ${i:1}=$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
if test -n "$init"; then
|
||||||
|
ln -s $init init
|
||||||
|
graftList="$graftList init=init"
|
||||||
|
fi
|
||||||
|
|
||||||
# !!! -f is a quick hack.
|
# !!! -f is a quick hack.
|
||||||
mkisofs -r -J -f -o $out/$isoName $bootFlags -graft-points $graftList
|
mkisofs -r -J -o $out/$isoName $bootFlags \
|
||||||
|
-graft-points $graftList
|
||||||
|
|
|
@ -76,6 +76,8 @@ rec {
|
||||||
target = "isolinux/initrd";
|
target = "isolinux/initrd";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
init = pkgs.bash + "/bin/sh";
|
||||||
|
|
||||||
bootable = true;
|
bootable = true;
|
||||||
bootImage = "isolinux/isolinux.bin";
|
bootImage = "isolinux/isolinux.bin";
|
||||||
|
|
Loading…
Reference in New Issue