Move to pacstrap only base install, simplify some sections.
This commit is contained in:
parent
00470e76c7
commit
98d38ad037
93
installer
93
installer
@ -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"
|
||||||
|
Reference in New Issue
Block a user