2006-11-12 19:48:47 +01:00
|
|
|
{ system ? __currentSystem
|
|
|
|
, autoDetectRootDevice ? false
|
|
|
|
, rootDevice ? ""
|
|
|
|
, rootLabel ? ""
|
2006-11-13 12:41:27 +01:00
|
|
|
, stage2Init
|
|
|
|
, readOnlyRoot
|
2006-11-12 19:48:47 +01:00
|
|
|
}:
|
2006-11-04 13:00:05 +01:00
|
|
|
|
2006-11-02 18:56:50 +01:00
|
|
|
rec {
|
|
|
|
|
2006-11-28 11:45:21 +01:00
|
|
|
pkgs = import ../pkgs/top-level/all-packages.nix {inherit system;};
|
2006-11-02 18:56:50 +01:00
|
|
|
|
2006-11-28 11:45:21 +01:00
|
|
|
pkgsDiet = import ../pkgs/top-level/all-packages.nix {
|
2006-11-04 13:00:05 +01:00
|
|
|
inherit system;
|
2006-11-02 23:48:01 +01:00
|
|
|
bootStdenv = pkgs.useDietLibC pkgs.stdenv;
|
|
|
|
};
|
|
|
|
|
2006-11-28 11:45:21 +01:00
|
|
|
pkgsStatic = import ../pkgs/top-level/all-packages.nix {
|
2006-11-04 13:00:05 +01:00
|
|
|
inherit system;
|
2006-11-03 14:35:02 +01:00
|
|
|
bootStdenv = pkgs.makeStaticBinaries pkgs.stdenv;
|
|
|
|
};
|
|
|
|
|
2006-11-28 11:45:21 +01:00
|
|
|
stdenvLinuxStuff = import ../pkgs/stdenv/linux {
|
2006-11-02 18:56:50 +01:00
|
|
|
system = pkgs.stdenv.system;
|
2006-11-28 11:45:21 +01:00
|
|
|
allPackages = import ../pkgs/top-level/all-packages.nix;
|
2006-11-02 18:56:50 +01:00
|
|
|
};
|
|
|
|
|
2006-11-17 17:38:24 +01:00
|
|
|
nix = pkgs.nixUnstable; # we need the exportReferencesGraph feature
|
|
|
|
|
2006-11-02 23:48:01 +01:00
|
|
|
|
2006-11-27 02:35:34 +01:00
|
|
|
# Splash configuration.
|
|
|
|
splashThemes = import ./splash-themes.nix {
|
|
|
|
inherit (pkgs) fetchurl;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2006-11-03 01:36:08 +01:00
|
|
|
# Determine the set of modules that we need to mount the root FS.
|
2006-11-28 11:45:21 +01:00
|
|
|
modulesClosure = import ../helpers/modules-closure.nix {
|
2006-11-03 12:47:40 +01:00
|
|
|
inherit (pkgs) stdenv kernel module_init_tools;
|
|
|
|
rootModules = ["ide-cd" "ide-disk" "ide-generic"];
|
2006-11-03 01:36:08 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2006-11-03 14:35:02 +01:00
|
|
|
# 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.
|
2006-12-10 23:43:04 +01:00
|
|
|
extraUtils = pkgs.runCommand "extra-utils"
|
|
|
|
{ buildInputs = [pkgs.nukeReferences];
|
|
|
|
inherit (pkgsStatic) utillinux;
|
|
|
|
inherit (pkgs) splashutils;
|
|
|
|
e2fsprogs = pkgs.e2fsprogsDiet;
|
|
|
|
}
|
|
|
|
"
|
2006-11-24 13:13:11 +01:00
|
|
|
ensureDir $out/bin
|
|
|
|
cp $utillinux/bin/mount $utillinux/bin/umount $utillinux/sbin/pivot_root $out/bin
|
|
|
|
cp -p $e2fsprogs/sbin/fsck* $e2fsprogs/sbin/e2fsck $out/bin
|
2006-11-27 02:35:34 +01:00
|
|
|
cp $splashutils/bin/splash_helper $out/bin
|
2006-11-24 13:13:11 +01:00
|
|
|
nuke-refs $out/bin/*
|
|
|
|
";
|
2006-11-03 14:35:02 +01:00
|
|
|
|
|
|
|
|
2006-11-02 23:48:01 +01:00
|
|
|
# The init script of boot stage 1 (loading kernel modules for
|
|
|
|
# mounting the root FS).
|
2006-11-28 11:45:21 +01:00
|
|
|
bootStage1 = import ../boot/boot-stage-1.nix {
|
2006-12-10 23:29:44 +01:00
|
|
|
inherit (pkgs) substituteAll;
|
2006-11-03 12:47:40 +01:00
|
|
|
inherit (pkgsDiet) module_init_tools;
|
2006-11-03 14:35:02 +01:00
|
|
|
inherit extraUtils;
|
2006-11-12 19:48:47 +01:00
|
|
|
inherit autoDetectRootDevice rootDevice rootLabel;
|
2006-11-13 12:41:27 +01:00
|
|
|
inherit stage2Init;
|
2006-11-03 12:47:40 +01:00
|
|
|
modules = modulesClosure;
|
2006-12-10 23:29:44 +01:00
|
|
|
staticShell = stdenvLinuxStuff.bootstrapTools.bash;
|
2006-11-02 23:48:01 +01:00
|
|
|
staticTools = stdenvLinuxStuff.staticTools;
|
|
|
|
};
|
2006-11-02 18:56:50 +01:00
|
|
|
|
2006-11-02 23:48:01 +01:00
|
|
|
|
|
|
|
# The closure of the init script of boot stage 1 is what we put in
|
|
|
|
# the initial RAM disk.
|
2006-11-28 11:45:21 +01:00
|
|
|
initialRamdisk = import ../boot/make-initrd.nix {
|
2006-11-17 15:13:21 +01:00
|
|
|
inherit (pkgs) stdenv cpio;
|
2006-11-27 02:35:34 +01:00
|
|
|
contents = [
|
|
|
|
{ object = bootStage1;
|
|
|
|
symlink = "/init";
|
|
|
|
}
|
|
|
|
{ object = extraUtils;
|
|
|
|
suffix = "/bin/splash_helper";
|
|
|
|
symlink = "/sbin/splash_helper";
|
|
|
|
}
|
2006-11-28 11:45:21 +01:00
|
|
|
{ object = import ../helpers/unpack-theme.nix {
|
2006-11-27 02:35:34 +01:00
|
|
|
inherit (pkgs) stdenv;
|
|
|
|
theme = splashThemes.splashScreen;
|
|
|
|
};
|
|
|
|
symlink = "/etc/splash";
|
|
|
|
}
|
|
|
|
];
|
2006-11-02 18:56:50 +01:00
|
|
|
};
|
|
|
|
|
2006-11-02 23:48:01 +01:00
|
|
|
|
2006-11-08 10:31:45 +01:00
|
|
|
# The installer.
|
2006-11-28 11:45:21 +01:00
|
|
|
nixosInstaller = import ../installer/nixos-installer.nix {
|
2006-12-10 23:43:04 +01:00
|
|
|
inherit (pkgs) stdenv runCommand substituteAll;
|
2006-11-17 17:38:24 +01:00
|
|
|
inherit nix;
|
2006-11-08 10:31:45 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2006-11-19 21:07:45 +01:00
|
|
|
# The services (Upstart) configuration for the system.
|
2006-12-11 16:32:10 +01:00
|
|
|
upstartJobs = import ./upstart.nix {
|
|
|
|
inherit pkgs nix splashThemes;
|
2006-11-19 22:03:22 +01:00
|
|
|
};
|
|
|
|
|
2006-12-09 03:51:42 +01:00
|
|
|
|
2006-12-11 16:32:10 +01:00
|
|
|
# The static parts of /etc.
|
|
|
|
etc = import ./etc.nix {
|
|
|
|
inherit pkgs upstartJobs;
|
2006-12-09 03:51:42 +01:00
|
|
|
};
|
|
|
|
|
2006-11-19 22:03:22 +01:00
|
|
|
|
2006-11-28 18:34:27 +01:00
|
|
|
setuidWrapper = import ../helpers/setuid {
|
|
|
|
inherit (pkgs) stdenv;
|
|
|
|
wrapperDir = "/var/setuid-wrappers";
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2006-12-09 20:25:23 +01:00
|
|
|
# The packages you want in the boot environment.
|
|
|
|
fullPath = [
|
|
|
|
pkgs.bash
|
|
|
|
pkgs.bzip2
|
|
|
|
pkgs.coreutils
|
|
|
|
pkgs.cpio
|
|
|
|
pkgs.curl
|
|
|
|
pkgs.e2fsprogs
|
|
|
|
pkgs.findutils
|
|
|
|
pkgs.gnugrep
|
|
|
|
pkgs.gnused
|
|
|
|
pkgs.gnutar
|
|
|
|
pkgs.grub
|
|
|
|
pkgs.gzip
|
|
|
|
pkgs.iputils
|
|
|
|
pkgs.less
|
|
|
|
pkgs.module_init_tools
|
|
|
|
pkgs.nano
|
|
|
|
pkgs.netcat
|
|
|
|
pkgs.nettools
|
|
|
|
pkgs.perl
|
|
|
|
pkgs.procps
|
2006-12-11 02:03:26 +01:00
|
|
|
pkgs.pwdutils
|
2006-12-09 20:25:23 +01:00
|
|
|
pkgs.rsync
|
|
|
|
pkgs.strace
|
|
|
|
pkgs.sysklogd
|
|
|
|
pkgs.udev
|
|
|
|
pkgs.upstart
|
|
|
|
pkgs.utillinux
|
|
|
|
# pkgs.vim
|
|
|
|
nix
|
|
|
|
nixosInstaller
|
|
|
|
setuidWrapper
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
# The script that activates the configuration, i.e., it sets up
|
|
|
|
# /etc, accounts, etc. It doesn't do anything that can only be done
|
|
|
|
# at boot time (such as start `init').
|
2006-12-10 23:29:44 +01:00
|
|
|
activateConfiguration = pkgs.substituteAll {
|
2006-12-09 20:25:23 +01:00
|
|
|
src = ./activate-configuration.sh;
|
|
|
|
isExecutable = true;
|
|
|
|
|
|
|
|
inherit etc;
|
|
|
|
inherit readOnlyRoot;
|
|
|
|
inherit (pkgs) kernel;
|
|
|
|
hostName = config.get ["networking" "hostname"];
|
|
|
|
wrapperDir = setuidWrapper.wrapperDir;
|
|
|
|
accounts = ../helpers/accounts.sh;
|
|
|
|
|
2006-12-10 23:29:44 +01:00
|
|
|
path = [pkgs.coreutils pkgs.gnugrep pkgs.findutils];
|
|
|
|
|
2006-12-09 20:25:23 +01:00
|
|
|
# We don't want to put all of `startPath' and `path' in $PATH, since
|
|
|
|
# then we get an embarrassingly long $PATH. So use the user
|
|
|
|
# environment builder to make a directory with symlinks to those
|
|
|
|
# packages.
|
|
|
|
fullPath = pkgs.buildEnv {
|
|
|
|
name = "boot-stage-2-path";
|
|
|
|
paths = fullPath;
|
|
|
|
pathsToLink = ["/bin" "/sbin" "/man/man1" "/share/man/man1"];
|
|
|
|
ignoreCollisions = true;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2006-11-04 01:01:13 +01:00
|
|
|
# The init script of boot stage 2, which is supposed to do
|
|
|
|
# everything else to bring up the system.
|
2006-11-28 11:45:21 +01:00
|
|
|
bootStage2 = import ../boot/boot-stage-2.nix {
|
2006-12-10 23:29:44 +01:00
|
|
|
inherit (pkgs) substituteAll coreutils
|
|
|
|
utillinux kernel udev upstart;
|
2006-11-13 12:41:27 +01:00
|
|
|
inherit readOnlyRoot;
|
2006-12-09 20:25:23 +01:00
|
|
|
inherit activateConfiguration;
|
2006-12-10 23:29:44 +01:00
|
|
|
upstartPath = [
|
|
|
|
pkgs.coreutils
|
|
|
|
pkgs.findutils
|
|
|
|
pkgs.gnugrep
|
|
|
|
pkgs.gnused
|
2006-12-11 01:52:36 +01:00
|
|
|
pkgs.upstart
|
2006-12-10 23:29:44 +01:00
|
|
|
];
|
2006-11-27 17:26:51 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2006-12-11 16:42:02 +01:00
|
|
|
config = import ./config.nix pkgs.library configData;
|
2006-11-27 17:26:51 +01:00
|
|
|
|
2006-12-11 16:42:02 +01:00
|
|
|
# The user configuration.
|
|
|
|
configData = {
|
|
|
|
networking = {
|
|
|
|
hostname = "nixos";
|
2006-11-27 17:26:51 +01:00
|
|
|
};
|
2006-11-04 01:01:13 +01:00
|
|
|
};
|
|
|
|
|
2006-11-02 18:56:50 +01:00
|
|
|
}
|