holoiso/airootfs/usr/local/bin/holoinstall
pants4hire b5be7c2f7c
Adding NTP time syncing before install.
Should resolve "SSL certificate problem: certificate not yet valid" issue caused by hardware clock not being correct.  I have tested the logic against the bootable ISO, but have not attempted to rebuild the ISO and install using this code.

The commands are taken from the Arch installation guide.
2022-05-17 02:45:04 -05:00

196 lines
7.2 KiB
Bash
Executable File

#!/bin/zsh
# HoloISO Installer v2
# This defines all of the current variables.
CMD_PACMAN_INSTALL=(/usr/bin/pacman --noconfirm -S --needed --overwrite="*")
CMD_PACMAN_UPDATE=(/usr/bin/pacman -Sy)
CPU_VENDOR=$(cat /proc/cpuinfo | grep 'vendor' | uniq | cut -c 13-)
SYSTEM_LOCALE="${SYSTEM_LOCALE:-en_US.UTF-8 UTF-8}"
HOLO_INSTALL_DIR="${HOLO_INSTALL_DIR:-/mnt}"
# Internet connectivity check
wget -q --spider http://google.com
if [ $? -eq 0 ]; then
echo "Internet check passed"
else
echo -e "No Internet connection available, exiting\nUse wifi-menu util to connect WiFi"
exit
fi
# Update system time
if [ $(timedatectl status | grep -c "NTP service: active") -ne 1 ]; then
# If NTP is not active, enable it.
timedatectl set-ntp true
# Update the hardware clock.
hwclock --systohc
fi
if [[ "${CPU_VENDOR}" == "AuthenticAMD" ]]; then
UCODE_INSTALL_MSG="AMD CPU detected, installing AMD ucode..."
UCODE_INSTALL="amd-ucode"
else
UCODE_INSTALL_MSG="Intel CPU detected, installing Intel ucode..."
UCODE_INSTALL="intel-ucode"
fi
base_os_install() {
lsblk
read "?Enter your desired drive node here (for example, sda or nvme0n1): " DRIVEDEVICE
#read "?WARNING: This drive is going to be erased fully. Press enter to continue, or CTRL+Z to terminate"
DEVICE="/dev/${DRIVEDEVICE}"
INSTALLDEVICE="${DEVICE}"
echo ${DEVICE} | grep -q -P "^/dev/(nvme|loop|mmcblk)"
if [ $? -eq 0 ]; then
INSTALLDEVICE="${DEVICE}p"
fi
if [ ! -b $DEVICE ]; then
echo "$DEVICE not found! Installation Aborted!"
exit 1
fi
echo "\n\nWARNING: The following drive is going to be erased fully. ALL DATA ON DRIVE $DEVICE WILL BE LOST!\n"
lsblk $DEVICE
echo -n "\nErase $DEVICE and begin installation(y/N): "
read ANS
if [[ ! ($ANS = 'y' || $ANS = 'Y') ]]; then
echo "Installation Aborted!"
exit 1
fi
echo "\nCreating partitions..."
sfdisk --delete ${DEVICE}
wipefs -a ${DEVICE}
parted ${DEVICE} mklabel gpt
parted ${DEVICE} mkpart primary fat32 2M 256M
parted ${DEVICE} set 1 boot on
parted ${DEVICE} set 1 esp on
parted ${DEVICE} mkpart primary btrfs 256M 100%
root_partition="${INSTALLDEVICE}2"
mkfs -t vfat ${INSTALLDEVICE}1
fatlabel ${INSTALLDEVICE}1 HOLOEFI
mkfs -t btrfs -f ${root_partition}
btrfs filesystem label ${root_partition} holo-root
echo "\nPartitioning complete, mounting and pacstrapping..."
echo "${UCODE_INSTALL_MSG}"
mount -t btrfs -o subvol=/,compress-force=zstd:1,discard,noatime,nodiratime ${root_partition} ${HOLO_INSTALL_DIR}
pacstrap -i ${HOLO_INSTALL_DIR} base base-devel ${UCODE_INSTALL} core/linux core/linux-headers linux-neptune-dri linux-neptune-dri-headers linux-firmware
echo "\nBase system installation done, generating fstab..."
genfstab -U -p /mnt >> /mnt/etc/fstab
cp /etc/pacman.conf /mnt/etc/pacman.conf
cp /etc/pacman.d/mirrorlist /mnt/etc/pacman.d/mirrorlist
read "?Enter hostname for this installation: " HOLOHOSTNAME
echo ${HOLOHOSTNAME} > ${HOLO_INSTALL_DIR}/etc/hostname
# Setup password for root
while true; do
echo -n "Enter \"root\" password for this installation(will not echo): "
read -s ROOTPASS
echo
echo -n "Enter \"root\" password for this installation(again): "
read -s ROOTPASS_CONF
echo
if [ $ROOTPASS = $ROOTPASS_CONF ]; then
break
fi
echo "Error: Password does not match."
done
# Create user
while true; do
read "?Enter username for this installation: " HOLOUSER
if [ $HOLOUSER = "root" ]; then
echo "User \"root\" already exists!"
else
break
fi
done
# Setup password for user
while true; do
echo -n "Enter \"$HOLOUSER\" password for this installation(will not echo): "
read -s HOLOPASS
echo
echo -n "Enter \"$HOLOUSER\" password for this installation(again): "
read -s HOLOPASS_CONF
echo
if [ $HOLOPASS = $HOLOPASS_CONF ]; then
break
fi
echo "Error: Password does not match."
done
echo "\nCreating user ${HOLOUSER}..."
echo -e "${ROOTPASS}\n${ROOTPASS}" | arch-chroot ${HOLO_INSTALL_DIR} passwd root
arch-chroot ${HOLO_INSTALL_DIR} useradd --create-home ${HOLOUSER}
echo -e "${HOLOPASS}\n${HOLOPASS}" | arch-chroot ${HOLO_INSTALL_DIR} passwd ${HOLOUSER}
echo "${HOLOUSER} ALL=(root) NOPASSWD:ALL" > ${HOLO_INSTALL_DIR}/etc/sudoers.d/${HOLOUSER}
chmod 0440 ${HOLO_INSTALL_DIR}/etc/sudoers.d/${HOLOUSER}
echo "127.0.1.1 ${HOLOHOSTNAME}" >> ${HOLO_INSTALL_DIR}/etc/hosts
echo "\nInstalling bootloader..."
arch-chroot ${HOLO_INSTALL_DIR} ${CMD_PACMAN_UPDATE}
mkdir ${HOLO_INSTALL_DIR}/boot/efi
mount -t vfat ${INSTALLDEVICE}1 ${HOLO_INSTALL_DIR}/boot/efi
arch-chroot ${HOLO_INSTALL_DIR} ${CMD_PACMAN_INSTALL} core/grub efibootmgr inetutils mkinitcpio neofetch networkmanager sddm
arch-chroot ${HOLO_INSTALL_DIR} systemctl enable NetworkManager systemd-timesyncd
arch-chroot ${HOLO_INSTALL_DIR} grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=holo --removable
arch-chroot ${HOLO_INSTALL_DIR} grub-mkconfig -o /boot/grub/grub.cfg
arch-chroot ${HOLO_INSTALL_DIR} sed -i 's/Arch Linux/SteamOS/g' /boot/grub/grub.cfg
echo "\nSetting up locale..."
echo "${SYSTEM_LOCALE}" >> ${HOLO_INSTALL_DIR}/etc/locale.gen
arch-chroot ${HOLO_INSTALL_DIR} locale-gen
echo "LANG=$(echo ${SYSTEM_LOCALE} | cut -d' ' -f1)" > ${HOLO_INSTALL_DIR}/etc/locale.conf
}
full_install() {
arch-chroot ${HOLO_INSTALL_DIR} ${CMD_PACMAN_UPDATE}
arch-chroot ${HOLO_INSTALL_DIR} ${CMD_PACMAN_INSTALL} holoiso-main holoiso-updateclient wireplumber vulkan-radeon lib32-vulkan-radeon
echo "\nConfiguring Steam Deck UI by default..."
mkdir ${HOLO_INSTALL_DIR}/etc/sddm.conf.d
echo "[Autologin]\nUser=${HOLOUSER}\nSession=gamescope-wayland.desktop" >> ${HOLO_INSTALL_DIR}/etc/sddm.conf.d/autologin.conf
mkdir /mnt/home/${HOLOUSER}/Desktop
cp /etc/holoinstall/steamos-gamemode.desktop /mnt/home/${HOLOUSER}/Desktop/steamos-gamemode.desktop
arch-chroot ${HOLO_INSTALL_DIR} chmod +x /home/${HOLOUSER}/Desktop/steamos-gamemode.desktop
arch-chroot ${HOLO_INSTALL_DIR} ln -s /usr/share/applications/steam.desktop /home/${HOLOUSER}/Desktop/steam.desktop
arch-chroot ${HOLO_INSTALL_DIR} chown -R ${HOLOUSER}:${HOLOUSER} /home/${HOLOUSER}/Desktop
arch-chroot ${HOLO_INSTALL_DIR} systemctl enable cups bluetooth sddm
arch-chroot ${HOLO_INSTALL_DIR} usermod -a -G rfkill ${HOLOUSER}
arch-chroot ${HOLO_INSTALL_DIR} sudo -u ${HOLOUSER} steam
arch-chroot ${HOLO_INSTALL_DIR} ${CMD_PACMAN_INSTALL} flatpak
arch-chroot ${HOLO_INSTALL_DIR} flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
}
# The installer itself. Good wuck.
echo "SteamOS 3 Installer"
echo "Start time: $(date)"
echo "Please choose installation type:"
echo "1) barebones: Barebones OS-only installation"
echo "2) deckperience: Full SteamOS 3 experience"
read "?Enter your choice here: " HOLO_INSTALL_TYPE
echo ""
if [[ "${HOLO_INSTALL_TYPE}" == "1" ]] || [[ "${HOLO_INSTALL_TYPE}" == "barebones" ]]; then
echo "Installing SteamOS, barebones configuration..."
base_os_install
echo "Installation finished! You may reboot now, or type arch-chroot /mnt to make further changes"
elif [[ "${HOLO_INSTALL_TYPE}" == "2" ]]; then
echo "Installing SteamOS, deckperience configuration..."
base_os_install
full_install
echo "Installation finished! You may reboot now, or type arch-chroot /mnt to make further changes"
else
echo "Invalid choice. Exiting installer..."
fi
echo "End time: $(date)"