3 # see t.org for how to call
6 trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?"' ERR
8 cd $
(dirname $
(readlink
-f "$BASH_SOURCE"))
14 (( $# >= 2 )) ||
{ echo "error: need 2 arguments"; exit 1; }
18 export grubdisk
=/dev
/sda
21 export grubdisk
=/dev
/vda
24 bootid
=64d495ee-c9fe-4174-b20a-6c5e47abcfa1
25 export grubdisk
=$
(blkid|
sed -nr "/$bootid/s/^([^0-9]+).*/\1/p")
28 rootid
=e9ce7b46-9a21-4e79-b7f7-0b18acb57587
29 export grubdisk
=$
(blkid|
sed -nr "/$rootid/s/(^[^0-9]*).*/\1/p")
32 echo "unrecognized hostname: $hostname"
36 if [[ -e /root
/devbyid
]]; then
37 mv /root
/devbyid
/usr
/bin
40 rm -f /etc
/pacman.d
/mirrorlist
41 # https://wiki.archlinux.org/index.php/Mirrors#Sorting_mirrors
43 if [[ $mirror ]]; then
44 echo "Server = $mirror" >> /etc
/pacman.d
/mirrorlist
46 curl
-s 'https://www.archlinux.org/mirrorlist/?country=US&protocol=https&ip_version=4&ip_version=6&use_mirror_status=on' |
47 sed -r 's/^[ #]*(Server *=)/\1/' >> /etc
/pacman.d
/mirrorlist
49 # export class vars with CLASS_ in front to avoid name colissions.
51 local var
=${1/#/CLASS_}
52 [[ $hostname == $1 ||
${!var} ]]
55 for x
in $
(bash
50-host-classes); do
58 export CLASS_TWO_DISK
=true
59 export LUKS_DIR
=/root
/luks
60 export HOSTNAME
=$hostname
62 chmod +x partition.DEFAULT
64 # arch doesn't need crypttab entries for initramfs crypt partititions
68 sed -ri '/^crypt_dev/d' /tmp
/fai
/crypttab
69 mount
-o subvol
=root_
$DISTRO /dev
/mapper
/crypt_dev_?da
$rootn /mnt
70 mkdir
-p /mnt
/{q
,home
}
71 mount
-o subvol
=q
/dev
/mapper
/crypt_dev_?da
$rootn /mnt
/q
72 mount
-o subvol
=home_
$DISTRO /dev
/mapper
/crypt_dev_?da
$rootn /mnt
/home
74 mount
-o subvol
=boot_
$DISTRO /dev
/?da
$bootn /mnt
/boot
76 # https://wiki.archlinux.org/index.php/Dm-crypt/Device_encryption#Keyfiles
77 cp /root
/luks
/host-
$hostname /mnt
/crypto_keyfile.bin
78 chmod 600 /mnt
/crypto_keyfile.bin
83 # these hosts are broken, not updated to new fai hyrbrid scripts.
86 # for this system, no separate /boot, to keep partitions simple,
87 # since we want simpler backup recovery.
91 mount
/dev
/mapper
/vg_treetowl00-lv02
/mnt
92 mount
-U $bootid /mnt
/boot
95 rm -rf /mnt
/!(a|i|q|f|boot
) /mnt
/boot
/*
101 if [[ $mirror ]]; then
102 echo "$0: 404 errors about core.db etc are normal,
103 they will succeed using the secodary mirror"
106 cp /tmp
/fai
/{fstab
,crypttab
} /mnt
/etc
109 # the root .ssh needs to be like this,
110 # because it\'s used to get the key to mount an encrypted filesystem
113 rm -rf $d # for idempotency
115 scp
-oStrictHostKeyChecking=no ian@treetowl
:/a
/c
/machine_specific
/frodo
/subdir_files
/.ssh
/* $d
117 ln -s /q
/root
/.
ssh /mnt
/root
118 # background: errors=remount-ro is a debian installer thing. seems like
119 # not a bad idea. man mount says: The default is set in the filesystem
120 # superblock, and can be changed using tune2fs(8)
122 cat > /mnt
/etc
/fstab
<<'EOF'
123 UUID=e9ce7b46-9a21-4e79-b7f7-0b18acb57587 / ext4 noatime,errors=remount-ro 0 1
124 UUID=dd67766f-93c5-4ce3-9877-a1d9841dd4a4 none swap sw 0 0
125 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
126 /dev/mapper/crypta7 /mnt/btrfs_root btrfs subvolid=0,noatime,noauto 0 2
127 /dev/mapper/crypta7 /a btrfs subvol=a,noatime,noauto 0 2
132 cp -r /root
/distro-install-common
/mnt
/root
135 echo "UUID=a9e83bb7-d23d-4de6-ba9f-d88b887f7206 /a ext4 noatime 0 2" >> /mnt
/etc
/fstab
139 cp /root
/arch-init-chroot
/mnt
/root
140 # for manual commands, arch-chroot /mnt bash
141 arch-chroot
/mnt
/root
/arch-init-chroot
143 # this gets mounted in chroot so we have to do it outside
144 rm -f /mnt
/etc
/resolv.conf
145 ln -s /run
/systemd
/resolve
/resolv.conf
/mnt
/etc
/resolv.conf
147 # not necsesary, but makes reboot go fast.
148 umount
-R /mnt
; sleep 1
150 # causes 255 exit code, so doing this from the caller script.