From a3c3ec6730e985039ea58b57162b9c4383edc4aa Mon Sep 17 00:00:00 2001 From: natemaia Date: Fri, 14 Dec 2018 14:30:13 -0800 Subject: [PATCH] Large update and cleanup, attempted fix for grub-install --- lang/english.trans | 4 -- src/archlabs-installer | 2 +- src/lib/boot.sh | 5 +- src/lib/dialogs.sh | 11 ++-- src/lib/install.sh | 130 ++++++++++++++++++++++++----------------- src/lib/luks.sh | 2 +- src/lib/lvm.sh | 4 +- src/lib/mount.sh | 19 +++--- src/lib/part.sh | 6 +- src/lib/utils.sh | 4 +- 10 files changed, 106 insertions(+), 81 deletions(-) diff --git a/lang/english.trans b/lang/english.trans index 72c1242..6013b1c 100644 --- a/lang/english.trans +++ b/lang/english.trans @@ -119,10 +119,6 @@ _ExtPartBody1="\nWhere do you want the partition mounted?\n\nEnsure the name beg _KernelTitle="Choose Kernel" _KernelBody="\nSelect which kernel to use for the install." -# base-devel -_DevelTitle="Install base-devel packages" -_DevelBody="\nDo you want base-devel installed for compiling and building packages?" - # shell _ShellTitle="Choose Login Shell" _ShellBody="\nSelect which shell to use as the new user's login shell." diff --git a/src/archlabs-installer b/src/archlabs-installer index 110d1e4..6e15fa7 100755 --- a/src/archlabs-installer +++ b/src/archlabs-installer @@ -10,7 +10,7 @@ # immutable globals -readonly VER="1.7.29" # Installer version +readonly VER="1.7.30" # Installer version readonly DIST="ArchLabs" # Linux distributor readonly MNT="/mnt" # Install mountpoint readonly ERR="/tmp/errlog" # Built-in error log diff --git a/src/lib/boot.sh b/src/lib/boot.sh index ce31970..cad9142 100644 --- a/src/lib/boot.sh +++ b/src/lib/boot.sh @@ -137,7 +137,10 @@ install_bootloader() # install/setup the bootloader by running the BCMD (boot command) printf "\nInstalling and setting up $BOOTLDR in ${BMNTS[$SYS-$BOOTLDR]}\n\n" - chrun "${BCMDS[$BOOTLDR]}" + + mkdir -p $MNT/{hostrun,run/udev} + mount --bind /run $MNT/hostrun + chrun "mount --bind /hostrun/lvm /run/lvm; mount --bind /hostrun/udev /run/udev ${BCMDS[$BOOTLDR]}; umount /run/lvm; umount /run/udev" echeck "${BCMDS[$BOOTLDR]}" # copy efi stub to generic catch all diff --git a/src/lib/dialogs.sh b/src/lib/dialogs.sh index f8083c0..3a6760f 100644 --- a/src/lib/dialogs.sh +++ b/src/lib/dialogs.sh @@ -153,13 +153,10 @@ cfg_menu() fi select_mirrorcmd || return 1 - - yesno "$_DevelTitle" "$_DevelBody" && BASEDEV=true || BASEDEV=false - select_wm_or_de || return 1 select_packages || return 1 - export CONFIG_DONE=true + CONFIG_DONE=true return 0 } @@ -250,9 +247,9 @@ user_creation() # recursively loop back unless the user cancels user || return 1 else - export NEWUSER="$user" - export USER_PASS="$pass" - export ROOT_PASS="$rpass" + NEWUSER="$user" + USER_PASS="$pass" + ROOT_PASS="$rpass" fi return 0 } diff --git a/src/lib/install.sh b/src/lib/install.sh index a0e7a76..c5ace01 100644 --- a/src/lib/install.sh +++ b/src/lib/install.sh @@ -9,6 +9,7 @@ # shellcheck disable=2153 readonly RUN="/run/archiso/bootmnt/arch/boot" +readonly SERVICE="$MNT/etc/systemd/system/getty@tty1.service.d" readonly VM="$(dmesg | grep -i "hypervisor")" install() @@ -116,6 +117,7 @@ EOF # set the locale + printf "\n\n" cat > $MNT/etc/locale.conf << EOF LANG=$LOCALE EOF @@ -201,20 +203,76 @@ create_user() return 0 } -login_manager() +setup_xinit() { - local service="$MNT/etc/systemd/system/getty@tty1.service.d" + if [[ -e $MNT/home/$NEWUSER/.xinitrc ]]; then + sed -i "s/openbox-session/${LOGIN_WM}/g" $MNT/home/$NEWUSER/.xinitrc + else + printf "%s\n" "exec $LOGIN_WM" > $MNT/home/$NEWUSER/.xinitrc + fi - # remove welcome message - sed -i '/printf/d' $MNT/root/.zshrc + # automatic startx for login shells + local loginrc + case $MYSHELL in + *bash) + loginrc=".bash_profile" + rm -rf $MNT/home/$NEWUSER/.{z,mksh}* + ;; + *mksh) + loginrc=".profile" + rm -rf $MNT/home/$NEWUSER/.{z,bash}* + cat >> $MNT/home/$NEWUSER/.mkshrc << EOF +# colors in less (manpager) +export LESS_TERMCAP_mb=$'\e[01;31m' +export LESS_TERMCAP_md=$'\e[01;31m' +export LESS_TERMCAP_me=$'\e[0m' +export LESS_TERMCAP_se=$'\e[0m' +export LESS_TERMCAP_so=$'\e[01;44;33m' +export LESS_TERMCAP_ue=$'\e[0m' +export LESS_TERMCAP_us=$'\e[01;32m' - if [[ $LOGIN_TYPE == 'lightdm' ]]; then +export EDITOR=vim +export MANWIDTH=100 - rm -rf $service - chrun 'systemctl enable lightdm.service && systemctl set-default graphical.target' +# source shell configs +for f in "\$HOME/.mksh/"*?.sh; do + . "\$f" +done - cat > $MNT/etc/lightdm/lightdm-gtk-greeter.conf << EOF +al-info + +EOF + ;; + *) + loginrc=".zprofile" + rm -rf $MNT/home/$NEWUSER/.{bash,mksh}* + esac + + # add the shell login file to the edit list after install + EDIT_FILES[11]+=" /home/$NEWUSER/$loginrc" + + cat >> $MNT/home/$NEWUSER/$loginrc << EOF +# ~/$loginrc +# sourced by $(basename $MYSHELL) when used as a login shell + +# automatically run startx when logging in on tty1 +if [ -z "\$DISPLAY" ] && [ \$XDG_VTNR -eq 1 ]; then + exec startx -- vt1 >/dev/null 2>&1 +fi +EOF + if [[ $AUTOLOGIN == true ]]; then + sed -i "s/root/${NEWUSER}/g" $SERVICE/autologin.conf + else + rm -rf $SERVICE + fi +} + +setup_lightdm() +{ + rm -rf $SERVICE + chrun 'systemctl set-default graphical.target && systemctl enable lightdm.service' + cat > $MNT/etc/lightdm/lightdm-gtk-greeter.conf << EOF # LightDM GTK+ Configuration [greeter] @@ -226,39 +284,18 @@ icon-theme-name=Adwaita font-name=DejaVu Sans Mono 11 position=30%,end 50%,end EOF +} - else # xinit login +login_manager() +{ - if [[ -e $MNT/home/$NEWUSER/.xinitrc ]]; then - sed -i "s/openbox-session/${LOGIN_WM}/g" $MNT/home/$NEWUSER/.xinitrc - else - printf "%s\n" "exec $LOGIN_WM" > $MNT/home/$NEWUSER/.xinitrc - fi + # remove welcome message + sed -i '/printf/d' $MNT/root/.zshrc - # automatic startx for login shells - case $MYSHELL in - *bash) local loginrc=".bash_profile" ;; - *zsh) local loginrc=".zprofile" ;; - *mksh) local loginrc=".profile" ;; - esac - - # add the shell login file to the edit list after install - EDIT_FILES[11]+=" /home/$NEWUSER/$loginrc" - - cat >> $MNT/home/$NEWUSER/$loginrc << EOF -# ~/$loginrc -# sourced by $(basename $MYSHELL) when used as a login shell - -# automatically run startx when logging in on tty1 -if [ -z "\$DISPLAY" ] && [ \$XDG_VTNR -eq 1 ]; then - exec startx -- vt1 >/dev/null 2>&1 -fi -EOF - if [[ $AUTOLOGIN == true ]]; then - sed -i "s/root/${NEWUSER}/g" $service/autologin.conf - else - rm -rf $service - fi + if [[ $LOGIN_TYPE == 'lightdm' ]]; then + setup_lightdm + else + setup_shell_xinit fi } @@ -326,22 +363,9 @@ package_operations() fi chrun "pacman -Syyu --noconfirm" - - # base-devel and git are the users choice - if [[ $BASEDEV == true ]]; then - chrun "pacman -S iputils --noconfirm" 2>/dev/null - chrun "pacman -S base-devel git --needed --noconfirm" 2>/dev/null - elif [[ $INSTALL_WMS =~ dwm ]]; then - chrun "pacman -S iputils git make --noconfirm" 2>/dev/null - else - # iputils is needed and should always be installed - chrun "pacman -S iputils --noconfirm" 2>/dev/null - fi - - # install chosen packages + chrun "pacman -S iputils --noconfirm" 2>/dev/null + chrun "pacman -S base-devel git --needed --noconfirm" 2>/dev/null chrun "pacman -S $inpkg --needed --noconfirm" - - # remove packages: installer, linux?, grub? chrun "pacman -Rs $rmpkg --noconfirm" return 0 diff --git a/src/lib/luks.sh b/src/lib/luks.sh index bc1780a..b96993b 100644 --- a/src/lib/luks.sh +++ b/src/lib/luks.sh @@ -117,7 +117,7 @@ luks_default() cryptsetup open $LUKS_PART "$LUKS_NAME" <<< "$LUKS_PASS" 2>$ERR echeck "cryptsetup open $LUKS_PART $LUKS_NAME" - export LUKS=' encrypted' + LUKS=' encrypted' luks_show return 0 } diff --git a/src/lib/lvm.sh b/src/lib/lvm.sh index 351558c..1d630e9 100644 --- a/src/lib/lvm.sh +++ b/src/lib/lvm.sh @@ -6,7 +6,7 @@ # this file is not meant to be run directly # sourcing this file in a non bash shell is not advised -# shellcheck disable=2154 +# shellcheck disable=2154,2034 declare -g LVM="" declare -g VOL_GROUP_MB=0 @@ -264,7 +264,7 @@ lvm_del_all() for i in $PHYSICAL_VOLUMES; do pvremove -f "$i" >/dev/null 2>&1 done - export LVM=' logical volume' + LVM=' logical volume' fi return 0 diff --git a/src/lib/mount.sh b/src/lib/mount.sh index cbfa847..e6eacde 100644 --- a/src/lib/mount.sh +++ b/src/lib/mount.sh @@ -6,16 +6,21 @@ # this file is not meant to be run directly # sourcing this file in a non bash shell is not advised -# shellcheck disable=2154,2153,2046 +# shellcheck disable=2154,2153,2046,2034 readonly SYS_MEM="$(awk '/MemTotal/ {print int($2 / 1024)"M"}' /proc/meminfo)" -readonly LOCALES="$(awk '/\.UTF-8/ { gsub(/# .*|#/, "") + +readonly LOCALES="$(awk '/\.UTF-8/ { + gsub(/# .*|#/, "") if ($1) { print $1 " -" } }' /etc/locale.gen)" -readonly CMAPS="$(find /usr/share/kbd/keymaps -name '*.map.gz' | - awk '{gsub(/\.map\.gz|.*\//, ""); print $1 " -"}')" + +readonly CMAPS="$(find /usr/share/kbd/keymaps -name '*.map.gz' | awk '{ + gsub(/\.map\.gz|.*\//, "") + print $1 " -" +}')" mnt_menu() { @@ -123,11 +128,11 @@ select_boot_setup() BCMDS[syslinux]="efibootmgr -c -d $BOOT_DEVICE -p $BOOT_PART_NUM -l /EFI/syslinux/syslinux.efi -L $DIST" fi else - export FILES[9]="/etc/default/grub" + FILES[9]="/etc/default/grub" if [[ $SYS == 'UEFI' ]]; then local ttype="i386-efi" [[ $IS_64BIT == true ]] && ttype='x86_64-efi' - BCMDS[grub]+=" --target=$ttype --efi-directory=${BMNTS[$SYS-$BOOTLDR]} --bootloader-id=$DIST" + BCMDS[grub]+=" --target=$ttype --efi-directory=${BMNTS[$SYS-grub]} --bootloader-id=$DIST" else BCMDS[grub]+=" --target=i386-pc $BOOT_DEVICE" fi @@ -141,7 +146,7 @@ select_boot_setup() src /usr/share/archlabs/installer/lib/boot.sh return 1 fi - export SEPERATE_BOOT=true + SEPERATE_BOOT=true fi return 0 diff --git a/src/lib/part.sh b/src/lib/part.sh index 96726bc..9773d51 100644 --- a/src/lib/part.sh +++ b/src/lib/part.sh @@ -6,7 +6,7 @@ # this file is not meant to be run directly # sourcing this file in a non bash shell is not advised -# shellcheck disable=2154,2155,2153,2046 +# shellcheck disable=2154,2155,2153,2046,2034 declare -Agr FS_CMDS=( [ext2]="mkfs.ext2 -q" [ext3]="mkfs.ext3 -q" [ext4]="mkfs.ext4 -q" @@ -179,7 +179,7 @@ check_cryptlvm() done elif [[ $(lsblk -lno TYPE "$part") =~ 'lvm' ]]; then - export LVM=' logical volume' + LVM=' logical volume' VOLUME_NAME="${part#/dev/mapper/}" for dev in $(awk '/crypt/ && /lvm2_member/ {print "/dev/mapper/"$1}' <<< "$devs" | uniq); do @@ -192,7 +192,7 @@ check_cryptlvm() if grep -q "$LUKS_NAME" <<< "$(lsblk -lno NAME "$dev")"; then LUKS_UUID="$(lsblk -lno UUID,TYPE,FSTYPE "$dev" | awk '/part/ && /crypto_LUKS/ {print $1}')" LUKS_DEV="$LUKS_DEV cryptdevice=UUID=$LUKS_UUID:$LUKS_NAME" - export LUKS=' encrypted' + LUKS=' encrypted' break fi done diff --git a/src/lib/utils.sh b/src/lib/utils.sh index 892bd8e..db3e6b3 100644 --- a/src/lib/utils.sh +++ b/src/lib/utils.sh @@ -142,7 +142,7 @@ system_identify() if [[ -d $efidir ]]; then SYS="UEFI" - [[ $(cat $efidir/fw_platform_size) == 64 ]] && export IS_64BIT=true + [[ $(cat $efidir/fw_platform_size) == 64 ]] && IS_64BIT=true if ! grep -q $efidir/efivars <<< "$(mount)"; then mount -t efivarfs efivarfs $efidir/efivars @@ -232,7 +232,7 @@ debug() set -x exec 3>| $DBG BASH_XTRACEFD=3 - export DEBUG=true + DEBUG=true } umount_dir()