main fai scripts can run outside of fai, fixup stuff
[automated-distro-installer] / arch-init-chroot
index 53a2b944f72ad2583e8d16f0aa9500f4f8633d21..c6e49936126f45e1ca4235a5d3d2d3fed2630dfc 100755 (executable)
@@ -1,13 +1,13 @@
 #!/bin/bash -x
 set -eE -o pipefail
-trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?"' ERR
+trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
 
-for x in /etc/*.pacorig; do
-    mv $x ${x%.pacorig}
-done
+# note, when I did genfstab, i
+# neeeded to to do for x in mv /etc/*.pacorig; do mv $x ${x%.pacorig}; done
+
+pacman -Syu
 
-echo $hostname > /etc/hostname
-ln -s /usr/share/zoneinfo/America/Los_Angeles /etc/localtime
+[[ -L /etc/localtime ]] || ln -s /usr/share/zoneinfo/America/Los_Angeles /etc/localtime
 l=en_US.UTF-8
 echo "$l UTF-8" > /etc/locale.gen
 locale-gen
@@ -28,12 +28,6 @@ echo "LANG=$l" > /etc/locale.conf
 # # remove extra space
 # sed -ri 's/^( *MODULES *=[^"]*)" */\1"/' /etc/mkinitcpio.conf
 
-# https://wiki.archlinux.org/index.php/Dm-crypt/Encrypting_an_entire_system#Configuring_mkinitcpio_2
-# used to have lvm2 after encrypt for lvm.
-for x in encrypt encrypt1 btrfs; do sed -ri -f - /etc/mkinitcpio.conf <<EOF
-/^ *HOOKS.*\b$x\b/!s/^( *HOOKS=.*)filesystems/\1$x filesystems/
-EOF
-done
 
 
 
@@ -46,51 +40,56 @@ pacman -S --noconfirm btrfs-progs
 
 pacman -S --noconfirm grub gptfdisk
 
-if [[ $hostname == x2 || $hostname == demohost ]]; then
-    echo "$0: fstab:"
-    cat /etc/fstab
-    # https://wiki.archlinux.org/index.php/Dm-crypt/System_configuration#Boot_loader
-    # if cryptdevice was lvm, it woulde be in this format,
-    # where x2-vg is from lvdisplay, VG Name field.
-    # cryptdevice=/dev/disk/by-uuid/585dff23-136f-446f-815f-01053b70c957:x2-vg
-    # but, if you are using your own fstab, it seems you just give it a name,
-    # which will be the crypt device name under /dev/mapper/
-    # https://wiki.archlinux.org/index.php/GRUB#Additional_arguments
-    crypt_dev=(/dev/?da3)
-    crypt_name=crypt_dev_${crypt_dev##/dev/}
-    k_args=(
-        cryptdevice=$crypt_dev:$crypt_name:allow-discards
-        root=/dev/mapper/$crypt_name
-        resume=${crypt_dev%3}2
-    )
-    crypt_mapper_devs=(/dev/mapper/crypt_dev_?d[a-z]3)
-    keyfile_vars=()
-    for ((i=1; i < ${#crypt_mapper_devs[@]}; i++)); do
-        ((i!=1)) || dup_keys=(" ")
-        cp /crypto_keyfile.bin /crypto_keyfile$i.bin
-        dup_keys+=(/crypto_keyfile$i.bin)
-        base=/usr/lib/initcpio
-        cp $base/hooks/encrypt{,$i}
-        cp $base/install/encrypt{,$i}
-        sed -i "s/cryptdevice/cryptdevice$i/" $base/hooks/encrypt$i
-        sed -i "s/cryptkey/cryptkey$i/" $base/hooks/encrypt$i
-        crypt_name=${crypt_mapper_devs[i]#/dev/mapper/}
-        crypt_dev=/dev/${crypt_name#crypt_dev_}
-        k_args+=(cryptdevice$i=$crypt_dev:$crypt_name:allow-discards
-                 cryptkey$i=rootfs:/crypto_keyfile$i.bin)
-    done
-    # this is the default file, otherwise you use cryptkey=device:fstype:path
+
+shopt -s extglob
+echo "$0: fstab:"
+cat /etc/fstab
+# https://wiki.archlinux.org/index.php/Dm-crypt/System_configuration#Boot_loader
+# if cryptdevice was lvm, it woulde be in this format,
+# where x2-vg is from lvdisplay, VG Name field.
+# cryptdevice=/dev/disk/by-uuid/585dff23-136f-446f-815f-01053b70c957:x2-vg
+# but, if you are using your own fstab, it seems you just give it a name,
+# which will be the crypt device name under /dev/mapper/
+# https://wiki.archlinux.org/index.php/GRUB#Additional_arguments
+
+
+root_devs=( ${ROOT_PARTITIONS} )
+first_root_dev=${root_devs[0]}
+
+
+k_args=(
+    cryptdevices=${ROOT_PARTITIONS// /,}
+    root=/dev/mapper/crypt_dev_${first_root_dev##*/}
+    resume=${first_root_dev%[0-9]}$swapn
+)
+extra_encrypt_hooks=()
+
+
+# If we have more than 1 to decrypt, arch wiki lead me onto
+# a sort of hacky way run the encrypt hook multiple times.
+
+base=/usr/lib/initcpio
+
+
+# https://wiki.archlinux.org/index.php/Dm-crypt/Encrypting_an_entire_system#Configuring_mkinitcpio_2
+# used to have lvm2 after encrypt for lvm, but not using lvm anymore
+for x in encrypt btrfs; do
     sed -ri -f - /etc/mkinitcpio.conf <<EOF
-s#^\s*FILES=.*#FILES="/crypto_keyfile.bin${dup_keys[*]}"#
+/^ *HOOKS.*\b$x\b/!s/^( *HOOKS=.*)filesystems/\1$x filesystems/
+EOF
+done
+
+# this is the default file, otherwise you use cryptkey=device:fstype:path
+sed -ri -f - /etc/mkinitcpio.conf <<EOF
+s#^\s*FILES=.*#FILES="/crypto_keyfile.bin"#
 EOF
-    echo "$0: FILES:"
-    grep FILES /etc/mkinitcpio.conf
-    k_args="${k_args[*]}"
-    echo "$0: grub cmdline additions: $k_args"
-    sed -ri -f - /etc/default/grub <<EOF
+echo "$0: FILES:"
+grep FILES /etc/mkinitcpio.conf
+k_args="${k_args[*]}"
+echo "$0: grub cmdline additions: $k_args"
+sed -ri -f - /etc/default/grub <<EOF
 \%$k_args%!s%^ *GRUB_CMDLINE_LINUX_DEFAULT *= *"%\0$k_args %
 EOF
-fi
 
 mkinitcpio -p linux
 
@@ -100,27 +99,35 @@ mkinitcpio -p linux
 #sed -ri 's/^( *GRUB_CMDLINE_LINUX_DEFAULT *= *.*) ?\bquiet\b(.*)/\1\2/' /etc/default/grub
 
 # https://wiki.archlinux.org/index.php/GRUB#Install_to_disk
-grub-install --recheck $grubdisk
+for dev in $BOOT_DEVICE; do
+    grub-install --recheck $dev
+done
 grub-mkconfig -o /boot/grub/grub.cfg
-pacman -S --noconfirm openssh unison
+# gtk2 is an optional dependency of unison.
+# I know Im gonna want the gui, so just doing it now.
+pacman -S --noconfirm openssh rsync
 
-echo "root:$ROOTPW" | chpasswd -e
 
 pacman -S --noconfirm sudo
 
-useradd -m -p "$ROOTPW" ian
-
-/root/distro-install-common/end
+. /a/bin/fai/fai-wrapper
+/a/bin/fai/fai/config/distro-install-common/end
 systemctl enable sshd
 
 rm -rf /home/ian/.ssh
 cp -r /root/.ssh /home/ian
-chown ian:ian /home/ian/.ssh
+chown -R ian:ian /home/ian/.ssh
 # the groups recommended by
 # https://wiki.archlinux.org/index.php/Users_and_groups#Group_list
 usermod -aG games,rfkill,users,uucp,wheel ian
 
-# setup a bridge, so we can have 1st class vms.
+
+pacman -S --noconfirm net-tools # for route
+# get the mac of the interface used by the broadcast route.
+mac=$(cat /sys/class/net/$(route -n | sed -rn 's/^0\.0\.0\.0.*[[:space:]]([^[:space:]]+)[[:space:]]*$/\1/p')/address)
+
+
+# simple bridge.
 cat > /etc/systemd/network/wired.network <<EOF
 [Match]
 Name=en*
@@ -137,8 +144,6 @@ Name=br0
 DHCP=ipv4
 EOF
 
-pacman -S --noconfirm net-tools # for route
-mac=$(cat /sys/class/net/$(route -n | sed -rn 's/^0\.0\.0\.0.*[[:space:]]([^[:space:]]+)[[:space:]]*$/\1/p')/address)
 cat > /etc/systemd/network/br0.netdev <<EOF
 [NetDev]
 Name=br0
@@ -148,4 +153,7 @@ Kind=bridge
 MACAddress=$mac
 EOF
 
+
+
+
 for x in networkd resolved; do systemctl enable systemd-$x; done