diff options
author | obadz <obadz-git@obadz.com> | 2016-07-24 14:45:24 +0100 |
---|---|---|
committer | obadz <obadz-git@obadz.com> | 2016-08-04 16:22:25 +0100 |
commit | 037d9c6cab17a5dc28ed01c6b96c74e55cee57bc (patch) | |
tree | e284b9452ed21d41982f39b916f7158972df0f30 /nixos | |
parent | 4eef7a4ecf28859c93b647d032e5ee5fe0731256 (diff) | |
download | nixlib-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')
-rw-r--r-- | nixos/doc/manual/man-nixos-install.xml | 33 | ||||
-rw-r--r-- | nixos/modules/installer/tools/nixos-install.sh | 33 |
2 files changed, 56 insertions, 10 deletions
diff --git a/nixos/doc/manual/man-nixos-install.xml b/nixos/doc/manual/man-nixos-install.xml index 7ad1be1ec105..15c603256ca7 100644 --- a/nixos/doc/manual/man-nixos-install.xml +++ b/nixos/doc/manual/man-nixos-install.xml @@ -26,6 +26,19 @@ <replaceable>root</replaceable> </arg> <arg> + <arg choice='plain'><option>--closure</option></arg> + <replaceable>closure</replaceable> + </arg> + <arg> + <arg choice='plain'><option>--no-channel-copy</option></arg> + </arg> + <arg> + <arg choice='plain'><option>--no-root-passwd</option></arg> + </arg> + <arg> + <arg choice='plain'><option>--no-bootloader</option></arg> + </arg> + <arg> <group choice='req'> <arg choice='plain'><option>--max-jobs</option></arg> <arg choice='plain'><option>-j</option></arg> @@ -71,12 +84,13 @@ the following steps: <filename>/mnt/etc/nixos/configuration.nix</filename>.</para></listitem> <listitem><para>It installs the GRUB boot loader on the device - specified in the option <option>boot.loader.grub.device</option>, + specified in the option <option>boot.loader.grub.device</option> + (unless <option>--no-bootloader</option> is specified), and generates a GRUB configuration file that boots into the NixOS configuration just installed.</para></listitem> - <listitem><para>It prompts you for a password for the root - account.</para></listitem> + <listitem><para>It prompts you for a password for the root account + (unless <option>--no-root-passwd</option> is specified).</para></listitem> </itemizedlist> @@ -104,6 +118,19 @@ it.</para> </varlistentry> <varlistentry> + <term><option>--closure</option></term> + <listitem> + <para>If this option is provided, <command>nixos-install</command> will install the specified closure + rather than attempt to build one from <filename>/mnt/etc/nixos/configuration.nix</filename>.</para> + + <para>The closure must be an appropriately configured NixOS system, with boot loader and partition + configuration that fits the target host. Such a closure is typically obtained with a command such as + <command>nix-build -I nixos-config=./configuration.nix '<nixos>' -A system --no-out-link</command> + </para> + </listitem> + </varlistentry> + + <varlistentry> <term><option>-I</option></term> <listitem> <para>Add a path to the Nix expression search path. This option may be given multiple times. 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 |