Author: shlevy
Date: Fri Mar 16 12:01:08 2012
New Revision: 33150
URL: https://nixos.org/websvn/nix/?rev=33150&sc=1

Log:
Revert r33139

I didn't end up needing it and there's a better way to do what I wanted if I
did.

Replaced:
   nixos/trunk/modules/system/activation/top-level.nix   (props changed)
      - copied unchanged from r33138, 
nixos/trunk/modules/system/activation/top-level.nix

Copied: nixos/trunk/modules/system/activation/top-level.nix (from r33138, 
nixos/trunk/modules/system/activation/top-level.nix)
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ nixos/trunk/modules/system/activation/top-level.nix Fri Mar 16 12:01:08 
2012        (r33150, copy of r33138, 
nixos/trunk/modules/system/activation/top-level.nix)
@@ -0,0 +1,193 @@
+{pkgs, config, modules, baseModules, ...}:
+
+let
+
+  options = {
+
+    system.build = pkgs.lib.mkOption {
+      default = {};
+      description = ''
+        Attribute set of derivations used to setup the system.
+      '';
+    };
+
+    nesting.children = pkgs.lib.mkOption {
+      default = [];
+      description = ''
+        Additional configurations to build.
+      '';
+    };
+
+    nesting.clone = pkgs.lib.mkOption {
+      default = [];
+      description = ''
+        Additional configurations to build based on the current
+        configuration which is has a lower priority.
+      '';
+    };
+
+    system.boot.loader.id = pkgs.lib.mkOption {
+      default = "";
+      description = ''
+        Id string of the used bootloader.
+      '';
+    };
+
+    system.boot.loader.kernelFile = pkgs.lib.mkOption {
+      default = "";
+      description = ''
+        Name of the kernel file to be passed to the bootloader.
+      '';
+    };
+
+    system.copySystemConfiguration = pkgs.lib.mkOption {
+      default = false;
+      description = ''
+        If enabled, copies the NixOS configuration file
+        <literal>$NIXOS_CONFIG</literal> (usually
+        <filename>/etc/nixos/configuration.nix</filename>)
+        to the system store path.
+      '';
+    };
+
+    system.extraSystemBuilderCmds = pkgs.lib.mkOption {
+      default = "";
+      internal = true;
+      merge = pkgs.lib.concatStringsSep "\n";
+      description = ''
+        This code will be added to the builder creating the system store path.
+      '';
+    };
+
+  };
+
+
+  # This attribute is responsible for creating boot entries for
+  # child configuration. They are only (directly) accessible
+  # when the parent configuration is boot default. For example,
+  # you can provide an easy way to boot the same configuration
+  # as you use, but with another kernel
+  # !!! fix this
+  cloner = inheritParent: list: with pkgs.lib;
+    map (childConfig:
+      (import ../../../lib/eval-config.nix {
+        inherit baseModules;
+        modules =
+           (optionals inheritParent modules)
+        ++ [ ./no-clone.nix ]
+        ++ [ childConfig ];
+      }).config.system.build.toplevel
+    ) list;
+
+  children =
+     cloner false config.nesting.children
+  ++ cloner true config.nesting.clone;
+
+
+  systemBuilder =
+    let
+      kernelPath = "${config.boot.kernelPackages.kernel}/" +
+        "${config.system.boot.loader.kernelFile}";
+    in ''
+      ensureDir $out
+
+      if [ ! -f ${kernelPath} ]; then
+        echo "The bootloader cannot find the proper kernel image."
+        echo "(Expecting ${kernelPath})"
+        false
+      fi
+
+      ln -s ${kernelPath} $out/kernel
+      ln -s ${config.system.modulesTree} $out/kernel-modules
+      if [ -n "$grub" ]; then
+        ln -s $grub $out/grub
+      fi
+
+      ln -s ${config.system.build.initialRamdisk}/initrd $out/initrd
+
+      echo "$activationScript" > $out/activate
+      substituteInPlace $out/activate --subst-var out
+      chmod u+x $out/activate
+      unset activationScript
+
+      cp ${config.system.build.bootStage2} $out/init
+      substituteInPlace $out/init --subst-var-by systemConfig $out
+
+      ln -s ${config.system.build.etc}/etc $out/etc
+      ln -s ${config.system.path} $out/sw
+      ln -s ${config.system.build.upstart} $out/upstart
+      ln -s ${config.hardware.firmware} $out/firmware
+
+      echo "$kernelParams" > $out/kernel-params
+      echo "$configurationName" > $out/configuration-name
+      echo "${toString config.system.build.upstart.interfaceVersion}" > 
$out/upstart-interface-version
+
+      mkdir $out/fine-tune
+      childCount=0;
+      for i in $children; do
+        childCount=$(( childCount + 1 ));
+        ln -s $i $out/fine-tune/child-$childCount;
+      done
+
+      ensureDir $out/bin
+      substituteAll ${./switch-to-configuration.sh} 
$out/bin/switch-to-configuration
+      chmod +x $out/bin/switch-to-configuration
+
+      ${config.system.extraSystemBuilderCmds}
+    '';
+
+
+  # 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 {
+    name = "system";
+    buildCommand = systemBuilder;
+    inherit children;
+    kernelParams =
+      config.boot.kernelParams ++ config.boot.extraKernelParams;
+    menuBuilder = config.system.build.menuBuilder;
+    initScriptBuilder = config.system.build.initScriptBuilder;
+    activationScript = config.system.activationScripts.script;
+    # Most of these are needed by grub-install.
+    path = [
+      pkgs.coreutils
+      pkgs.gnused
+      pkgs.gnugrep
+      pkgs.findutils
+      pkgs.diffutils
+      config.system.build.upstart # for initctl
+    ];
+
+    # Boot loaders
+    bootLoader = config.system.boot.loader.id;
+    grub =
+      if config.boot.loader.grub.enable
+      then config.system.build.grub
+      else null;
+    grubVersion =
+      if config.boot.loader.grub.enable
+      then (builtins.parseDrvName config.system.build.grub.name).version
+      else "";
+    grubDevices = with pkgs.lib; let
+        wrapQuotes = s: "\"" + s + "\"";
+        allDevices = [ config.boot.loader.grub.device ] ++
+          config.boot.loader.grub.devices;
+        definedDevices = filter (s: s != "") allDevices;
+      in map wrapQuotes definedDevices;
+    configurationName = config.boot.loader.grub.configurationName;
+  };
+
+
+in {
+  require = [options];
+
+  system.extraSystemBuilderCmds =
+    pkgs.lib.optionalString
+      config.system.copySystemConfiguration
+      "cp ${pkgs.lib.maybeEnv "NIXOS_CONFIG" "/etc/nixos/configuration.nix"} 
$out";
+
+  system.build.toplevel = system;
+}
_______________________________________________
nix-commits mailing list
[email protected]
http://lists.science.uu.nl/mailman/listinfo/nix-commits

Reply via email to