Clean up some functions, simplify some sections, and add more comments
This commit is contained in:
parent
8004a9faf8
commit
910a8a476b
@ -5,7 +5,7 @@
|
|||||||
# Some ideas and code reworked from other resources
|
# Some ideas and code reworked from other resources
|
||||||
# AIF, Cnichi, Calamares, Arch Wiki.. Credit where credit is due
|
# AIF, Cnichi, Calamares, Arch Wiki.. Credit where credit is due
|
||||||
|
|
||||||
VER="2.0.47" # installer version
|
VER="2.0.48" # installer version
|
||||||
DIST="ArchLabs" # linux distributor
|
DIST="ArchLabs" # linux distributor
|
||||||
MNT="/mnt" # install mountpoint
|
MNT="/mnt" # install mountpoint
|
||||||
ANS="/tmp/ans" # dialog answer file
|
ANS="/tmp/ans" # dialog answer file
|
||||||
@ -420,9 +420,9 @@ select_login()
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $LOGIN_TYPE == 'lightdm' ]]; then
|
if [[ $LOGIN_TYPE == 'lightdm' ]]; then
|
||||||
|
AUTOLOGIN=''
|
||||||
LOGIN_PKGS="lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings accountsservice"
|
LOGIN_PKGS="lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings accountsservice"
|
||||||
EDIT_FILES[login]="/etc/lightdm/lightdm.conf /etc/lightdm/lightdm-gtk-greeter.conf"
|
EDIT_FILES[login]="/etc/lightdm/lightdm.conf /etc/lightdm/lightdm-gtk-greeter.conf"
|
||||||
AUTOLOGIN=''
|
|
||||||
else
|
else
|
||||||
if (( WM_NUM == 1 )); then
|
if (( WM_NUM == 1 )); then
|
||||||
LOGIN_WM="${WM_SESSIONS[$INSTALL_WMS]}"
|
LOGIN_WM="${WM_SESSIONS[$INSTALL_WMS]}"
|
||||||
@ -431,7 +431,10 @@ select_login()
|
|||||||
LOGIN_WM="${WM_SESSIONS[$LOGIN_WM]}"
|
LOGIN_WM="${WM_SESSIONS[$LOGIN_WM]}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local txt="\nDo you want autologin enabled for $NEWUSER?\n\nIf so the following two files will be created (disable autologin by removing them):\n\n - /home/$NEWUSER/$LOGINRC (this runs startx when logging in on tty1)\n - /etc/systemd/system/getty@tty1.service.d/autologin.conf (this logs in $NEWUSER without a password)\n"
|
local txt="\nDo you want autologin enabled for $NEWUSER?\n\n"
|
||||||
|
txt+="If so the following two files will be created (disable autologin by removing them):\n\n"
|
||||||
|
txt+="- /home/$NEWUSER/$LOGINRC (run startx when logging in on tty1)\n"
|
||||||
|
txt+="- /etc/systemd/system/getty@tty1.service.d/autologin.conf (login $NEWUSER without password)\n"
|
||||||
yesno "Autologin" "$txt" && AUTOLOGIN=true || AUTOLOGIN=''
|
yesno "Autologin" "$txt" && AUTOLOGIN=true || AUTOLOGIN=''
|
||||||
LOGIN_PKGS="xorg-xinit"
|
LOGIN_PKGS="xorg-xinit"
|
||||||
EDIT_FILES[login]="/home/$NEWUSER/.xinitrc /home/$NEWUSER/.xprofile"
|
EDIT_FILES[login]="/home/$NEWUSER/.xinitrc /home/$NEWUSER/.xprofile"
|
||||||
@ -714,7 +717,7 @@ select_packages()
|
|||||||
|
|
||||||
part_menu()
|
part_menu()
|
||||||
{
|
{
|
||||||
check_background_install || return 0
|
is_bg_install || return 0
|
||||||
local device choice devhash
|
local device choice devhash
|
||||||
devhash="$(lsblk -f | base64)"
|
devhash="$(lsblk -f | base64)"
|
||||||
umount_dir $MNT
|
umount_dir $MNT
|
||||||
@ -935,7 +938,7 @@ part_shrink()
|
|||||||
mount "$part" $MNT >/dev/null 2>&1; sleep 0.5
|
mount "$part" $MNT >/dev/null 2>&1; sleep 0.5
|
||||||
min=$(df --output=used --block-size=MiB "$part" | awk 'NR == 2 {print int($1) + 256}')
|
min=$(df --output=used --block-size=MiB "$part" | awk 'NR == 2 {print int($1) + 256}')
|
||||||
max=$(df --output=avail --block-size=MiB "$part" | awk 'NR == 2 {print int($1)}')
|
max=$(df --output=avail --block-size=MiB "$part" | awk 'NR == 2 {print int($1)}')
|
||||||
umount $MNT >/dev/null 2>&1
|
umount_dir $MNT
|
||||||
tput cnorm
|
tput cnorm
|
||||||
if dialog --backtitle "$DIST Installer - $SYS - v$VER" --title " Resize: $part " --rangebox "$_resize" 17 "$COLUMNS" "$min" "$max" $((max / 2)) 2>$ANS; then
|
if dialog --backtitle "$DIST Installer - $SYS - v$VER" --title " Resize: $part " --rangebox "$_resize" 17 "$COLUMNS" "$min" "$max" $((max / 2)) 2>$ANS; then
|
||||||
size=$(< "$ANS")
|
size=$(< "$ANS")
|
||||||
@ -1087,7 +1090,7 @@ part_mountconf()
|
|||||||
|
|
||||||
select_menu()
|
select_menu()
|
||||||
{
|
{
|
||||||
check_background_install || return 0
|
is_bg_install || return 0
|
||||||
lvm_detect
|
lvm_detect
|
||||||
umount_dir $MNT
|
umount_dir $MNT
|
||||||
part_find 'part|lvm|crypt' || { SEL=2; return 1; }
|
part_find 'part|lvm|crypt' || { SEL=2; return 1; }
|
||||||
@ -1342,7 +1345,7 @@ install_base()
|
|||||||
done
|
done
|
||||||
trap - EXIT
|
trap - EXIT
|
||||||
unset RSYNC_PID MIRROR_PID
|
unset RSYNC_PID MIRROR_PID
|
||||||
elif [[ -d /run/archiso/sfs/airootfs/etc/skel ]]; then
|
elif hash rsync >/dev/null 2>&1 && [[ -d /run/archiso/sfs/airootfs/etc/skel ]]; then
|
||||||
rsync -ahv /run/archiso/sfs/airootfs/ $MNT/ 2>$ERR
|
rsync -ahv /run/archiso/sfs/airootfs/ $MNT/ 2>$ERR
|
||||||
errshow 1 "rsync -ahv /run/archiso/sfs/airootfs/ $MNT/"
|
errshow 1 "rsync -ahv /run/archiso/sfs/airootfs/ $MNT/"
|
||||||
install_mirrorlist "$MNT/etc/pacman.d/mirrorlist"
|
install_mirrorlist "$MNT/etc/pacman.d/mirrorlist"
|
||||||
@ -1429,8 +1432,10 @@ install_boot()
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $SYS == 'UEFI' ]]; then
|
if [[ $SYS == 'UEFI' ]]; then
|
||||||
|
# our old installs
|
||||||
find $MNT/$BOOTDIR/EFI/ -maxdepth 1 -mindepth 1 -iname "$DIST" -type d -delete
|
find $MNT/$BOOTDIR/EFI/ -maxdepth 1 -mindepth 1 -iname "$DIST" -type d -delete
|
||||||
find $MNT/$BOOTDIR/EFI/ -maxdepth 1 -mindepth 1 -iname 'boot' -type d -delete
|
# generic BOOT/ dir
|
||||||
|
find $MNT/$BOOTDIR/EFI/ -maxdepth 1 -mindepth 1 -iname 'BOOT' -type d -delete
|
||||||
fi
|
fi
|
||||||
|
|
||||||
prerun_$BOOTLDR
|
prerun_$BOOTLDR
|
||||||
@ -1438,8 +1443,8 @@ install_boot()
|
|||||||
errshow 1 "${BCMDS[$BOOTLDR]}"
|
errshow 1 "${BCMDS[$BOOTLDR]}"
|
||||||
|
|
||||||
if [[ -d $MNT/hostrun ]]; then
|
if [[ -d $MNT/hostrun ]]; then
|
||||||
umount $MNT/hostrun/udev >/dev/null 2>&1
|
# cleanup the bind mounts we made earlier for the grub-probe module
|
||||||
umount $MNT/hostrun/lvm >/dev/null 2>&1
|
umount_dir $MNT/hostrun/{udev,lvm}
|
||||||
rm -rf $MNT/hostrun >/dev/null 2>&1
|
rm -rf $MNT/hostrun >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -1464,10 +1469,11 @@ install_user()
|
|||||||
{
|
{
|
||||||
chrun "chpasswd <<< 'root:$ROOT_PASS'" 2>$ERR
|
chrun "chpasswd <<< 'root:$ROOT_PASS'" 2>$ERR
|
||||||
errshow 1 "set root password"
|
errshow 1 "set root password"
|
||||||
if [[ $MYSHELL != *zsh ]]; then
|
if [[ $MYSHELL != "/usr/bin/zsh" ]]; then
|
||||||
|
# root uses zsh by default, change it if something else was chosen
|
||||||
chrun "usermod -s $MYSHELL root" 2>$ERR
|
chrun "usermod -s $MYSHELL root" 2>$ERR
|
||||||
errshow 1 "usermod -s $MYSHELL root"
|
errshow 1 "usermod -s $MYSHELL root"
|
||||||
[[ $MYSHELL == "/usr/bin/mksh" ]] && cp -fv $MNT/etc/skel/.mkshrc /root/.mkshrc
|
cp -fv $MNT/etc/skel/.mkshrc $MNT/root/.mkshrc
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local groups='audio,autologin,floppy,log,network,rfkill,scanner,storage,optical,power,wheel'
|
local groups='audio,autologin,floppy,log,network,rfkill,scanner,storage,optical,power,wheel'
|
||||||
@ -1487,9 +1493,10 @@ install_user()
|
|||||||
|
|
||||||
[[ $INSTALL_WMS == *dwm* ]] && install_suckless
|
[[ $INSTALL_WMS == *dwm* ]] && install_suckless
|
||||||
[[ $INSTALL_WMS == *awesome* ]] && install_awesome
|
[[ $INSTALL_WMS == *awesome* ]] && install_awesome
|
||||||
|
[[ $WM_PKGS == *xfce* ]] && echo 'volumeicon &' >> $MNT/home/$NEWUSER/.xprofile
|
||||||
|
|
||||||
# remove some commands from ~/.xprofile when using KDE or Gnome as the login session
|
# remove some commands from ~/.xprofile when using KDE or Gnome as the login session
|
||||||
if [[ $LOGIN_WM =~ (startkde|gnome-session) ]]; then
|
if [[ $LOGIN_WM =~ (startkde|gnome-session) || ($LOGIN_TYPE == 'lightdm' && $WM_PKGS =~ (plasma|gnome)) ]]; then
|
||||||
sed -i '/super/d' $MNT/home/$NEWUSER/.xprofile $MNT/root/.xprofile
|
sed -i '/super/d' $MNT/home/$NEWUSER/.xprofile $MNT/root/.xprofile
|
||||||
sed -i '/nitrogen/d' $MNT/home/$NEWUSER/.xprofile $MNT/root/.xprofile
|
sed -i '/nitrogen/d' $MNT/home/$NEWUSER/.xprofile $MNT/root/.xprofile
|
||||||
sed -i '/al-compositor/d' $MNT/home/$NEWUSER/.xprofile $MNT/root/.xprofile
|
sed -i '/al-compositor/d' $MNT/home/$NEWUSER/.xprofile $MNT/root/.xprofile
|
||||||
@ -1516,11 +1523,12 @@ install_xinit()
|
|||||||
# sourced by ${MYSHELL##*/} when used as a login shell
|
# sourced by ${MYSHELL##*/} when used as a login shell
|
||||||
|
|
||||||
# automatically run startx when logging in on tty1
|
# automatically run startx when logging in on tty1
|
||||||
[[ -z \$DISPLAY && \$XDG_VTNR -eq 1 ]] && exec startx -- vt1
|
if [ -z \$DISPLAY ] && [ \$XDG_VTNR -eq 1 ]; then
|
||||||
|
exec startx
|
||||||
|
fi
|
||||||
EOF
|
EOF
|
||||||
else
|
else
|
||||||
rm -rf $SERVICE
|
rm -rf $SERVICE
|
||||||
rm -rf $MNT/home/$NEWUSER/.{profile,zprofile,bash_profile}
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1552,6 +1560,8 @@ EOF
|
|||||||
|
|
||||||
install_awesome()
|
install_awesome()
|
||||||
{
|
{
|
||||||
|
# downloads and sets up @elenapan's awesome WM config hosted on github
|
||||||
|
|
||||||
if chrun "git clone https://github.com/elenapan/archlabs-awesome /home/$NEWUSER/archlabs-awesome"; then
|
if chrun "git clone https://github.com/elenapan/archlabs-awesome /home/$NEWUSER/archlabs-awesome"; then
|
||||||
cp -rT "/mnt/home/$NEWUSER/archlabs-awesome" "/mnt/home/$NEWUSER"
|
cp -rT "/mnt/home/$NEWUSER/archlabs-awesome" "/mnt/home/$NEWUSER"
|
||||||
cp -rT "/mnt/home/$NEWUSER/archlabs-awesome" /mnt/etc/skel
|
cp -rT "/mnt/home/$NEWUSER/archlabs-awesome" /mnt/etc/skel
|
||||||
@ -1574,20 +1584,38 @@ install_packages()
|
|||||||
rm -f "$MNT/usr/bin/archlabs-installer"
|
rm -f "$MNT/usr/bin/archlabs-installer"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# add extras or missed packages gathered throughout the install
|
||||||
[[ $UCODE ]] && inpkg+=" $UCODE"
|
[[ $UCODE ]] && inpkg+=" $UCODE"
|
||||||
[[ $MYSHELL == *mksh ]] && inpkg+=" mksh"
|
|
||||||
[[ $KERNEL == 'linux' ]] || { inpkg+=" $KERNEL"; rmpkg+=" linux"; }
|
[[ $KERNEL == 'linux' ]] || { inpkg+=" $KERNEL"; rmpkg+=" linux"; }
|
||||||
[[ $inpkg =~ (term|urxvt|tilix|alacritty|sakura|tilda|plasma|cinnamon) || $INSTALL_WMS == *dwm* ]] || inpkg+=" xterm"
|
[[ $MYSHELL == "/usr/bin/mksh" ]] && inpkg+=" mksh"
|
||||||
[[ $MYSHELL == '/usr/bin/zsh' ]] && inpkg+=" zsh-completions"
|
if [[ $MYSHELL == '/usr/bin/zsh' ]]; then
|
||||||
|
inpkg+=" zsh-completions"
|
||||||
|
else
|
||||||
|
rmpkg+=" zsh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# packages only installed for certain WM/DE
|
||||||
[[ $INSTALL_WMS =~ ^(plasma|gnome|cinnamon)$ ]] || inpkg+=" archlabs-ksuperkey"
|
[[ $INSTALL_WMS =~ ^(plasma|gnome|cinnamon)$ ]] || inpkg+=" archlabs-ksuperkey"
|
||||||
[[ $INSTALL_WMS =~ (openbox|bspwm|i3-gaps|dwm|fluxbox) ]] && inpkg+=" $WM_BASE_PKGS"
|
[[ $INSTALL_WMS =~ (openbox|bspwm|i3-gaps|dwm|fluxbox) ]] && inpkg+=" $WM_BASE_PKGS"
|
||||||
|
|
||||||
|
# ensure a terminal gets installed
|
||||||
|
[[ $inpkg =~ (term|urxvt|tilix|alacritty|sakura|tilda|plasma|cinnamon) || $INSTALL_WMS == *dwm* ]] || inpkg+=" xterm"
|
||||||
|
|
||||||
|
# update fully first to avoid issues
|
||||||
chrun "pacman -Syyu --noconfirm"
|
chrun "pacman -Syyu --noconfirm"
|
||||||
|
|
||||||
|
# remove packages we no longer want
|
||||||
[[ $rmpkg ]] && chrun "pacman -Rns $rmpkg --noconfirm"
|
[[ $rmpkg ]] && chrun "pacman -Rns $rmpkg --noconfirm"
|
||||||
|
|
||||||
|
# for some reason the user has "no network" after install even though the
|
||||||
|
# system is connected, reinstalling iputils fixes it
|
||||||
chrun "pacman -S iputils --noconfirm"
|
chrun "pacman -S iputils --noconfirm"
|
||||||
|
|
||||||
|
# install all the packages chosen throughout the install
|
||||||
chrun "pacman -S $inpkg --needed --noconfirm" 2>$ERR
|
chrun "pacman -S $inpkg --needed --noconfirm" 2>$ERR
|
||||||
errshow 1 "pacman -S $inpkg --needed --noconfirm"
|
errshow 1 "pacman -S $inpkg --needed --noconfirm"
|
||||||
|
|
||||||
|
# extras for bootloaders
|
||||||
if [[ $BOOTLDR == 'grub' ]]; then
|
if [[ $BOOTLDR == 'grub' ]]; then
|
||||||
if [[ $SYS == 'BIOS' ]]; then
|
if [[ $SYS == 'BIOS' ]]; then
|
||||||
chrun "pacman -S grub os-prober --needed --noconfirm" 2>$ERR
|
chrun "pacman -S grub os-prober --needed --noconfirm" 2>$ERR
|
||||||
@ -1603,13 +1631,16 @@ install_packages()
|
|||||||
chrun "pacman -S efibootmgr --needed --noconfirm" 2>$ERR
|
chrun "pacman -S efibootmgr --needed --noconfirm" 2>$ERR
|
||||||
errshow 1 "pacman -S efibootmgr --needed --noconfirm"
|
errshow 1 "pacman -S efibootmgr --needed --noconfirm"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
install_suckless()
|
install_suckless()
|
||||||
{
|
{
|
||||||
mkdir -pv $MNT/home/$NEWUSER/suckless
|
mkdir -pv $MNT/home/$NEWUSER/suckless
|
||||||
|
|
||||||
for i in dwm dmenu st; do
|
for i in dwm dmenu st; do
|
||||||
if chrun "git clone https://git.suckless.org/$i /home/$NEWUSER/suckless/$i"; then
|
if chrun "git clone https://git.suckless.org/$i /home/$NEWUSER/suckless/$i"; then
|
||||||
chrun "cd /home/$NEWUSER/suckless/$i; make PREFIX=/usr install; make clean; rm config.h"
|
chrun "cd /home/$NEWUSER/suckless/$i; make PREFIX=/usr install; make clean; rm config.h"
|
||||||
@ -1642,17 +1673,15 @@ install_mkinitcpio()
|
|||||||
|
|
||||||
install_mirrorlist()
|
install_mirrorlist()
|
||||||
{
|
{
|
||||||
mfile="$1"
|
local mfile="$1" # output mirrorlist file
|
||||||
|
|
||||||
if hash reflector >/dev/null 2>&1; then
|
if hash reflector >/dev/null 2>&1; then
|
||||||
reflector --score 120 -l 50 -f 5 --sort rate --save "$mfile"
|
reflector --score 120 -l 50 -f 5 --sort rate --save "$mfile"
|
||||||
elif hash rankmirrors >/dev/null 2>&1; then
|
elif hash rankmirrors >/dev/null 2>&1; then
|
||||||
ip_add="$(curl -fsSL "http://api.ipstack.com/check&?access_key=5f29642060ab983b31fdf4c2935d8c56&fields=ip" |
|
ip_add="$(curl -fsSL "http://api.ipstack.com/check&?access_key=5f29642060ab983b31fdf4c2935d8c56&fields=ip" |
|
||||||
python -c "import sys, json; print(json.load(sys.stdin)['ip'])")"
|
python -c "import sys, json; print(json.load(sys.stdin)['ip'])")"
|
||||||
|
|
||||||
country="$(curl -fsSL "http://api.ipstack.com/${ip_add}?access_key=5f29642060ab983b31fdf4c2935d8c56&fields=country_code" |
|
country="$(curl -fsSL "http://api.ipstack.com/${ip_add}?access_key=5f29642060ab983b31fdf4c2935d8c56&fields=country_code" |
|
||||||
python -c "import sys, json; print(json.load(sys.stdin)['country_code'])")"
|
python -c "import sys, json; print(json.load(sys.stdin)['country_code'])")"
|
||||||
|
|
||||||
if [[ "$country" ]]; then
|
if [[ "$country" ]]; then
|
||||||
if [[ $country =~ (CA|US) ]]; then
|
if [[ $country =~ (CA|US) ]]; then
|
||||||
mirror="https://www.archlinux.org/mirrorlist/?country=US&country=CA&use_mirror_status=on"
|
mirror="https://www.archlinux.org/mirrorlist/?country=US&country=CA&use_mirror_status=on"
|
||||||
@ -1665,7 +1694,7 @@ install_mirrorlist()
|
|||||||
mirror="https://www.archlinux.org/mirrorlist/?country=all&use_mirror_status=on"
|
mirror="https://www.archlinux.org/mirrorlist/?country=all&use_mirror_status=on"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
curl -fsSL "$mirror" | sed -e 's/^#Server/Server/' -e '/^#/d' | rankmirrors -n 6 - >/etc/pacman.d/mirrorlist
|
curl -fsSL "$mirror" | sed -e 's/^#Server/Server/' -e '/^#/d' | rankmirrors -n 6 - >"$mfile"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
@ -1674,12 +1703,13 @@ install_mirrorlist()
|
|||||||
install_background()
|
install_background()
|
||||||
{
|
{
|
||||||
if [[ -d /run/archiso/sfs/airootfs/etc/skel ]] && grep -qw "$MNT" /proc/mounts && (grep -qw "$MNT/$BOOTDIR" /proc/mounts || [[ $SYS == 'BIOS' && -z $LUKS ]]); then
|
if [[ -d /run/archiso/sfs/airootfs/etc/skel ]] && grep -qw "$MNT" /proc/mounts && (grep -qw "$MNT/$BOOTDIR" /proc/mounts || [[ $SYS == 'BIOS' && -z $LUKS ]]); then
|
||||||
yesno "Background Install" "\nSome parts of the install can be done in the background now, base unpack, mirrorlist sort, system update, and base packages.\n\nDo you want to start the background process?\n" || return 0
|
yesno "Background Install" "\nBegin install in the background?\n" || return 0
|
||||||
rsync -a /run/archiso/sfs/airootfs/ $MNT/ &
|
rsync -a /run/archiso/sfs/airootfs/ $MNT/ &
|
||||||
RSYNC_PID=$!
|
RSYNC_PID=$!
|
||||||
( install_mirrorlist "$MNT/etc/pacman.d/mirrorlist" && chrun "pacman -Syyu $BASE_PKGS --needed --noconfirm" >> /tmp/bg_out 2>&1 ) &
|
( install_mirrorlist "$MNT/etc/pacman.d/mirrorlist"; chrun "pacman -Syyu $BASE_PKGS --needed --noconfirm" >> /tmp/bg_out 2>&1 ) &
|
||||||
MIRROR_PID=$!
|
MIRROR_PID=$!
|
||||||
trap "kill $RSYNC_PID 2>/dev/null; kill $MIRROR_PID 2>/dev/null" EXIT
|
# end the background processes before exiting
|
||||||
|
trap "kill $RSYNC_PID $MIRROR_PID 2>/dev/null" EXIT
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -1695,9 +1725,9 @@ setup_grub()
|
|||||||
[[ $BOOT_DEV ]] || { part_device 1 || return 1; }
|
[[ $BOOT_DEV ]] || { part_device 1 || return 1; }
|
||||||
BCMDS[grub]="grub-install --recheck --force --target=i386-pc $BOOT_DEV"
|
BCMDS[grub]="grub-install --recheck --force --target=i386-pc $BOOT_DEV"
|
||||||
else
|
else
|
||||||
if [[ $ROOT_PART == */dev/mapper/* && -z $LVM && -z $LUKS_PASS ]]; then
|
# if [[ $ROOT_PART == */dev/mapper/* && -z $LVM && -z $LUKS_PASS ]]; then
|
||||||
luks_pass "$_luksopen" 1 || return 1
|
# luks_pass "$_luksopen" 1 || return 1
|
||||||
fi
|
# fi
|
||||||
BCMDS[grub]="mount -t efivarfs efivarfs /sys/firmware/efi/efivars >/dev/null 2>&1
|
BCMDS[grub]="mount -t efivarfs efivarfs /sys/firmware/efi/efivars >/dev/null 2>&1
|
||||||
grub-install --recheck --force --target=x86_64-efi --efi-directory=/$BOOTDIR --bootloader-id=$DIST"
|
grub-install --recheck --force --target=x86_64-efi --efi-directory=/$BOOTDIR --bootloader-id=$DIST"
|
||||||
grep -q /sys/firmware/efi/efivars /proc/mounts || mount -t efivarfs efivarfs /sys/firmware/efi/efivars >/dev/null 2>&1
|
grep -q /sys/firmware/efi/efivars /proc/mounts || mount -t efivarfs efivarfs /sys/firmware/efi/efivars >/dev/null 2>&1
|
||||||
@ -1731,8 +1761,7 @@ prerun_grub()
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# setup for os-prober module
|
# setup for os-prober module
|
||||||
mkdir -p /run/{lvm,udev}
|
mkdir -p /run/{lvm,udev} $MNT/hostrun/{lvm,udev}
|
||||||
mkdir -p $MNT/hostrun/{lvm,udev}
|
|
||||||
mount --bind /run/lvm $MNT/hostrun/lvm
|
mount --bind /run/lvm $MNT/hostrun/lvm
|
||||||
mount --bind /run/udev $MNT/hostrun/udev
|
mount --bind /run/udev $MNT/hostrun/udev
|
||||||
|
|
||||||
@ -1749,7 +1778,6 @@ prerun_efistub()
|
|||||||
BCMDS[systemd-boot]="mount -t efivarfs efivarfs /sys/firmware/efi/efivars >/dev/null 2>&1
|
BCMDS[systemd-boot]="mount -t efivarfs efivarfs /sys/firmware/efi/efivars >/dev/null 2>&1
|
||||||
efibootmgr -v -d $BOOT_DEV -p $BOOT_PART_NUM -c -L '${DIST} Linux' -l /vmlinuz-${KERNEL} \
|
efibootmgr -v -d $BOOT_DEV -p $BOOT_PART_NUM -c -L '${DIST} Linux' -l /vmlinuz-${KERNEL} \
|
||||||
-u 'root=$ROOT_PART_ID rw $([[ $UCODE ]] && printf 'initrd=\%s.img ' "$UCODE")initrd=\initramfs-${KERNEL}.img'"
|
-u 'root=$ROOT_PART_ID rw $([[ $UCODE ]] && printf 'initrd=\%s.img ' "$UCODE")initrd=\initramfs-${KERNEL}.img'"
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_syslinux()
|
setup_syslinux()
|
||||||
@ -1760,7 +1788,6 @@ setup_syslinux()
|
|||||||
EDIT_FILES[bootloader]="/boot/EFI/syslinux/syslinux.cfg"
|
EDIT_FILES[bootloader]="/boot/EFI/syslinux/syslinux.cfg"
|
||||||
BCMDS[syslinux]="mount -t efivarfs efivarfs /sys/firmware/efi/efivars >/dev/null 2>&1
|
BCMDS[syslinux]="mount -t efivarfs efivarfs /sys/firmware/efi/efivars >/dev/null 2>&1
|
||||||
efibootmgr -v -c -d $BOOT_DEV -p $BOOT_PART_NUM -l /EFI/syslinux/syslinux.efi -L $DIST"
|
efibootmgr -v -c -d $BOOT_DEV -p $BOOT_PART_NUM -l /EFI/syslinux/syslinux.efi -L $DIST"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1902,7 +1929,7 @@ EOF
|
|||||||
|
|
||||||
lvm_menu()
|
lvm_menu()
|
||||||
{
|
{
|
||||||
check_background_install || return 1
|
is_bg_install || return 1
|
||||||
lvm_detect
|
lvm_detect
|
||||||
local choice
|
local choice
|
||||||
dlg choice menu "Logical Volume Management" "$_lvmmenu" \
|
dlg choice menu "Logical Volume Management" "$_lvmmenu" \
|
||||||
@ -2113,7 +2140,7 @@ lvm_volume_name()
|
|||||||
luks_menu()
|
luks_menu()
|
||||||
{
|
{
|
||||||
local choice
|
local choice
|
||||||
check_background_install || return 1
|
is_bg_install || return 1
|
||||||
dlg choice menu "LUKS Encryption" "$_luksmenu" \
|
dlg choice menu "LUKS Encryption" "$_luksmenu" \
|
||||||
"$_luksnew" "cryptsetup -q luksFormat" \
|
"$_luksnew" "cryptsetup -q luksFormat" \
|
||||||
"$_luksopen" "cryptsetup open --type luks" \
|
"$_luksopen" "cryptsetup open --type luks" \
|
||||||
@ -2282,28 +2309,20 @@ ofn()
|
|||||||
|
|
||||||
die()
|
die()
|
||||||
{
|
{
|
||||||
local exitcode="$1"
|
local ecode="$1"
|
||||||
|
|
||||||
trap - INT
|
trap - INT
|
||||||
trap - TSTP
|
|
||||||
tput cnorm
|
tput cnorm
|
||||||
if [[ -d $MNT ]] && command cd /; then
|
if [[ -d $MNT ]] && command cd /; then
|
||||||
umount_dir $MNT
|
umount_dir $MNT
|
||||||
if (( exitcode == 127 )); then
|
if (( ecode == 127 )); then
|
||||||
umount -l /run/archiso/bootmnt
|
umount_dir /run/archiso/bootmnt
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
systemctl -i reboot
|
reboot -f
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
termcol
|
||||||
# restore custom linux console 0-15 colors when not rebooting
|
exit "$ecode"
|
||||||
if [[ $TERM == 'linux' ]]; then
|
|
||||||
colors=("\e]P0191919" "\e]P1D15355" "\e]P2609960" "\e]P3FFCC66"
|
|
||||||
"\e]P4255A9B" "\e]P5AF86C8" "\e]P62EC8D3" "\e]P7949494" "\e]P8191919" "\e]P9D15355"
|
|
||||||
"\e]PA609960" "\e]PBFF9157" "\e]PC4E88CF" "\e]PDAF86C8" "\e]PE2ec8d3" "\e]PFE1E1E1")
|
|
||||||
printf "%b" "${colors[@]}" && clear && unset col
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit "$exitcode"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dlg()
|
dlg()
|
||||||
@ -2314,12 +2333,8 @@ dlg()
|
|||||||
|
|
||||||
tput civis
|
tput civis
|
||||||
case "$dialog_type" in
|
case "$dialog_type" in
|
||||||
menu)
|
menu) dialog --backtitle "$DIST Installer - $SYS - v$VER" --title " $title " --menu "$body" 0 0 $n "$@" 2>"$ANS" || return 1 ;;
|
||||||
dialog --backtitle "$DIST Installer - $SYS - v$VER" --title " $title " --menu "$body" 0 0 $n "$@" 2>"$ANS" || return 1
|
check) dialog --backtitle "$DIST Installer - $SYS - v$VER" --title " $title " --checklist "$body" 0 0 $n "$@" 2>"$ANS" || return 1 ;;
|
||||||
;;
|
|
||||||
check)
|
|
||||||
dialog --backtitle "$DIST Installer - $SYS - v$VER" --title " $title " --checklist "$body" 0 0 $n "$@" 2>"$ANS" || return 1
|
|
||||||
;;
|
|
||||||
input)
|
input)
|
||||||
tput cnorm
|
tput cnorm
|
||||||
local def="$1"
|
local def="$1"
|
||||||
@ -2348,8 +2363,8 @@ msg()
|
|||||||
yesno()
|
yesno()
|
||||||
{
|
{
|
||||||
local title="$1" body="$2" yes='Yes' no='No'
|
local title="$1" body="$2" yes='Yes' no='No'
|
||||||
(( $# >= 3 )) && local yes="$3"
|
(( $# >= 3 )) && yes="$3"
|
||||||
(( $# >= 4 )) && local no="$4"
|
(( $# >= 4 )) && no="$4"
|
||||||
tput civis
|
tput civis
|
||||||
if (( $# == 5 )); then
|
if (( $# == 5 )); then
|
||||||
dialog --backtitle "$DIST Installer - $SYS - v$VER" --defaultno --title " $title " --yes-label "$yes" --no-label "$no" --yesno "$body\n" 0 0
|
dialog --backtitle "$DIST Installer - $SYS - v$VER" --defaultno --title " $title " --yes-label "$yes" --no-label "$no" --yesno "$body\n" 0 0
|
||||||
@ -2381,6 +2396,7 @@ sigint()
|
|||||||
print4()
|
print4()
|
||||||
{
|
{
|
||||||
local str="$*"
|
local str="$*"
|
||||||
|
|
||||||
if [[ $COLUMNS -ge 110 && ${#str} -gt $((COLUMNS - 30)) ]]; then
|
if [[ $COLUMNS -ge 110 && ${#str} -gt $((COLUMNS - 30)) ]]; then
|
||||||
str="$(awk '{
|
str="$(awk '{
|
||||||
i = 2; p1 = p2 = p3 = p4 = ""; p1 = $1; q = int(NF / 4)
|
i = 2; p1 = p2 = p3 = p4 = ""; p1 = $1; q = int(NF / 4)
|
||||||
@ -2396,14 +2412,39 @@ print4()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
termcol()
|
||||||
|
{
|
||||||
|
local colors=(
|
||||||
|
"\e]P0191919" # #191919
|
||||||
|
"\e]P1D15355" # #D15355
|
||||||
|
"\e]P2609960" # #609960
|
||||||
|
"\e]P3FFCC66" # #FFCC66
|
||||||
|
"\e]P4255A9B" # #255A9B
|
||||||
|
"\e]P5AF86C8" # #AF86C8
|
||||||
|
"\e]P62EC8D3" # #2EC8D3
|
||||||
|
"\e]P7949494" # #949494
|
||||||
|
"\e]P8191919" # #191919
|
||||||
|
"\e]P9D15355" # #D15355
|
||||||
|
"\e]PA609960" # #609960
|
||||||
|
"\e]PBFF9157" # #FF9157
|
||||||
|
"\e]PC4E88CF" # #4E88CF
|
||||||
|
"\e]PDAF86C8" # #AF86C8
|
||||||
|
"\e]PE2ec8d3" # #2ec8d3
|
||||||
|
"\e]PFE1E1E1" # #E1E1E1
|
||||||
|
)
|
||||||
|
|
||||||
|
[[ $TERM == 'linux' ]] && printf "%b" "${colors[@]}" && clear
|
||||||
|
}
|
||||||
|
|
||||||
errshow()
|
errshow()
|
||||||
{
|
{
|
||||||
exit_code="$?"
|
[ $? -eq 0 ] && return 0
|
||||||
(( exit_code == 0 )) && return 0
|
|
||||||
|
|
||||||
local fatal=0 err=""
|
local fatal=0 err=""
|
||||||
err="$(sed 's/[^[:print:]]//g; s/\[[0-9\;:]*\?m//g; s/==> //g; s/] ERROR:/]\nERROR:/g' "$ERR")"
|
err="$(sed 's/[^[:print:]]//g; s/\[[0-9\;:]*\?m//g; s/==> //g; s/] ERROR:/]\nERROR:/g' "$ERR")"
|
||||||
|
|
||||||
(( $1 == 1 )) && { fatal=1; shift; }
|
(( $1 == 1 )) && { fatal=1; shift; }
|
||||||
|
|
||||||
local txt="\nThe command exited abnormally:\n\n$1\n\n"
|
local txt="\nThe command exited abnormally:\n\n$1\n\n"
|
||||||
|
|
||||||
if [[ $err ]]; then
|
if [[ $err ]]; then
|
||||||
@ -2412,15 +2453,14 @@ errshow()
|
|||||||
txt+="With no error message:\n\n"
|
txt+="With no error message:\n\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if (( fatal == 1 )); then
|
if (( fatal )); then
|
||||||
txt+="Errors at this stage are fatal and the install cannot continue.\n"
|
txt+="Errors at this stage are fatal and the install cannot continue.\n"
|
||||||
else
|
else
|
||||||
txt+="Errors at this stage are non-fatal and can be either fixed or ignored depending on the error.\n"
|
txt+="Errors at this stage are non-fatal and can be either fixed or ignored depending on the error.\n"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg "Install Error" "$txt"
|
msg "Install Error" "$txt"
|
||||||
|
|
||||||
if (( fatal == 1 )); then
|
if (( fatal )); then
|
||||||
[[ -r $DBG && $TERM == 'linux' ]] && less "$DBG"
|
[[ -r $DBG && $TERM == 'linux' ]] && less "$DBG"
|
||||||
die 1
|
die 1
|
||||||
fi
|
fi
|
||||||
@ -2437,31 +2477,31 @@ load_bcm()
|
|||||||
|
|
||||||
prechecks()
|
prechecks()
|
||||||
{
|
{
|
||||||
if [[ $1 -ge 0 ]] && ! grep -qw "$MNT" /proc/mounts; then
|
local i=1
|
||||||
|
|
||||||
|
if (( $1 >= 0 )) && ! grep -qw "$MNT" /proc/mounts; then
|
||||||
msg "Not Mounted" "\nPartition(s) must be mounted first.\n" 2
|
msg "Not Mounted" "\nPartition(s) must be mounted first.\n" 2
|
||||||
SEL=4
|
SEL=4 i=0
|
||||||
return 1
|
|
||||||
elif [[ $1 -ge 1 && -z $BOOTLDR ]]; then
|
elif [[ $1 -ge 1 && -z $BOOTLDR ]]; then
|
||||||
msg "No Bootloader" "\nBootloader must be selected first.\n" 2
|
msg "No Bootloader" "\nBootloader must be selected first.\n" 2
|
||||||
SEL=5
|
SEL=5 i=0
|
||||||
return 1
|
|
||||||
elif [[ $1 -ge 2 && (-z $NEWUSER || -z $USER_PASS) ]]; then
|
elif [[ $1 -ge 2 && (-z $NEWUSER || -z $USER_PASS) ]]; then
|
||||||
msg "No User" "\nA user must be created first.\n" 2
|
msg "No User" "\nA user must be created first.\n" 2
|
||||||
SEL=6
|
SEL=6 i=0
|
||||||
return 1
|
|
||||||
elif [[ $1 -ge 3 && -z $CONFIG_DONE ]]; then
|
elif [[ $1 -ge 3 && -z $CONFIG_DONE ]]; then
|
||||||
msg "Not Configured" "\nSystem configuration must be done first.\n" 2
|
msg "Not Configured" "\nSystem configuration must be done first.\n" 2
|
||||||
SEL=7
|
SEL=7 i=0
|
||||||
return 1
|
|
||||||
fi
|
fi
|
||||||
return 0
|
(( i )) # return code
|
||||||
}
|
}
|
||||||
|
|
||||||
umount_dir()
|
umount_dir()
|
||||||
{
|
{
|
||||||
swapoff -a
|
mount | grep -q 'swap' && swapoff -a
|
||||||
[[ -d $1 ]] && umount -R "$1" >/dev/null 2>&1
|
for dir; do
|
||||||
return 0
|
[[ -d $dir ]] || continue
|
||||||
|
umount "$dir" 2>/dev/null || { sleep 0.5; umount -f "$dir" 2>/dev/null || umount -l "$dir"; }
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
chk_connect()
|
chk_connect()
|
||||||
@ -2477,9 +2517,13 @@ net_connect()
|
|||||||
else
|
else
|
||||||
if hash nmtui >/dev/null 2>&1; then
|
if hash nmtui >/dev/null 2>&1; then
|
||||||
tput civis
|
tput civis
|
||||||
[[ $TERM == 'linux' ]] && printf "%b" "\e]P1191919" "\e]P4191919"
|
if [[ $TERM == 'linux' ]]; then
|
||||||
nmtui-connect
|
printf "%b" "\e]P1191919" "\e]P4191919"
|
||||||
[[ $TERM == 'linux' ]] && printf "%b" "\e]P1D15355" "\e]P4255a9b"
|
nmtui-connect
|
||||||
|
printf "%b" "\e]P1D15355" "\e]P4255a9b"
|
||||||
|
else
|
||||||
|
nmtui-connect
|
||||||
|
fi
|
||||||
chk_connect
|
chk_connect
|
||||||
else
|
else
|
||||||
return 1
|
return 1
|
||||||
@ -2487,6 +2531,13 @@ net_connect()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_bg_install()
|
||||||
|
{
|
||||||
|
[[ $RSYNC_PID || $MIRROR_PID ]] || return 0
|
||||||
|
msg "Install Running" "\nA background install process is currently running.\n" 2
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
system_devices()
|
system_devices()
|
||||||
{
|
{
|
||||||
IGNORE_DEV="$(lsblk -lno NAME,MOUNTPOINT | awk '/\/run\/archiso\/bootmnt/ {sub(/[1-9]/, ""); print $1}')"
|
IGNORE_DEV="$(lsblk -lno NAME,MOUNTPOINT | awk '/\/run\/archiso\/bootmnt/ {sub(/[1-9]/, ""); print $1}')"
|
||||||
@ -2533,16 +2584,12 @@ system_identify()
|
|||||||
_prep+="\n - Basic system configuration, kernel, shell, login, packages, etc..\n\nOnce you're happy with the choices and the required steps are complete, the main install can be started."
|
_prep+="\n - Basic system configuration, kernel, shell, login, packages, etc..\n\nOnce you're happy with the choices and the required steps are complete, the main install can be started."
|
||||||
}
|
}
|
||||||
|
|
||||||
check_background_install()
|
|
||||||
{
|
|
||||||
[[ $RSYNC_PID || $MIRROR_PID ]] || return 0
|
|
||||||
msg "Install Running" "\nA background install process is currently running.\n" 2
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# entry point
|
# entry point
|
||||||
|
|
||||||
|
# enable some nicer colours in the linux console
|
||||||
|
termcol
|
||||||
|
|
||||||
if (( UID != 0 )); then
|
if (( UID != 0 )); then
|
||||||
msg "Not Root" "\nThis installer must be run as root or using sudo.\n\nExiting..\n" 2
|
msg "Not Root" "\nThis installer must be run as root or using sudo.\n\nExiting..\n" 2
|
||||||
die 1
|
die 1
|
||||||
|
Reference in New Issue
Block a user