about summary refs log tree commit diff
path: root/nixos/modules/installer
diff options
context:
space:
mode:
authorobadz <obadz-git@obadz.com>2016-07-24 14:45:24 +0100
committerobadz <obadz-git@obadz.com>2016-08-04 16:22:25 +0100
commit037d9c6cab17a5dc28ed01c6b96c74e55cee57bc (patch)
treee284b9452ed21d41982f39b916f7158972df0f30 /nixos/modules/installer
parent4eef7a4ecf28859c93b647d032e5ee5fe0731256 (diff)
downloadnixlib-037d9c6cab17a5dc28ed01c6b96c74e55cee57bc.tar
nixlib-037d9c6cab17a5dc28ed01c6b96c74e55cee57bc.tar.gz
nixlib-037d9c6cab17a5dc28ed01c6b96c74e55cee57bc.tar.bz2
nixlib-037d9c6cab17a5dc28ed01c6b96c74e55cee57bc.tar.lz
nixlib-037d9c6cab17a5dc28ed01c6b96c74e55cee57bc.tar.xz
nixlib-037d9c6cab17a5dc28ed01c6b96c74e55cee57bc.tar.zst
nixlib-037d9c6cab17a5dc28ed01c6b96c74e55cee57bc.zip
nixos-install: add options --closure, --no-channel-copy, --no-root-passwd, and --no-bootloader
Closes #17236

nix-build -A tests.installer.simple '<nixos/release.nix>' succeeds ✓
Diffstat (limited to 'nixos/modules/installer')
-rw-r--r--nixos/modules/installer/tools/nixos-install.sh33
1 files changed, 26 insertions, 7 deletions
diff --git a/nixos/modules/installer/tools/nixos-install.sh b/nixos/modules/installer/tools/nixos-install.sh
index 7962be137875..ae9f3a892950 100644
--- a/nixos/modules/installer/tools/nixos-install.sh
+++ b/nixos/modules/installer/tools/nixos-install.sh
@@ -24,6 +24,7 @@ fi
 # Parse the command line for the -I flag
 extraBuildFlags=()
 chrootCommand=(/run/current-system/sw/bin/bash)
+bootLoader=1
 
 while [ "$#" -gt 0 ]; do
     i="$1"; shift 1
@@ -40,6 +41,18 @@ while [ "$#" -gt 0 ]; do
         --root)
             mountPoint="$1"; shift 1
             ;;
+        --closure)
+            closure="$1"; shift 1
+            ;;
+        --no-channel-copy)
+            noChannelCopy=1
+            ;;
+        --no-root-passwd)
+            noRootPasswd=1
+            ;;
+        --no-bootloader)
+            bootLoader=0
+            ;;
         --show-trace)
             extraBuildFlags+=("$i")
             ;;
@@ -111,7 +124,7 @@ if test -z "$NIXOS_CONFIG"; then
     NIXOS_CONFIG=/etc/nixos/configuration.nix
 fi
 
-if ! test -e "$mountPoint/$NIXOS_CONFIG"; then
+if [ ! -e "$mountPoint/$NIXOS_CONFIG" ] && [ -z "$closure" ]; then
     echo "configuration file $mountPoint/$NIXOS_CONFIG doesn't exist"
     exit 1
 fi
@@ -200,16 +213,22 @@ for i in /nix/var/nix/manifests/*.nixmanifest; do
 done
 
 
-# Get the absolute path to the NixOS/Nixpkgs sources.
-nixpkgs="$(readlink -f $(nix-instantiate --find-file nixpkgs))"
+if [ -z "$closure" ]; then
+    # Get the absolute path to the NixOS/Nixpkgs sources.
+    nixpkgs="$(readlink -f $(nix-instantiate --find-file nixpkgs))"
 
+    nixEnvAction="-f <nixpkgs/nixos> --set -A system"
+else
+    nixpkgs=""
+    nixEnvAction="--set $closure"
+fi
 
 # Build the specified Nix expression in the target store and install
 # it into the system configuration profile.
 echo "building the system configuration..."
 NIX_PATH="nixpkgs=/tmp/root/$nixpkgs:nixos-config=$NIXOS_CONFIG" NIXOS_CONFIG= \
     chroot $mountPoint @nix@/bin/nix-env \
-    "${extraBuildFlags[@]}" -p /nix/var/nix/profiles/system -f '<nixpkgs/nixos>' --set -A system
+    "${extraBuildFlags[@]}" -p /nix/var/nix/profiles/system $nixEnvAction
 
 
 # Copy the NixOS/Nixpkgs sources to the target as the initial contents
@@ -218,7 +237,7 @@ mkdir -m 0755 -p $mountPoint/nix/var/nix/profiles
 mkdir -m 1777 -p $mountPoint/nix/var/nix/profiles/per-user
 mkdir -m 0755 -p $mountPoint/nix/var/nix/profiles/per-user/root
 srcs=$(nix-env "${extraBuildFlags[@]}" -p /nix/var/nix/profiles/per-user/root/channels -q nixos --no-name --out-path 2>/dev/null || echo -n "")
-if test -n "$srcs"; then
+if [ -z "$noChannelCopy" ] && [ -n "$srcs" ]; then
     echo "copying NixOS/Nixpkgs sources..."
     chroot $mountPoint @nix@/bin/nix-env \
         "${extraBuildFlags[@]}" -p /nix/var/nix/profiles/per-user/root/channels -i "$srcs" --quiet
@@ -244,7 +263,7 @@ touch $mountPoint/etc/NIXOS
 # a menu default pointing at the kernel/initrd/etc of the new
 # configuration.
 echo "finalising the installation..."
-NIXOS_INSTALL_GRUB=1 chroot $mountPoint \
+NIXOS_INSTALL_GRUB="$bootLoader" chroot $mountPoint \
     /nix/var/nix/profiles/system/bin/switch-to-configuration boot
 
 
@@ -253,7 +272,7 @@ chroot $mountPoint /nix/var/nix/profiles/system/activate
 
 
 # Ask the user to set a root password.
-if [ "$(chroot $mountPoint /run/current-system/sw/bin/sh -l -c "nix-instantiate --eval '<nixpkgs/nixos>' -A config.users.mutableUsers")" = true ] && [ -t 0 ] ; then
+if [ -z "$noRootPasswd" ] && [ "$(chroot $mountPoint /run/current-system/sw/bin/sh -l -c "nix-instantiate --eval '<nixpkgs/nixos>' -A config.users.mutableUsers")" = true ] && [ -t 0 ] ; then
     echo "setting root password..."
     chroot $mountPoint /var/setuid-wrappers/passwd
 fi