2012-03-18 18:53:50 +00:00
|
|
|
{ config, pkgs, modules, baseModules, ... }:
|
|
|
|
|
|
|
|
with pkgs.lib;
|
2009-05-27 10:00:45 +01:00
|
|
|
|
|
|
|
let
|
|
|
|
|
2009-05-28 14:36:38 +01:00
|
|
|
options = {
|
2011-09-14 19:20:50 +01:00
|
|
|
|
2012-03-18 18:53:50 +00:00
|
|
|
system.build = mkOption {
|
2009-05-28 14:36:38 +01:00
|
|
|
default = {};
|
|
|
|
description = ''
|
|
|
|
Attribute set of derivations used to setup the system.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2012-03-18 18:53:50 +00:00
|
|
|
nesting.children = mkOption {
|
2009-05-28 14:36:38 +01:00
|
|
|
default = [];
|
|
|
|
description = ''
|
|
|
|
Additional configurations to build.
|
|
|
|
'';
|
|
|
|
};
|
Making modular my previous changes for armv5tel. I updated the way to use
grub. Its options are no more inside 'boot', but inside 'boot.loader.grub'.
I added a new bootloader configuration for nixos, generationsDir. It creates
/boot/default/{init,initrd,kernel,system} symlinks, and the same for the generations
in /boot/system-$gen/{init,initrd,kernel,system}.
I can program the u-boot loader to load /boot/default files always, and have
a minimal nixos boot loader installer functionality. Additionally, I can refer
to the other system generations easily, with a simple 'ls' in /boot.
svn path=/nixos/trunk/; revision=17460
2009-09-27 22:51:37 +01:00
|
|
|
|
2012-03-18 18:53:50 +00:00
|
|
|
nesting.clone = mkOption {
|
2010-05-08 18:18:26 +01:00
|
|
|
default = [];
|
|
|
|
description = ''
|
|
|
|
Additional configurations to build based on the current
|
|
|
|
configuration which is has a lower priority.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2012-03-18 18:53:50 +00:00
|
|
|
system.boot.loader.id = mkOption {
|
Making modular my previous changes for armv5tel. I updated the way to use
grub. Its options are no more inside 'boot', but inside 'boot.loader.grub'.
I added a new bootloader configuration for nixos, generationsDir. It creates
/boot/default/{init,initrd,kernel,system} symlinks, and the same for the generations
in /boot/system-$gen/{init,initrd,kernel,system}.
I can program the u-boot loader to load /boot/default files always, and have
a minimal nixos boot loader installer functionality. Additionally, I can refer
to the other system generations easily, with a simple 'ls' in /boot.
svn path=/nixos/trunk/; revision=17460
2009-09-27 22:51:37 +01:00
|
|
|
default = "";
|
|
|
|
description = ''
|
|
|
|
Id string of the used bootloader.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2012-03-18 18:53:50 +00:00
|
|
|
system.boot.loader.kernelFile = mkOption {
|
2012-05-23 16:52:29 +01:00
|
|
|
default = pkgs.stdenv.platform.kernelTarget;
|
Making modular my previous changes for armv5tel. I updated the way to use
grub. Its options are no more inside 'boot', but inside 'boot.loader.grub'.
I added a new bootloader configuration for nixos, generationsDir. It creates
/boot/default/{init,initrd,kernel,system} symlinks, and the same for the generations
in /boot/system-$gen/{init,initrd,kernel,system}.
I can program the u-boot loader to load /boot/default files always, and have
a minimal nixos boot loader installer functionality. Additionally, I can refer
to the other system generations easily, with a simple 'ls' in /boot.
svn path=/nixos/trunk/; revision=17460
2009-09-27 22:51:37 +01:00
|
|
|
description = ''
|
|
|
|
Name of the kernel file to be passed to the bootloader.
|
|
|
|
'';
|
|
|
|
};
|
2010-04-28 15:55:26 +01:00
|
|
|
|
2012-03-18 18:53:50 +00:00
|
|
|
system.copySystemConfiguration = mkOption {
|
2010-04-30 08:43:29 +01:00
|
|
|
default = false;
|
2010-04-28 15:55:26 +01:00
|
|
|
description = ''
|
2010-09-12 23:43:45 +01:00
|
|
|
If enabled, copies the NixOS configuration file
|
|
|
|
<literal>$NIXOS_CONFIG</literal> (usually
|
|
|
|
<filename>/etc/nixos/configuration.nix</filename>)
|
2010-04-28 15:55:26 +01:00
|
|
|
to the system store path.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2012-03-18 18:53:50 +00:00
|
|
|
system.extraSystemBuilderCmds = mkOption {
|
2010-04-28 15:55:26 +01:00
|
|
|
default = "";
|
2010-09-12 23:43:45 +01:00
|
|
|
internal = true;
|
2012-03-18 18:53:50 +00:00
|
|
|
merge = concatStringsSep "\n";
|
2010-04-28 15:55:26 +01:00
|
|
|
description = ''
|
|
|
|
This code will be added to the builder creating the system store path.
|
|
|
|
'';
|
|
|
|
};
|
2011-09-14 19:20:50 +01:00
|
|
|
|
2009-05-28 14:36:38 +01:00
|
|
|
};
|
|
|
|
|
2011-09-14 19:20:50 +01:00
|
|
|
|
|
|
|
# This attribute is responsible for creating boot entries for
|
2009-05-27 10:00:45 +01:00
|
|
|
# child configuration. They are only (directly) accessible
|
|
|
|
# when the parent configuration is boot default. For example,
|
2011-09-14 19:20:50 +01:00
|
|
|
# you can provide an easy way to boot the same configuration
|
2009-05-27 10:00:45 +01:00
|
|
|
# as you use, but with another kernel
|
|
|
|
# !!! fix this
|
2010-05-08 18:18:26 +01:00
|
|
|
cloner = inheritParent: list: with pkgs.lib;
|
2009-10-30 11:57:23 +00:00
|
|
|
map (childConfig:
|
2009-12-05 19:21:57 +00:00
|
|
|
(import ../../../lib/eval-config.nix {
|
2010-05-08 18:18:26 +01:00
|
|
|
inherit baseModules;
|
|
|
|
modules =
|
|
|
|
(optionals inheritParent modules)
|
|
|
|
++ [ ./no-clone.nix ]
|
|
|
|
++ [ childConfig ];
|
2009-12-05 19:21:57 +00:00
|
|
|
}).config.system.build.toplevel
|
2010-05-08 18:18:26 +01:00
|
|
|
) list;
|
|
|
|
|
|
|
|
children =
|
|
|
|
cloner false config.nesting.children
|
|
|
|
++ cloner true config.nesting.clone;
|
2009-05-27 10:00:45 +01:00
|
|
|
|
|
|
|
|
2009-09-29 10:50:38 +01:00
|
|
|
systemBuilder =
|
|
|
|
let
|
Making modular my previous changes for armv5tel. I updated the way to use
grub. Its options are no more inside 'boot', but inside 'boot.loader.grub'.
I added a new bootloader configuration for nixos, generationsDir. It creates
/boot/default/{init,initrd,kernel,system} symlinks, and the same for the generations
in /boot/system-$gen/{init,initrd,kernel,system}.
I can program the u-boot loader to load /boot/default files always, and have
a minimal nixos boot loader installer functionality. Additionally, I can refer
to the other system generations easily, with a simple 'ls' in /boot.
svn path=/nixos/trunk/; revision=17460
2009-09-27 22:51:37 +01:00
|
|
|
kernelPath = "${config.boot.kernelPackages.kernel}/" +
|
|
|
|
"${config.system.boot.loader.kernelFile}";
|
2010-08-24 14:27:28 +01:00
|
|
|
in ''
|
2012-03-18 18:53:50 +00:00
|
|
|
mkdir $out
|
2009-05-27 10:00:45 +01:00
|
|
|
|
Making modular my previous changes for armv5tel. I updated the way to use
grub. Its options are no more inside 'boot', but inside 'boot.loader.grub'.
I added a new bootloader configuration for nixos, generationsDir. It creates
/boot/default/{init,initrd,kernel,system} symlinks, and the same for the generations
in /boot/system-$gen/{init,initrd,kernel,system}.
I can program the u-boot loader to load /boot/default files always, and have
a minimal nixos boot loader installer functionality. Additionally, I can refer
to the other system generations easily, with a simple 'ls' in /boot.
svn path=/nixos/trunk/; revision=17460
2009-09-27 22:51:37 +01:00
|
|
|
if [ ! -f ${kernelPath} ]; then
|
|
|
|
echo "The bootloader cannot find the proper kernel image."
|
|
|
|
echo "(Expecting ${kernelPath})"
|
2009-11-08 18:32:21 +00:00
|
|
|
false
|
Making modular my previous changes for armv5tel. I updated the way to use
grub. Its options are no more inside 'boot', but inside 'boot.loader.grub'.
I added a new bootloader configuration for nixos, generationsDir. It creates
/boot/default/{init,initrd,kernel,system} symlinks, and the same for the generations
in /boot/system-$gen/{init,initrd,kernel,system}.
I can program the u-boot loader to load /boot/default files always, and have
a minimal nixos boot loader installer functionality. Additionally, I can refer
to the other system generations easily, with a simple 'ls' in /boot.
svn path=/nixos/trunk/; revision=17460
2009-09-27 22:51:37 +01:00
|
|
|
fi
|
2010-09-12 23:43:45 +01:00
|
|
|
|
Making modular my previous changes for armv5tel. I updated the way to use
grub. Its options are no more inside 'boot', but inside 'boot.loader.grub'.
I added a new bootloader configuration for nixos, generationsDir. It creates
/boot/default/{init,initrd,kernel,system} symlinks, and the same for the generations
in /boot/system-$gen/{init,initrd,kernel,system}.
I can program the u-boot loader to load /boot/default files always, and have
a minimal nixos boot loader installer functionality. Additionally, I can refer
to the other system generations easily, with a simple 'ls' in /boot.
svn path=/nixos/trunk/; revision=17460
2009-09-27 22:51:37 +01:00
|
|
|
ln -s ${kernelPath} $out/kernel
|
2010-01-26 21:45:13 +00:00
|
|
|
ln -s ${config.system.modulesTree} $out/kernel-modules
|
2011-09-14 19:20:50 +01:00
|
|
|
if [ -n "$grub" ]; then
|
2009-09-23 21:51:00 +01:00
|
|
|
ln -s $grub $out/grub
|
|
|
|
fi
|
2011-09-14 19:20:50 +01:00
|
|
|
|
2009-05-27 10:00:45 +01:00
|
|
|
ln -s ${config.system.build.initialRamdisk}/initrd $out/initrd
|
2011-09-14 19:20:50 +01:00
|
|
|
|
2010-09-13 19:19:15 +01:00
|
|
|
echo "$activationScript" > $out/activate
|
|
|
|
substituteInPlace $out/activate --subst-var out
|
|
|
|
chmod u+x $out/activate
|
|
|
|
unset activationScript
|
2010-09-13 23:10:25 +01:00
|
|
|
|
|
|
|
cp ${config.system.build.bootStage2} $out/init
|
|
|
|
substituteInPlace $out/init --subst-var-by systemConfig $out
|
2011-09-14 19:20:50 +01:00
|
|
|
|
2009-05-27 10:00:45 +01:00
|
|
|
ln -s ${config.system.build.etc}/etc $out/etc
|
|
|
|
ln -s ${config.system.path} $out/sw
|
2009-11-06 09:36:35 +00:00
|
|
|
ln -s ${config.system.build.upstart} $out/upstart
|
2010-04-25 19:26:56 +01:00
|
|
|
ln -s ${config.hardware.firmware} $out/firmware
|
2009-05-27 10:00:45 +01:00
|
|
|
|
2012-04-14 18:09:59 +01:00
|
|
|
echo -n "$kernelParams" > $out/kernel-params
|
|
|
|
echo -n "$configurationName" > $out/configuration-name
|
|
|
|
echo -n "${toString config.system.build.upstart.interfaceVersion}" > $out/upstart-interface-version
|
|
|
|
echo -n "$nixosVersion" > $out/nixos-version
|
2009-05-27 10:00:45 +01:00
|
|
|
|
|
|
|
mkdir $out/fine-tune
|
2012-03-18 18:53:50 +00:00
|
|
|
childCount=0
|
2010-09-13 19:19:15 +01:00
|
|
|
for i in $children; do
|
2012-03-18 18:53:50 +00:00
|
|
|
childCount=$(( childCount + 1 ))
|
|
|
|
ln -s $i $out/fine-tune/child-$childCount
|
2009-05-27 10:00:45 +01:00
|
|
|
done
|
|
|
|
|
2012-03-18 18:53:50 +00:00
|
|
|
mkdir $out/bin
|
2009-05-27 10:00:45 +01:00
|
|
|
substituteAll ${./switch-to-configuration.sh} $out/bin/switch-to-configuration
|
|
|
|
chmod +x $out/bin/switch-to-configuration
|
2010-04-28 15:55:26 +01:00
|
|
|
|
|
|
|
${config.system.extraSystemBuilderCmds}
|
2009-05-27 10:00:45 +01:00
|
|
|
'';
|
|
|
|
|
2011-09-14 19:20:50 +01:00
|
|
|
|
2009-05-27 10:00:45 +01:00
|
|
|
# Putting it all together. This builds a store path containing
|
|
|
|
# symlinks to the various parts of the built configuration (the
|
|
|
|
# kernel, the Upstart services, the init scripts, etc.) as well as a
|
|
|
|
# script `switch-to-configuration' that activates the configuration
|
|
|
|
# and makes it bootable.
|
|
|
|
system = pkgs.stdenv.mkDerivation {
|
2012-04-14 18:09:59 +01:00
|
|
|
name = "nixos-${config.system.nixosVersion}";
|
2012-04-26 16:19:23 +01:00
|
|
|
preferLocalBuild = true;
|
2009-05-27 10:00:45 +01:00
|
|
|
buildCommand = systemBuilder;
|
|
|
|
inherit children;
|
|
|
|
kernelParams =
|
|
|
|
config.boot.kernelParams ++ config.boot.extraKernelParams;
|
2012-05-23 16:52:29 +01:00
|
|
|
menuBuilder = config.system.build.menuBuilder or "true";
|
2009-12-17 06:04:36 +00:00
|
|
|
initScriptBuilder = config.system.build.initScriptBuilder;
|
2010-09-13 19:19:15 +01:00
|
|
|
activationScript = config.system.activationScripts.script;
|
2012-04-14 18:09:59 +01:00
|
|
|
nixosVersion = config.system.nixosVersion;
|
2012-03-18 18:53:50 +00:00
|
|
|
|
2012-03-18 19:05:44 +00:00
|
|
|
jobs = map (j: j.name) (attrValues config.jobs);
|
|
|
|
|
2012-03-18 18:53:50 +00:00
|
|
|
# Pass the names of all Upstart tasks to the activation script.
|
|
|
|
tasks = attrValues (mapAttrs (n: v: if v.task then ["[${v.name}]=1"] else []) config.jobs);
|
|
|
|
|
|
|
|
# Pass the names of all Upstart jobs that shouldn't be restarted
|
|
|
|
# to the activation script.
|
|
|
|
noRestartIfChanged = attrValues (mapAttrs (n: v: if v.restartIfChanged then [] else ["[${v.name}]=1"]) config.jobs);
|
|
|
|
|
2009-05-27 10:00:45 +01:00
|
|
|
# Most of these are needed by grub-install.
|
2012-03-18 18:53:50 +00:00
|
|
|
path =
|
|
|
|
[ pkgs.coreutils
|
|
|
|
pkgs.gnused
|
|
|
|
pkgs.gnugrep
|
|
|
|
pkgs.findutils
|
|
|
|
pkgs.diffutils
|
|
|
|
config.system.build.upstart # for initctl
|
|
|
|
];
|
Making modular my previous changes for armv5tel. I updated the way to use
grub. Its options are no more inside 'boot', but inside 'boot.loader.grub'.
I added a new bootloader configuration for nixos, generationsDir. It creates
/boot/default/{init,initrd,kernel,system} symlinks, and the same for the generations
in /boot/system-$gen/{init,initrd,kernel,system}.
I can program the u-boot loader to load /boot/default files always, and have
a minimal nixos boot loader installer functionality. Additionally, I can refer
to the other system generations easily, with a simple 'ls' in /boot.
svn path=/nixos/trunk/; revision=17460
2009-09-27 22:51:37 +01:00
|
|
|
|
|
|
|
# Boot loaders
|
|
|
|
bootLoader = config.system.boot.loader.id;
|
2009-10-13 22:39:18 +01:00
|
|
|
grub =
|
|
|
|
if config.boot.loader.grub.enable
|
2009-12-16 18:11:26 +00:00
|
|
|
then config.system.build.grub
|
2009-10-13 22:39:18 +01:00
|
|
|
else null;
|
2011-09-14 19:20:50 +01:00
|
|
|
grubVersion =
|
2009-12-16 18:11:26 +00:00
|
|
|
if config.boot.loader.grub.enable
|
|
|
|
then (builtins.parseDrvName config.system.build.grub.name).version
|
|
|
|
else "";
|
2012-05-14 02:53:47 +01:00
|
|
|
grubDevices =
|
|
|
|
let
|
2012-03-08 21:37:30 +00:00
|
|
|
wrapQuotes = s: "\"" + s + "\"";
|
2012-05-14 02:53:47 +01:00
|
|
|
in map wrapQuotes config.boot.loader.grub.devices;
|
Making modular my previous changes for armv5tel. I updated the way to use
grub. Its options are no more inside 'boot', but inside 'boot.loader.grub'.
I added a new bootloader configuration for nixos, generationsDir. It creates
/boot/default/{init,initrd,kernel,system} symlinks, and the same for the generations
in /boot/system-$gen/{init,initrd,kernel,system}.
I can program the u-boot loader to load /boot/default files always, and have
a minimal nixos boot loader installer functionality. Additionally, I can refer
to the other system generations easily, with a simple 'ls' in /boot.
svn path=/nixos/trunk/; revision=17460
2009-09-27 22:51:37 +01:00
|
|
|
configurationName = config.boot.loader.grub.configurationName;
|
2009-05-27 10:00:45 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
in {
|
2009-05-28 14:36:38 +01:00
|
|
|
require = [options];
|
2009-05-27 10:00:45 +01:00
|
|
|
|
2010-04-28 15:55:26 +01:00
|
|
|
system.extraSystemBuilderCmds =
|
2012-03-18 18:53:50 +00:00
|
|
|
optionalString
|
2010-09-12 23:43:45 +01:00
|
|
|
config.system.copySystemConfiguration
|
2012-03-18 18:53:50 +00:00
|
|
|
"cp ${maybeEnv "NIXOS_CONFIG" "/etc/nixos/configuration.nix"} $out";
|
2010-09-12 23:43:45 +01:00
|
|
|
|
2009-09-04 10:29:18 +01:00
|
|
|
system.build.toplevel = system;
|
2009-05-27 10:00:45 +01:00
|
|
|
}
|