various fixes and initial focal support
[automated-distro-installer] / fai / config / hooks / partition.DEFAULT
index b961e62ed2d7f98055204bfd1b0bd42066960fa8..0a0c2ad69946535a624c74d0ce3f7443ad69671c 100755 (executable)
@@ -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.
@@ -541,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 ##
@@ -570,10 +582,11 @@ $first_boot_dev  /boot  btrfs        nofail,noatime,subvol=$boot_vol  0 0
 $first_boot_dev  /mnt/boot  btrfs    nofail,noatime,subvolid=0  0 0
 EOF
   swaps=()
+  rm -f /tmp/fai/crypttab
   for dev in ${devs[@]}; do
     swaps+=($(swap-cryptname))
     cat >>/tmp/fai/crypttab <<EOF
-$(root-cryptname)  $(rootdev)  none  keyscript=/root/keyscript,discard,luks,initramfs
+$(root-cryptname) $(rootdev)  none  keyscript=/root/keyscript,discard,luks,initramfs
 $(swap-cryptname) $(swapdev)  /dev/urandom  swap,cipher=aes-xts-plain64,size=256,hash=ripemd160
 EOF
     cat >> /tmp/fai/fstab <<EOF