From b5fa475863f67cf8edc702002614be1e0f892473 Mon Sep 17 00:00:00 2001 From: natemaia Date: Sat, 15 Sep 2018 13:44:52 -0700 Subject: [PATCH] Clean up boot, move funtion to file it's used in --- install.sh | 22 ++++-- src/archlabs-installer | 36 ++++----- src/lib/boot.sh | 53 ++----------- src/lib/install.sh | 173 ++++++++++++++++++++--------------------- src/lib/mount.sh | 41 ++++++++++ 5 files changed, 161 insertions(+), 164 deletions(-) diff --git a/install.sh b/install.sh index d704ae9..d70f28e 100755 --- a/install.sh +++ b/install.sh @@ -1,11 +1,17 @@ #!/bin/bash -readonly SCRIPT_DIR="$(readlink -f ${0%/*})" +hash git >/dev/null 2>&1 || { echo "This requires git installed"; exit 1; } +git clone --depth=1 https://bitbucket.org/archlabslinux/installer -echo; echo "This requires root privileges" -sudo mkdir -pv /usr/share/archlabs/{docs,lib,lang} -sudo cp -fv $SCRIPT_DIR/src/archlabs-installer /usr/bin/ -sudo cp -fv $SCRIPT_DIR/src/lib/*.sh /usr/share/archlabs/lib/ -sudo cp -fv $SCRIPT_DIR/lang/*.trans /usr/share/archlabs/lang/ -sudo cp -fv $SCRIPT_DIR/{LICENSE,README.md} /usr/share/archlabs/docs/ -echo; echo "Install complete" +echo +echo "Root access is needed to continue" +echo +sudo mkdir -p /usr/share/archlabs/installer/lang +sudo mkdir -p /usr/share/archlabs/installer/lib +sudo mkdir -p /usr/share/archlabs/installer/docs +sudo cp -fv installer/src/archlabs-installer /usr/bin/ +sudo cp -fv installer/src/lib/*.sh /usr/share/archlabs/installer/lib/ +sudo cp -fv installer/lang/*.trans /usr/share/archlabs/installer/lang/ +sudo cp -fv installer/{LICENSE,README.md} /usr/share/archlabs/installer/docs/ +echo +echo "Install complete" diff --git a/src/archlabs-installer b/src/archlabs-installer index 15666f7..6941fd3 100755 --- a/src/archlabs-installer +++ b/src/archlabs-installer @@ -12,25 +12,19 @@ # immutable variables { readonly DIST="ArchLabs" # Linux distributor -readonly VER="1.6.73" # Installer version +readonly VER="1.6.74" # Installer version readonly LIVE="liveuser" # Live session user readonly MNT="/mnt/install" # Install mountpoint readonly ERR="/tmp/errlog" # Built-in error log - readonly EFI="/sys/firmware/efi/efivars" readonly TRN="/usr/share/archlabs/installer/lang" readonly RUN="/run/archiso/bootmnt/arch/boot" readonly VM="$(dmesg | grep -i "hypervisor")" - readonly KBD="$(find /usr/share/kbd/keymaps -name '*.map.gz')" - readonly LOCALES="$(awk '/\.UTF-8/ {gsub(/# .*|#/, ""); if($1) print $1 " -"}' /etc/locale.gen)" - readonly CONSOLE_MAPS="$(awk '{gsub(/\.map\.gz|.*\//, ""); print $1 " -"}' <<< "$KBD")" - readonly SYS_MEM=$(grep 'MemTotal' /proc/meminfo | awk '{print int($2 / 1024)}') - readonly IGNORE_DEV="$(lsblk -lno NAME,MOUNTPOINT | awk '/\/run\/archiso\/bootmnt/ {sub(/[1-9]/, ""); print $1}')" if [[ $IGNORE_DEV ]]; then @@ -41,9 +35,9 @@ fi readonly DEV_COUNT="$(wc -l <<< "$SYS_DEVS")" -if [[ $(grep 'GenuineIntel' /proc/cpuinfo) ]]; then +if grep -q 'GenuineIntel' /proc/cpuinfo; then readonly UCODE="intel-ucode.img" -elif [[ $(grep 'AuthenticAMD' /proc/cpuinfo) ]]; then +elif grep -q 'AuthenticAMD' /proc/cpuinfo; then readonly UCODE="amd-ucode.img" fi @@ -52,11 +46,10 @@ declare -gA SUBZONES for zone in America Australia Asia Atlantic Africa Europe Indian Pacific Arctic Antarctica; do SUBZONES[$zone]="$(awk "/$zone\// {gsub(/$zone\//, \"\"); print \$3 \" \"\$1}" /usr/share/zoneinfo/zone.tab)" done - readonly SUBZONES # make it read only if [[ $DISPLAY && $TERM != 'linux' ]]; then - for t in st termite xterm; do + for t in termite st xterm; do hash $t >/dev/null 2>&1 && { readonly TERM_CMD="$t"; break; } done fi @@ -73,8 +66,7 @@ af Afghani fo Faroese ge Georgian ee Estonian kg Kyrgyz kz Kazakh lt Lithuanian mn Mongolian no Norwegian ro Romanian rs Serbian si Slovenian tj Tajik lk Sinhala tr Turkish uz Uzbek ie Irish pk Urdu mv Dhivehi epo Esperanto np Nepali et Amharic sn Wolof ml Bambara tz Swahili ke Swahili bw Tswana ph Filipino id Indonesian my Malay tm Turkmen bt Dzongkha -lv Latvian md Moldavian mao Maori by Belarusian me Montenegrin mk Macedonian kh Khmer -az Azerbaijani" +lv Latvian md Moldavian mao Maori by Belarusian me Montenegrin mk Macedonian kh Khmer az Azerbaijani" declare -Agr BMNTS=( [UEFI-grub]="/boot/efi" [UEFI-systemd-boot]="/boot" [BIOS-grub]="/boot" @@ -149,7 +141,10 @@ init_variables() { } source_file() { - . $1 2>/dev/null && return 0 || { echo -e "\nFailed to source library file $1"; die 1; } + if ! . $1 2>/dev/null; then + echo -e "\nFailed to source library file $1"; die 1 + fi + return 0 } user_setup() { @@ -183,7 +178,7 @@ user_setup() { if [[ $pass == "" || "$pass" != "$pass2" || "$rpass" != "$rpass2" ]]; then # password was left empty or doesn't match if [[ $pass == "" ]]; then - msgbox "$_ErrTitle" "\nUser $_Password CANNOT be left empty.\n$_TryAgain" + msgbox "$_ErrTitle" "\nUser password CANNOT be left empty.\n$_TryAgain" elif [[ "$rpass" != "$rpass2" ]]; then msgbox "$_ErrTitle" "$_RootPassErr\n$_TryAgain" else @@ -251,7 +246,6 @@ setup_keymap() { # when a matching console map is not available open a selection dialog if ! [[ $CONSOLE_MAPS =~ "$KEYMAP -" ]]; then - tput civis CONSOLE_MAP="$(dialog --cr-wrap --stdout --backtitle "$BT" \ --title " $_CMapTitle " --menu "$_CMapBody" 20 70 12 $CONSOLE_MAPS)" [[ $? != 0 || $CONSOLE_MAP == "" ]] && return 1 @@ -362,7 +356,7 @@ extra_packages() { "emacs" "An extensible, customizable, self-documenting real-time display editor" off \ "neovim" "A fork of Vim aiming to improve user experience, plugins, and GUIs." off \ "mousepad" "A simple text editor" off \ - "urxvt" "A unicode enabled rxvt-clone terminal emulator" off \ + "rxvt-unicode" "A unicode enabled rxvt-clone terminal emulator" off \ "termite" "A minimal VTE-based terminal emulator" off \ "tilix" "A tiling terminal emulator for Linux using GTK+ 3" off \ "terminator" "Terminal emulator that supports tabs and grids" off \ @@ -372,7 +366,7 @@ extra_packages() { "pcmanfm" "A fast and lightweight file manager based in Lxde" off \ "gnome-disk-utility" "Disk Management Utility" off \ "gnome-system-monitor" "View current processes and monitor system state" off \ - "steam steam-native-runtime" "A popular game distribution platform by Valve" off \ + "steam" "A popular game distribution platform by Valve" off \ "vlc" "A free and open source cross-platform multimedia player" off \ "mpd" "A flexible, powerful, server-side application for playing music" off \ "ncmpcpp" "An mpd client and almost exact clone of ncmpc with some new features" off \ @@ -427,10 +421,14 @@ extra_packages() { [[ $pkgs =~ mpd ]] && pkgs="$pkgs mpc" [[ $pkgs =~ mupdf ]] && pkgs="$pkgs mupdf-tools" [[ $pkgs =~ qt5ct ]] && pkgs="$pkgs qt5-styleplugins" + [[ $pkgs =~ steam ]] && pkgs="$pkgs steam-native-runtime" [[ $pkgs =~ zathura ]] && pkgs="$pkgs zathura-pdf-poppler" [[ $pkgs =~ noto-fonts ]] && pkgs="$pkgs noto-fonts-emoji" [[ $pkgs =~ cairo-dock ]] && pkgs="$pkgs cairo-dock-plug-ins" [[ $pkgs =~ kdenlive ]] && pkgs="$pkgs kdebase-runtime dvdauthor frei0r-plugins breeze breeze-gtk" + if [[ $INSTALL_WMS =~ dwm ]] && ! [[ $pkgs =~ ttf-hack ]]; then + pkgs="$pkgs ttf-hack" + fi if [[ $pkgs =~ (qutebrowser|qbittorrent|kdenlive|vlc) ]] && ! [[ $pkgs =~ qt5ct ]]; then pkgs="$pkgs qt5ct qt5-styleplugins" fi @@ -553,7 +551,7 @@ edit_configs() { [[ -e ${MNT}$f ]] && existing_files="$existing_files ${MNT}$f" done - if [[ $existing_files != "" ]]; then + if [[ $existing_files ]]; then vim -O $existing_files else msgbox "$_ErrTitle" "$_NoFileErr" diff --git a/src/lib/boot.sh b/src/lib/boot.sh index 8d0bc75..3ae86fc 100644 --- a/src/lib/boot.sh +++ b/src/lib/boot.sh @@ -6,49 +6,6 @@ # this file is not meant to be run directly # sourcing this file in a non bash shell is not advised -select_boot_setup() { - # choose bootloader and by extension mountpoint (if needed) - tput civis - BOOTLDR="$(dialog --cr-wrap --stdout --backtitle "$BT" \ - --title " $_PrepMount " --menu "$_MntBootBody" 0 0 0 ${BOOTLDRS[$SYS]})" - [[ $? != 0 || $BOOTLDR == "" ]] && return 1 - - if [[ $SYS == 'BIOS' && $BOOTLDR == 'grub' && $BOOT_DEVICE == "" ]]; then - # grub on BIOS needs an install device, NOT partition eg. /dev/sda - select_device 'boot' || return 1 - fi - - if [[ $BOOTLDR == 'systemd-boot' ]]; then - FILES[9]="/boot/loader/entries/$DIST.conf" - elif [[ $BOOTLDR == 'syslinux' ]]; then - if [[ $SYS == 'BIOS' ]]; then - FILES[9]="/boot/syslinux/syslinux.cfg" - BCMDS[$BOOTLDR]="$(dialog --cr-wrap --stdout --backtitle "$BT" \ - --title " $_InstSysTitle " --menu "$_InstSysBody" 0 0 0 \ - "syslinux-install_update -iam" "Install to MBR (Master Boot Record)" \ - "syslinux-install_update -i" "Install to root partition (/)")" - [[ $? != 0 || ${BCMDS[$BOOTLDR]} == "" ]] && return 1 - else - FILES[9]="/boot/EFI/syslinux/syslinux.cfg" - BCMDS[syslinux]="efibootmgr -c -d $BOOT_DEVICE -p $BOOT_PART_NUM -l /EFI/syslinux/syslinux.efi -L $DIST" - fi - else - FILES[9]="/etc/default/grub" - - if [[ $SYS == 'UEFI' ]]; then - local ttype - [[ $IS_64BIT != true ]] && ttype='i386-efi' || ttype='x86_64-efi' - BCMDS[grub]="${BCMDS[grub]} --target=$ttype --bootloader-id=$DIST" - else - BCMDS[grub]="${BCMDS[grub]} --target=i386-pc $BOOT_DEVICE" - fi - - BCMDS[grub]="${BCMDS[grub]} && grub-mkconfig -o /boot/grub/grub.cfg" - fi - - return 0 -} - shim_secure_boot() { # still a W.I.P local shim_file="shim64.efi" @@ -192,13 +149,15 @@ install_bootloader() { fi # remove old UEFI boot entries - [[ $SYS == 'UEFI' ]] && find $MNT${BMNTS[$SYS-$BOOTLDR]}/EFI/ -maxdepth 1 -mindepth 1 \ - -name '[aA][rR][cC][hH][lL]abs' -type d -exec rm -rf '{}' \; >/dev/null 2>&1 + if [[ $SYS == 'UEFI' ]]; then + find ${MNT}${BMNTS[$SYS-$BOOTLDR]}/EFI/ -maxdepth 1 -mindepth 1 \ + -name '[aA][rR][cC][hH][lL]abs' -type d -exec rm -rf '{}' \; >/dev/null 2>&1 + fi - # sets up the bootloader configs + # sets up the bootloader configs and BCMD (boot command) prep_for_$BOOTLDR - # run the bootloader command + # install/setup the bootloader by running the BCMD (boot command) chroot_cmd "${BCMDS[$BOOTLDR]}" 2>$ERR check_for_errors "${BCMDS[$BOOTLDR]}" diff --git a/src/lib/install.sh b/src/lib/install.sh index e129146..96c4fdb 100644 --- a/src/lib/install.sh +++ b/src/lib/install.sh @@ -7,33 +7,37 @@ # sourcing this file in a non bash shell is not advised install_main() { - # unpack the whole filesystem to install directory $MNT + clear && tput cnorm + + # unpack the file system oneshot install_base + # generate /etc/fstab and touch it up if we used a swapfile genfstab -U $MNT > $MNT/etc/fstab 2>$ERR check_for_errors "genfstab -U $MNT > $MNT/etc/fstab" - - # touch up /etc/fstab if we used a swapfile [[ -f $MNT/swapfile ]] && sed -i "s~${MNT}~~" $MNT/etc/fstab - # update the mirrorlist - # MUST be done before updating or it may be slow - local cmdtail="--verbose --save $MNT/etc/pacman.d/mirrorlist" - $MIRROR_CMD $cmdtail || reflector --score 100 -l 50 -f 10 --sort rate $cmdtail + # update the mirrorlist.. MUST be done before updating or it may be slow + $MIRROR_CMD --verbose --save $MNT/etc/pacman.d/mirrorlist || + reflector --score 100 -l 50 -f 10 --sort rate --verbose --save $MNT/etc/pacman.d/mirrorlist - oneshot update_system # MUST be before bootloader and mkinitcpio + # MUST be before bootloader and mkinitcpio + oneshot package_operations - [[ $LOGIN_TYPE == 'lightdm' ]] && oneshot setup_lightdm + # set up user login + oneshot login_manager + + # MUST be done after installing the packages run_mkinitcpio install_bootloader + chroot_cmd "hwclock --systohc --utc" || chroot_cmd "hwclock --systohc --utc --directisa" - oneshot create_user + + oneshot create_user # create the user last to avoid referencing multiple $HOME locations return 0 } install_base() { - clear - tput cnorm echo -e "\nUnpacking base file system --- Total: ~ 2.8G\n\n" rsync -ah --info=progress2 /run/archiso/sfs/airootfs/ $MNT/ @@ -61,7 +65,7 @@ EndSection EOF fi - # copy the kernel image fofr the regular kernel + # copy the kernel image for the regular kernel [[ $KERNEL != 'linux-lts' ]] && cp -f $RUN/x86_64/vmlinuz $MNT/boot/vmlinuz-linux # copy CPU micro-code if set. manufacturer_ucode.img -> manufacturer-ucode.img @@ -114,137 +118,126 @@ EOF } create_user() { - local _home="$MNT/home/$LIVE" - local service="$MNT/etc/systemd/system/getty@tty1.service.d" - # set root password chroot_cmd "echo 'root:$ROOT_PASS' | chpasswd" - # edit the required files in /etc/ to swap the liveuser account name + # edit the group and passwd files in /etc/ to swap the liveuser account sed -i "s/${LIVE}/${NEWUSER}/g" $MNT/etc/{group,gshadow,passwd,shadow} + # fix up some user files that reference the liveuser + sed -i "s/${LIVE}/${NEWUSER}/g" $MNT/home/$LIVE/.config/gtk-3.0/bookmarks \ + $MNT/home/$LIVE/.mozilla/firefox/archlabs.default/{prefs,sessionstore}.js - # set standard groups for the new user - local groups="rfkill,wheel,network,lp,storage,power,video,audio,lp,autologin" - - if [[ $LOGIN_TYPE == 'lightdm' ]]; then - [[ $AUTOLOGIN == true ]] && groups="$groups,nopasswdlogin" - rm -rf $_home/.{zprofile,xinitrc} - rm -rf $service - else - if [[ $AUTOLOGIN == true ]]; then - sed -i "s/${LIVE}/${NEWUSER}/g" $service/autologin.conf - else - rm -rf $service - fi - sed -i "s/openbox-session/${LOGIN_WM}/g" $_home/.xinitrc - sed -i '/archlabs-installer/d' $_home/.zprofile - cat >> $_home/.zprofile << EOF -[[ -z \$DISPLAY && \$XDG_VTNR -eq 1 ]] && exec startx -- vt1 &>/dev/null -EOF - fi - - sed -i "s/${LIVE}/${NEWUSER}/g" $_home/.config/gtk-3.0/bookmarks $_home/.mozilla/firefox/archlabs.default/{prefs,sessionstore}.js - - ! [[ $INSTALL_WMS =~ openbox ]] && rm -rf $_home/.config/{openbox,skippy-xd,jgmenu,conky,tint2} - ! [[ $INSTALL_WMS =~ bspwm ]] && rm -rf $_home/.config/{bspwm,sxhkd} - ! [[ $INSTALL_WMS =~ i3-gaps ]] && rm -rf $_home/.config/i3 + [[ $INSTALL_WMS =~ bspwm ]] || rm -rf $MNT/home/$LIVE/.config/{bspwm,sxhkd} + [[ $INSTALL_WMS =~ i3-gaps ]] || rm -rf $MNT/home/$LIVE/.config/i3 + [[ $INSTALL_WMS =~ openbox ]] || rm -rf $MNT/home/$LIVE/.config/{openbox,skippy-xd,jgmenu,conky,tint2} chroot_cmd "mv -f /home/$LIVE /home/$NEWUSER" - chroot_cmd "usermod -aG $groups $NEWUSER" + chroot_cmd "usermod -aG rfkill,wheel,network,lp,storage,power,video,audio,lp,autologin $NEWUSER" chroot_cmd "echo '$NEWUSER:$USER_PASS' | chpasswd" chroot_cmd "chown -Rf $NEWUSER:users /home/$NEWUSER" - - return 0 } run_mkinitcpio() { + local add="" + # setup a keyfile for LUKS.. Only when choosing grub and system is UEFI - [[ $LUKS -eq 1 && $LVM != 1 && $SYS == 'UEFI' && $BOOTLDR == 'grub' ]] && luks_keyfile + [[ $LUKS -eq 1 && $LVM -eq 0 && $SYS == 'UEFI' && $BOOTLDR == 'grub' ]] && luks_keyfile # new hooks needed in /etc/mkinitcpio.conf if we used LUKS and/or LVM - local add (( LVM == 1 )) && add="lvm2" (( LUKS == 1 )) && add="encrypt$([[ $add ]] && echo -n " $add")" + sed -i "s/block filesystems/block ${add} filesystems ${MKINIT_HOOKS}/g" $MNT/etc/mkinitcpio.conf - local conf="$MNT/etc/mkinitcpio.conf" - - sed -i "s/block filesystems/block ${add} filesystems ${MKINIT_HOOKS}/g" $conf - - tput civis chroot_cmd "mkinitcpio -p $KERNEL" 2>$ERR check_for_errors "mkinitcpio -p $KERNEL" - - return 0 } -update_system() { - tput cnorm - local inpkg="base-devel git" - local rmpkg="archlabs-installer" - local vbx="virtualbox-guest-modules-arch" +package_operations() { + local inpkg="$EXTRA_PACKAGES" # add the packages chosen during setup + local rmpkg="archlabs-installer" # always remove the installer + local vbx="virtualbox-guest-modules-arch" # save retyping this multiple times + # the LTS kernel uses different packages if [[ $KERNEL == 'linux-lts' ]]; then rmpkg="$rmpkg $vbx linux" - inpkg="linux-lts" - if [[ $VM ]]; then - inpkg="$inpkg virtualbox-guest-dkms linux-lts-headers" - else - rmpkg="$rmpkg virtualbox-guest-utils" - fi + inpkg="$inpkg linux-lts" + # if the system is a VM then install the needed packages otherwise remove the guest utils + [[ $VM ]] && inpkg="$inpkg virtualbox-guest-dkms linux-lts-headers" || rmpkg="$rmpkg virtualbox-guest-utils" elif ! [[ $VM ]]; then + # if the system is not a VM then remove the guest utils rmpkg="$rmpkg $vbx virtualbox-guest-utils" fi - # for gnome and cinnamon we don't need the xfce provided stuff + # for only gnome or cinnamon we don't need the xfce provided stuff [[ $INSTALL_WMS == 'gnome' || $INSTALL_WMS == 'cinnamon' ]] && rmpkg="$(pacman -Qssq 'xfce4*' 2>/dev/null)" + # when not using grub bootloader remove it's package and configurations if [[ $BOOTLDR != 'grub' ]]; then rmpkg="$rmpkg grub" rm -f $MNT/etc/default/grub find $MNT/boot/ -name 'grub*' -exec rm -rf '{}' \; >/dev/null 2>&1 elif [[ $BOOTLDR != 'syslinux' ]]; then + # do the same when not using syslinux as the bootloader find $MNT/boot/ -name 'syslinux*' -exec rm -rf '{}' \; >/dev/null 2>&1 fi - local install="pacman -S $inpkg $EXTRA_PACKAGES --needed --noconfirm" + # iputils, base-devel, and git are all needed and should always be installed separately + local base="pacman -S iputils git --noconfirm; pacman -S base-devel --needed --noconfirm" + local install="pacman -S $inpkg --needed --noconfirm" local remove="pacman -Rs $rmpkg --noconfirm" - chroot_cmd "pacman -Syyu --noconfirm; pacman -S iputils --noconfirm; $install; $remove" 2>/dev/null + chroot_cmd "pacman -Syyu --noconfirm; $base; $install; $remove" 2>/dev/null + # for neovim copy the default vimrc and colorscheme to ~/.config/nvim if [[ $EXTRA_PACKAGES =~ neovim ]]; then mkdir -p $MNT/home/$LIVE/.config/nvim cp -f $MNT/home/$LIVE/.vimrc $MNT/home/$LIVE/.config/nvim/init.vim cp -rf $MNT/home/$LIVE/.vim/colors $MNT/home/$LIVE/.config/nvim/colors fi + # install and setup dwm if [[ $INSTALL_WMS =~ dwm ]]; then mkdir -pv $MNT/home/$LIVE/suckless - for prog in dwm st dmenu; do - local cmd="git clone https://bitbucket.org/natemaia/$prog /home/$LIVE/suckless/$prog" - chroot_cmd "$cmd; cd /home/$LIVE/suckless/$prog && make clean install && make clean" + for prog in dwm dmenu st; do + chroot_cmd "git clone https://bitbucket.org/natemaia/$prog /home/$LIVE/suckless/$prog && cd /home/$LIVE/suckless/$prog" + [[ -e $MNT/home/$LIVE/suckless/$prog/config.h ]] && rm -f $MNT/home/$LIVE/suckless/$prog/config.h + chroot_cmd "make clean install && make clean" done fi - - return 0 } -setup_lightdm() { - local cfg="$MNT/etc/lightdm/lightdm-gtk-greeter.conf" +login_manager() { + if [[ $LOGIN_TYPE == 'lightdm' ]]; then + rm -rf $MNT/etc/systemd/system/getty@tty1.service.d + for file in $MNT/home/$LIVE/.{xinitrc,zprofile}; do + awk '{if($0 && $0 !~ "^#") print "# "$0; else print $0}' $file > $file + done + chroot_cmd 'systemctl enable lightdm.service && systemctl set-default graphical.target' + cat > $MNT/etc/lightdm/lightdm-gtk-greeter.conf << EOF +# LightDM GTK+ Configuration - chroot_cmd 'systemctl enable lightdm.service && systemctl set-default graphical.target' - - sed -i '/#background=/ c background=/usr/share/backgrounds/archlabs/archlabs.jpg' $cfg - sed -i '/#theme-name=/ c theme-name=ArchLabs-dARK' $cfg - sed -i '/#icon-theme-name=/ c icon-theme-name=ArchLabs-Dark' $cfg - sed -i '/#position=/ c position=34%,end 66%,end' $cfg - sed -i '/#font-name=/ c font-name=DejaVu Sans Mono 11' $cfg - sed -i '/\[greeter]/ a default-user-image=/usr/share/icons/ArchLabs-Dark/64x64/places/distributor-logo-archlabs.png' $cfg - sed -i '/\[greeter]/ a active-monitor=0' $cfg - - if [[ $AUTOLOGIN == true ]]; then - chroot_cmd 'groupadd -r nopasswdlogin' - sed -i '/#%PAM-1.0/ a auth sufficient pam_succeed_if.so user ingroup nopasswdlogin' $MNT/etc/pam.d/lightdm - sed -i "/#autologin-session=/ c autologin-session=${LOGIN_WM}" $MNT/etc/lightdm/lightdm.conf - sed -i "/#autologin-user=/ c autologin-user=${NEWUSER}" $MNT/etc/lightdm/lightdm.conf +[greeter] +active-monitor=0 +default-user-image=/usr/share/icons/ArchLabs-Dark/64x64/places/distributor-logo-archlabs.png +background=/usr/share/backgrounds/archlabs/archlabs.jpg +theme-name=ArchLabs-dARK +icon-theme-name=Adwaita +font-name=DejaVu Sans Mono 11 +position=30%,end 50%,end +EOF + if [[ $AUTOLOGIN == true ]]; then + chroot_cmd "groupadd -r nopasswdlogin && usermod -aG nopasswdlogin $NEWUSER" + sed -i '/#%PAM-1.0/ a auth sufficient pam_succeed_if.so user ingroup nopasswdlogin' $MNT/etc/pam.d/lightdm + sed -i "/#autologin-session=/ c autologin-session=${LOGIN_WM}" $MNT/etc/lightdm/lightdm.conf + sed -i "/#autologin-user=/ c autologin-user=${NEWUSER}" $MNT/etc/lightdm/lightdm.conf + fi + else # xinit login + sed -i "s/openbox-session/${LOGIN_WM}/g" $MNT/home/$LIVE/.xinitrc + sed -i 's|exec sudo archlabs-installer|exec startx -- vt1 &>/dev/null|' $MNT/home/$LIVE/.zprofile + if [[ $AUTOLOGIN == true ]]; then + sed -i "s/${LIVE}/${NEWUSER}/g" $MNT/etc/systemd/system/getty@tty1.service.d/autologin.conf + else + rm -rf $MNT/etc/systemd/system/getty@tty1.service.d + fi fi } diff --git a/src/lib/mount.sh b/src/lib/mount.sh index b0cc631..779e533 100644 --- a/src/lib/mount.sh +++ b/src/lib/mount.sh @@ -376,6 +376,47 @@ select_swap() { return 0 } +select_boot_setup() { + # choose bootloader and by extension mountpoint (if needed) + tput civis + BOOTLDR="$(dialog --cr-wrap --stdout --backtitle "$BT" \ + --title " $_PrepMount " --menu "$_MntBootBody" 0 0 0 ${BOOTLDRS[$SYS]})" + [[ $? != 0 || $BOOTLDR == "" ]] && return 1 + + # grub on BIOS needs an install device, NOT partition eg. /dev/sda + if [[ $SYS == 'BIOS' && $BOOTLDR == 'grub' && $BOOT_DEVICE == "" ]]; then + select_device 'boot' || return 1 + fi + + if [[ $BOOTLDR == 'systemd-boot' ]]; then + FILES[9]="/boot/loader/entries/$DIST.conf" + elif [[ $BOOTLDR == 'syslinux' ]]; then + if [[ $SYS == 'BIOS' ]]; then + FILES[9]="/boot/syslinux/syslinux.cfg" + BCMDS[$BOOTLDR]="$(dialog --cr-wrap --stdout --backtitle "$BT" \ + --title " $_InstSysTitle " --menu "$_InstSysBody" 0 0 0 \ + "syslinux-install_update -iam" "Install to MBR (Master Boot Record)" \ + "syslinux-install_update -i" "Install to root partition (/)")" + [[ $? != 0 || ${BCMDS[$BOOTLDR]} == "" ]] && return 1 + else + FILES[9]="/boot/EFI/syslinux/syslinux.cfg" + BCMDS[syslinux]="efibootmgr -c -d $BOOT_DEVICE -p $BOOT_PART_NUM -l /EFI/syslinux/syslinux.efi -L $DIST" + fi + else + FILES[9]="/etc/default/grub" + if [[ $SYS == 'UEFI' ]]; then + local ttype + [[ $IS_64BIT != true ]] && ttype='i386-efi' || ttype='x86_64-efi' + BCMDS[grub]="${BCMDS[grub]} --target=$ttype --bootloader-id=$DIST" + else + BCMDS[grub]="${BCMDS[grub]} --target=i386-pc $BOOT_DEVICE" + fi + + BCMDS[grub]="${BCMDS[grub]} && grub-mkconfig -o /boot/grub/grub.cfg" + fi + return 0 +} + select_mount_opts() { local part="$1" local fs="$2"