From 0cd7302167dcd1908ba1701ea9cb6285b773dba5 Mon Sep 17 00:00:00 2001 From: natemaia Date: Sat, 18 Apr 2020 14:37:22 -0700 Subject: [PATCH] WIP: initial changes to use pacstrap or not. --- archlabs-installer | 66 +++++++++++++++++++++++++++++++++------------- 1 file changed, 48 insertions(+), 18 deletions(-) diff --git a/archlabs-installer b/archlabs-installer index 0ee6918..4db59be 100755 --- a/archlabs-installer +++ b/archlabs-installer @@ -7,7 +7,7 @@ # shellcheck disable=SC2086,SC2046 -VER=2.1.26 +VER=2.1.27 # default values { @@ -17,6 +17,7 @@ ANS=/tmp/ans # dialog answer output file FONT=ter-i16n # font used for the linux console HOOKS=shutdown # additional mkinitcpio HOOKS SEL=0 # currently selected menu item +PACSTRAP=1 # use a fresh pacstrap or copy the iso filesystem SYS=Unknown # bios type, to be determined: UEFI/BIOS BG=/tmp/bgout # output from background process ERR=/tmp/errlog # stderr log used internally by errshow() @@ -136,6 +137,7 @@ _format="is already formatted correctly.\n\nFor a clean install, previously exis _swapsize="\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." _expart="\nYou can now choose any additional partitions you want mounted, you'll be asked for a mountpoint after.\n\nSelect 'done' to finish the mounting step and begin unpacking the base system in the background." _exmnt="\nWhere do you want the partition mounted?\n\nEnsure the name begins with a slash (/).\nExamples include: /usr, /home, /var, etc." +_bginstall="\nA background install portion will now begin, select what kind of base install to use\n\npacstrap - guarantees the latest packages and avoids conflicts but is much slower and network dependant\n\ncopy iso - much faster and not network dependant but can have issues\n" _user="\nEnter a name and password for the new user account.\n\nThe name must not use capital letters, contain any periods (.), end with a hyphen (-), or include any colons (:)\n\nNOTE: Use [Up], [Down], or [Tab] to switch between fields, and [Enter] to accept." _hostname="\nEnter a hostname for the new system.\n\nA hostname is used to identify systems on the network.\n\nIt's restricted to alphanumeric characters (a-z, A-Z, 0-9).\nIt can contain hyphens (-) BUT NOT at the beginning or end." _locale="\nLocale determines the system language and currency formats.\n\nThe format for locale names is languagecode_COUNTRYCODE\n\neg. en_US is: English United States\n en_GB is: English Great Britain" @@ -1240,9 +1242,21 @@ install_base() unset BG_PID fi - # archiso files - rm -rf "$MNT/etc/mkinitcpio-archiso.conf" - find "$MNT/usr/lib/initcpio" -name 'archiso*' -type f -delete + if [[ $PACSTRAP == 1 ]]; then + # we have some customizations in /etc on the iso we want to preserve + if [[ $DIST == "ArchLabs" ]]; then + cp -aTvf /etc/skel/ "$MNT/etc/" + rm -rf "$MNT/etc/mkinitcpio-archiso.conf" + fi + else + # archiso files + rm -rf "$MNT/etc/mkinitcpio-archiso.conf" + find "$MNT/usr/lib/initcpio" -name 'archiso*' -type f -delete + + # vmlinuz, if this isn't copied the standard kernel may fail mkinitcpio + cp -vf "$RUN/x86_64/vmlinuz" "$MNT/boot/vmlinuz-linux" 2> "$ERR" + errshow 1 "cp -vf '$RUN/x86_64/vmlinuz' '$MNT/boot/vmlinuz-linux'" + fi # remove/disable customizations done to airootfs during building chrun "systemctl disable pacman-init.service choose-mirror.service" > /dev/null 2>&1 @@ -1257,22 +1271,19 @@ install_base() # changing distro name? [[ $DIST != "ArchLabs" ]] || sed -i "s/ArchLabs/$DIST/g" "$MNT/etc/"{lsb-release,os-release} - # vmlinuz, if this isn't copied the standard kernel may fail mkinitcpio - cp -vf "$RUN/x86_64/vmlinuz" "$MNT/boot/vmlinuz-linux" 2> "$ERR" - errshow 1 "cp -vf '$RUN/x86_64/vmlinuz' '$MNT/boot/vmlinuz-linux'" - # copy network settings [[ -d /etc/netctl ]] && cp -rfv /etc/netctl "$MNT/etc/" [[ -f /etc/resolv.conf ]] && cp -fv /etc/resolv.conf "$MNT/etc/" [[ -e /etc/NetworkManager/system-connections ]] && cp -rvf /etc/NetworkManager/system-connections "$MNT/etc/NetworkManager/" + mkdir -pv "$MNT/etc/default" echo "LANG=$LOCALE" > "$MNT/etc/locale.conf" cp -fv "$MNT/etc/locale.conf" "$MNT/etc/default/locale" sed -i "s/#en_US.UTF-8/en_US.UTF-8/g; s/#${LOCALE}/${LOCALE}/g" "$MNT/etc/locale.gen" chrun "locale-gen" chrun "ln -svf /usr/share/zoneinfo/$ZONE/$SUBZ /etc/localtime" - mkdir -pv "$MNT/etc/X11/xorg.conf.d" "$MNT/etc/default" + mkdir -pv "$MNT/etc/X11/xorg.conf.d" cat > "$MNT/etc/X11/xorg.conf.d/00-keyboard.conf" <<- EOF # Use localectl(1) to instruct systemd-localed to update it. Section "InputClass" @@ -1446,16 +1457,21 @@ install_packages() local rmpkg="" local inpkg="$PACKAGES $USER_PKGS $AL_BASE_PKGS " - pacman -Qq archlabs-installer > /dev/null 2>&1 && rmpkg+="archlabs-installer " - [[ $NEWSHELL == 'zsh' ]] && inpkg+="zsh-completions " + if [[ $NEWSHELL == 'zsh' ]]; then + inpkg+="zsh-completions " + elif [[ $PACSTRAP != 1 ]]; then + rmpkg+="archlabs-installer zsh " + fi [[ $INSTALL_WMS =~ ($WM_PKG_SES) ]] && inpkg+="$WM_BASE_PKGS " # update and install crucial packages first to avoid issues chrun "pacman -Syyu --noconfirm" 2> "$ERR" 2>&1 - chrun "pacman -S ${LOGIN_PKGS[$LOGIN_TYPE]} $NEWSHELL $UCODE $KERNEL --noconfirm --needed" 2> "$ERR" 2>&1 - errshow 1 "chrun 'pacman -S ${LOGIN_PKGS[$LOGIN_TYPE]} $NEWSHELL $UCODE $KERNEL --noconfirm --needed'" + chrun "pacman -S ${LOGIN_PKGS[$LOGIN_TYPE]} $NEWSHELL --noconfirm --needed" 2> "$ERR" 2>&1 + errshow 1 "chrun 'pacman -S ${LOGIN_PKGS[$LOGIN_TYPE]} $NEWSHELL --noconfirm --needed'" + # reinstalling iputils fixes the network issue for non-root users + chrun "pacman -S iputils $UCODE $KERNEL --noconfirm" # remove the packages we don't want on the installed system [[ $rmpkg ]] && chrun "pacman -Rnsc $rmpkg --noconfirm" @@ -1595,8 +1611,10 @@ install_tearfree() fi fi - # remove nvidia installer from installed system - [[ $xpath == *"$MNT"* ]] && rm -rf "$MNT/usr/bin/nvidia-installer" "$MNT/var/lib/nvidia-installer" + if [[ $PACSTRAP != 1 ]]; then + # remove nvidia installer from installed system + [[ $xpath == *"$MNT"* ]] && rm -rf "$MNT/usr/bin/nvidia-installer" "$MNT/var/lib/nvidia-installer" + fi } install_mkinitcpio() @@ -1639,12 +1657,24 @@ install_mirrorlist() install_background() { - ( + if yesno "Base Install" "$_bginstall" "Pacstrap" "Copy iso"; then + PACSTRAP=1 + ( install_mirrorlist "/etc/pacman.d/mirrorlist" > /tmp/bgout 2>&1 && pacstrap /mnt $BASE_PKGS > /tmp/bgout 2>&1 && al_repo "$MNT/etc/pacman.conf" - ) & - BG_PID=$! + ) & + BG_PID=$! + else + PACSTRAP=0 + ( + rsync -a /run/archiso/sfs/airootfs/ "$MNT/" && + install_mirrorlist "$MNT/etc/pacman.d/mirrorlist" > /tmp/bgout 2>&1 && + al_repo "$MNT/etc/pacman.conf" && + chrun "pacman -Sy && pacman -Syyu $BASE_PKGS --noconfirm --needed" > /tmp/bgout 2>&1 + ) & + BG_PID=$! + fi # shellcheck disable=SC2064 trap "kill $BG_PID 2> /dev/null" EXIT }