nixpkgs/test/make-initrd.sh
Eelco Dolstra fff7011066 Purifying the NixOS build stuff.
* 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
2006-11-02 17:56:50 +00:00

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