X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=fai%2Fconfig%2Fhooks%2Fpartition.DEFAULT;h=ea8d2378039860719cd3e46da40f30d19d979425;hb=2230b58f86d24175583f2ce60d271f66d4f122ea;hp=28f37de5b6a5e87e9f4671c555280655087aac72;hpb=cf3b64c21818d0033ffe5447d30e45141c81ee1b;p=automated-distro-installer diff --git a/fai/config/hooks/partition.DEFAULT b/fai/config/hooks/partition.DEFAULT index 28f37de..ea8d237 100755 --- a/fai/config/hooks/partition.DEFAULT +++ b/fai/config/hooks/partition.DEFAULT @@ -15,16 +15,22 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +PS4='+ $LINENO ' set -eE -o pipefail trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR +if [[ $EUID != 0 ]]; then + echo "$0: error: need to run as root" >&2 + exit 1 +fi + # for calling outside of FAI: -# # need to redep and set that location so that we get luks keys -# export FAI=/srv/fai/config # fai-redep +# s # source /b/fai/fai-wrapper # - set any appropriate classes with: fai-setclass OPT1... which sets CLASS_OPT1=true... # or run eval-fai-classfile FILE +# export luks_dir=/q/root/luks # # OPTIONS: # @@ -44,6 +50,8 @@ trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR # REPARTITION: forces repartitioning even if we detect the proper amount # of partitions already exist. # +# NOWIPE: use existing subvolumes if they exist +# # ROTATIONAL: forces to install onto hdds instead of sdds. normally sdds # are chosen if they exist. # @@ -134,24 +142,34 @@ swap-cryptname() { crypt-name $(swapdev $@); } ##### end function defs -if ifclass REPARTITION;then +if ifclass REPARTITION; then partition=true # force a full wipe else partition=false # change to true to force a full wipe fi +if ifclass NOWIPE; then + wipe=false +else + wipe=true +fi -## ignore disks that are mounted, eg when running from fai-cd -declare -A disk_excludes -while read -r l; do - eval "$l" - if [[ ! $PKNAME ]]; then - PKNAME="$KNAME" - fi - if [[ $MOUNTPOINT ]]; then - disk_excludes[$PKNAME]=true - fi -done < <(lsblk -nP -o KNAME,MOUNTPOINT,PKNAME) +if ((`nproc` > 2)); then + mopts=,compress=zstd +fi +declare -A disk_excludes +if ! ifclass USE_MOUNTED; then + ## ignore disks that are mounted, eg when running from fai-cd + while read -r l; do + eval "$l" + if [[ ! $PKNAME ]]; then + PKNAME="$KNAME" + fi + if [[ $MOUNTPOINT ]]; then + disk_excludes[$PKNAME]=true + fi + done < <(lsblk -nP -o KNAME,MOUNTPOINT,PKNAME) +fi hdds=() ssds=() @@ -287,22 +305,28 @@ esac if [[ ! $DISTRO ]]; then - if ifclass VOL_STRETCH_BOOTSTRAP; then - DISTRO=debianstretch_bootstrap + if ifclass VOL_BUSTER_BOOTSTRAP; then + DISTRO=debianbuster_bootstrap elif ifclass VOL_STRETCH; then DISTRO=debianstretch elif ifclass VOL_BUSTER; then DISTRO=debianbuster + elif ifclass VOL_BULLSEYE; then + DISTRO=debianbullseye elif ifclass VOL_TESTING; then DISTRO=debiantesting elif ifclass VOL_XENIAL; then DISTRO=ubuntuxenial - elif ifclass VOL_BELENOS; then - DISTRO=trisquelbelenos + elif ifclass VOL_BIONIC; then + DISTRO=ubuntubionic + elif ifclass VOL_FOCAL; then + DISTRO=ubuntufocal elif ifclass VOL_FLIDAS; then DISTRO=trisquelflidas elif ifclass VOL_ETIONA; then DISTRO=trisqueletiona + elif ifclass VOL_NABIA; then + DISTRO=trisquelnabia else echo "PARTITIONER ERROR: no distro class/var set" >&2 exit 1 @@ -320,9 +344,10 @@ bpart() { # btrfs a partition } -# see README for docs about how to create these -luks_dir=$FAI/distro-install-common/luks - +if [[ ! $luks_dir ]]; then + # see README for docs about how to create these + luks_dir=$FAI/distro-install-common/luks +fi luks_file=$luks_dir/host-$HOSTNAME if [[ ! -e $luks_file ]]; then @@ -338,11 +363,7 @@ if [[ ! -e $luks_file ]]; then fi # # note, corresponding changes in /b/ds/keyscript-{on,off} -if ifclass tpnew; then - lukspw=$(cat $luks_dir/traci) -elif ifclass ziva; then - lukspw=$(cat $luks_dir/ziva) -elif ifclass demohost; then +if ifclass demohost; then lukspw=x elif [[ -e $luks_dir/$HOSTNAME ]]; then lukspw=$(cat $luks_dir/$HOSTNAME) @@ -452,7 +473,7 @@ if $partition; then # This is just a bit more robust, and it could work for booting # into ipxe which can't persist data, if we ever got that working. mkfs.ext2 $(grub_extdev) - # when we move to newer than trisquel 8, we can remove + # when we move to newer than trisquel 9, we can remove # --type luks1. We can also check on cryptsetup --help | less /compil # to see about the other settings. Default in debian 9 is luks2. # You can convert from luks2 to luks 1 by adding a temporary key: @@ -487,7 +508,7 @@ if $partition; then bpart ${boot_devs[@]} else for dev in ${devs[@]}; do - if [[ -e /a/bin/fai/fai-wrapper && -e /dev/mapper/$(root-cryptname) ]]; then + if [[ -e /dev/mapper/$(root-cryptname) ]]; then continue fi cryptsetup luksOpen $(rootdev) $(root-cryptname) \ @@ -497,7 +518,7 @@ else fi -if [[ $DISTRO != debianstretch_bootstrap ]]; then +if $wipe && [[ $DISTRO != debianbuster_bootstrap ]]; then # bootstrap distro doesn't use separate encrypted root. mount -o subvolid=0 $first_root_crypt /mnt # systemd creates subvolumes we want to delete. @@ -512,7 +533,6 @@ if [[ $DISTRO != debianstretch_bootstrap ]]; then btrfs subvolume create root_$DISTRO - mkdir -p /mnt/root_$DISTRO/boot # could set default subvol like this, but no reason to. # btrfs subvolume set-default \ # $(btrfs subvolume list . | grep "root_$DISTRO$" | awk '{print $2}') . @@ -535,15 +555,19 @@ btrfs subvolume set-default 0 /mnt # already default, just ensuring it. mkdir -p /mnt/grub2 cp $FAI/distro-install-common/libreboot_grub.cfg /mnt/grub2 -if [[ $DISTRO == debianstretch_bootstrap ]]; then +if [[ $DISTRO == debianbuster_bootstrap ]]; then # this is just convenience for the libreboot_grub config # so we can glob the other ones easier. boot_vol=$DISTRO else boot_vol=boot_$DISTRO fi -[[ ! -e /mnt/$boot_vol ]] || btrfs subvolume delete /mnt/$boot_vol -btrfs subvolume create $boot_vol +if $wipe && [[ -e /mnt/$boot_vol ]]; then + btrfs subvolume delete /mnt/$boot_vol +fi +if [[ ! -e /mnt/$boot_vol ]]; then + btrfs subvolume create $boot_vol +fi cd / umount /mnt ## end create subvols ## @@ -554,7 +578,7 @@ grub-editenv /mnt/grubenv set did_fai_check=true grub-editenv /mnt/grubenv set last_boot=/$boot_vol umount /mnt -if [[ $DISTRO == debianstretch_bootstrap ]]; then +if [[ $DISTRO == debianbuster_bootstrap ]]; then cat > /tmp/fai/fstab < /tmp/fai/fstab <>/tmp/fai/crypttab <> /tmp/fai/fstab <