|
|
|
@ -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 |
|
|
|
|