X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=fai%2Fconfig%2Fhooks%2Fpartition.DEFAULT;h=0a0c2ad69946535a624c74d0ce3f7443ad69671c;hb=cef9b6ede5c1e028bed1b4dc7895f5dfa121ad6b;hp=28f37de5b6a5e87e9f4671c555280655087aac72;hpb=cf3b64c21818d0033ffe5447d30e45141c81ee1b;p=automated-distro-installer diff --git a/fai/config/hooks/partition.DEFAULT b/fai/config/hooks/partition.DEFAULT index 28f37de..0a0c2ad 100755 --- a/fai/config/hooks/partition.DEFAULT +++ b/fai/config/hooks/partition.DEFAULT @@ -44,6 +44,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,11 +136,16 @@ 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 @@ -297,6 +304,10 @@ if [[ ! $DISTRO ]]; then DISTRO=debiantesting elif ifclass VOL_XENIAL; then DISTRO=ubuntuxenial + elif ifclass VOL_BIONIC; then + DISTRO=ubuntubionic + elif ifclass VOL_FOCAL; then + DISTRO=ubuntufocal elif ifclass VOL_BELENOS; then DISTRO=trisquelbelenos elif ifclass VOL_FLIDAS; then @@ -320,36 +331,33 @@ bpart() { # btrfs a partition } -# see README for docs about how to create these -luks_dir=$FAI/distro-install-common/luks - +if [[ ! -e /a/bin/fai/fai-wrapper ]]; then + # see README for docs about how to create these + luks_dir=$FAI/distro-install-common/luks + + luks_file=$luks_dir/host-$HOSTNAME + if [[ ! -e $luks_file ]]; then + hostkeys=($luks_dir/host-*) + # if there is only one key, we might be deploying somewhere + # where dhcp doesnt give us a proper hostname, so use that. + if [[ ${#hostkeys[@]} == 1 && -e ${hostkeys[0]} ]]; then + luks_file=${hostkeys[0]} + else + echo "$0: error: no key for hostname at $luks_file" >&2 + exit 1 + fi + fi -luks_file=$luks_dir/host-$HOSTNAME -if [[ ! -e $luks_file ]]; then - hostkeys=($luks_dir/host-*) - # if there is only one key, we might be deploying somewhere - # where dhcp doesnt give us a proper hostname, so use that. - if [[ ${#hostkeys[@]} == 1 && -e ${hostkeys[0]} ]]; then - luks_file=${hostkeys[0]} + # # note, corresponding changes in /b/ds/keyscript-{on,off} + if ifclass demohost; then + lukspw=x + elif [[ -e $luks_dir/$HOSTNAME ]]; then + lukspw=$(cat $luks_dir/$HOSTNAME) else - echo "$0: error: no key for hostname at $luks_file" >&2 - exit 1 + lukspw=$(cat $luks_dir/iank) fi 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 - lukspw=x -elif [[ -e $luks_dir/$HOSTNAME ]]; then - lukspw=$(cat $luks_dir/$HOSTNAME) -else - lukspw=$(cat $luks_dir/iank) -fi - first_root_crypt=$(root-cryptdev ${devs[0]}) @@ -487,7 +495,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 +505,7 @@ else fi -if [[ $DISTRO != debianstretch_bootstrap ]]; then +if $wipe && [[ $DISTRO != debianstretch_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 +520,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}') . @@ -542,8 +549,12 @@ if [[ $DISTRO == debianstretch_bootstrap ]]; then else boot_vol=boot_$DISTRO fi -[[ ! -e /mnt/$boot_vol ]] || btrfs subvolume delete /mnt/$boot_vol -btrfs subvolume create $boot_vol +if $wipe; then + if [[ -e /mnt/$boot_vol ]]; then + btrfs subvolume delete /mnt/$boot_vol + fi + btrfs subvolume create $boot_vol +fi cd / umount /mnt ## end create subvols ## @@ -565,16 +576,17 @@ EOF else # note, fai creates the mountpoints listed here cat > /tmp/fai/fstab <>/tmp/fai/crypttab <> /tmp/fai/fstab <