#!/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
# # fai's setup-storage won't do btrfs on luks,
# # so we do it ourself :)
#### begin configuration
-bootn=3
rootn=1
swapn=2
+bootn=3
bios_grubn=4
boot_mib=1500
lastn=$bios_grubn
-hds=()
+hdds=()
ssds=()
cd /sys/block
for disk in [sv]d[a-z]; do
case $(cat $disk/queue/rotational) in
0) ssds+=(/dev/$disk) ;;
- 1) hds+=(/dev/$disk) ;;
+ 1) hdds+=(/dev/$disk) ;;
*) echo "$0: error: unknown /sys/block/$disk/queue/rotational: \
$(cat $disk/queue/rotational)"; exit 1 ;;
esac
if (( ${#ssds[@]} > 0 )); then
short_devs=( ${ssds[@]} )
else
- short_devs=( ${hds[@]} )
+ short_devs=( ${hdds[@]} )
fi
# check if the partitions exist have the right filesystems
esac
}
-first_boot_dev=$(bootdev ${devs[0]})
+first_boot_dev=${boot_devs[0]}
# 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}
+
+if [[ ! -e $luks_dir/host-$HOSTNAME ]]; then
+ echo "$0: error: no key for hostname at $luks_dir/host-$HOSTNAME" >&2
+ exit 1
+fi
+
if ifclass tp; then
lukspw=$(cat $luks_dir/traci)
else
bios_grubn=4
# 1.5 x based on https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/sect-disk-partitioning-setup-x86.html#sect-custom-partitioning-x86
swap_mib=$(( $(grep ^MemTotal: /proc/meminfo | \
- awk '{print $2}') * 3/(${#devs[@]} * 2 ) / 1024 ))
+ awk '{print $2}') * 3/(${#devs[@]} * 2 ) / 1024 ))
mkdir -p /tmp/fai
+root_devs=()
+for dev in ${devs[@]}; do
+ root_devs+=(`rootdev`)
+done
shopt -s nullglob
if $partition; then
for dev in ${devs[@]}; do
# parted print error output is expected. example:
# Error: /dev/vda: unrecognised disk label
disk_mib=$(( $(parted -m $dev unit MiB print | \
- sed -nr "s#^/dev/[^:]+:([0-9]+).*#\1#p") - 1))
+ sed -nr "s#^/dev/[^:]+:([0-9]+).*#\1#p") - 1))
root_end=$(( disk_mib - swap_mib - boot_mib / ${#boot_devs[@]} ))
swap_end=$(( root_end + swap_mib))
mount -o subvolid=0 $first_root_crypt /mnt
# systemd creates subvolumes we want to delete.
s=($(btrfs subvolume list --sort=-path /mnt |
- sed -rn "s#^.*path\s*(root_$DISTRO/\S+)\s*\$#\1#p"))
+ sed -rn "s#^.*path\s*(root_$DISTRO/\S+)\s*\$#\1#p"))
for subvol in ${s[@]}; do btrfs subvolume delete /mnt/$subvol; done
btrfs subvolume set-default 0 /mnt
[[ ! -e /mnt/root_$DISTRO ]] || btrfs subvolume delete /mnt/root_$DISTRO
-
## create subvols ##
cd /mnt
-for x in q home_$DISTRO root_$DISTRO; do
- btrfs subvolume list . | grep "$x$" >/dev/null || btrfs subvolume create $x
- chown root:1000 q
-done
+btrfs subvolume create root_$DISTRO
+[[ -e q ]] || btrfs subvolume create q
+chown root:1000 q
+
mkdir -p /mnt/root_$DISTRO/boot
for x in root/a q/a; do
mkdir -p $x
$first_root_crypt / btrfs noatime,subvol=root_$DISTRO 0 0
$first_root_crypt /q btrfs noatime,subvol=q 0 0
/q/a /a none bind 0 0
-$first_root_crypt /home btrfs noatime,subvol=home_$DISTRO 0 0
$first_boot_dev /boot btrfs noatime,subvol=boot_$DISTRO 0 0
EOF
+
+if ifclass treetowl; then
+ cat >> /tmp/fai/fstab <<'EOF'
+UUID=3f7b31cd-f299-40b4-a86b-7604282e2715 /i btrfs noatime 0 2
+EOF
+fi
+
swaps=()
for dev in ${devs[@]}; do
swaps+=(`swap-cryptname`)
#BOOT_DEVICE=\${BOOT_DEVICE:-"${devs[0]}"}
# swaplist seems to do nothing.
+
cat >/tmp/fai/disk_var.sh <<EOF
+# ROOT_PARTITIONS is added by me, used in arch setup.
+ROOT_PARTITIONS="${root_devs[@]}"
ROOT_PARTITION=\${ROOT_PARTITION:-$first_root_crypt}
BOOT_PARTITION=\${BOOT_PARTITION:-$first_boot_dev}
BOOT_DEVICE="${short_devs[@]}"