X-Git-Url: https://iankelling.org/git/?p=automated-distro-installer;a=blobdiff_plain;f=fai%2Fconfig%2Fhooks%2Fpartition.DEFAULT;fp=fai%2Fconfig%2Fhooks%2Fpartition.DEFAULT;h=e953cf19a238381fb3b9c107396e5fe961043667;hp=1b80784da925a4103e460d6b6ecc81f582e27138;hb=14f283f82afc48d6cec1bb7498ec34ac2b0da77c;hpb=bd3227e34e549257fee819cf6bd50fe202ca7996 diff --git a/fai/config/hooks/partition.DEFAULT b/fai/config/hooks/partition.DEFAULT index 1b80784..e953cf1 100755 --- a/fai/config/hooks/partition.DEFAULT +++ b/fai/config/hooks/partition.DEFAULT @@ -15,6 +15,8 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# todo /boot/chboot needs update for lvm i think? + PS4='+ $LINENO ' set -eE -o pipefail trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR @@ -80,11 +82,16 @@ fi # ROTATIONAL: forces to install onto hdds instead of sdds. normally sdds # are chosen if they exist. # -# PARTITION_PROMPT: command line prompt before partitioning +# PARTITION_PROMPT: command line prompt before partitioning. This is good +# to set if we don't expect repartitioning to happen. +# +# ROTATIONAL: in a system with ssd and hdd, install to the hdd +# instead of the default ssd. # # RAID0: forces raid0 filesystem. Normally with 4+ devices, we use # raid10. # RAID1: forces raid1 filesystem. +# RAID1c3: forces raid1c3 filesystem (btrfs raid 1, 3 copies). mkroot2tab=false mkroot2=false @@ -94,7 +101,7 @@ if [[ $1 ]]; then if ! type -t ifclass &>/dev/null; then ifclass() { local var=${1/#/CLASS_} - [[ $HOSTNAME == $1 || ${!var} ]] + [[ $HOSTNAME == "$1" || ${!var} ]] } fi @@ -143,8 +150,6 @@ if ! type -p devbyid; then fi fi - - #### begin configuration # this is the ordering of the /dev/sdaX, but @@ -152,27 +157,11 @@ fi # bios_grub # grub_ext # efi -# root -# swap -# boot - -rootn=1 -root2n=2 -swapn=3 -bootn=4 -boot2n=5 -efin=6 -# ext partition so grub can write persistent variables, -# 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=7 -# bios boot partition, -# https://wiki.archlinux.org/index.php/GRUB -bios_grubn=8 -# for an even raid (raid 1), when one disk is bigger, this partition goes on the big disk -even_bign=9 -lastn=$bios_grubn +# lvm +# root +# swap +# boot + @@ -180,45 +169,70 @@ lastn=$bios_grubn ##### begin function defs -add-part() { # add partition suffix to $dev - local d part - if [[ $# == 1 ]]; then - d=$dev - part=$1 +bpart() { # btrfs a partition + case $raid_level in + 0) mkfs.btrfs -f $@ ;; + *) mkfs.btrfs -f -m raid$raid_level -d raid$raid_level $@ ;; + esac +} + + +zilap() { + case $HOSTNAME in + sy|bo) + return 0 + ;; + esac + return 1 +} + +getluks() { + if [[ ! $luks_dir ]]; then + # see README for docs about how to create these + luks_dir=$FAI/distro-install-common/luks + if [[ ! -d $luks_dir ]]; then + luks_dir=/q/root/luks + fi + if [[ ! -d $luks_dir ]]; then + echo "$0: error: no luks_dir found" >&2 + exit 1 + fi + fi + + luks_file=$luks_dir/host-$HOSTNAME + if [[ ! -e $luks_file ]]; then + # shellcheck disable=SC2206 # globbing is intended + 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 + + # # 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 - d=$1 - part=$2 + lukspw=$(cat $luks_dir/iank) + fi + + if $mkroot2; then + luks_file=$luks_dir/host-amy + lukspw=$(cat $luks_dir/amy) fi - echo $d-part$part } -rootdev() { add-part $@ $rootn; } -root2dev() { add-part $@ $root2n; } - -# note, the following block could all have $@ like below -# But it is not added since it is not used and shellcheck -# rightly says args never used should not exist. -##swapdev() { add-part $swapn; } - -swapdev() { add-part $swapn; } -bootdev() { add-part $bootn; } -boot2dev() { add-part $boot2n; } -efidev() { add-part $efin; } -grub_extdev() { add-part $grub_extn; } -bios_grubdev() { add-part $bios_grubn; } -even_bigdev() { add-part $even_bign; } - -crypt-dev() { echo /dev/mapper/crypt_dev_${1##*/}; } -crypt-name() { echo crypt_dev_${1##*/}; } -root-cryptdev() { crypt-dev $(rootdev $@); } -root2-cryptdev() { crypt-dev $(root2dev $@); } - -# I omit a possible parameter since it is unused: -##swap-cryptdev() { crypt-dev $(swapdev $@); } -swap-cryptdev() { crypt-dev $(swapdev); } -root-cryptname() { crypt-name $(rootdev); } -root2-cryptname() { crypt-name $(root2dev); } -swap-cryptname() { crypt-name $(swapdev); } + +fsf() { + ifclass FSF +} + dev-mib() { local d=${1:-$dev} @@ -228,6 +242,7 @@ dev-mib() { luks-setup() { local luksdev="$1" + local cryptname="$2" # when we move to newer than trisquel 9, we can remove # --type luks1. We can also check on cryptsetup --help | less /compil # to see about the other settings. Default in debian 9 is luks2. @@ -248,9 +263,121 @@ luks-setup() { # This would remove the keyfile. # yes 'test' | cryptsetup luksRemoveKey /dev/... \ # /key/file || [[ $? == 141 ]] - cryptsetup luksOpen $luksdev $(crypt-name $luksdev) --key-file $luks_file + cryptsetup luksOpen $luksdev $cryptname --key-file $luks_file } +mktab() { + mkdir -p /tmp/fai + dev=${boot_devs[0]} + fstabstd="x-systemd.device-timeout=30s,x-systemd.mount-timeout=30s" + + if [[ $DISTRO == debianbullseye_bootstrap ]]; then + cat > /tmp/fai/fstab </tmp/fai/disk_var.sh < /tmp/fai/fstab <>/tmp/fai/crypttab <> /tmp/fai/fstab <> /tmp/fai/fstab </tmp/fai/disk_var.sh <>/tmp/fai/crypttab <> /tmp/fai/fstab <>/mnt/root/root2-crypttab <>/mnt/root/root2-fstab < 0 )); then read -ra short_devs<<<"${ssds[@]}" else read -ra short_devs<<<"${hdds[@]}" fi +pvn=1 + +# rootn=1 +# root2n=2 +# swapn=3 +# bootn=4 +# boot2n=5 + +efin=2 +# ext partition so grub can write persistent variables, +# 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=3 +# bios boot partition, +# https://wiki.archlinux.org/index.php/GRUB +bios_grubn=4 +# for an even raid (raid 1), when one disk is bigger, this partition goes on the big disk +even_bign=5 +lastn=$even_bign # check if the partitions exist have the right filesystems #blkid="$(blkid -s TYPE)" for dev in ${short_devs[@]}; do @@ -338,57 +495,86 @@ if $partition && ifclass PARTITION_PROMPT; then fi devs=() +vgs=() +root_devs=() +swap_devs=() shopt -s extglob +partsuffix=-part for short_dev in ${short_devs[@]}; do - devs+=("$(devbyid $short_dev)") + dev="$(devbyid $short_dev)" + if [[ $dev != */by-id/* ]]; then + # no by-id link, assume we are in a vm and this is true for all devs. + partsuffix= + fi + # for vms, cant name a vg the same as the short device name, they + # conflict: /dev/$vg is already taken + + dname=${dev##*/} + vg=vg$dname + vgs+=("$vg") + devs+=("$dev") + if fsf; then + root_devs+=(/dev/$vg/root) + swap_devs+=(/dev/$vg/swap) + else + root_devs+=(/dev/mapper/crypt-$vg-root) + swap_devs+=(/dev/mapper/crypt-$vg-swap) + fi done +first_root_dev=${root_devs[0]} if [[ ! ${devs[0]} ]]; then echo "$0: error: failed to detect devs" >&2 exit 1 fi + + +pvsuf=$partsuffix$pvn +efisuf=$partsuffix$efin +grub_extsuf=$partsuffix$grub_extn +bios_grubsuf=$partsuffix$bios_grubn +even_bigsuf=$partsuffix$even_bign + + boot_space=0 first=true boot_devs=() boot2_devs=() for dev in ${devs[@]}; do - if ifclass frodo; then - # I ran into a machine where the bios doesn't know about some disks, - # so 1st stage of grub also doesn't know about them. - # Also, grub does not support mounting degraded btrfs as far as - # I can tell with some googling. - # From within an arch install env, I could detect them by noting - # their partitions were mixed with the next disk in /dev/disk/by-path, - # and I have mixed model disks, and I could see the 8 models which showed - # up in the bios, and thus see which 2 models were missing. - # hdparm -I /dev/sdh will give model info in linux. - # However, in fai on jessie, /dev/disk/by-path dir doesn't exist, - # and I don't see another way, so I'm hardcoding them. - # We still put grub on them and partition them the same, for uniformity - # and in case they get moved to a system that can recognize them, - # we just exclude them from the boot filesystem. - cd /dev/disk/by-id/ - bad_disk=false - for id in ata-TOSHIBA_MD04ACA500_8539K4TQFS9A \ - ata-TOSHIBA_MD04ACA500_Y5IFK6IJFS9A; do - if [[ $(readlink -f $id) == "$(readlink -f $dev)" ]]; then - bad_disk=true - break - fi - done - if ! $bad_disk; then - boot_devs+=("$(bootdev)") - boot2_devs+=("$(boot2dev)") + vg=vg${dev##*/} + # I ran into a machine (frodo) where the bios doesn't know about some disks, + # so 1st stage of grub also doesn't know about them. + # Also, grub does not support mounting degraded btrfs as far as + # I can tell with some googling. + # From within an arch install env, I could detect them by noting + # their partitions were mixed with the next disk in /dev/disk/by-path, + # and I have mixed model disks, and I could see the 8 models which showed + # up in the bios, and thus see which 2 models were missing. + # hdparm -I /dev/sdh will give model info in linux. + # However, in fai on jessie, /dev/disk/by-path dir doesn't exist, + # and I don't see another way, so I'm hardcoding them. + # We still put grub on them and partition them the same, for uniformity + # and in case they get moved to a system that can recognize them, + # we just exclude them from the boot filesystem. + cd /dev/disk/by-id/ + bad_disk=false + for id in ata-TOSHIBA_MD04ACA500_8539K4TQFS9A \ + ata-TOSHIBA_MD04ACA500_Y5IFK6IJFS9A; do + if [[ $(readlink -f $id) == "$(readlink -f $dev)" ]]; then + bad_disk=true + break fi - else - boot_space=$(( boot_space + $(parted -m $dev unit MiB print | \ - sed -nr "s#^/dev/[^:]+:([0-9]+).*#\1#p") - 1)) - boot_devs+=("$(bootdev)") - boot2_devs+=("$(boot2dev)") + done + if $bad_disk; then + continue fi - if $first && (( ${#boot_devs[@]} >= 1 )) ; then - first_efi=$(efidev) - first_grub_extdev=$(grub_extdev) + boot_devs+=(/dev/$vg/boot) + boot2_devs+=(/dev/$vg/boot2) + boot_space=$(( boot_space + $(parted -m $dev unit MiB print | \ + sed -nr "s#^/dev/[^:]+:([0-9]+).*#\1#p") - 1)) + if $first; then + first_efi=$dev$efisuf + first_grub_extdev=$dev$grub_extsuf first=false fi done @@ -397,13 +583,19 @@ first_boot_dev=${boot_devs[0]} even_raid=false if ifclass RAID0 || (( ${#boot_devs[@]} == 1 )); then raid_level=0 -elif ifclass RAID1 || (( ${#boot_devs[@]} <= 3 )); then + raid_duplication=1 +elif ifclass RAID1 || (( ${#boot_devs[@]} == 2 )); then if (( ${#boot_devs[@]} == 2 )); then even_raid=true fi raid_level=1 + raid_duplication=2 +elif ifclass RAID1c3 || (( ${#boot_devs[@]} == 3 )); then + raid_level=1c3 + raid_duplication=3 else raid_level=10 + raid_duplication=2 fi @@ -411,14 +603,17 @@ fi ### Begin calculate boot partition space # due to raid duplication case $raid_level in - 1*) boot_space=$(( boot_space / 2 )) ;; + 1|10) boot_space=$(( boot_space / 2 )) ;; + 1c3) boot_space=$(( boot_space / 3 )) ;; esac -if (( boot_space > 60000 )); then +if fsf; then + boot_mib=4000 +elif (( boot_space > 900000 )); then # 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 - root2_mib=1000000 + root2_mib=500000 boot2_mib=5000 elif (( boot_space > 30000 )); then boot_mib=$(( 5000 + (boot_space - 30000) / 2 )) @@ -433,22 +628,16 @@ else root2_mib=100 boot2_mib=100 fi -case $raid_level in - 1*) - boot_mib=$(( boot_mib * 2 )) - boot2_mib=$(( boot2_mib * 2 )) - root2_mib=$(( root2_mib * 2 )) - ;; -esac -### end calculate boot partition space +boot_part_mib=$(( boot_mib * raid_duplication / ${#boot_devs[@]} )) -bpart() { # btrfs a partition - case $raid_level in - 0) mkfs.btrfs -f $@ ;; - 1) mkfs.btrfs -f -m raid1 -d raid1 $@ ;; - 10) mkfs.btrfs -f -m raid10 -d raid10 $@ ;; - esac -} +if zilap; then + boot2_part_mib=0 + root2_part_mib=0 +else + boot2_part_mib=$(( boot2_mib * raid_duplication / ${#boot_devs[@]} )) + root2_part_mib=$(( root2_mib * raid_duplication / ${#root_devs[@]} )) +fi +### end calculate boot partition space if [[ ! $DISTRO ]]; then @@ -497,164 +686,15 @@ else fi -first_root_crypt=$(root-cryptdev ${devs[0]}) - # 1.5 x based on https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/sect-disk-partitioning-setup-x86.html#sect-custom-partitioning-x86 swap_mib=$(( $(grep ^MemTotal: /proc/meminfo | \ awk '{print $2}') * 3/(${#devs[@]} * 2 ) / 1024 )) -root_devs=() -for dev in ${devs[@]}; do - root_devs+=("$(rootdev)") -done shopt -s nullglob ##### end variable setup -mktab() { - mkdir -p /tmp/fai - dev=${boot_devs[0]} - fstabstd="x-systemd.device-timeout=30s,x-systemd.mount-timeout=30s" - - if [[ $DISTRO == debianbullseye_bootstrap ]]; then - cat > /tmp/fai/fstab </tmp/fai/disk_var.sh < /tmp/fai/fstab <>/tmp/fai/crypttab <> /tmp/fai/fstab </tmp/fai/disk_var.sh <>/tmp/fai/crypttab <> /tmp/fai/fstab <&2 - exit 1 - fi - fi - - luks_file=$luks_dir/host-$HOSTNAME - if [[ ! -e $luks_file ]]; then - # shellcheck disable=SC2206 # globbing is intended - 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 - - # # 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 - lukspw=$(cat $luks_dir/iank) - fi - - if $mkroot2; then - luks_file=$luks_dir/host-amy - lukspw=$(cat $luks_dir/amy) - fi -} - - -#### root2 non-fai run -doroot2() { - - # We write to these files instead of just /etc/fstab, /etc/crypttab, - # because these are filesystems created after our current root, and so - # this allows us to update other root filesystems too. - rm -f /mnt/root/root2-{fs,crypt}tab - if $partition; then - echo $0: error: found partition=true but have mkroot2 arg - exit 1 - fi - for dev in ${devs[@]}; do - if $mkroot2; then - luks-setup $(root2dev) - fi - cat >>/mnt/root/root2-crypttab <>/mnt/root/root2-fstab < 0 )) || exit 1 - done + count_down=10 + # wipefs has failed, manual run works, google suggests timing issue + while ! wipefs -a $dev; do + sleep 2 + count_down=$((count_down - 1)) + (( count_down > 0 )) || exit 1 done done fi @@ -710,6 +758,7 @@ if $partition; then fi for dev in ${devs[@]}; do + vg=vg${dev##*/} if [[ $SPECIAL_DISK ]]; then dev=$(devbyid $SPECIAL_DISK) fi @@ -724,45 +773,47 @@ if $partition; then disk_mib=$(dev-mib) fi - boot_part_mib=$(( boot_mib / ${#boot_devs[@]} )) - boot2_part_mib=$(( boot2_mib / ${#boot_devs[@]} )) - root2_part_mib=$(( root2_mib / ${#root_devs[@]} )) - root_end=$(( disk_mib - root2_part_mib - swap_mib - boot_part_mib - boot2_part_mib )) - root2_end=$(( root_end + root2_part_mib )) - swap_end=$(( root2_end + swap_mib )) - boot_end=$(( swap_end + boot_part_mib )) parted -s $dev mklabel gpt # MiB because parted complains about alignment otherwise. pcmd="parted -a optimal -s -- $dev" - # root partition, the main big one - $pcmd mkpart primary ext3 524MiB ${root_end}MiB - # without naming, systemd gives us misc errors like: - # dev-disk-by\x2dpartlabel-primary.device: Dev dev-disk-by\x2dpartlabel-primary.device appeared twice - $pcmd name $rootn root - # root2 partition - $pcmd mkpart primary ext3 ${root_end}MiB ${root2_end}MiB - $pcmd name $root2n root2 - # normally a swap is type "linux-swap", but this is encrypted swap. using that - # label will confuse systemd. - # swap partition - $pcmd mkpart primary "" ${root2_end}MiB ${swap_end}MiB - $pcmd name $swapn swap - # boot partition - $pcmd mkpart primary "" ${swap_end}MiB ${boot_end}MiB - $pcmd name $bootn boot - # boot2 partition - $pcmd mkpart primary "" ${boot_end}MiB ${disk_mib}MiB - $pcmd name $boot2n boot2 - # uefi partition. efi sucks, half a gig, rediculous. + # main lvm partition + $pcmd mkpart primary ext3 524MiB ${disk_mib}MiB + $pcmd name $pvn pv + + pvcreate -y $dev$pvsuf + vgcreate -y $vg $dev$pvsuf + + if fsf; then + root_mib=40000 + else + # 600 = uefi 512 + grubext 8 + bios grub 3 + some extra cuz this is lvm + root_mib=$(( disk_mib - root2_part_mib - swap_mib - boot_part_mib - boot2_part_mib - 600 )) + fi + + # -L unit default mebibyte + lvcreate -y -L $root_mib $vg -n root + lvcreate -y -L $swap_mib $vg -n swap + # unencrypted swap needs mkswap + if fsf; then + mkswap /dev/$vg/swap + fi + lvcreate -y -L $boot_part_mib $vg -n boot + + if zilap; then + # todo: now that we are using lvm, this doesnt need to be done until mkroot2 + lvcreate -y -L $root2_part_mib $vg -n root2 + lvcreate -y -L $boot2_part_mib $vg -n boot2 + fi + + # uefi partition, for normal bios systems, its just in case. $pcmd mkpart primary "fat32" 12MiB 524MiB $pcmd name $efin efi - $pcmd set $efin esp on # note, this is shown here: https://support.system76.com/articles/bootloader/ # but not mentioned https://wiki.archlinux.org/index.php/EFI_system_partition - # probably not needed - $pcmd set $bootn boot on - $pcmd set $boot2n boot on + # might not be needed + $pcmd set $efin esp on + # i only need a few k, but googling min size, # I found someone saying that gparted required # required at least 8 because of their hard drive cylinder size. @@ -793,17 +844,17 @@ if $partition; then # but then couldn't be found upon reboot. In that case we didn't # wait at all. So I've added a 3 second minimum wait. secs=0 - while [[ ! -e $(bios_grubdev) ]] && (( secs < 10 )); do + while [[ ! -e $dev$bios_grubsuf ]] && (( secs < 10 )); do sleep 1 secs=$((secs +1)) done sleep 3 - mkfs.fat -F32 $(efidev) + mkfs.fat -F32 $dev$efisuf - if $even_big_part && [[ $dev == "$even_big_dev" ]]; then - luks-setup $(even_bigdev) - mkfs.btrfs -f $(crypt-dev $(even_bigdev)) + if ! fsf && $even_big_part && [[ $dev == "$even_big_dev" ]]; then + luks-setup $even_big_dev ${even_big_dev##*/} + mkfs.btrfs -f /dev/mapper/${even_big_dev##*/} fi # Holds just a single file, rarely written, so @@ -814,8 +865,13 @@ if $partition; then # to grubenv after booting, but that relies on the boot always succeeding. # This is just a bit more robust, and it could work for booting # into ipxe which can't persist data, if we ever got that working. - mkfs.ext2 $(grub_extdev) - luks-setup $(rootdev) + mkfs.ext2 $dev$grub_extsuf + + # for fsf, no encryption of root because root will not contain any + # sensitive data. + if ! fsf; then + luks-setup /dev/$vg/root crypt-$vg-root + fi if [[ $SPECIAL_DISK ]]; then exit 0 @@ -823,26 +879,29 @@ if $partition; then done ls -la /dev/btrfs-control # this was probably for debugging... sleep 1 - bpart $(for dev in ${devs[@]}; do root-cryptdev; done) + + bpart ${root_devs[@]} bpart ${boot_devs[@]} -else - for dev in ${devs[@]}; do - if [[ -e /dev/mapper/$(root-cryptname) ]]; then - continue - fi - if $rerootfs; then - luks-setup $(rootdev) - sleep 1 - bpart $(for dev in ${devs[@]}; do root-cryptdev; done) - else - cryptsetup luksOpen $(rootdev) $(root-cryptname) \ - --key-file $luks_file - fi - done + +else ## above: if $partition ## + + if ! fsf; then + for vg in ${vgs[@]}; do + if [[ -e /dev/mapper/crypt-$vg-root ]]; then + continue + fi + if $rerootfs; then + luks-setup /dev/$vg/root crypt-$vg-root + else + cryptsetup luksOpen /dev/$vg/root $vg-root \ + --key-file $luks_file + fi + done + fi if $rerootfs; then sleep 1 - bpart $(for dev in ${devs[@]}; do root-cryptdev; done) + bpart ${root_devs[@]} fi sleep 1 fi @@ -850,7 +909,7 @@ fi if $wipe && [[ $DISTRO != debianbullseye_bootstrap ]]; then # bootstrap distro doesn't use separate encrypted root. - mount -o subvolid=0 $first_root_crypt /mnt + mount -o subvolid=0 ${root_devs[0]} /mnt # systemd creates subvolumes we want to delete. mapfile -t s < <(btrfs subvolume list --sort=-path /mnt | sed -rn "s#^.*path\s*(root_$DISTRO/\S+)\s*\$#\1#p") @@ -886,6 +945,7 @@ btrfs subvolume set-default 0 /mnt # already default, just ensuring it. # for libreboot systems. grub2 only reads from subvolid=0 mkdir -p /mnt/grub2 +# todo: this probably needs updating for our lvm transition cp $FAI/distro-install-common/libreboot_grub.cfg /mnt/grub2 if $wipe && [[ -e /mnt/$boot_vol ]]; then