2009-12-15 07:37:32 +01:00
|
|
|
#! @shell@
|
|
|
|
# runs in chroot
|
|
|
|
# creates mandatory directories such as /var
|
|
|
|
# finally runs switch-to-configuration optionally registering grub
|
|
|
|
set -e
|
|
|
|
|
|
|
|
usage(){
|
|
|
|
cat << EOF
|
|
|
|
script --install [--fast] [--no-grub]
|
|
|
|
|
|
|
|
--no-pull: don't do a nix-pull to get the latest Nixpkgs
|
|
|
|
channel manifest
|
|
|
|
|
|
|
|
--no-grub: don't install grub ( you don't want this ..)
|
|
|
|
|
|
|
|
--debug: set -x
|
|
|
|
|
2009-12-16 00:26:52 +01:00
|
|
|
options which will be passed to nix-env:
|
|
|
|
|
|
|
|
-j n : number of build tasks done simultaniously
|
|
|
|
--keep-going: Build as much as possible.
|
2009-12-15 07:37:32 +01:00
|
|
|
|
|
|
|
Description:
|
|
|
|
This scripts installs NixOS and should be run within the target chroot.
|
|
|
|
|
|
|
|
The minimal nix system must have been installed previously.
|
|
|
|
Eg nixos-prepare-install.sh does this for you.
|
|
|
|
|
|
|
|
Probably this script is distributed along with the minimal nix closure used
|
|
|
|
for bootstrapping
|
|
|
|
EOF
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
die(){ echo "!>> " $@; exit 1; }
|
|
|
|
|
|
|
|
check(){
|
|
|
|
[ -e "$1" ] || die "$1 not found $2"
|
|
|
|
}
|
|
|
|
WARN(){ echo "WARNING: $@"; }
|
|
|
|
INFO(){ echo "INFO: " $@; }
|
|
|
|
|
|
|
|
# == configuration ==
|
|
|
|
|
|
|
|
HOME=${HOME:-/root}
|
|
|
|
NIXOS=${NIXOS:-/etc/nixos/nixos}
|
|
|
|
NIXPKGS=${NIXPKGS:-/etc/nixos/nixpkgs}
|
|
|
|
NIXOS_CONFIG=${NIXOS_CONFIG:-/etc/nixos/configuration.nix}
|
|
|
|
NIXOS_PULL=${NIXOS_PULL:-1}
|
|
|
|
NIXOS_INSTALL_GRUB=${NIXOS_INSTALL_GRUB:-1}
|
|
|
|
|
2009-12-16 00:26:52 +01:00
|
|
|
ps="run-in-chroot"
|
2009-12-15 07:37:32 +01:00
|
|
|
|
|
|
|
check "$NIXOS_CONFIG"
|
|
|
|
check "$NIXOS/modules" "nixos repo not found"
|
|
|
|
check "$NIXPKGS/pkgs/top-level/all-packages.nix" "nixpgks repo not found"
|
|
|
|
for d in /dev /sys /proc; do
|
|
|
|
check "$d" "It should have been mounted by $ps"
|
|
|
|
done
|
|
|
|
|
|
|
|
# try reusing binaries from host system (which is most likely an installation CD)
|
|
|
|
if [ -d /host-system/nix ]; then
|
|
|
|
export NIX_OTHER_STORES=/host-system/nix${NIX_OTHER_STORES:+:}$NIX_OTHER_STORES
|
|
|
|
else
|
|
|
|
WARN "/host-system/nix not found. It should have been --bind mounted by $ps.
|
|
|
|
I won't be able to take binaries from the installation media.
|
|
|
|
"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# == configuration end ==
|
|
|
|
|
|
|
|
INSTALL=
|
|
|
|
|
|
|
|
for arg in $@; do
|
|
|
|
case $arg in
|
2009-12-16 00:26:52 +01:00
|
|
|
--no-pull) NIXOS_PULL=0;;
|
|
|
|
--install) INSTALL=1;;
|
|
|
|
--no-grub) NIXOS_INSTALL_GRUB=;;
|
|
|
|
--debug) set -x;;
|
|
|
|
-j*) NIX_ENV_ARGS="$NIX_ENV_ARGS $arg";;
|
|
|
|
--keep-going) NIX_ENV_ARGS="$NIX_ENV_ARGS $arg";;
|
|
|
|
*) usage;
|
2009-12-15 07:37:32 +01:00
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ "$INSTALL" != 1 ]; then
|
|
|
|
usage
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# We don't have locale-archive in the chroot, so clear $LANG.
|
|
|
|
export LANG=
|
|
|
|
|
|
|
|
export PATH=@coreutils@/bin
|
|
|
|
|
|
|
|
mkdir -m 01777 -p /tmp
|
|
|
|
mkdir -m 0755 -p /var
|
|
|
|
|
|
|
|
# Create the necessary Nix directories on the target device, if they
|
|
|
|
# don't already exist.
|
|
|
|
mkdir -m 0755 -p \
|
|
|
|
/nix/var/nix/gcroots \
|
|
|
|
/nix/var/nix/temproots \
|
|
|
|
/nix/var/nix/manifests \
|
|
|
|
/nix/var/nix/userpool \
|
|
|
|
/nix/var/nix/profiles \
|
|
|
|
/nix/var/nix/db \
|
|
|
|
/nix/var/log/nix/drvs
|
|
|
|
|
|
|
|
# Do a nix-pull to speed up building.
|
|
|
|
if test -n "@nixpkgsURL@" -a ${NIXOS_PULL} != 0; then
|
|
|
|
@nix@/bin/nix-pull @nixpkgsURL@/MANIFEST || true
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Build the specified Nix expression in the target store and install
|
|
|
|
# it into the system configuration profile.
|
|
|
|
INFO "building the system configuration..."
|
|
|
|
@nix@/bin/nix-env \
|
|
|
|
-p /nix/var/nix/profiles/system \
|
|
|
|
-f "$NIXOS" \
|
|
|
|
--set -A system \
|
|
|
|
$NIX_ENV_ARGS
|
|
|
|
|
|
|
|
# Mark the target as a NixOS installation, otherwise
|
|
|
|
# switch-to-configuration will chicken out.
|
|
|
|
touch /etc/NIXOS
|
|
|
|
|
|
|
|
# Grub needs an mtab.
|
|
|
|
ln -sfn /proc/mounts /etc/mtab
|
|
|
|
|
|
|
|
|
|
|
|
# Switch to the new system configuration. This will install Grub with
|
|
|
|
# a menu default pointing at the kernel/initrd/etc of the new
|
|
|
|
# configuration.
|
|
|
|
INFO "finalising the installation..."
|
|
|
|
export NIXOS_INSTALL_GRUB
|
|
|
|
/nix/var/nix/profiles/system/bin/switch-to-configuration boot
|