sed -ri '/^crypt_dev/d' /tmp/fai/crypttab
mount -o subvol=root_$DISTRO /dev/mapper/crypt_dev_?da$rootn /mnt
mkdir -p /mnt/{q,home}
-mount -o subvol=/q /dev/mapper/crypt_dev_?da$rootn /mnt/q
-mount -o subvol=/home_$DISTRO /dev/mapper/crypt_dev_?da$rootn /mnt/home
+mount -o subvol=q /dev/mapper/crypt_dev_?da$rootn /mnt/q
+mount -o subvol=home_$DISTRO /dev/mapper/crypt_dev_?da$rootn /mnt/home
mkdir -p /mnt/boot
-mount /dev/?da$bootn /mnt/boot
+mount -o subvol=boot_$DISTRO /dev/?da$bootn /mnt/boot
# https://wiki.archlinux.org/index.php/Dm-crypt/Device_encryption#Keyfiles
cp /root/luks/host-$hostname /mnt/crypto_keyfile.bin
EOF
;;
*)
- echo "$0: 2nd fstab:"
- cat /mnt/etc/fstab
cp -r .ssh /mnt/root
cp -r /root/distro-install-common /mnt/root
;;&
ln -s /run/systemd/resolve/resolv.conf /mnt/etc/resolv.conf
# not necsesary, but makes reboot go fast.
-umount -R /mnt
+umount -R /mnt; sleep 1
# causes 255 exit code, so doing this from the caller script.
# reboot now
# and extract it from the shadow file.
ssh root@$host bash -x ./arch-init "'$(cat /p/shadow/standard)'" $host $url
ssh root@$host reboot now || [[ $? == 255 ]]
-# we need to wait for reboot and input encryption password,
-# so no doing this now.
+# next up is:
# ssh $host /a/bin/distro-begin
killall darkhttpd
#!/bin/bash -lx
-# manually download image to /a/opt, and set it's name below.
+# Setup arch pxe boot server from the base image.
+# Requires manually downloading image to /a/opt, and set it's name below.
set -eE -o pipefail
trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?"' ERR
--- /dev/null
+#!/bin/bash -x
+
+# Set grub to boot into a different distro, and reboot unless -r
+# $0 DISTRO_NAME
+
+# DISTRO_NAME is based on the partition names in /boot. eg boot_debianjessie
+
+set -eE -o pipefail
+trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?"' ERR
+
+[[ $EUID == 0 ]] || exec sudo "$BASH_SOURCE" "$@"
+
+reboot=true
+while [[ $1 == -* ]]; do
+ case $1 in
+ -r) reboot=false; shift ;;
+ --) break ;;
+ esac
+done
+
+
+distro=$1
+
+###### end command line parsing #####
+
+if ! btrfs subvolume list /boot | grep "_$distro$" &>/dev/null; then
+ echo "$0: error: _$distro$ not found in btrfs subvolume list /boot:"
+ btrfs subvolume list /boot
+ exit 1
+fi
+
+e() { echo "$@"; "$@"; }
+
+boot_dev=$(mount | sed -rn "s#^(\S+) on /boot .*#\1#p")
+
+mount_point=$(mktemp -d)
+
+e mount -o subvol=boot_$distro $boot_dev $mount_point
+
+boot_disk=${boot_dev%%[0-9]*}
+
+# arch doesn't have $mount_point/grub/device.map, accoring to the grub manual,
+# it just generates one if the file doesn't exist.
+# https://www.gnu.org/software/grub/manual/html_node/Device-map.html
+e grub-bios-setup -d $mount_point/grub/i386-pc -s -m $mount_point/grub/device.map $boot_disk
+
+e umount $mount_point
+e rmdir $mount_point
demohost)
echo "FAIBASE DEBIAN DESKTOP TWO_DISK STABLE" ;;
x2)
- echo "FAIBASE DEBIAN DESKTOP ONE_DISK" ;;
+ echo "FAIBASE DEBIAN DESKTOP ONE_DISK STABLE" ;;
tp)
echo "FAIBASE DEBIAN DESKTOP TWO_DISK" ;;
# faiserver)
#### begin configuration
+partition=false # change to true to force a full wipe
bootn=3
rootn=1
swapn=2
bios_grubn=4
-boot_mib=750
+boot_mib=1500
lastn=$bios_grubn
if ifclass VM; then
crypt_devs=(${letters[@]/#//dev/mapper/crypt_dev_${d}})
first_boot_dev=${devs[0]}$bootn
-partition=true # hardcoded for now
# somewhat crude detection of whether to partition
for dev in ${devs[@]}; do
done
done
-#partition=true # for temporarily override
-
# keyfiles generated like:
# head -c 2048 /dev/urandom | od | s dd of=/q/root/luks/host-demohost
luks_dir=${LUKS_DIR:-/var/lib/fai/config/distro-install-common/luks}
# Otherwise we would pass in -0 for the end argument for the last partition.
disk_mib=$(( $(parted -m ${devs[0]} unit MiB print | \
sed -nr "s#^${devs[0]}:([0-9]+).*#\1#p") - 1))
-root_end=$(( disk_mib - swap_mib - boot_mib ))
+root_end=$(( disk_mib - swap_mib - boot_mib / ${#devs[@]} ))
swap_end=$(( root_end + swap_mib))
mkdir -p /tmp/fai
for x in q home_$DISTRO root_$DISTRO; do
btrfs subvolume list . | grep "$x$" >/dev/null || btrfs subvolume create $x
done
+mkdir -p /mnt/root_$DISTRO/boot
for x in root/a q/a; do
mkdir -p $x
chown 1000:1000 $x
chmod 755 $x
done
-btrfs subvolume set-default \
- $(btrfs subvolume list . | grep "root_$DISTRO$" | awk '{print $2}') .
-chattr -Rf +C root
+# could set default like this, but no reason to.
+# btrfs subvolume set-default \
+# $(btrfs subvolume list . | grep "root_$DISTRO$" | awk '{print $2}') .
+chattr -Rf +C root_$DISTRO
cd /
umount /mnt
-mount $first_boot_dev /mnt
+mount -o subvolid=0 $first_boot_dev /mnt
cd /mnt
+btrfs subvolume set-default 0 /mnt
[[ ! -e /mnt/boot_$DISTRO ]] || btrfs subvolume delete /mnt/boot_$DISTRO
btrfs subvolume create boot_$DISTRO
-btrfs subvolume set-default \
- $(btrfs subvolume list . | grep "boot_$DISTRO$" | awk '{print $2}') .
cd /
umount /mnt
## end create subvols ##
#!/bin/bash -x
+# Setup dhcp server to point to tftp server,
+# and depending on the type, setup the tftp server.
+
# usage: $0 [TYPE]
# default distro is the base debian/fedora type. others are fai & arch