Move to pacstrap only base install, simplify some sections.

This commit is contained in:
natemaia 2020-11-04 10:39:02 -08:00
parent 00470e76c7
commit 98d38ad037

View File

@ -10,14 +10,13 @@ VER=2.1.64
# default values { # default values {
: "${DIST=ArchLabs}" # distro name if not set DIST=$(awk -F'"' '/^NAME=/ {print $2}' /etc/os-release 2> /dev/null)
: "${MNT=/mnt}" # installation root mountpoint if not set MNT=/mnt # installation root mountpoint if not set
SYS=Unknown # boot type, to be determined: UEFI/BIOS SYS=Unknown # boot type, to be determined: UEFI/BIOS
FONT=ter-i16n # font used for the linux console FONT=ter-i16n # font used for the linux console
HOOKS=shutdown # additional mkinitcpio HOOKS HOOKS=shutdown # additional mkinitcpio HOOKS
SEL=0 # currently selected main menu item SEL=0 # currently selected main menu item
BTRFS=0 # is btrfs used, 1 = btrfs alone, 2 = btrfs + subvolume(s) BTRFS=0 # is btrfs used, 1 = btrfs alone, 2 = btrfs + subvolume(s)
PACSTRAP=1 # use pacstrap or copy the iso filesystem
EXMNTS='' # extra partitions that were mounted, used to verify mountpoint and show user EXMNTS='' # extra partitions that were mounted, used to verify mountpoint and show user
USERCMD='' # optional command(s) entered by the user to run in the chroot USERCMD='' # optional command(s) entered by the user to run in the chroot
ANS=/tmp/ans # dialog answer output file ANS=/tmp/ans # dialog answer output file
@ -354,7 +353,6 @@ _format="is already formatted correctly.\n\nFor a clean install, existing partit
_swapsize="\nEnter the size of the swapfile in megabytes (M) or gigabytes (G).\n\ne.g. 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." _swapsize="\nEnter the size of the swapfile in megabytes (M) or gigabytes (G).\n\ne.g. 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." _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." _exmnt="\nWhere do you want the partition mounted?\n\nEnsure the name begins with a slash (/).\nExamples include: /usr, /home, /var, etc."
_bginstall="\nThe background base install will now start, select which base to use\n\nPacstrap - downloads all packages, avoids issues but can be slower depending on your network.\n\nCopy ISO - faster and not network dependant but can result in installation issues when using an older ISO.\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." _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." _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\ne.g. en_US is: English United States\n en_GB is: English Great Britain" _locale="\nLocale determines the system language and currency formats.\n\nThe format for locale names is languagecode_COUNTRYCODE\n\ne.g. en_US is: English United States\n en_GB is: English Great Britain"
@ -1140,12 +1138,12 @@ part_swap()
local size=0 local size=0
if [[ $swp == "$MNT/swapfile" && $SWAP_S ]]; then if [[ $swp == "$MNT/swapfile" && $SWAP_S ]]; then
msg "Swap Setup" "\nActivating $SWAP_S swapfile at /swapfile\n" 1 msg "Swap Setup" "\nCreating $SWAP_S swapfile at /swapfile\n\nThis can take a while.\n" 1
case "${SWAP_S: -1}" in case "${SWAP_S: -1}" in
G) size=$(( ${SWAP_S:0:-1} * 1024 )) ;; G) size=$(( ${SWAP_S:0:-1} * 1024 )) ;;
M) size=${SWAP_S:0:-1} ;; M) size=${SWAP_S:0:-1} ;;
esac esac
dd if=/dev/zero of="$swp" bs=1M count=$size dd if=/dev/zero of="$swp" bs=1M count=$size 2> "$ERR"
errshow 0 "dd if=/dev/zero of='$swp' bs=1M count=$size" errshow 0 "dd if=/dev/zero of='$swp' bs=1M count=$size"
chmod 600 "$swp" 2> "$ERR" chmod 600 "$swp" 2> "$ERR"
errshow 0 "chmod 600 '$swp'" errshow 0 "chmod 600 '$swp'"
@ -1681,7 +1679,7 @@ install_main()
install_login install_login
# changing distro name? # changing distro name?
if grep -q 'ArchLabs' "$MNT/etc/lsb-release" && [[ $DIST != 'ArchLabs' ]]; then if grep -q 'ArchLabs' "$MNT/etc/os-release" && [[ $DIST != 'ArchLabs' ]]; then
sed -i "s/ArchLabs/$DIST/g" "$MNT/etc/lsb-release" sed -i "s/ArchLabs/$DIST/g" "$MNT/etc/lsb-release"
sed -i "s/ArchLabs/$DIST/g" "$MNT/etc/os-release" sed -i "s/ArchLabs/$DIST/g" "$MNT/etc/os-release"
else else
@ -1692,8 +1690,6 @@ install_main()
# allow members of the wheel group to run commands as root # allow members of the wheel group to run commands as root
sed -i "s/# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/g" "$MNT/etc/sudoers" sed -i "s/# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/g" "$MNT/etc/sudoers"
chrun "chown -Rf $NEWUSER:users /home/$NEWUSER"
if [[ "$USERCMD" ]]; then if [[ "$USERCMD" ]]; then
chrun "$USERCMD" 2> "$ERR" 2>&1 chrun "$USERCMD" 2> "$ERR" 2>&1
errshow 0 "chrun '$USERCMD'" errshow 0 "chrun '$USERCMD'"
@ -1745,31 +1741,12 @@ install_base()
mkdir -pv "$MNT/etc/default" mkdir -pv "$MNT/etc/default"
mkdir -pv "$MNT/etc/X11/xorg.conf.d/" mkdir -pv "$MNT/etc/X11/xorg.conf.d/"
if (( ! PACSTRAP )); then if [[ $DIST == "ArchLabs" ]]; then
# remove archiso files when copying iso
rm -rf "$MNT/etc/mkinitcpio-archiso.conf"
find "$MNT/usr/lib/initcpio" -name 'archiso*' -type f -delete
# vmlinuz, if this isn't copied the vanilla 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'"
# remove/disable customizations done to airootfs during building
chrun "systemctl disable pacman-init.service" > /dev/null 2>&1
rm -f "$MNT/etc/systemd/system/pacman-init.service"
rm -f "$MNT/etc/systemd/system/etc-pacman.d-gnupg.mount"
sed -i 's/#\(Storage=\)volatile/\1auto/' "$MNT/etc/systemd/journald.conf"
sed -i 's/\(HandleLidSwitch=\)ignore/#\1suspend/' "$MNT/etc/systemd/logind.conf"
sed -i 's/\(HandleSuspendKey=\)ignore/#\1suspend/' "$MNT/etc/systemd/logind.conf"
sed -i 's/\(HandleHibernateKey=\)ignore/#\1hibernate/' "$MNT/etc/systemd/logind.conf"
find "$MNT/boot" -name '*-ucode.img' -delete
elif [[ $DIST == "ArchLabs" ]]; then
# we have some customizations in /etc on the iso we want to preserve # we have some customizations in /etc on the iso we want to preserve
cp -vf /etc/pacman.conf "$MNT/etc/"
cp -vf /etc/modprobe.d/* "$MNT/etc/modprobe.d/" # */ cp -vf /etc/modprobe.d/* "$MNT/etc/modprobe.d/" # */
cp -vf /etc/X11/xorg.conf.d/* "$MNT/etc/X11/xorg.conf.d/" # */ cp -vf /etc/X11/xorg.conf.d/* "$MNT/etc/X11/xorg.conf.d/" # */
cp -vf /etc/dialogrc "$MNT/etc/dialogrc"
cp -vf /etc/os-release "$MNT/etc/os-release" cp -vf /etc/os-release "$MNT/etc/os-release"
cp -vf /etc/lsb-release "$MNT/etc/lsb-release"
cp -vf /etc/skel/.zshrc "$MNT/etc/skel/.zshrc" cp -vf /etc/skel/.zshrc "$MNT/etc/skel/.zshrc"
fi fi
@ -1853,6 +1830,9 @@ install_user()
install_cleanup "$NEWUSER" install_cleanup "$NEWUSER"
# make sure the new user owns files in their $HOME
chrun "chown -Rf $NEWUSER:users /home/$NEWUSER"
return 0 return 0
} }
@ -1906,7 +1886,6 @@ install_cleanup()
if [[ $LOGIN_WM =~ (startplasma-x11|gnome-session|startdde|cinnamon-session) || ($LOGIN_TYPE != 'xinit' && $INSTALL_WMS =~ (plasma|gnome|cinnamon|deepin)) ]]; then if [[ $LOGIN_WM =~ (startplasma-x11|gnome-session|startdde|cinnamon-session) || ($LOGIN_TYPE != 'xinit' && $INSTALL_WMS =~ (plasma|gnome|cinnamon|deepin)) ]]; then
sed -i '/super/d; /nitrogen/d; /picom/d' "$MNT/home/$user/.xprofile" "$MNT/root/.xprofile" sed -i '/super/d; /nitrogen/d; /picom/d' "$MNT/home/$user/.xprofile" "$MNT/root/.xprofile"
fi fi
} }
install_bootldr() install_bootldr()
@ -1999,7 +1978,6 @@ install_packages()
inpkg+=("$i") inpkg+=("$i")
done done
if [[ $PACSTRAP -eq 1 ]]; then
blk="$(lsblk -f)" blk="$(lsblk -f)"
lspci | grep -qi 'broadcom' && inpkg+=('b43-firmware' 'b43-fwcutter' 'broadcom-wl') lspci | grep -qi 'broadcom' && inpkg+=('b43-firmware' 'b43-fwcutter' 'broadcom-wl')
[[ $blk =~ ntfs ]] && inpkg+=('ntfs-3g') [[ $blk =~ ntfs ]] && inpkg+=('ntfs-3g')
@ -2010,14 +1988,6 @@ install_packages()
if [[ $BTRFS_MNT ]] || [[ $blk =~ btrfs ]]; then if [[ $BTRFS_MNT ]] || [[ $blk =~ btrfs ]]; then
inpkg+=('btrfs-progs') inpkg+=('btrfs-progs')
fi fi
else
[[ $NEWSHELL == 'zsh' ]] || rmpkg+=('zsh')
if pacman -Qq archlabs-installer >/dev/null 2>&1; then
rmpkg+=('archlabs-installer')
else
rm -fv "$MNT/usr/bin/installer"
fi
fi
[[ $NEWSHELL == 'zsh' ]] && inpkg+=('zsh-completions') [[ $NEWSHELL == 'zsh' ]] && inpkg+=('zsh-completions')
[[ $NEWSHELL =~ (bash|zsh) ]] && inpkg+=('bash-completion') [[ $NEWSHELL =~ (bash|zsh) ]] && inpkg+=('bash-completion')
@ -2175,11 +2145,6 @@ install_tearfree()
fi fi
fi fi
fi fi
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() install_mkinitcpio()
@ -2202,6 +2167,7 @@ install_mirrorlist()
# avoid SSL errors when the time is wrong # avoid SSL errors when the time is wrong
timedatectl set-ntp 1 && timedatectl > /dev/null 2>&1 timedatectl set-ntp 1 && timedatectl > /dev/null 2>&1
# make a mirrorlist backup in case of issues
[[ -f /etc/pacman.d/mirrorlist.bak ]] || cp -f /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak [[ -f /etc/pacman.d/mirrorlist.bak ]] || cp -f /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
if hash reflector > /dev/null 2>&1; then if hash reflector > /dev/null 2>&1; then
@ -2247,34 +2213,17 @@ install_background()
[[ $LUKS ]] && luks='cryptsetup' [[ $LUKS ]] && luks='cryptsetup'
select_mirrors || AUTO_MIRROR=true select_mirrors || AUTO_MIRROR=true
if hash rsync > /dev/null 2>&1; then # ask whether to pacstrap or copy if rsync is installed
yesno 'Background Install' "$_bginstall" 'Pacstrap' 'Copy ISO' || PACSTRAP=0
fi
( (
install_mirrorlist > /tmp/bgout 2>&1 install_mirrorlist > /tmp/bgout 2>&1
if [[ $PACSTRAP == 1 ]]; then
pacman -Sy >> /tmp/bgout 2>&1 pacman -Sy >> /tmp/bgout 2>&1
pacstrap /mnt >> /tmp/bgout 2>&1 pacstrap /mnt >> /tmp/bgout 2>&1
else
rsync -avh /run/archiso/sfs/airootfs/ "$MNT/" >> /tmp/bgout 2>&1
fi
mkdir -p "$MNT/etc/pacman.d" cp -Rf /etc/pacman.d "$MNT/etc/"
cp -Rf /etc/pacman.d "$MNT/etc/pacman.d" cp -f /etc/pacman.conf "$MNT/etc/"
cp -f /etc/pacman.d/mirrorlist "$MNT/etc/pacman.d/"
al_repo "$MNT/etc/pacman.conf" || chrun "pacman -Syyu --noconfirm" >> /tmp/bgout 2>&1
cp /etc/pacman.conf "$MNT/etc/pacman.conf"
cp /etc/pacman.d/mirrorlist "$MNT/etc/pacman.d/mirrorlist"
al_repo "$MNT/etc/pacman.conf"
if [[ $PACSTRAP == 1 ]]; then
chrun "pacman -S ${ISO_PKGS[*]} $net $luks --noconfirm --needed" >> /tmp/bgout 2>&1 chrun "pacman -S ${ISO_PKGS[*]} $net $luks --noconfirm --needed" >> /tmp/bgout 2>&1
else
chrun 'pacman -Sy' >> /tmp/bgout 2>&1
chrun "pacman -S $net --noconfirm --needed" >> /tmp/bgout 2>&1
fi
if [[ $net == "networkmanager" ]]; then if [[ $net == "networkmanager" ]]; then
chrun 'systemctl enable NetworkManager.service' >> /tmp/bgout 2>&1 chrun 'systemctl enable NetworkManager.service' >> /tmp/bgout 2>&1
@ -2352,7 +2301,7 @@ config_lightdm()
{ {
sed -i "/greeter-session=/ c greeter-session=lightdm-$LIGHTDM_GREETER" "$MNT/etc/lightdm/lightdm.conf" sed -i "/greeter-session=/ c greeter-session=lightdm-$LIGHTDM_GREETER" "$MNT/etc/lightdm/lightdm.conf"
if [[ $LIGHTDM_GREETER == 'gtk-greeter' ]]; then if [[ $LIGHTDM_GREETER == 'gtk-greeter' && $DIST == "ArchLabs" ]]; then
mkdir -p "$MNT/etc/lightdm" mkdir -p "$MNT/etc/lightdm"
cat > "$MNT/etc/lightdm/lightdm-gtk-greeter.conf" <<- EOF cat > "$MNT/etc/lightdm/lightdm-gtk-greeter.conf" <<- EOF
[greeter] [greeter]
@ -3245,7 +3194,7 @@ al_repo()
{ {
local conf="$1" local conf="$1"
grep -q 'archlabs_repo' "$conf" && return 0 grep -q 'archlabs_repo' "$conf" 2> /dev/null && return 0
cat >> "$conf" <<- EOF cat >> "$conf" <<- EOF
@ -3258,6 +3207,7 @@ al_repo()
Server = https://github.com/ARCHLabs/\$repo/raw/master/\$arch Server = https://github.com/ARCHLabs/\$repo/raw/master/\$arch
EOF EOF
return 1
} }
termcol() termcol()
@ -3317,6 +3267,9 @@ errshow()
prechecks() prechecks()
{ {
# check whether we have all steps done for a given level ($1)
# if a fail is encountered we display an error dialog and set
# the selected entry number ($SEL) back to the step required to progress
local i=1 local i=1
if (( $1 >= 0 )) && ! grep -q " $MNT " /proc/mounts; then if (( $1 >= 0 )) && ! grep -q " $MNT " /proc/mounts; then
@ -3487,14 +3440,14 @@ while getopts ":htl:Dnr:b:m:d:" OPT; do
d) DIST="$OPTARG" ;; d) DIST="$OPTARG" ;;
r) r)
if [[ ! -b $OPTARG ]]; then if [[ ! -b $OPTARG ]]; then
msg "Invalid Root" "\nThe installer expects a full path to a block device for root.\n\nExiting..\n" 2 msg "Invalid Root" "\nThe installer expects a full path to a block device for root, e.g. /dev/sda2.\n\nExiting..\n" 2
die 1 die 1
fi fi
ROOT="$OPTARG" ROOT="$OPTARG"
;; ;;
b) b)
if [[ ! -b $OPTARG ]]; then if [[ ! -b $OPTARG ]]; then
msg "Invalid Boot" "\nThe installer expects a full path to a block device for boot.\n\nExiting..\n" 2 msg "Invalid Boot" "\nThe installer expects a full path to a block device for boot, e.g. /dev/sda1.\n\nExiting..\n" 2
die 1 die 1
fi fi
BOOT="$OPTARG" BOOT="$OPTARG"