forked from mirrors/nixpkgs
* make-initrd.nix: builds a initial RAM disk. The resulting initrd will contain just a Nix store containing the specified lists of packages, with a symlink `/init' to the actual init program in the Nix store. * make-iso9660-image.nix: builds a bootable ISO image. * rescue-system.nix: builds a bootable ISO image (using the two function above) that boots into a very minimal Linux environment containing (at the moment) the dietlibc-based bash and coreutils, loaded from the initrd. Eventually this should become a two-stage boot (load kernel modules from the initrd, mount the actual root file system (e.g., the installation CD), call the real init). The rescue system (probably a misnomer) should become the minimal environment necessary for the installer (on CD) and the boot process of an installed NixOS (on HD). svn path=/nixu/trunk/; revision=6926
21 lines
639 B
Bash
21 lines
639 B
Bash
source $stdenv/setup
|
|
|
|
set -o pipefail
|
|
|
|
# Get the paths in the closure of `packages'. Unfortunately, the only
|
|
# way to get the closure is to call Nix, which is strictly speaking
|
|
# forbidden. But we do it anyway. In time, we should add a feature
|
|
# to Nix to let Nix pass closures to builders.
|
|
packagesClosure=$(/nix/bin/nix-store -qR $packages $init)
|
|
|
|
# Paths in cpio archives *must* be relative, otherwise the kernel
|
|
# won't unpack 'em.
|
|
mkdir root
|
|
cd root
|
|
cp -prvd --parents $packagesClosure .
|
|
|
|
# Put the closure in a gzipped cpio archive.
|
|
ensureDir $out
|
|
ln -s $init init
|
|
find * -print0 | cpio -ov -H newc --null | gzip -9 > $out/initrd
|