From 1e93f2b6c5408c9c3954b2f71cbdc8d00030c593 Mon Sep 17 00:00:00 2001 From: natemaia Date: Sat, 19 Jan 2019 16:04:57 -0800 Subject: [PATCH] Update filesystem selection to use looping instead of recursion --- lang/english.trans | 8 +- src/archlabs-installer | 307 +++++++++++++++++++++++------------------ 2 files changed, 173 insertions(+), 142 deletions(-) diff --git a/lang/english.trans b/lang/english.trans index ed2adc5..7d2fbe1 100644 --- a/lang/english.trans +++ b/lang/english.trans @@ -139,14 +139,14 @@ _InstSysBody="\nInstall syslinux to the master boot record (MBR) or to root (/)? # File System _FSTitle="Choose Filesystem" _SelRootBody="\nSelect the system root (/) partition.\n\nThis is where $DIST will be installed." -_SelBiosBody="\nDo you want to use a separate boot partition? (required for LUKS)\n\nThis partition is where the bootloader will be installed.\n" +_SelBiosBody="\nSelect the boot partition, this is only required for LUKS." _SelSwpNone="None" _SelSwpFile="Swapfile" _SelSwpSetup="Swap Setup" _SelSwpBody="\nSelect whether to use a swap partition, swapfile, or none." _SelSwpErr="Swap Setup Error: Must be 1(M|G) or greater, and can only contain whole numbers\n\nSize Entered:" -_SelSwpSize="\n\n\nEnter the size of the swapfile in megabytes (M) or gigabytes (G).\n\neg. 100M will create a 100 megabyte swapfile, while 10G will create a 10 gigabyte swapfile.\n\nFor ease of use and as an example the size has been filled in to the size of your system memory (RAM).\n\nMust be greater than 1, end in either M or G, and contain only whole numbers." +_SelSwpSize="\nEnter the size of the swapfile in megabytes (M) or gigabytes (G).\n\neg. 100M will create a 100 megabyte swapfile, while 10G will create a 10 gigabyte swapfile.\n\nFor ease of use and as an example it is filled in to match the size of your system memory (RAM).\n\nMust be greater than 1, contain only whole numbers, and end with either M or G." _SelUefiBody="\nSelect the system EFI boot partition.\n\nThis is a required partition for booting UEFI systems. It's usually the first partition on the drive, less than 512M, and will be formatted as vfat/fat32 if not already." _FormUefiBody="\nIMPORTANT: The EFI partition" @@ -181,12 +181,12 @@ _LvmPvSelBody="Select the partition(s) to use for the physical volume (PV)." _LvmPvConfBody1="\nConfirm creation of volume group:" _LvmPvConfBody2="With the following partition(s):" _LvmPvActBody1="\nCreating and activating volume group:" -_LvmPvDoneBody1="\nVolume group:" +_LvmPvDoneBody1="Volume group:" _LvmPvDoneBody2="has been created" _LvmLvNumBody1="\nUse [Spacebar] to select the number of logical volumes (LVs) to create in:" _LvmLvNumBody2="\nThe last (or only) logical volume will automatically use all remaining space in the volume group." _LvmLvNameBody1="Enter the name of the logical volume (LV) to create.\n\nThis is like setting a name or label for a partition.\n" -_LvmLvNameBody2="\nNOTE: This logical volume will use up all remaining space in the volume group" +_LvmLvNameBody2="\nNOTE: This LV will use up all remaining space in the volume group" _LvmLvSizeBody1="remaining" _LvmLvSizeBody2="\n\nEnter the size of the logical volume (LV) in megabytes (M) or gigabytes (G). For example, 100M will create a 100 megabyte LV. 10G will create a 10 gigabyte LV.\n" _LvmCompBody="\nDone! all logical volumes have been created for the volume group.\n\nDo you want to view the device tree for the new LVM scheme?\n" diff --git a/src/archlabs-installer b/src/archlabs-installer index 3e5be0c..12008dd 100755 --- a/src/archlabs-installer +++ b/src/archlabs-installer @@ -8,7 +8,7 @@ # Some ideas and code reworked from other resources # AIF, Cnichi, Calamares, Arch Wiki.. Credit where credit is due -VER="1.8.42" # version +VER="1.8.44" # version DIST="ArchLabs" # distributor MNT="/mnt" # install mountpoint @@ -20,8 +20,8 @@ ROOT_PART="" # root partition BOOT_PART="" # boot partition BOOT_DEVICE="" # device used for BIOS grub install BOOTLDR="" # bootloader selected -EXTRA_MNT="" # holder for additional partitions while mounting -EXTRA_MNTS="" # when an extra partition is mounted append it's info +EXMNT="" # holder for additional partitions while mounting +EXMNTS="" # when an extra partition is mounted append it's info SWAP_PART="" # swap partition or file path SWAP_SIZE="" # when using a swapfile use this size NEWUSER="" # username for the primary user @@ -30,7 +30,7 @@ ROOT_PASS="" # root password LOGIN_WM="" # default login session LOGIN_TYPE="" # login manager can be lightdm or xinit INSTALL_WMS="" # space separated list of chosen wm/de -KERNEL="linux" # kernel can be linux or linux-lts +KERNEL="linux" # can be linux, linux-lts, linux-zen, or linux-hardened MYSHELL="" # login shell for root and the primary user PACKAGES="" # list of all packages to install including WM_PACKAGES USER_PKGS="" # packages selected by the user during install @@ -57,7 +57,7 @@ CONFIG_DONE=false # basic configuration is finished BROADCOM_WL=false # fixes for broadcom cards eg. BCM4352 CHECKED_NET=false # have we checked the network connection already -AUTO_ROOT_PART="" # values from auto partition +AUTO_ROOT_PART="" # values from auto partition AUTO_BOOT_PART="" # sane baseline @@ -67,7 +67,7 @@ BASE_PKGS+="playerctl ffmpeg gstreamer libmad libmatroska gst-libav gst-plugins- # sane extras for window managers WM_BASE_PKGS="arandr archlabs-networkmanager-dmenu xdg-user-dirs nitrogen polkit-gnome volumeicon xclip exo " -WM_BASE_PKGS+="xdotool compton gnome-keyring dunst feh gsimplecal xfce4-power-manager xfce4-settings laptop-detect" +WM_BASE_PKGS+="xdotool compton wmctrl gnome-keyring dunst feh gsimplecal xfce4-power-manager xfce4-settings laptop-detect" SEL=0 # currently selected menu item ERR="/tmp/errlog" # error log used internally @@ -109,7 +109,7 @@ CMAPS="$(find /usr/share/kbd/keymaps -name '*.map.gz' | awk '{ # command used to install each bootloader declare -A BCMDS=( [grub]="grub-install --recheck --force" -[syslinux]="syslinux-install_update -iam" +[syslinux]="syslinux-install_update -i -a -m" [systemd-boot]="bootctl --path=/boot install" ) @@ -273,54 +273,56 @@ show_cfg() ---------- PARTITION CONFIGURATION ------------ - Root: ${ROOT_PART:-None} - Boot: ${BOOT_PART:-${BOOT_DEVICE:-None}} + Root: ${ROOT_PART:-none} + Boot: ${BOOT_PART:-${BOOT_DEVICE:-none}} - Swap: ${SWAP_PART:-None} - Size: ${SWAP_SIZE:-None} + Swap: ${SWAP_PART:-none} + Size: ${SWAP_SIZE:-none} - LVM: ${LVM:-None} - LUKS: ${LUKS:-None} + LVM: ${LVM:-none} + LUKS: ${LUKS:-none} - Extra Mounts: ${EXTRA_MNTS:-${EXTRA_MNT:-None}} - Mkinit Hooks: ${HOOKS:-None} + Extra Mounts: ${EXMNTS:-${EXMNT:-none}} + Mkinit Hooks: ${HOOKS:-none} ---------- BOOTLOADER CONFIGURATION ----------- - Bootloader: ${BOOTLDR:-None} - Mountpoint: ${mnt:-None} - Command: ${cmd:-None} + Bootloader: ${BOOTLDR:-none} + Mountpoint: ${mnt:-none} + Command: ${cmd:-none} ------------ SYSTEM CONFIGURATION ------------- - Locale: ${LOCALE:-None} - Keymap: ${KEYMAP:-None} - Hostname: ${HOSTNAME:-None} - Timezone: ${ZONE:-None}/${SUBZONE:-None} + Locale: ${LOCALE:-none} + Keymap: ${KEYMAP:-none} + Hostname: ${HOSTNAME:-none} + Timezone: ${ZONE:-none}/${SUBZONE:-none} ------------ USER CONFIGURATION -------------- - User: ${NEWUSER:-None} - Shell: ${MYSHELL:-None} - Session: ${LOGIN_WM:-None} - Autologin: ${AUTOLOGIN:-None} - Login Method: ${LOGIN_TYPE:-None} + User: ${NEWUSER:-none} + Shell: ${MYSHELL:-none} + Session: ${LOGIN_WM:-none} + Autologin: ${AUTOLOGIN:-none} + Login Method: ${LOGIN_TYPE:-none} ------------ PACKAGES AND MIRRORS ------------- - Kernel: ${KERNEL:-None} - Sessions: ${INSTALL_WMS:-None} - Mirrors: ${MIRROR_CMD:-None} - Packages: $(print4 "${pkgs:-None}") + Kernel: ${KERNEL:-none} + Sessions: ${INSTALL_WMS:-none} + Mirrors: ${MIRROR_CMD:-none} + Packages: $(print4 "${pkgs:-none}") " } cfg_menu() { + local err=0 + tput civis if ! MYSHELL="$(menubox "$_ShellTitle" "$_ShellBody" '/usr/bin/zsh' '-' '/bin/bash' '-' '/usr/bin/mksh' '-')"; then return 1 @@ -335,9 +337,13 @@ cfg_menu() return 1 fi select_timezone || return 1 - if ! KERNEL="$(menubox "$_KernelTitle" "$_KernelBody" 'linux' '-' 'linux-lts' '-')"; then - return 1 - fi + KERNEL="$(menubox "$_KernelTitle" "$_KernelBody" \ + 'linux' 'Vanilla Linux kernel and modules, with a few patches applied.' \ + 'linux-lts' 'Long-term support (LTS) Linux kernel and modules.' \ + 'linux-zen' 'A collaborative effort of kernel hackers to provide the best Linux kernel for everyday systems' \ + 'linux-hardened' 'A security-focused Linux kernel with hardening patches to mitigate kernel and userspace exploits')" + err=$? + (( err == 0 )) || return 1 select_mirrorcmd || return 1 CONFIG_DONE=true return 0 @@ -887,9 +893,9 @@ partition_menu() local root_size msg ret table boot_fs root_size=$(lsblk -lno SIZE "$device" | awk 'NR == 1 { if ($1 ~ "G") { - sub(/G/, ""); print ($1 * 1000 - 512) / 1000"G" + sub(/G/, ""); print ($1 * 1000 - 512) / 1000 "G" } else { - sub(/M/, ""); print ($1 - 512)"M" + sub(/M/, ""); print ($1 - 512) "M" } }') @@ -899,7 +905,7 @@ partition_menu() msg="$_PartBody2"; table="gpt"; boot_fs="fat32" fi - if yesno "$_PrepParts" "$_PartBody1 $device $msg ($size)$_PartBody3"; then + if yesno "$_PrepParts" "$_PartBody1 $device $msg ($root_size)$_PartBody3"; then auto_partition "$device" "$table" "$boot_fs" "$root_size" || return 1 else partition_menu "$device" @@ -916,15 +922,6 @@ format_as() errshow "${FS_CMDS[$2]} $1" } -decr_count() -{ - # remove a partition from the dialog list and decrement the number partitions left - local p="$1" - PARTS="$(sed "s~${p} [0-9]*[G-M]~~; s~${p} [0-9]*\.[0-9]*[G-M]~~" <<< "$PARTS")" - (( COUNT > 0 )) && (( COUNT-- )) - return 0 -} - enable_swap() { if [[ $1 == "$MNT/swapfile" && $SWAP_SIZE ]]; then @@ -983,12 +980,12 @@ confirm_mount() [[ $mount == "$MNT" ]] && local m="/ (root)" || local m="${mount#$MNT}" if [[ $(mount) == *"$mount"* ]]; then infobox "$_MntTitle" "$_MntSucc\nPartition: $part\nMountpoint: $m\n" 1 - decr_count "$part" + PARTS="$(sed "s~${part} [0-9]*[G-M]~~; s~${part} [0-9]*\.[0-9]*[G-M]~~" <<< "$PARTS")" + (( COUNT > 0 )) && (( COUNT-- )) else infobox "$_MntTitle" "$_MntFail\n$msg\n" 1 return 1 fi - return 0 } @@ -1203,7 +1200,8 @@ select_swap() SWAP_PART="/swapfile" else enable_swap "$SWAP_PART" - decr_count "$SWAP_PART" + PARTS="$(sed "s~${SWAP_PART} [0-9]*[G-M]~~; s~${SWAP_PART} [0-9]*\.[0-9]*[G-M]~~" <<< "$PARTS")" + (( COUNT > 0 )) && (( COUNT-- )) SWAP_SIZE="$(lsblk -lno SIZE $SWAP_PART)" fi return 0 @@ -1211,72 +1209,92 @@ select_swap() select_mountpoint() { + local err=0 tput cnorm - EXTRA_MNT="$(getinput "$_PrepMount $part" "$_ExtPartBody1" "/" nolimit)" || return 1 - if [[ ${EXTRA_MNT:0:1} != "/" || ${#EXTRA_MNT} -le 1 || $EXTRA_MNT =~ \ |\' || $EXTRA_MNTS == *"$EXTRA_MNT"* ]]; then - msgbox "$_ErrTitle" "$_ExtErrBody" - select_mountpoint || return 1 - fi - return 0 + while true; do + EXMNT="$(getinput "$_PrepMount $part" "$_ExtPartBody1" "/" nolimit)" + err=$? + (( err == 0 )) || break + if [[ ${EXMNT:0:1} != "/" || ${#EXMNT} -le 1 || $EXMNT =~ \ |\' || $EXMNTS == *"$EXMNT"* ]]; then + msgbox "$_ErrTitle" "$_ExtErrBody" + else + break + fi + done + return $err } select_mount_opts() { - local part="$1" - local fs="$2" + local part="$1" fs="$2" err=0 local title="${fs^} Mount Options" local opts="${FS_OPTS[$fs]}" - tput civis - is_ssd "$part" >/dev/null 2>&1 && opts=$(sed 's/discard - off/discard - on/' <<< "$opts") - MNT_OPTS="$(dialog --cr-wrap --stdout --backtitle "$BT" --title " $title " --checklist "$_MntBody" 0 0 0 $opts)" - [[ $MNT_OPTS ]] && MNT_OPTS="$(sed 's/ /,/g; $s/,$//' <<< "$MNT_OPTS" )" || return 1 - yesno "$title" "$_MntConfBody $MNT_OPTS\n" || { select_mount_opts "$part" "$fs" || return 1; } + if is_ssd "$part" >/dev/null 2>&1; then + opts=$(sed 's/discard - off/discard - on/' <<< "$opts") + fi - return 0 + tput civis + while true; do + MNT_OPTS="$(dialog --cr-wrap --stdout --backtitle "$BT" \ + --title " $title " --checklist "$_MntBody" 0 0 0 $opts)" + if [[ $MNT_OPTS ]]; then + MNT_OPTS="$(sed 's/ /,/g; $s/,$//' <<< "$MNT_OPTS" )" + yesno "$title" "$_MntConfBody $MNT_OPTS\n" && break + else + err=1; break + fi + done + + return $err } select_filesystem() { - local part="$1" - local fs cur_fs + local part="$1" fs="" cur_fs="" err=0 cur_fs="$(lsblk -lno FSTYPE "$part" 2>/dev/null)" - local msg="\nSelect which filesystem to use for: $part\n\nCurrent: ${cur_fs:-None}\nDefault: ext4" + local msg="\nSelect which filesystem to use for: $part\n\nCurrent: ${cur_fs:-none}\nDefault: ext4" + [[ $part == $ROOT_PART && $ROOT_PART == $AUTO_ROOT_PART && $LUKS == "" && $LVM == "" ]] && return 0 - tput civis - if [[ $cur_fs && $part != "$ROOT_PART" ]]; then - fs="$(menubox "$_FSTitle: $part" "$msg" \ - "$_Skip" "-" \ - "ext4" "${FS_CMDS[ext4]}" \ - "ext3" "${FS_CMDS[ext3]}" \ - "ext2" "${FS_CMDS[ext2]}" \ - "vfat" "${FS_CMDS[vfat]}" \ - "ntfs" "${FS_CMDS[ntfs]}" \ - "f2fs" "${FS_CMDS[f2fs]}" \ - "jfs" "${FS_CMDS[jfs]}" \ - "xfs" "${FS_CMDS[xfs]}"\ - "nilfs2" "${FS_CMDS[nilfs2]}" \ - "reiserfs" "${FS_CMDS[reiserfs]}")" - [[ $fs == "$_Skip" ]] && return 0 - else - fs="$(menubox "$_FSTitle: $part" "$msg" \ - "ext4" "${FS_CMDS[ext4]}" \ - "ext3" "${FS_CMDS[ext3]}" \ - "ext2" "${FS_CMDS[ext2]}" \ - "ntfs" "${FS_CMDS[ntfs]}" \ - "f2fs" "${FS_CMDS[f2fs]}" \ - "jfs" "${FS_CMDS[jfs]}" \ - "xfs" "${FS_CMDS[xfs]}" \ - "nilfs2" "${FS_CMDS[nilfs2]}" \ - "reiserfs" "${FS_CMDS[reiserfs]}")" - fi - [[ $fs ]] || return 1 - if yesno "$_FSTitle" "\nFormat $part as $fs?\n"; then - format_as "$part" "$fs" || return 1 - else - select_filesystem "$part" || return 1 - fi - return 0 + + while true; do + tput civis + if [[ $cur_fs && $part != "$ROOT_PART" ]]; then + fs="$(menubox "$_FSTitle: $part" "$msg" \ + "$_Skip" "-" \ + "ext4" "${FS_CMDS[ext4]}" \ + "ext3" "${FS_CMDS[ext3]}" \ + "ext2" "${FS_CMDS[ext2]}" \ + "vfat" "${FS_CMDS[vfat]}" \ + "ntfs" "${FS_CMDS[ntfs]}" \ + "f2fs" "${FS_CMDS[f2fs]}" \ + "jfs" "${FS_CMDS[jfs]}" \ + "xfs" "${FS_CMDS[xfs]}"\ + "nilfs2" "${FS_CMDS[nilfs2]}" \ + "reiserfs" "${FS_CMDS[reiserfs]}")" + + [[ $fs == "$_Skip" ]] && break + else + fs="$(menubox "$_FSTitle: $part" "$msg" \ + "ext4" "${FS_CMDS[ext4]}" \ + "ext3" "${FS_CMDS[ext3]}" \ + "ext2" "${FS_CMDS[ext2]}" \ + "ntfs" "${FS_CMDS[ntfs]}" \ + "f2fs" "${FS_CMDS[f2fs]}" \ + "jfs" "${FS_CMDS[jfs]}" \ + "xfs" "${FS_CMDS[xfs]}" \ + "nilfs2" "${FS_CMDS[nilfs2]}" \ + "reiserfs" "${FS_CMDS[reiserfs]}")" + + fi + + [[ $fs ]] || { err=1; break; } + + yesno "$_FSTitle" "\nFormat $part as $fs?\n" && break + done + + (( err == 0 )) || return $err + [[ $fs == "$_Skip" ]] || format_as "$part" "$fs" } select_efi_partition() @@ -1311,7 +1329,7 @@ select_efi_partition() select_boot_partition() { tput civis - if [[ $AUTO_BOOT_PART == "$BOOT_PART" ]]; then + if [[ $AUTO_BOOT_PART && $AUTO_BOOT_PART == "$BOOT_PART" ]]; then BOOT_PART="$AUTO_BOOT_PART" return 0 # were done here else @@ -1353,13 +1371,13 @@ select_extra_partitions() while (( COUNT > 0 )); do tput civis - part="$(menubox "$_PrepMount " "$_ExtPartBody" "$_Done" "Return to the last menu" $PARTS)" + part="$(menubox "$_PrepMount " "$_ExtPartBody" "$_Done" "Return to the main menu" $PARTS)" if [[ $part == "$_Done" || $part == "" ]]; then break - elif select_filesystem "$part" && select_mountpoint && mount_partition "$part" "$EXTRA_MNT"; then - EXTRA_MNTS="$EXTRA_MNTS $part: $EXTRA_MNT" - [[ $EXTRA_MNT == '/usr' && $HOOKS != *usr* ]] && HOOKS="usr $HOOKS" + elif select_filesystem "$part" && select_mountpoint && mount_partition "$part" "$EXMNT"; then + EXMNTS="$EXMNTS $part: $EXMNT" + [[ $EXMNT == '/usr' && $HOOKS != *usr* ]] && HOOKS="usr $HOOKS" else break; return 1 fi @@ -1427,7 +1445,7 @@ EOF if [[ -e /run/archiso/sfs/airootfs ]]; then printf "Copying vmlinuz and ucode to /boot\n" - [[ $KERNEL != 'linux-lts' ]] && cp -vf $RUN/x86_64/vmlinuz $MNT/boot/vmlinuz-linux + [[ $KERNEL == 'linux' ]] && cp -vf $RUN/x86_64/vmlinuz $MNT/boot/vmlinuz-linux [[ $UCODE && ! $VM ]] && cp -vf $RUN/${UCODE/-/_}.img $MNT/boot/${UCODE}.img fi @@ -1530,7 +1548,7 @@ setup_xinit() if [[ -e $MNT/home/$NEWUSER/.xinitrc ]] && grep -q 'exec' $MNT/home/$NEWUSER/.xinitrc; then sed -i "/exec/ c exec ${LOGIN_WM}" $MNT/home/$NEWUSER/.xinitrc else - printf "exec %s\n" "$LOGIN_WM" > $MNT/home/$NEWUSER/.xinitrc + printf "exec %s\n" "$LOGIN_WM" >> $MNT/home/$NEWUSER/.xinitrc fi # automatic startx for login shells @@ -1567,10 +1585,7 @@ EOF loginrc=".zprofile" esac - if ! [[ ${EDIT_FILES[login]} =~ $loginrc ]]; then - # add the shell login file to the edit list after install - EDIT_FILES[login]+=" /home/$NEWUSER/$loginrc" - fi + [[ ${EDIT_FILES[login]} == *"$loginrc"* ]] || EDIT_FILES[login]+=" /home/$NEWUSER/$loginrc" if [[ $AUTOLOGIN == true ]]; then sed -i "s/root/${NEWUSER}/g" $SERVICE/autologin.conf @@ -1666,7 +1681,19 @@ package_operations() [[ $MYSHELL == *mksh* ]] && inpkg+=" mksh" [[ $BOOTLDR == 'grub' ]] && inpkg+=" grub" - [[ $KERNEL == 'linux-lts' ]] && { inpkg+=" linux-lts"; rmpkg+=" linux"; } + + if [[ $KERNEL == 'linux-lts' ]]; then + inpkg+=" linux-lts"; rmpkg+=" linux" + elif [[ $KERNEL == 'linux-zen' ]]; then + inpkg+=" linux-zen"; rmpkg+=" linux" + elif [[ $KERNEL == 'linux-hardened' ]]; then + inpkg+=" linux-hardened"; rmpkg+=" linux" + fi + + if [[ $MYSHELL == '/usr/bin/zsh' ]]; then + inpkg+=" zsh-completions zsh-history-substring-search" + fi + [[ $INSTALL_WMS =~ (openbox|bspwm|i3-gaps|dwm) ]] && inpkg+=" $WM_BASE_PKGS" [[ $INSTALL_WMS =~ ^(plasma|gnome|cinnamon)$ ]] || inpkg+=" archlabs-ksuperkey" @@ -1726,13 +1753,13 @@ setup_grub() EDIT_FILES[bootloader]="/etc/default/grub" if [[ $SYS == 'BIOS' ]]; then [[ $BOOT_DEVICE ]] || { select_device 'boot' || return 1; } - BCMDS[grub]="${BCMDS[grub]} --target=i386-pc $BOOT_DEVICE" + BCMDS[grub]="grub-install --recheck --force --target=i386-pc $BOOT_DEVICE" else if [[ $ROOT_PART == */dev/mapper/* && ! $LVM && ! $LUKS_PASS ]]; then luks_pass "$_LuksOpen" 1 || return 1 fi BCMDS[grub]="mount -t efivarfs efivarfs $efidir/efivars || true && - ${BCMDS[grub]} --bootloader-id=$DIST" + grub-install --recheck --force --bootloader-id=$DIST" grep -q $efidir/efivars <<< "$(mount)" || mount -t efivarfs efivarfs $efidir/efivars fi @@ -1787,7 +1814,7 @@ prerun_grub() prerun_systemd-boot() { # no LVM then systemd-boot uses PARTUUID - [[ $ROOT_PART =~ /dev/mapper ]] || ROOT_PART_ID="PART$ROOT_PART_ID" + [[ $ROOT_PART == */dev/mapper* ]] || ROOT_PART_ID="PART$ROOT_PART_ID" # create the boot entry configs mkdir -p ${MNT}${BMNTS[$SYS-systemd-boot]}/loader/entries @@ -1830,8 +1857,7 @@ prerun_syslinux() { mkdir -pv $MNT${BMNTS[$SYS-syslinux]}/syslinux cp -rfv /usr/lib/syslinux/bios/* $MNT${BMNTS[$SYS-syslinux]}/syslinux/ - - cat > $cfgdir/syslinux.cfg << EOF + cat > $MNT${BMNTS[$SYS-syslinux]}/syslinux/syslinux.cfg << EOF UI menu.c32 PROMPT 0 @@ -1850,16 +1876,27 @@ MENU LABEL $DIST Linux Fallback LINUX ../vmlinuz-$KERNEL APPEND root=$ROOT_PART_ID $([[ $LUKS_DEV ]] && printf "%s " "$LUKS_DEV")rw INITRD ../initramfs-$KERNEL-fallback.img$([[ $UCODE ]] && printf "\nINITRD %s" "../${UCODE}.img") + +#LABEL grub2 +#MENU LABEL Grub2 +#COM32 chain.c32 +#APPEND file=../grub/boot.img + +#LABEL windows +#MENU LABEL Windows +#COM32 chain.c32 +#APPEND hd0 3 + EOF return 0 } install_bootloader() { - if ! [[ $ROOT_PART =~ /dev/mapper ]]; then - ROOT_PART_ID="UUID=$(blkid -s PARTUUID -o value $ROOT_PART)" - else + if [[ $ROOT_PART == */dev/mapper* ]]; then ROOT_PART_ID="$ROOT_PART" + else + ROOT_PART_ID="UUID=$(blkid -s UUID -o value $ROOT_PART)" fi if [[ $SYS == 'UEFI' ]]; then @@ -1909,20 +1946,19 @@ lvm_menu() local choice choice="$(dialog --cr-wrap --stdout --backtitle "$BT" \ - --title " $_PrepLVM " --menu "$_LvmMenu" 0 0 6 \ + --title " $_PrepLVM " --menu "$_LvmMenu" 0 0 0 \ "$_LvmCreateVG" "vgcreate -f, lvcreate -L -n" \ "$_LvmDelVG" "vgremove -f" \ "$_LvMDelAll" "lvrmeove, vgremove, pvremove -f" \ "$_Back" "Return to the main menu")" case $choice in - "$_LvmCreateVG") lvm_create && return 0 ;; + "$_LvmCreateVG") lvm_create || return 1 ;; "$_LvmDelVG") lvm_del_vg ;; "$_LvMDelAll") lvm_del_all ;; - *) return 0 esac - lvm_menu + return 0 } lvm_detect() @@ -2002,7 +2038,7 @@ lvm_volume_name() tput cnorm local name - if ! name="$(getinput "$_LvmCreateVG (LV:$VOL_COUNT)" "$msg" "$default" nolimit)"; then + if ! name="$(getinput "$_LvmCreateVG (LV:$VOL_COUNT)" "\n$msg" "$default" nolimit)"; then return 1 fi @@ -2039,7 +2075,7 @@ lvm_extra_lvs() get_lv_size || { break; return 1; } lvcreate -L "$VOLUME_SIZE" "$VOLUME_GROUP" -n "$VOLUME_NAME" >/dev/null 2>$ERR errshow "lvcreate -L $VOLUME_SIZE $VOLUME_GROUP -n $VOLUME_NAME" - msgbox "$_LvmCreateVG (LV:$VOL_COUNT)" "$_Done LV $VOLUME_NAME ($VOLUME_SIZE) $_LvmPvDoneBody2." + msgbox "$_LvmCreateVG (LV:$VOL_COUNT)" "\n$_Done Logical Volume (LV) $VOLUME_NAME ($VOLUME_SIZE) $_LvmPvDoneBody2.\n" (( VOL_COUNT-- )) done @@ -2103,9 +2139,7 @@ lvm_mkgroup() lvm_create() { - VOLUME_GROUP="" - LVM_PARTS=() - VGROUP_MB=0 + VOLUME_GROUP=""; LVM_PARTS=(); VGROUP_MB=0 umount_dir $MNT lvm_partitions || return 1 lvm_mkgroup || return 1 @@ -2114,10 +2148,8 @@ lvm_create() lvm_volume_name "$_LvmLvNameBody1 $_LvmLvNameBody2 (${VGROUP_MB}MB)" || return 1 lvcreate -l +100%FREE "$VOLUME_GROUP" -n "$VOLUME_NAME" >/dev/null 2>$ERR errshow "lvcreate -l +100%FREE $VOLUME_GROUP -n $VOLUME_NAME" - LVM='logical volume' - tput civis - sleep 0.5 - local msg="${_Done}$_LvmPvDoneBody1 $VOLUME_GROUP-$VOLUME_NAME (${VOLUME_SIZE:-${VGROUP_MB}MB}) $_LvmPvDoneBody2." + LVM='logical volume'; tput civis; sleep 0.5 + local msg="\n$_Done $_LvmPvDoneBody1 $VOLUME_GROUP-$VOLUME_NAME (${VOLUME_SIZE:-${VGROUP_MB}MB}) $_LvmPvDoneBody2.\n" msgbox "$_LvmCreateVG (LV:$VOL_COUNT)" "$msg\n$(lsblk -o NAME,MODEL,TYPE,FSTYPE,SIZE "${LVM_PARTS[@]}")\n" } @@ -2165,13 +2197,12 @@ luks_menu() "$_Back" "Return to the main menu")" case $choice in - "$_LuksEncrypt") luks_default && return 0 ;; - "$_LuksOpen") luks_open && return 0 ;; - "$_LuksEncryptAdv") luks_keycmd && return 0 ;; - *) return 0 + "$_LuksEncrypt") luks_default || return 1 ;; + "$_LuksOpen") luks_open || return 1 ;; + "$_LuksEncryptAdv") luks_keycmd || return 1 ;; esac - luks_menu + return 0 } luks_open()