Add required packages for minimal iso

This commit is contained in:
natemaia 2019-01-12 00:01:32 -08:00
parent 6a3f9f2885
commit dcf44d04d3

View File

@ -8,7 +8,7 @@
# Some ideas and code has been taken from other installers
# AIF, Cnichi, Calamares, The Arch Wiki.. Credit where credit is due
VER="1.8.12" # version
VER="1.8.13" # version
DIST="ArchLabs" # distributor
MNT="/mnt" # mountpoint
@ -1212,9 +1212,8 @@ install_base()
printf "\n"
rm -rf $MNT/etc/mkinitcpio-archiso.conf
find $MNT/usr/lib/initcpio -name 'archiso*' -type f -exec rm '{}' \;
find $MNT/usr/lib/initcpio -name 'archiso*' -type f -exec rm -rf '{}' \;
sed -i 's/volatile/auto/g' $MNT/etc/systemd/journald.conf
sed -i "s/# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/g" $MNT/etc/sudoers
if [[ $VM ]]; then
rm -rfv $MNT/etc/X11/xorg.conf.d/*?.conf
@ -1303,7 +1302,9 @@ create_user()
# Create the user, set password, and make sure the ownership of ~/ is correct
local groups='audio,autologin,floppy,log,network,rfkill,scanner,storage,optical,power,wheel'
chrun "groupadd -r autologin"
chrun "useradd -m -u 1000 -g users -G $groups -s $MYSHELL $NEWUSER" 2>$ERR ||
chrun "useradd -m -u 1000 -g users -G $groups -s $MYSHELL $NEWUSER" 2>$ERR
echeck "useradd -m -u 1000 -g users -G $groups -s $MYSHELL $NEWUSER"
chrun "chpasswd <<< '$NEWUSER:$USER_PASS'"
# for neovim set up ~/.config/nvim
@ -1312,14 +1313,9 @@ create_user()
cp -fv $MNT/home/$NEWUSER/.vimrc $MNT/home/$NEWUSER/.config/nvim/init.vim
cp -rfv $MNT/home/$NEWUSER/.vim/colors $MNT/home/$NEWUSER/.config/nvim/colors
fi
[[ $INSTALL_WMS =~ dwm ]] && suckless_install
if [[ $INSTALL_WMS == 'plasma' || $LOGIN_WM == 'startkde' ]]; then
# plasma has their own superkey daemon that conflicts with ksuperkey
sed -i '/super/d' $HOME/.xprofile
sed -i '/super/d' /root/.xprofile
fi
[[ $INSTALL_WMS == 'plasma' || $LOGIN_WM == 'startkde' || $INSTALL_WMS == 'gnome' || $LOGIN_WM == 'gnome-session' ]] &&
sed -i '/super/d' $HOME/.xprofile /root/.xprofile
return 0
}
@ -1433,7 +1429,7 @@ run_mkinitcpio()
[[ $LUKS ]] && add="encrypt"
[[ $LVM ]] && { [[ $add ]] && add+=" lvm2" || add+="lvm2"; }
sed -i "s/block filesystems/block ${add} filesystems ${HOOKS}/g" $MNT/etc/mkinitcpio.conf
chrun "mkinitcpio -p $KERNEL" 2>$ERR
chrun "mkinitcpio -p $KERNEL" 2>$ERR || chrun "mkinitcpio -p $KERNEL" 2>$ERR
echeck "mkinitcpio -p $KERNEL"
}
@ -1451,30 +1447,49 @@ mirrorlist_sort()
package_operations()
{
local inpkg="$PACKAGES" # add the packages chosen during setup
local rmpkg="archlabs-installer" # always remove the installer
# add the packages chosen during setup
if [[ $KERNEL == 'linux-lts' ]]; then
rmpkg+=" linux"
inpkg+=" linux-lts"
local inpkg="linux-lts $PACKAGES"
local rmpkg="archlabs-installer linux"
else
local inpkg="$PACKAGES"
local rmpkg="archlabs-installer"
fi
local wmpkgs=( # packages used for window managers
archlabs nitrogen polkit-gnome volumeicon xclip xdotool
compton gnome-keyring arandr dunst feh gsimplecal
xfce4-power-manager xfce4-settings laptop-detect
)
local basepkgs=( # packages used in all systems
gtk-engine-murrine gtk3 pavucontrol xdg-user-dirs tumbler
base base-devel sudo git udisks2 gvfs mesa xorg-server
xorg-apps xorg-drivers playerctl ffmpeg gstreamer libmad
libmatroska gst-libav gst-plugins-base gst-plugins-good
)
# update first to avoid database access errors
chrun "pacman -Syyu --noconfirm"
if [[ $INSTALL_WMS == 'plasma' || $INSTALL_WMS == 'gnome' || $INSTALL_WMS == 'cinnamon' ]]; then
chrun "pacman -Rnsc archlabs-ksuperkey xfce4 --noconfirm"
fi
if [[ $BOOTLDR != 'grub' ]]; then
chrun "pacman -Rns grub --noconfirm"
rm -f $MNT/etc/default/grub 2>dev/null
find $MNT/boot/ -name 'grub*' -exec rm -rf '{}' \; >/dev/null 2>&1
fi
if [[ $BOOTLDR != 'syslinux' ]]; then
find $MNT/boot/ -name 'syslinux*' -exec rm -rf '{}' \; >/dev/null 2>&1
chrun "pacman -Rns $rmpkg --noconfirm"
chrun "pacman -S iputils --noconfirm"
chrun "pacman -S $inpkg --needed --noconfirm"
chrun "pacman -S ${basepkgs[@]} --needed --noconfirm"
if [[ $LOGIN_TYPE == 'xinit' ]]; then
chrun "pacman -S xorg-xinit --needed --noconfirm"
fi
if [[ $inpkg =~ (openbox|dwm|bspwm|i3-gaps) ]]; then
chrun "pacman -S ${wmpkgs[@]} --needed --noconfirm"
fi
chrun "pacman -Syyu --noconfirm"
chrun "pacman -S iputils --noconfirm"
chrun "pacman -S base-devel git --needed --noconfirm"
chrun "pacman -S $inpkg --needed --noconfirm"
chrun "pacman -Rns $rmpkg --noconfirm"
sed -i "s/# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/g" $MNT/etc/sudoers
return 0
}
@ -1532,7 +1547,7 @@ setup_grub()
if [[ $ROOT_PART == */dev/mapper/* && ! $LVM && ! $LUKS_PASS ]]; then
luks_pass "$_LuksOpen" "" || return 1
fi
BCMDS[grub]="${BCMDS[grub]} --removable"
BCMDS[grub]="${BCMDS[grub]} --bootloader-id=$DIST"
fi
BCMDS[grub]="mkdir -p /run/udev &&
@ -1652,11 +1667,9 @@ install_bootloader()
if ! [[ $ROOT_PART =~ /dev/mapper ]]; then
ROOT_PART_ID="UUID=$(blkid -s PARTUUID -o value $ROOT_PART)"
else
# for LVM we just use the partition label
ROOT_PART_ID="$ROOT_PART"
fi
# remove old UEFI boot entries
if [[ $SYS == 'UEFI' ]]; then
find ${MNT}${BMNTS[UEFI-$BOOTLDR]}/EFI/ \
-maxdepth 1 -mindepth 1 -name '[aA][rR][cC][hH][lL]abs' -type d -exec rm -rf '{}' \; >/dev/null 2>&1
@ -1664,18 +1677,32 @@ install_bootloader()
-maxdepth 1 -mindepth 1 -name '[Bb][oO][oO][tT]' -type d -exec rm -rf '{}' \; >/dev/null 2>&1
fi
if [[ $BOOTLDR != 'grub' ]]; then
rm -f $MNT/etc/default/grub 2>dev/null
find $MNT/boot/ -name 'grub*' -exec rm -rf '{}' \; >/dev/null 2>&1
fi
if [[ $BOOTLDR != 'syslinux' ]]; then
find $MNT/boot/ -name 'syslinux*' -exec rm -rf '{}' \; >/dev/null 2>&1
fi
prerun_$BOOTLDR
printf "\nInstalling and setting up $BOOTLDR in ${BMNTS[$SYS-$BOOTLDR]}\n\n"
chrun "${BCMDS[$BOOTLDR]}"
echeck "${BCMDS[$BOOTLDR]}"
if [[ -d $MNT/hostrun ]]; then
# remove mounted directories
umount $MNT/hostrun/udev >/dev/null 2>&1
umount $MNT/hostrun/lvm >/dev/null 2>&1
rm -rf $MNT/hostrun >/dev/null 2>&1
fi
if [[ $BOOTLDR == 'grub' && $SYS == 'UEFI' ]]; then
local esp="${MNT}${BMNTS[$SYS-$BOOTLDR]}"
mkdir -pv $esp/EFI/BOOT
cp -fv $esp/EFI/$DIST/grubx64.efi $esp/EFI/BOOT/BOOTX64.EFI
fi
return 0
}
@ -1751,20 +1778,16 @@ get_lv_size()
fi
ERR_SIZE=0
# if the size is empty or 0
(( ${#VOLUME_SIZE} == 0 || ${VOLUME_SIZE:0:1} == 0 )) && ERR_SIZE=1
if (( ERR_SIZE == 0 )); then
# number of characters in VOLUME_SIZE minus the last, which should be a letter
local lv="$((${#VOLUME_SIZE} - 1))"
# loop each character (except the last) in VOLUME_SIZE and ensure they are numbers
for (( i=0; i<lv; i++ )); do
[[ ${VOLUME_SIZE:$i:1} != [0-9] ]] && { ERR_SIZE=1; break; }
done
if (( ERR_SIZE == 0 )); then
# ensure the last character is either m/M or g/G
case ${VOLUME_SIZE:$lv:1} in
[mMgG]) ERR_SIZE=0 ;;
*) ERR_SIZE=1
@ -1773,8 +1796,6 @@ get_lv_size()
if (( ERR_SIZE == 0 )); then
local s=${VOLUME_SIZE:0:$lv}
local m=$((s * 1000))
# check whether the value is greater than or equal to the LV remaining Size.
# if not, convert into MB for VG space remaining.
case ${VOLUME_SIZE:$lv:1} in
[Gg])
if (( m >= VOL_GROUP_MB )); then
@ -1818,7 +1839,6 @@ lvm_volume_name()
return 1
fi
# bad volume name answer or name already in use
if [[ ${name:0:1} == "/" || ${#name} -eq 0 || $name =~ \ |\' ]] || grep -q "$name" <<< "$(lsblk)"; then
msgbox "$_ErrTitle" "$_LvmLvNameErrBody"
lvm_volume_name "$msg" || return 1
@ -1836,7 +1856,6 @@ lvm_group_name()
return 1
fi
# bad answer or group name already taken
if [[ ${group:0:1} == "/" || ${#group} -eq 0 || $group =~ \ |\' ]] || grep -q "$group" <<< "$(lsblk)"; then
msgbox "$_ErrTitle" "$_LvmNameVgErr"
lvm_group_name || return 1
@ -1849,16 +1868,12 @@ lvm_group_name()
lvm_extra_lvs()
{
while (( VOL_COUNT > 1 )); do
# get the name and size
lvm_volume_name "$_LvmLvNameBody1" || { break; return 1; }
get_lv_size || { break; return 1; }
# create it
lvcreate -L "$VOLUME_SIZE" "$VOLUME_GROUP" -n "$VOLUME_NAME" >/dev/null 2>$ERR
errshow "lvcreate -L $VOLUME_SIZE $VOLUME_GROUP -n $VOLUME_NAME"
msgbox "$_LvmCreateVG (LV:$VOL_COUNT)" "$_Done LV $VOLUME_NAME ($VOLUME_SIZE) $_LvmPvDoneBody2."
((VOL_COUNT--)) # decrement the number of volumes chosen after each loop
((VOL_COUNT--))
done
return 0
@ -1880,29 +1895,23 @@ lvm_partitions()
find_partitions 'part|crypt' || return 1
PARTS="$(awk 'NF > 0 {print $0 " off"}' <<< "$PARTS")"
# choose partitions
tput civis
GROUP_PARTS=($(dialog --cr-wrap --no-cancel --stdout --backtitle "$BT" \
--title " $_LvmCreateVG " --checklist "$_LvmPvSelBody" 0 0 0 $PARTS))
# return code, when less than 1 part was selected will return non-zero
(( ${#GROUP_PARTS[@]} >= 1 ))
}
lvm_create_group()
{
# get volume group name
lvm_group_name || return 1
# loop while setup is not confirmed by the user
local msg="$_LvmPvConfBody1 $VOLUME_GROUP\n\n$_LvmPvConfBody2"
while ! yesno "$_LvmCreateVG" "$msg ${GROUP_PARTS[*]}\n"; do
lvm_partitions || { break; return 1; }
lvm_group_name || { break; return 1; }
done
# create it
vgcreate -f "$VOLUME_GROUP" "${GROUP_PARTS[@]}" >/dev/null 2>$ERR
errshow "vgcreate -f $VOLUME_GROUP ${GROUP_PARTS[*]}"
@ -1921,7 +1930,6 @@ lvm_create_group()
VOL_GROUP_MB=$GROUP_SIZE
fi
# finished volume group creation
local msg="$_LvmPvDoneBody1 $VOLUME_GROUP ($GROUP_SIZE $GROUP_SIZE_TYPE)"
msgbox "$_LvmCreateVG" "$msg $_LvmPvDoneBody2\n"
return 0
@ -2062,11 +2070,9 @@ luks_pass()
"$_Password2" 3 1 "" 3 $((${#_Password2} + 2)) $COLUMNS 0 1)"; then
return 1
fi
name="$(awk -F'~' '{print $1}' <<< "$values")"
pass="$(awk -F'~' '{print $2}' <<< "$values")"
pass2="$(awk -F'~' '{print $3}' <<< "$values")"
LUKS_NAME="$name"
fi
@ -2103,13 +2109,10 @@ luks_default()
{
luks_setup || return 1
infobox "$_LuksEncrypt" "$_LuksCreateWaitBody $LUKS_NAME $_LuksWaitBody2 $LUKS_PART\n" 0
cryptsetup -q luksFormat $LUKS_PART <<< "$LUKS_PASS" 2>$ERR
errshow "cryptsetup -q luksFormat $LUKS_PART"
cryptsetup open $LUKS_PART "$LUKS_NAME" <<< "$LUKS_PASS" 2>$ERR
errshow "cryptsetup open $LUKS_PART $LUKS_NAME"
LUKS='encrypted'
luks_show
return 0
@ -2124,13 +2127,10 @@ luks_keycmd()
return 1
fi
infobox "$_LuksEncryptAdv" "$_LuksCreateWaitBody $LUKS_NAME $_LuksWaitBody2 $LUKS_PART\n" 0
cryptsetup -q $cipher luksFormat $LUKS_PART <<< "$LUKS_PASS" 2>$ERR
errshow "cryptsetup -q $cipher luksFormat $LUKS_PART"
cryptsetup open $LUKS_PART "$LUKS_NAME" <<< "$LUKS_PASS" 2>$ERR
errshow "cryptsetup open $LUKS_PART $LUKS_NAME"
luks_show
return 0
fi
@ -2146,18 +2146,12 @@ luks_show()
luks_keyfile()
{
# Only used when choosing grub as bootloader.
# Without a keyfile, during boot the user will be asked
# to enter password for decryption twice, this is annoying
if [[ ! -e $MNT/crypto_keyfile.bin && $LUKS_PASS && $LUKS_UUID ]]; then
local n
n="$(lsblk -lno NAME,UUID,TYPE | awk "/$LUKS_UUID/"' && /part|crypt|lvm/ {print $1}')"
local mkkey="dd bs=512 count=8 if=/dev/urandom of=/crypto_keyfile.bin"
mkkey="$mkkey && chmod 000 /crypto_keyfile.bin"
mkkey="$mkkey && cryptsetup luksAddKey /dev/$n /crypto_keyfile.bin <<< '$LUKS_PASS'"
chrun "$mkkey"
sed -i 's/FILES=()/FILES=(\/crypto_keyfile.bin)/g' $MNT/etc/mkinitcpio.conf 2>$ERR
fi
@ -2213,7 +2207,7 @@ select_language()
chrun()
{
arch-chroot $MNT /bin/bash -c "$1"
arch-chroot $MNT bash -c "$1" || arch-chroot $MNT sh -c "$1"
}
json()
@ -2246,10 +2240,7 @@ ssd()
dev=${dev#/dev/}
[[ $dev =~ nvme ]] && dev=${dev%p[0-9]*} || dev=${dev%[0-9]*}
i=$(cat /sys/block/$dev/queue/rotational 2>/dev/null)
# return value check
(( ${i:-1} == 0 ))
}
@ -2373,20 +2364,14 @@ load_bcm()
net_connect()
{
chk_connect() { curl -s --head 'https://www.archlinux.org/mirrorlist/all/' | sed '1q' | grep -qw '200'; }
if ! chk_connect; then
if [[ $(systemctl is-active NetworkManager) == "active" ]] && hash nmtui >/dev/null 2>&1; then
tput civis
# fix ugly nmtui colours
printf "\e]P1191919" # #191919
printf "\e]P4191919" # #191919
printf "\e]P1191919"
printf "\e]P4191919"
nmtui-connect
# restore
printf "\e]P1D15355" # #D15355
printf "\e]P4255a9b" # #255a9b
printf "\e]P1D15355"
printf "\e]P4255a9b"
chk_connect || return 1
else
return 1