various fixes, data subvols changed, mostly handled elsewhere now
[automated-distro-installer] / fai / config / hooks / partition.DEFAULT
index 9905602cab65a4108057e488a06a507a1ca954b5..f81c6af7d5914398ef976f0916afb06b604866e8 100755 (executable)
@@ -31,13 +31,18 @@ rootn=1
 swapn=2
 bootn=3
 # ext partition so grub can write persistent variables,
-# so it can do a one time boot.
+# so it can do a one time boot. grub can't write to
+# btrfs or any cow fs because it's more
+# more complicated to do and they don't want to.
 grub_extn=4
 # bios boot partition,
 # https://wiki.archlinux.org/index.php/GRUB
 bios_grubn=5
 lastn=$bios_grubn
-boot_mib=4000
+# this is larger than needed for several /boot subvols,
+# becuase I keep a minimal debian install on it, for
+# recovery needs, and for doing pxe-kexec.
+boot_mib=10000
 
 
 ##### end configuration
@@ -99,7 +104,7 @@ $(cat $disk/queue/rotational)"; exit 1 ;;
 done
 
 # install all ssds, or if there are none, all hdds
-if (( ${#ssds[@]} > 0 )); then
+if ! ifclass ROTATIONAL && (( ${#ssds[@]} > 0 )); then
     short_devs=( ${ssds[@]} )
 else
     short_devs=( ${hdds[@]} )
@@ -173,6 +178,17 @@ for dev in ${devs[@]}; do
     fi
 done
 
+if ifclass RAID0 || (( ${#boot_devs[@]} < 4 )); then
+    raid_level=0
+else
+    raid_level=10
+    # need double the space if we are raid 10, and then
+    # might as well give some extra.
+    boot_mib=$((boot_mib * 3))
+fi
+
+
+
 if [[ ! $DISTRO ]]; then
     if ifclass STABLE_BOOTSTRAP; then
         DISTRO=debianstable_bootstrap
@@ -192,17 +208,10 @@ fi
 first_boot_dev=${boot_devs[0]}
 
 
-case ${#boot_devs[@]} in
-    # need double the space if we are raid 10, and then
-    # might as well give some extra overhead.
-    [4-9]*|[1-3]?*) boot_mib=$((boot_mib * 3)) ;;
-esac
-
-
 bpart() { # btrfs a partition
-    case ${#@} in
-        [1-3]) mkfs.btrfs -f $@ ;;
-        [4-9]*|[1-3]?*) mkfs.btrfs -f -m raid10 -d raid10 $@ ;;
+    case $raid_level in
+        0) mkfs.btrfs -f $@ ;;
+        10) mkfs.btrfs -f -m raid10 -d raid10 $@ ;;
     esac
 }
 
@@ -240,7 +249,11 @@ done
 shopt -s nullglob
 if $partition; then
     for dev in ${devs[@]}; do
-        for x in $dev[0-9]; do
+        # if we repartition to the same as an old partition,
+        # we don't want any old fses hanging around.
+        for (( i=1; i <= lastn; i++ )); do
+            x=$(add-part $dev $i)
+            [[ -e $x ]] || continue
             count_down=10
             # wipefs has failed, manual run works, google suggests timing issue
             while ! wipefs -a $x; do
@@ -350,21 +363,17 @@ if [[ $DISTRO != debianstable_bootstrap ]]; then
     cd /mnt
 
     btrfs subvolume create root_$DISTRO
-    [[ -e q ]] || btrfs subvolume create q
-    chown root:1000 q
+    [[ -e nocow ]] || btrfs subvolume create nocow
+    chown root:1000 nocow
+    chattr +C nocow
 
     mkdir -p /mnt/root_$DISTRO/boot
-    for x in q/a q/i; do
-        mkdir -p $x
-        chown 1000:1000 $x
-        chmod 755 $x
-    done
-    # could set default like this, but no reason to.
+    # could set default subvol like this, but no reason to.
     # btrfs subvolume set-default \
         #       $(btrfs subvolume list . | grep "root_$DISTRO$" | awk '{print $2}') .
 
     # no cow on the root filesystem. it's setup is fully scripted,
-    # (immutable in buzzwords). if it messes up, we will just recreated it,
+    # if it's messed up, we will just recreated it,
     # and we can get better perf with this.
     # I can't remember exactly why, but this is preferable to mounting with
     # -o nodatacow, I think because subvolumes inherit that.
@@ -377,7 +386,7 @@ mount -o subvolid=0 $first_boot_dev /mnt
 cd /mnt
 btrfs subvolume set-default 0 /mnt # already default, just ensuring it.
 
-# for libreboot systems.
+# for libreboot systems. grub2 only reads from subvolid=0
 mkdir -p /mnt/grub2
 cp $FAI/distro-install-common/libreboot_grub.cfg /mnt/grub2
 
@@ -409,22 +418,13 @@ BOOT_DEVICE="${short_devs[@]}"
 ROOT_PARTITION=$first_boot_dev
 EOF
 else
-    # note, the mount point /a seems to get automatically created somewhere
+    # note, fai creates the mountpoints like /nocow
     cat > /tmp/fai/fstab <<EOF
 $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  /nocow  btrfs  noatime,subvol=nocow  0 0
+$first_root_crypt  /mnt/root  btrfs  noatime,subvolid=0  0 0
 $first_boot_dev  /boot  btrfs  noatime,subvol=$boot_vol  0 0
 EOF
-
-    # I will avoid using uuid in the future. the other way of specifying is simpler
-    if ifclass treetowl; then
-        cat >> /tmp/fai/fstab <<'EOF'
-$first_root_crypt  /i  btrfs  noatime,subvol=i  0 0
-UUID=3f7b31cd-f299-40b4-a86b-7604282e2715 /i btrfs  noatime  0 2
-EOF
-    fi
-
     swaps=()
     for dev in ${devs[@]}; do
         swaps+=(`swap-cryptname`)