exit $1
}
+
+grub_extn=4
+
###### begin command line parsing #####
reboot=true
temp=$(getopt -l opt o "$@") || usage 1
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
# 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
# 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
# https://wiki.archlinux.org/index.php/GRUB
bios_grubn=5
lastn=$bios_grubn
-boot_mib=4000
+boot_mib=10000
##### end configuration
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[@]} )
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
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
}
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
$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`)