From d2d139e920f3f50c8479d7be6282582b9ac9e56c Mon Sep 17 00:00:00 2001 From: Nicolas Pierron Date: Sat, 25 Sep 2010 09:32:48 +0000 Subject: [PATCH] Move the generation of the dummy configuration file into the installation device profile. TODO: The current configuration does not reproduce exactly the CD configuration, fix it. svn path=/nixos/trunk/; revision=23913 --- .../installer/cd-dvd/installation-cd-base.nix | 35 +---- modules/profiles/installation-device.nix | 143 +++++++++++++----- 2 files changed, 110 insertions(+), 68 deletions(-) diff --git a/modules/installer/cd-dvd/installation-cd-base.nix b/modules/installer/cd-dvd/installation-cd-base.nix index e8d51da090d..23c1e02be43 100644 --- a/modules/installer/cd-dvd/installation-cd-base.nix +++ b/modules/installer/cd-dvd/installation-cd-base.nix @@ -9,13 +9,8 @@ let options = { - system.nixosVersion = mkOption { - default = "${builtins.readFile ../../../VERSION}"; - description = '' - NixOS version number. - ''; - }; - + # you can retrieve the profiles which have been used by looking at the + # list of modules use to configure the installation device. installer.configModule = mkOption { example = "./nixos/modules/installer/cd-dvd/installation-cd.nix"; description = '' @@ -45,27 +40,6 @@ let nixpkgsTarball = makeTarball "nixpkgs.tar.bz2" (cleanSource pkgs.path); includeSources = true; - - - # A dummy /etc/nixos/configuration.nix in the booted CD that - # rebuilds the CD's configuration (and allows the configuration to - # be modified, of course, providing a true live CD). Problem is - # that we don't really know how the CD was built - the Nix - # expression language doesn't allow us to query the expression being - # evaluated. So we'll just hope for the best. - dummyConfiguration = pkgs.writeText "configuration.nix" - '' - {config, pkgs, ...}: - - { - require = [${config.installer.configModule}]; - - # Add your own options below and run "nixos-rebuild switch". - # E.g., - # services.openssh.enable = true; - } - ''; - in @@ -104,11 +78,6 @@ in tar xjf ${nixpkgsTarball}/nixpkgs.tar.bz2 -C /etc/nixos/nixpkgs chown -R root.root /etc/nixos ''} - - # Provide a configuration for the CD/DVD itself, to allow users - # to run nixos-rebuild to change the configuration of the - # running system on the CD/DVD. - cp ${dummyConfiguration} /etc/nixos/configuration.nix ''; # To speed up installation a little bit, include the complete stdenv diff --git a/modules/profiles/installation-device.nix b/modules/profiles/installation-device.nix index 54ce32eb0e8..32f356cdd29 100644 --- a/modules/profiles/installation-device.nix +++ b/modules/profiles/installation-device.nix @@ -1,48 +1,121 @@ {config, pkgs, ...}: -{ - # Show the manual. - services.nixosManual.showManual = true; +with pkgs.lib; - # Let the user play Rogue on TTY 8 during the installation. - services.rogue.enable = true; +let + # Location of the repository on the harddrive + profilePath = toString ./.; - # Disable some other stuff we don't need. - security.sudo.enable = false; + # Check if the path is from the NixOS repository + isProfile = path: + let s = toString path; in + removePrefix profilePath s != s; - # Include only the en_US locale. This saves 75 MiB or so compared to - # the full glibcLocales package. - i18n.supportedLocales = ["en_US.UTF-8/UTF-8" "en_US/ISO-8859-1"]; + # Rename NixOS modules used to setup the current device to make findable form + # the default location of the configuration.nix file. + getProfileModules = + map (path: "./nixos/modules/profiles" + removePrefix isProfile (toString path)) + filter (m: isPath m && isProfile m) modules; - # nixos-install will do a pull from this channel to speed up the - # installation. - installer.nixpkgsURL = http://nixos.org/releases/nixpkgs/channels/nixpkgs-unstable; - - boot.postBootCommands = + # A dummy /etc/nixos/configuration.nix in the booted CD that + # rebuilds the CD's configuration (and allows the configuration to + # be modified, of course, providing a true live CD). Problem is + # that we don't really know how the CD was built - the Nix + # expression language doesn't allow us to query the expression being + # evaluated. So we'll just hope for the best. + configClone = pkgs.writeText "configuration.nix" '' - # Provide a mount point for nixos-install. - mkdir -p /mnt - ''; + {config, pkgs, ...}: - # Some more help text. - services.mingetty.helpLine = - '' - - Log in as "root" with an empty password. ${ - if config.services.xserver.enable then - "Type `start xserver' to start\nthe graphical user interface." - else "" + { + require = [${toString config.installer.cloneConfigIncludes}]; + + # Add your own options below and run "nixos-rebuild switch". + # E.g., + # services.openssh.enable = true; } ''; +in + +{ + options = { + system.nixosVersion = mkOption { + default = "${builtins.readFile ../../VERSION}"; + description = '' + NixOS version number. + ''; + }; + + installer.cloneConfig = mkOption { + default = true; + description = '' + Try to clone the installation-device configuration by re-using it's + profile from the list of imported modules. + ''; + }; + + installer.cloneConfigIncludes = mkOption { + default = []; + example = [ "./nixos/modules/hardware/network/rt73.nix" ]; + description = '' + List of modules used to re-build this installation device profile. + ''; + }; + }; + + config = { + installer.cloneConfigIncludes = getProfileModules; + + # Show the manual. + services.nixosManual.showManual = true; + + # Let the user play Rogue on TTY 8 during the installation. + services.rogue.enable = true; + + # Disable some other stuff we don't need. + security.sudo.enable = false; + + # Include only the en_US locale. This saves 75 MiB or so compared to + # the full glibcLocales package. + i18n.supportedLocales = ["en_US.UTF-8/UTF-8" "en_US/ISO-8859-1"]; + + # nixos-install will do a pull from this channel to speed up the + # installation. + installer.nixpkgsURL = http://nixos.org/releases/nixpkgs/channels/nixpkgs-unstable; + + boot.postBootCommands = + '' + # Provide a mount point for nixos-install. + mkdir -p /mnt + + ${optionalString config.installer.cloneConfig '' + # Provide a configuration for the CD/DVD itself, to allow users + # to run nixos-rebuild to change the configuration of the + # running system on the CD/DVD. + cp ${configClone} /etc/nixos/configuration.nix + ''} + ''; + + # Some more help text. + services.mingetty.helpLine = + '' + + Log in as "root" with an empty password. ${ + if config.services.xserver.enable then + "Type `start xserver' to start\nthe graphical user interface." + else "" + } + ''; - # Allow sshd to be started manually through "start sshd". It should - # not be started by default on the installation CD because the - # default root password is empty. - services.openssh.enable = true; - jobs.sshd.startOn = pkgs.lib.mkOverride 50 ""; + # Allow sshd to be started manually through "start sshd". It should + # not be started by default on the installation CD because the + # default root password is empty. + services.openssh.enable = true; + jobs.sshd.startOn = pkgs.lib.mkOverride 50 ""; - # Enable wpa_supplicant, but don't start it by default. - networking.enableWLAN = true; - jobs.wpa_supplicant.startOn = pkgs.lib.mkOverride 50 ""; -} \ No newline at end of file + # Enable wpa_supplicant, but don't start it by default. + networking.enableWLAN = true; + jobs.wpa_supplicant.startOn = pkgs.lib.mkOverride 50 ""; + }; +}