fix chboot, add partition options
authorIan Kelling <ian@iankelling.org>
Fri, 4 Nov 2016 06:34:27 +0000 (23:34 -0700)
committerIan Kelling <ian@iankelling.org>
Mon, 6 Feb 2017 06:21:42 +0000 (22:21 -0800)
chboot
fai-wrapper
fai/config/class/50-host-classes
fai/config/hooks/partition.DEFAULT

diff --git a/chboot b/chboot
index eb8b1183011b907165d9f7c5aba21edae0ab9e5c..12befb8a13ab80d68e7f950d12af22e3f24ffb7c 100755 (executable)
--- a/chboot
+++ b/chboot
@@ -39,6 +39,9 @@ EOF
     exit $1
 }
 
+
+grub_extn=4
+
 ###### begin command line parsing #####
 reboot=true
 temp=$(getopt -l opt o "$@") || usage 1
@@ -91,8 +94,11 @@ boot_disk=${boot_dev%%[0-9]*}
 e grub-bios-setup -d $mount_point/grub/i386-pc -s -m $mount_point/grub/device.map $boot_disk
 
 # todo, mount_point needs subvolid=0
-e grub-editenv $mount_point/grub2/grubenv set default_subvol=/boot_$distro
 
+e umount $mount_point
+
+e mount $boot_disk$grub_extn $mount_point
+e grub-editenv $mount_point/grubenv set default_subvol=/boot_$distro
 e umount $mount_point
 e rmdir $mount_point
 
index d07ea8f3fa4179c5805e32197c853b23832aba5f..45804a5a669f968cef9ae3f63fd164ec963ec8a6 100644 (file)
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
-# for using some fai commands outside of fai
+# For using some fai commands outside of fai.
+# to set fai classes, export CLASS_CLASSNAME=true
 ifclass() {
     local var=${1/#/CLASS_}
     [[ $HOSTNAME == $1 || ${!var} ]]
 }
+fai-setclass() {
+    for class in "$@"; do
+        # export class vars with CLASS_ in front to avoid name collisions.
+        classes+=" $class"
+        export CLASS_$class=true
+    done
+    classes="${classes# }"
+    export classes
+}
+eval-fai-classfile() {
+    file=$1
+    fai-setclass $(bash -l $file)
+}
 export -f ifclass
 classes=  # used by fcopy
-for x in $(bash /a/bin/fai/fai/config/class/50-host-classes); do
-    # export class vars with CLASS_ in front to avoid name collisions.
-    classes+=" $x"
-    export CLASS_$x=true
-done
-classes="${classes# }"
-export classes
+eval-fai-classfile /a/bin/fai/fai/config/class/50-host-classes
 export FAI_ROOT=/
 export FAI=/a/bin/fai/fai/config
index 4f776f5ea38466e9c31585feefb66fdee42b375d..f8e46de7fbe8560d026bccb7eebf4151a3acb483 100755 (executable)
@@ -24,7 +24,7 @@
 # We check the reverse condition in 51-multi-boot,
 # and set what os we are installing, but don't check it
 # into git since it changes regularly. Each host needs
-# to have a class of either DEBIAN + (STABLE or STRETCH64),
+# to have a class of either DEBIAN + (STABLE or STRETCH64 or STABLE_BOOTSTRAP),
 # or UBUNTU + XENIAL64.
 #
 # Other notable classes:
 # fresh install. I use this in case our repartition check has
 # a bug in it, or I accidentally set REPARTITION.
 #
+# ROTATIONAL: in a system with ssd and hdd, install to the hdd
+# instead of the default ssd.
+#
+# RAID0: Use raid 0 even if there are >= 4 disks with boot partititions.
+#
 # It's shell looks like this:
 # if [[ ! -e /a/bin/fai/fai-wrapper ]]; then
 #     case $HOSTNAME in
index 9905602cab65a4108057e488a06a507a1ca954b5..46887e9712d1aa558fb08bcab3be976a4fce6723 100755 (executable)
@@ -37,7 +37,7 @@ grub_extn=4
 # https://wiki.archlinux.org/index.php/GRUB
 bios_grubn=5
 lastn=$bios_grubn
-boot_mib=4000
+boot_mib=10000
 
 
 ##### end configuration
@@ -99,7 +99,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 +173,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 +203,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 +244,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
@@ -417,14 +425,6 @@ $first_root_crypt  /q  btrfs  noatime,subvol=q  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`)