diff --git a/easy-arch.sh b/easy-arch.sh index 0ec24e6..5d59854 100644 --- a/easy-arch.sh +++ b/easy-arch.sh @@ -8,6 +8,41 @@ print () { echo -e "\e[1m\e[93m[ \e[92m•\e[93m ] \e[4m$1\e[0m" } +# Virtualization check (function). +virt_check () { + hypervisor=$(systemd-detect-virt) + case $hypervisor in + kvm ) print "KVM has been detected." + print "Installing guest tools." + pacstrap /mnt qemu-guest-agent + print "Enabling specific services for the guest tools." + systemctl enable qemu-guest-agent --root=/mnt &>/dev/null + ;; + vmware ) print "VMWare Workstation/ESXi has been detected." + print "Installing guest tools." + pacstrap /mnt open-vm-tools + print "Enabling specific services for the guest tools." + systemctl enable vmtoolsd --root=/mnt &>/dev/null + systemctl enable vmware-vmblock-fuse --root=/mnt &>/dev/null + ;; + oracle ) print "VirtualBox has been detected." + print "Installing guest tools." + pacstrap /mnt virtualbox-guest-utils + print "Enabling specific services for the guest tools." + systemctl enable vboxservice --root=/mnt &>/dev/null + ;; + microsoft ) print "Hyper-V has been detected." + print "Installing guest tools." + pacstrap /mnt hyperv + print "Enabling specific services for the guest tools." + systemctl enable hv_fcopy_daemon --root=/mnt &>/dev/null + systemctl enable hv_kvp_daemon --root=/mnt &>/dev/null + systemctl enable hv_vss_daemon --root=/mnt &>/dev/null + ;; + * ) ;; + esac +} + # Selecting a kernel to install (function). kernel_selector () { print "List of kernels:" @@ -17,13 +52,13 @@ kernel_selector () { print "4) Zen: A Linux kernel optimized for desktop usage." read -r -p "Insert the number of the corresponding kernel: " choice case $choice in - 1 ) kernel=linux + 1 ) kernel="linux" ;; - 2 ) kernel=linux-hardened + 2 ) kernel="linux-hardened" ;; - 3 ) kernel=linux-lts + 3 ) kernel="linux-lts" ;; - 4 ) kernel=linux-zen + 4 ) kernel="linux-zen" ;; * ) print "You did not enter a valid selection." kernel_selector @@ -33,10 +68,11 @@ kernel_selector () { # Selecting a way to handle internet connection (function). network_selector () { print "Network utilities:" - print "1) IWD: iNet wireless daemon is a wireless daemon for Linux written by Intel (WiFi-only)." - print "2) NetworkManager: Program for providing detection and configuration for systems to automatically connect to networks (both WiFi and Ethernet)." - print "3) wpa_supplicant: It's a cross-platform supplicant with support for WEP, WPA and WPA2 (WiFi-only, a DHCP client will be automatically installed too.)" - print "4) I will do this on my own." + print "1) IWD: iNet wireless daemon is a wireless daemon for Linux written by Intel (WiFi-only)" + print "2) NetworkManager: Universal network utility to automatically connect to networks (both WiFi and Ethernet)" + print "3) wpa_supplicant: Cross-platform supplicant with support for WEP, WPA and WPA2 (WiFi-only, a DHCP client will be automatically installed as well)" + print "4) dhcpcd: Basic DHCP client (Ethernet only or VMs)" + print "5) I will do this on my own (only advanced users)" read -r -p "Insert the number of the corresponding networking utility: " choice case $choice in 1 ) print "Installing IWD." @@ -55,23 +91,18 @@ network_selector () { systemctl enable wpa_supplicant --root=/mnt &>/dev/null systemctl enable dhcpcd --root=/mnt &>/dev/null ;; - 4 ) + 4 ) print "Installing dhcpcd." + pacstrap /mnt dhcpcd + print "Enabling dhcpcd." + systemctl enable dhcpcd --root=/mnt &>/dev/null + ;; + 5 ) ;; * ) print "You did not enter a valid selection." network_selector esac } -# Setting up the hostname (function). -hostname_selector () { - read -r -p "Please enter the hostname: " hostname - if [ -z "$hostname" ]; then - print "You need to enter a hostname in order to continue." - hostname_selector - fi - echo "$hostname" > /mnt/etc/hostname -} - # Setting up a password for the LUKS Container (function). password_selector () { read -r -s -p "Insert password for the LUKS container (you're not going to see the password): " password @@ -84,12 +115,34 @@ password_selector () { BTRFS="/dev/mapper/cryptroot" } +# Microcode detector (function). +microcode_detector () { + CPU=$(grep vendor_id /proc/cpuinfo) + if [[ $CPU == *"AuthenticAMD"* ]]; then + print "An AMD CPU has been detected, the AMD microcode will be installed." + microcode="amd-ucode" + else + print "An Intel CPU has been detected, the Intel microcode will be installed." + microcode="intel-ucode" + fi +} + +# Setting up the hostname (function). +hostname_selector () { + read -r -p "Please enter the hostname: " hostname + if [ -z "$hostname" ]; then + print "You need to enter a hostname in order to continue." + hostname_selector + fi + echo "$hostname" > /mnt/etc/hostname +} + # Setting up the locale (function). locale_selector () { - read -r -p "Please insert the locale you use (format: xx_XX): " locale + read -r -p "Please insert the locale you use (format: xx_XX or enter empty to use en_US): " locale if [ -z "$locale" ]; then - print "You need to enter a valid locale to continue." - locale_selector + print "en_US will be used as default locale." + locale="en_US" fi echo "$locale.UTF-8 UTF-8" > /mnt/etc/locale.gen echo "LANG=$locale.UTF-8" > /mnt/etc/locale.conf @@ -97,18 +150,14 @@ locale_selector () { # Setting up the keyboard layout (function). keyboard_selector () { - read -r -p "Please insert the keyboard layout you use: " kblayout + read -r -p "Please insert the keyboard layout you use (enter empty to use US keyboard layout): " kblayout if [ -z "$kblayout" ]; then - print "You need to enter a valid keyboard layout in order to continue." - keyboard_selector + print "US keyboard layout will be used by default." + kblayout="us" fi echo "KEYMAP=$kblayout" > /mnt/etc/vconsole.conf } -# Setting up system clock. -print "Setting up the system clock." -timedatectl set-ntp true &>/dev/null - # Selecting the target for the installation. print "Welcome to easy-arch, a script made in order to simplify the process of installing Arch Linux." PS3="Please select the disk where Arch Linux is going to be installed: " @@ -181,52 +230,15 @@ mount $ESP /mnt/boot/ kernel_selector # Checking the microcode to install. -CPU=$(grep vendor_id /proc/cpuinfo) -if [[ $CPU == *"AuthenticAMD"* ]]; then - print "An AMD CPU has been detected, the AMD microcode will be installed." - microcode=amd-ucode -else - print "An Intel CPU has been detected, the Intel microcode will be installed." - microcode=intel-ucode -fi +microcode_detector + +# Virtualization check. +virt_check # Pacstrap (setting up a base sytem onto the new root). print "Installing the base system (it may take a while)." pacstrap /mnt base $kernel $microcode linux-firmware btrfs-progs grub grub-btrfs rsync efibootmgr snapper reflector base-devel snap-pac zram-generator -# Virtualization check -hypervisor=$(systemd-detect-virt) -case $hypervisor in - kvm ) print "KVM has been detected." - print "Installing guest tools." - pacstrap /mnt qemu-guest-agent - print "Enabling specific services for the guest tools." - systemctl enable qemu-guest-agent --root=/mnt &>/dev/null - ;; - vmware ) print "VMWare Workstation/ESXi has been detected." - print "Installing guest tools." - pacstrap /mnt open-vm-tools - print "Enabling specific services for the guest tools." - systemctl enable vmtoolsd --root=/mnt &>/dev/null - systemctl enable vmware-vmblock-fuse --root=/mnt &>/dev/null - ;; - oracle ) print "VirtualBox has been detected." - print "Installing guest tools." - pacstrap /mnt virtualbox-guest-utils - print "Enabling specific services for the guest tools." - systemctl enable vboxservice --root=/mnt &>/dev/null - ;; - microsoft ) print "Hyper-V has been detected." - print "Installing guest tools." - pacstrap /mnt hyperv - print "Enabling specific services for the guest tools." - systemctl enable hv_fcopy_daemon --root=/mnt &>/dev/null - systemctl enable hv_kvp_daemon --root=/mnt &>/dev/null - systemctl enable hv_vss_daemon --root=/mnt &>/dev/null - ;; - * ) ;; -esac - # Setting up the network. network_selector