Cleanup needless splitting of code, add more DMs, remove package bit from background install
This commit is contained in:
parent
831cfbcc58
commit
af36aedb2b
@ -5,7 +5,7 @@
|
||||
# Some ideas and code reworked from other resources
|
||||
# AIF, Cnichi, Calamares, Arch Wiki.. Credit where credit is due
|
||||
|
||||
VER="2.0.58" # installer version
|
||||
VER="2.0.59" # installer version
|
||||
DIST="ArchLabs" # linux distributor
|
||||
MNT="/mnt" # install mountpoint
|
||||
ANS="/tmp/ans" # dialog answer file
|
||||
@ -82,19 +82,11 @@ WARN='' # issued mounting/partitioning warning
|
||||
SEP_BOOT='' # separate boot partition for BIOS
|
||||
AUTOLOGIN='' # enable autologin for xinit
|
||||
CONFIG_DONE='' # basic configuration is finished
|
||||
BROADCOM_WL='' # fixes for broadcom cards eg. BCM4352
|
||||
|
||||
FORMATTED='' # partitions we formatted and should allow skipping
|
||||
AUTO_ROOT_PART='' # root value from auto partition
|
||||
AUTO_BOOT_PART='' # boot value from auto partition
|
||||
|
||||
# iso base, pacstrap when running the installer from a stock arch iso
|
||||
ISO_BASE="b43-firmware b43-fwcutter broadcom-wl clonezilla dhclient dhcpcd ethtool wpa_supplicant "
|
||||
ISO_BASE+="exfat-utils f2fs-tools gptfdisk vim hdparm ipw2100-fw ipw2200-fw nfs-utils nilfs-utils ntfs-3g "
|
||||
ISO_BASE+="pacman-contrib parted rsync sdparm smartmontools wget wireless_tools wpa_actiond xl2tpd dialog parted "
|
||||
ISO_BASE+="alsa-firmware alsa-lib alsa-plugins pulseaudio pulseaudio-alsa networkmanager w3m htop wireless-regdb "
|
||||
ISO_BASE+="lm_sensors lsb-release p7zip pamixer reflector unrar ranger terminus-font ttf-dejavu archlabs-keyring"
|
||||
|
||||
# archlabs base
|
||||
AL_BASE_PKGS="archlabs-skel-base archlabs-fonts archlabs-themes archlabs-dARK archlabs-icons archlabs-wallpapers archlabs-scripts"
|
||||
|
||||
@ -220,6 +212,8 @@ declare -A FS_OPTS=(
|
||||
declare -A LOGIN_PKGS=(
|
||||
[xinit]='xorg-xinit'
|
||||
[ly]='archlabs-ly'
|
||||
[gdm]='gdm'
|
||||
[sddm]='sddm'
|
||||
[lightdm]='lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings accountsservice'
|
||||
) # }
|
||||
|
||||
@ -413,31 +407,30 @@ select_login()
|
||||
{
|
||||
[[ $INSTALL_WMS ]] || return 0
|
||||
|
||||
AUTOLOGIN='' # no autologin unless using xinit
|
||||
|
||||
if [[ -z $LOGIN_TYPE ]]; then
|
||||
dlg LOGIN_TYPE menu "Login Management" "\nSelect what kind of login management to use." \
|
||||
"xinit" "Console login without a display manager" \
|
||||
"ly" "TUI display manager with a ncurses-like interface" \
|
||||
"lightdm" "Lightweight display manager with a gtk greeter" || return 1
|
||||
"lightdm" "Lightweight display manager with a gtk greeter" \
|
||||
"gdm" "Gnome display manager" \
|
||||
"sddm" "Simple desktop display manager" || return 1
|
||||
fi
|
||||
|
||||
if [[ $LOGIN_TYPE == 'xinit' ]]; then
|
||||
EDIT_FILES[login]="/home/$NEWUSER/.xinitrc /home/$NEWUSER/.xprofile"
|
||||
# define what wm/de to use for xinit
|
||||
if (( $(wc -w <<< "$INSTALL_WMS") > 1 )); then
|
||||
dlg LOGIN_WM menu "Login Management" "$_login" $LOGIN_CHOICES || return 1
|
||||
LOGIN_WM="${WM_SESSIONS[$LOGIN_WM]}"
|
||||
fi
|
||||
[[ -z $LOGIN_WM ]] && LOGIN_WM="${WM_SESSIONS[${INSTALL_WMS%% *}]}"
|
||||
# autologin
|
||||
yesno "Autologin" "$(sed "s|USER|$NEWUSER|g; s|RC|$LOGINRC|g" <<< "$_autologin")" && AUTOLOGIN=true || AUTOLOGIN=''
|
||||
else
|
||||
AUTOLOGIN='' # no autologin for DMs
|
||||
if [[ $LOGIN_TYPE == 'lightdm' ]]; then
|
||||
EDIT_FILES[login]="/etc/lightdm/lightdm.conf /etc/lightdm/lightdm-gtk-greeter.conf"
|
||||
elif [[ $LOGIN_TYPE == 'ly' ]]; then
|
||||
EDIT_FILES[login]="/etc/ly/config.ini"
|
||||
fi
|
||||
fi
|
||||
case $LOGIN_TYPE in
|
||||
ly) EDIT_FILES[login]="/etc/ly/config.ini" ;;
|
||||
gdm|sddm) EDIT_FILES[login]="" ;;
|
||||
lightdm) EDIT_FILES[login]="/etc/lightdm/lightdm.conf /etc/lightdm/lightdm-gtk-greeter.conf" ;;
|
||||
xinit) EDIT_FILES[login]="/home/$NEWUSER/.xinitrc /home/$NEWUSER/.xprofile"
|
||||
if (( $(wc -w <<< "$INSTALL_WMS") > 1 )); then
|
||||
dlg LOGIN_WM menu "Login Management" "$_login" $LOGIN_CHOICES || return 1
|
||||
LOGIN_WM="${WM_SESSIONS[$LOGIN_WM]}"
|
||||
fi
|
||||
[[ -z $LOGIN_WM ]] && LOGIN_WM="${WM_SESSIONS[${INSTALL_WMS%% *}]}"
|
||||
yesno "Autologin" "$(sed "s|USER|$NEWUSER|g; s|RC|$LOGINRC|g" <<< "$_autologin")" && AUTOLOGIN=true || AUTOLOGIN=''
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
select_config()
|
||||
@ -759,6 +752,7 @@ part_menu()
|
||||
if [[ $devhash != "$(lsblk -f | base64)" ]]; then
|
||||
msg "Probing Partitions" "\nInforming the kernel of partition changes using partprobe.\n" 0
|
||||
partprobe >/dev/null 2>&1
|
||||
[[ $choice == 'auto' ]] && return
|
||||
fi
|
||||
done
|
||||
}
|
||||
@ -774,21 +768,6 @@ part_show()
|
||||
msg "Device Tree" "\n\n$txt\n\n"
|
||||
}
|
||||
|
||||
part_swap()
|
||||
{
|
||||
if [[ $1 == "$MNT/swapfile" && $SWAP_SIZE ]]; then
|
||||
fallocate -l $SWAP_SIZE "$1" 2>$ERR
|
||||
errshow "fallocate -l $SWAP_SIZE $1"
|
||||
chmod 600 "$1" 2>$ERR
|
||||
errshow "chmod 600 $1"
|
||||
fi
|
||||
mkswap "$1" >/dev/null 2>$ERR
|
||||
errshow "mkswap $1"
|
||||
swapon "$1" >/dev/null 2>$ERR
|
||||
errshow "swapon $1"
|
||||
return 0
|
||||
}
|
||||
|
||||
part_auto()
|
||||
{
|
||||
local device="$1" table="$2" boot_fs="$3" size="$4" dev_info=""
|
||||
@ -938,6 +917,21 @@ part_find()
|
||||
return 0
|
||||
}
|
||||
|
||||
part_swap()
|
||||
{
|
||||
if [[ $1 == "$MNT/swapfile" && $SWAP_SIZE ]]; then
|
||||
fallocate -l $SWAP_SIZE "$1" 2>$ERR
|
||||
errshow "fallocate -l $SWAP_SIZE $1"
|
||||
chmod 600 "$1" 2>$ERR
|
||||
errshow "chmod 600 $1"
|
||||
fi
|
||||
mkswap "$1" >/dev/null 2>$ERR
|
||||
errshow "mkswap $1"
|
||||
swapon "$1" >/dev/null 2>$ERR
|
||||
errshow "swapon $1"
|
||||
return 0
|
||||
}
|
||||
|
||||
part_mount()
|
||||
{
|
||||
local part="$1" mountp="${MNT}$2" fs=""
|
||||
@ -1338,7 +1332,6 @@ install_main()
|
||||
install_user
|
||||
install_login
|
||||
chrun "chown -Rf $NEWUSER:users /home/$NEWUSER"
|
||||
sleep 1
|
||||
|
||||
while :; do
|
||||
dlg choice menu "Finalization" "$_edit" \
|
||||
@ -1357,7 +1350,7 @@ install_main()
|
||||
|
||||
if [[ -z $choice || $choice == 'finished' ]]; then
|
||||
[[ $DEBUG == true && -r $DBG ]] && vim $DBG
|
||||
die 127
|
||||
clear && die 127
|
||||
else
|
||||
local exists=''
|
||||
for f in ${EDIT_FILES[$choice]}; do
|
||||
@ -1374,29 +1367,14 @@ install_main()
|
||||
|
||||
install_base()
|
||||
{
|
||||
if [[ $RSYNC_PID || $MIRROR_PID ]]; then
|
||||
local oldmsg="" msg=""
|
||||
if kill -0 "$RSYNC_PID" 2>/dev/null || kill -0 "$MIRROR_PID" 2>/dev/null; then
|
||||
printf "\nOne or more background install processes are still running, grabbing their output...\n"
|
||||
while kill -0 "$RSYNC_PID" 2>/dev/null || kill -0 "$MIRROR_PID" 2>/dev/null; do
|
||||
msg="$(tail -n 1 /tmp/bg_out)"
|
||||
if [[ "$msg" != "$oldmsg" ]]; then
|
||||
printf "\n%s" "$msg"
|
||||
oldmsg="$msg"
|
||||
else
|
||||
printf "."
|
||||
sleep 0.5
|
||||
fi
|
||||
done
|
||||
fi
|
||||
trap - EXIT
|
||||
unset RSYNC_PID MIRROR_PID
|
||||
else
|
||||
rsync -ahv /run/archiso/sfs/airootfs/ $MNT/ 2>$ERR
|
||||
errshow 1 "rsync -ahv /run/archiso/sfs/airootfs/ $MNT/"
|
||||
install_mirrorlist "$MNT/etc/pacman.d/mirrorlist"
|
||||
chrun "pacman -Syyu --noconfirm && pacman -S $BASE_PKGS --needed --noconfirm"
|
||||
if kill -0 "$RSYNC_PID" 2>/dev/null || kill -0 "$MIRROR_PID" 2>/dev/null; then
|
||||
printf "\nOne or more background install processes are still running, grabbing their output...\n" && cat /tmp/bg_out
|
||||
while kill -0 "$RSYNC_PID" 2>/dev/null || kill -0 "$MIRROR_PID" 2>/dev/null; do
|
||||
sleep 1
|
||||
done
|
||||
fi
|
||||
trap - EXIT
|
||||
unset RSYNC_PID MIRROR_PID
|
||||
|
||||
rm -rf $MNT/etc/mkinitcpio-archiso.conf
|
||||
find $MNT/usr/lib/initcpio -name 'archiso*' -type f -delete
|
||||
@ -1426,11 +1404,6 @@ install_base()
|
||||
chrun "locale-gen"
|
||||
chrun "ln -svf /usr/share/zoneinfo/$ZONE/$SUBZ /etc/localtime"
|
||||
|
||||
if [[ $BROADCOM_WL ]]; then
|
||||
echo 'blacklist bcma' >> $MNT/etc/modprobe.d/blacklist.conf
|
||||
rm -f $MNT/etc/modprobe/
|
||||
fi
|
||||
|
||||
cat > $MNT/etc/X11/xorg.conf.d/00-keyboard.conf <<- EOF
|
||||
# Use localectl(1) to instruct systemd-localed to update it.
|
||||
Section "InputClass"
|
||||
@ -1544,85 +1517,60 @@ install_user()
|
||||
sed -i '/compton/d' $MNT/home/$NEWUSER/.xprofile $MNT/root/.xprofile
|
||||
fi
|
||||
|
||||
# create user home directories (Music, Documents, Downloads, etc..)
|
||||
chrun 'xdg-user-dirs-update'
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
install_xinit()
|
||||
{
|
||||
|
||||
if [[ $INSTALL_WMS ]]; then
|
||||
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"
|
||||
elif [[ $INSTALL_WMS ]]; then
|
||||
printf "exec %s\n" "$LOGIN_WM" >> "$MNT/home/$NEWUSER/.xinitrc"
|
||||
else
|
||||
printf "exec %s\n" "$LOGIN_WM" >> "$MNT/home/$NEWUSER/.xinitrc"
|
||||
fi
|
||||
elif [[ -e $MNT/home/$NEWUSER/.xinitrc ]]; then
|
||||
# no sessions available so remove the exec from ~/.xinitrc and return
|
||||
sed -i '/exec/d' "$MNT/home/$NEWUSER/.xinitrc"
|
||||
return 0
|
||||
fi
|
||||
|
||||
[[ ${EDIT_FILES[login]} == *"$LOGINRC"* ]] || EDIT_FILES[login]+=" /home/$NEWUSER/$LOGINRC"
|
||||
|
||||
if [[ $AUTOLOGIN ]]; then
|
||||
sed -i "s/root/${NEWUSER}/g" $SERVICE/autologin.conf
|
||||
cat > "$MNT/home/$NEWUSER/$LOGINRC" <<- EOF
|
||||
# ~/$LOGINRC
|
||||
# sourced by ${MYSHELL##*/} when used as a login shell
|
||||
|
||||
# automatically run startx when logging in on tty1
|
||||
[ -z \$DISPLAY ] && [ \$XDG_VTNR -eq 1 ] && exec startx
|
||||
EOF
|
||||
else
|
||||
rm -rf $SERVICE
|
||||
fi
|
||||
}
|
||||
|
||||
install_ly()
|
||||
{
|
||||
rm -rf "$SERVICE" "$MNT/home/$NEWUSER"/.{xinitrc,profile,zprofile,bash_profile}
|
||||
chrun 'systemctl enable ly.service' 2>$ERR
|
||||
errshow 1 "systemctl enable ly.service"
|
||||
}
|
||||
|
||||
install_login()
|
||||
{
|
||||
local serv="$MNT/etc/systemd/system/getty@tty1.service.d"
|
||||
|
||||
echo "Setting up $LOGIN_TYPE"
|
||||
SERVICE="$MNT/etc/systemd/system/getty@tty1.service.d"
|
||||
install_${LOGIN_TYPE:-xinit}
|
||||
}
|
||||
|
||||
install_lightdm()
|
||||
{
|
||||
rm -rf "$SERVICE" "$MNT/home/$NEWUSER"/.{xinitrc,profile,zprofile,bash_profile}
|
||||
chrun 'systemctl enable lightdm.service' 2>$ERR
|
||||
errshow 1 "systemctl enable lightdm.service"
|
||||
cat > $MNT/etc/lightdm/lightdm-gtk-greeter.conf <<- EOF
|
||||
# LightDM GTK+ Configuration
|
||||
|
||||
[greeter]
|
||||
default-user-image=/usr/share/icons/ArchLabs-Dark/64x64/places/distributor-logo-archlabs.png
|
||||
background=/usr/share/backgrounds/archlabs/archlabs.jpg
|
||||
theme-name=Adwaita-dark
|
||||
icon-theme-name=Adwaita
|
||||
font-name=DejaVu Sans Mono 11
|
||||
position=30%,end 50%,end
|
||||
EOF
|
||||
case $LOGIN_TYPE in
|
||||
ly|sddm|gdm|lightdm)
|
||||
rm -rf "$serv" "$MNT/home/$NEWUSER/.xinitrc"
|
||||
chrun "systemctl enable $LOGIN_TYPE.service" 2>$ERR
|
||||
errshow 1 "systemctl enable $LOGIN_TYPE.service"
|
||||
if [[ $LOGIN_TYPE == 'lightdm' ]]; then
|
||||
cat > $MNT/etc/lightdm/lightdm-gtk-greeter.conf <<- EOF
|
||||
[greeter]
|
||||
default-user-image=/usr/share/icons/ArchLabs-Dark/64x64/places/distributor-logo-archlabs.png
|
||||
background=/usr/share/backgrounds/archlabs/archlabs.jpg
|
||||
theme-name=Adwaita-dark
|
||||
icon-theme-name=Adwaita
|
||||
font-name=DejaVu Sans Mono 11
|
||||
position=30%,end 50%,end
|
||||
EOF
|
||||
fi
|
||||
;;
|
||||
xinit)
|
||||
if [[ $INSTALL_WMS ]]; then
|
||||
sed -i "/exec/ c exec ${LOGIN_WM}" "$MNT/home/$NEWUSER/.xinitrc"
|
||||
elif [[ -e $MNT/home/$NEWUSER/.xinitrc ]]; then
|
||||
sed -i '/exec/d' "$MNT/home/$NEWUSER/.xinitrc"
|
||||
return 0
|
||||
fi
|
||||
if [[ $AUTOLOGIN ]]; then
|
||||
sed -i "s/root/${NEWUSER}/g" $serv/autologin.conf
|
||||
cat > "$MNT/home/$NEWUSER/$LOGINRC" <<- EOF
|
||||
# automatically run startx when logging in on tty1
|
||||
[ -z \$DISPLAY ] && [ \$XDG_VTNR -eq 1 ] && exec startx
|
||||
EOF
|
||||
else
|
||||
rm -rf $serv
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
install_packages()
|
||||
{
|
||||
local rmpkg=""
|
||||
local rmpkg="archlabs-installer "
|
||||
local inpkg="$BASE_PKGS ${LOGIN_PKGS[$LOGIN_TYPE]} $PACKAGES $USER_PKGS "
|
||||
|
||||
if pacman -Qsq 'archlabs-installer' >/dev/null 2>&1; then
|
||||
rmpkg+="archlabs-installer "
|
||||
elif [[ -e "$MNT/usr/bin/archlabs-installer" ]]; then
|
||||
rm -f "$MNT/usr/bin/archlabs-installer"
|
||||
fi
|
||||
|
||||
# add extra packages chosen throughout the install
|
||||
if [[ $MYSHELL == '/usr/bin/zsh' ]]; then
|
||||
inpkg+="zsh-completions "
|
||||
@ -1630,6 +1578,8 @@ install_packages()
|
||||
rmpkg+="zsh "
|
||||
[[ $MYSHELL == '/usr/bin/mksh' ]] && inpkg+="mksh "
|
||||
fi
|
||||
|
||||
# using a different kernel, remove the stock one
|
||||
if [[ $KERNEL != 'linux' ]]; then
|
||||
inpkg+="$KERNEL "
|
||||
rmpkg+="linux "
|
||||
@ -1648,7 +1598,7 @@ install_packages()
|
||||
chrun "pacman -Syyu --noconfirm"
|
||||
|
||||
# remove the packages we don't want on the installed system
|
||||
[[ $rmpkg ]] && chrun "pacman -Rns $rmpkg --noconfirm"
|
||||
[[ $rmpkg ]] && chrun "pacman -Rnsc $rmpkg --noconfirm"
|
||||
|
||||
# reinstalling iputils fixes the network issue for non-root users
|
||||
chrun "pacman -S iputils $UCODE --noconfirm"
|
||||
@ -1742,15 +1692,11 @@ install_mirrorlist()
|
||||
|
||||
install_background()
|
||||
{
|
||||
yesno "Background Install" "\nBegin install in the background?\n" || return 0
|
||||
|
||||
msg "Background Install" "\nInstall will now begin in the background?\n" 2
|
||||
rsync -a /run/archiso/sfs/airootfs/ $MNT/ &
|
||||
RSYNC_PID=$!
|
||||
|
||||
mkdir -p $MNT/var/lib/pacman # can help with pacman errors
|
||||
( install_mirrorlist "$MNT/etc/pacman.d/mirrorlist" >/dev/null 2>&1 && sleep 1 && chrun "pacman -Syyu $BASE_PKGS --needed --noconfirm" >> /tmp/bg_out 2>&1 ) &
|
||||
( install_mirrorlist "$MNT/etc/pacman.d/mirrorlist" >>/tmp/bg_out 2>&1 ) &
|
||||
MIRROR_PID=$!
|
||||
|
||||
# end the background processes before exiting
|
||||
trap "kill $RSYNC_PID $MIRROR_PID 2>/dev/null" EXIT
|
||||
}
|
||||
@ -2202,7 +2148,7 @@ luks_open()
|
||||
[[ $LUKS_PART ]] || return 1
|
||||
|
||||
luks_pass "$_luksopen" || return 1
|
||||
msg "$_luksopen" "\nOpening encrypted partition: $LUKS_NAME\n\nDevice or volume used: $LUKS_PART\n" 0
|
||||
msg "$_luksopen" "\nOpening encrypted partition: $LUKS_NAME\n\nUsing device/volume: $LUKS_PART\n" 0
|
||||
cryptsetup open --type luks "$LUKS_PART" "$LUKS_NAME" <<< "$LUKS_PASS" 2>$ERR
|
||||
errshow "cryptsetup open --type luks $LUKS_PART $LUKS_NAME" || return 1
|
||||
LUKS='encrypted'; luks_show
|
||||
@ -2264,7 +2210,7 @@ luks_pass()
|
||||
luks_show()
|
||||
{
|
||||
sleep 0.5
|
||||
msg "$_luksnew" "\nEncrypted partition opened and ready for mounting.\n\n$(lsblk -o NAME,MODEL,SIZE,TYPE,FSTYPE "$LUKS_PART")\n\n"
|
||||
msg "$_luksnew" "\nEncrypted partition ready for mounting.\n\n$(lsblk -o NAME,MODEL,SIZE,TYPE,FSTYPE "$LUKS_PART")\n\n"
|
||||
}
|
||||
|
||||
luks_setup()
|
||||
@ -2497,13 +2443,6 @@ errshow()
|
||||
return 1
|
||||
}
|
||||
|
||||
load_bcm()
|
||||
{
|
||||
msg "Broadcom Wireless Setup" "\nDetected chipset is Broadcom BCM4352\n\nDisabling bcma/b43 modules and loading wl module.\n" 1
|
||||
{ rmmod wl; rmmod bcma; rmmod b43; rmmod ssb; modprobe wl; depmod -a; } >/dev/null 2>&1
|
||||
BROADCOM_WL=true
|
||||
}
|
||||
|
||||
prechecks()
|
||||
{
|
||||
local i=1
|
||||
@ -2638,10 +2577,6 @@ system_devices
|
||||
msg "Welcome to the $DIST Installer" "\nThis will help you get $DIST setup on your system.\nHaving previous GNU/Linux and shell experience will be an asset, however we try our best to keep things simple.\n\nIf you are unsure about an option, a default will be listed or\nthe first selected option will usually be the default (excluding language and timezone).\n\n\nMenu Navigation:\n\n - Select items with the arrow keys or the option number.\n - Use [Space] to toggle options and [Enter] to confirm.\n - Switch between buttons using [Tab] or the arrow keys.\n - Use [Page Up] and [Page Down] to jump whole pages\n - Press the highlighted key of an option to select it.\n"
|
||||
|
||||
select_keymap || { clear; die 0; }
|
||||
|
||||
# try to fix problematic broadcom wireless chipset before network check
|
||||
lspci -vnn -d 14e4: | grep -q 'BCM4352' && load_bcm
|
||||
|
||||
net_connect || { msg "Not Connected" "\nThis installer requires an active internet connection.\n\nExiting..\n" 2; die 1; }
|
||||
|
||||
while :; do
|
||||
|
Reference in New Issue
Block a user