nixpkgs/test/rescue-system.nix
Eelco Dolstra 1aa35c8267 * Instead of adding all of util-linux to the initd, add just mount
(and nuke its references so that we don't get glibc etc.).  The
  initrd is now 3.2 MB (and that includes the entire staticTools from
  the stdenv bootstrap, most of which we don't actually need).

svn path=/nixu/trunk/; revision=6942
2006-11-03 13:35:02 +00:00

86 lines
2.4 KiB
Nix

rec {
pkgs = import ./pkgs/top-level/all-packages.nix {};
pkgsDiet = import ./pkgs/top-level/all-packages.nix {
bootStdenv = pkgs.useDietLibC pkgs.stdenv;
};
pkgsStatic = import ./pkgs/top-level/all-packages.nix {
bootStdenv = pkgs.makeStaticBinaries pkgs.stdenv;
};
stdenvLinuxStuff = import ./pkgs/stdenv/linux {
system = pkgs.stdenv.system;
allPackages = import ./pkgs/top-level/all-packages.nix;
};
# Determine the set of modules that we need to mount the root FS.
modulesClosure = import ./modules-closure.nix {
inherit (pkgs) stdenv kernel module_init_tools;
rootModules = ["ide-cd" "ide-disk" "ide-generic"];
};
# Some additional utilities needed in stage 1, notably mount. We
# don't want to bring in all of util-linux, so we just copy what we
# need.
extraUtils = pkgs.stdenv.mkDerivation {
name = "extra-utils";
builder = builtins.toFile "builder.sh"
"source $stdenv/setup; ensureDir $out/bin; cp $utillinux/bin/mount $out/bin; nuke-refs $out/bin/mount";
buildInputs = [pkgs.nukeReferences];
inherit (pkgsStatic) utillinux;
};
# The init script of boot stage 1 (loading kernel modules for
# mounting the root FS).
bootStage1 = import ./boot-stage-1.nix {
inherit (pkgs) genericSubstituter;
inherit (pkgsDiet) module_init_tools;
inherit extraUtils;
modules = modulesClosure;
shell = stdenvLinuxStuff.bootstrapTools.bash;
staticTools = stdenvLinuxStuff.staticTools;
};
# The closure of the init script of boot stage 1 is what we put in
# the initial RAM disk.
initialRamdisk = import ./make-initrd.nix {
inherit (pkgs) stdenv cpio;
packages = [];
init = bootStage1;
};
# Create an ISO image containing the isolinux boot loader, the
# kernel, and initrd produced above.
rescueCD = import ./make-iso9660-image.nix {
inherit (pkgs) stdenv cdrtools;
isoName = "nixos.iso";
contents = [
{ source = pkgs.syslinux + "/lib/syslinux/isolinux.bin";
target = "isolinux/isolinux.bin";
}
{ source = ./isolinux.cfg;
target = "isolinux/isolinux.cfg";
}
{ source = pkgs.kernel + "/vmlinuz";
target = "isolinux/vmlinuz";
}
{ source = initialRamdisk + "/initrd";
target = "isolinux/initrd";
}
];
bootable = true;
bootImage = "isolinux/isolinux.bin";
};
}