diff options
author | JozanLeClerc <bousset.rudy@gmail.com> | 2019-11-28 17:35:28 +0100 |
---|---|---|
committer | JozanLeClerc <bousset.rudy@gmail.com> | 2019-11-28 17:35:28 +0100 |
commit | c25cbfefa31ff127cf31c3ae31b49e99e3fdbbb0 (patch) | |
tree | f091f78b4cac95086d0f0e281c5f54b17075a151 /arch-installer.sh | |
parent | Whiptail was a mistake (diff) | |
download | arch-installer-c25cbfefa31ff127cf31c3ae31b49e99e3fdbbb0.tar.gz arch-installer-c25cbfefa31ff127cf31c3ae31b49e99e3fdbbb0.tar.bz2 arch-installer-c25cbfefa31ff127cf31c3ae31b49e99e3fdbbb0.tar.xz arch-installer-c25cbfefa31ff127cf31c3ae31b49e99e3fdbbb0.tar.zst arch-installer-c25cbfefa31ff127cf31c3ae31b49e99e3fdbbb0.zip |
Renamed the script
Diffstat (limited to 'arch-installer.sh')
-rwxr-xr-x | arch-installer.sh | 768 |
1 files changed, 768 insertions, 0 deletions
diff --git a/arch-installer.sh b/arch-installer.sh new file mode 100755 index 0000000..59ae91d --- /dev/null +++ b/arch-installer.sh @@ -0,0 +1,768 @@ +#!/bin/bash + +#==================================================================================================# +#------------------------------------ VARIABLES DECLARATION ---------------------------------------# +#==================================================================================================# +ltskern=false +utils=false +extras=false +usrpwd="" +usrusrpwd="fade" +hstnm="" +isusr=false +isusrsudo=false +intelamdcpu="none" +intelamdgpu="none" +numregex='^[0-9]+$' +if [ ! -r /sys/firmware/efi/efivars ]; then + efimode=false +else + efimode=true +fi +#==================================================================================================# +#--------------------------------------- COLORS DECLARATION ---------------------------------------# +#==================================================================================================# +#NBLACK="\033[0;30m" +#NRED="\033[0;31m" +#NGREEN="\033[0;32m" +#NYELLOW="\033[0;33m" +#NBLUE="\033[0;34m" +#NMAGENTA="\033[0;35m" +#NCYAN="\033[0;36m" +#NWHITE="\033[0;37m" + +#BBLACK="\033[1;30m" +BRED="\033[1;31m" +BGREEN="\033[1;32m" +BYELLOW="\033[1;33m" +BBLUE="\033[1;34m" +BMAGENTA="\033[1;35m" +BCYAN="\033[1;36m" +#BWHITE="\033[1;37m" + +END="\033[0;0m" +#==================================================================================================# +#--------------------------------------- SOME FUNCTIONS -------------------------------------------# +#==================================================================================================# +jo_goodbye() { + dialog --title "Aborting"\ + --infobox "Thank you for using Joe's Arch Linux installer.\nAborting..."\ + 5 30 + sleep 4 + clear + exit +} + +jo_chk_internet() { + dialog --infobox "Verifying that you are connected to the Internet, please wait..." 4 40 + sleep 1 + if ! wget -q --spider https://www.archlinux.org/; then + dialog --title "ERROR"\ + --msgbox "Critical error:\n\nIt seems that you are not connected to the internet,\ +therefore Joe's installer is forced to abort.\nPlease connect to the Internet and retry."\ + 12 30 + jo_goodbye + else + dialog --msgbox "Success!" 5 12 + fi +} + +jo_get_hstnm() { + while [ $hstnm = "" ]; do + hstnm=$(dialog\ + --nocancel --title "$1"\ + --inputbox "Please choose a hostname for this machine.\ +\n\nIf you are running on a managed network, \ +please ask your network administrator for an appropriate name."\ + 12 53\ + 3>&1 1>&2 2>&3 3>&-) + if [ "$hstnm" = "" ]; then + dialog --infobox "Hostname is empty, retrying..." 3 34 + sleep 2 + fi + done +} + +jo_get_options() { + sel=$(dialog --nocancel --title "$1" --checklist "Choose optional system \ +components to install:" 10 50 3 \ + linux-lts "LTS Kernel" on \ + utils "Utils (zip, vim, git...)" on \ + extras "Extras (Xorg, gst-plugins...)" off \ + 3>&1 1>&2 2>&3 3>&-) + if echo -n "$sel" | grep -q linux-lts; then + ltskern=true + fi + if echo -n "$sel" | grep -q utils; then + utils=true + fi + if echo -n "$sel" | grep -q extras; then + extras=true + fi +} + +jo_get_disk() { + rm -f blkline > /dev/null + dn=$(lsblk | grep -c disk) + id=1 + while [[ $dn != 0 ]]; do + echo -n "$id $(lsblk | grep disk | \ +awk '{print $1"-------("$4")";}' | sed -n "$id"p) " >> blkline + ((dn--)) + ((id++)) + done + sel=$(dialog --nocancel --title "$1"\ + --menu "Choose the drive on which Arch Linux should be installed:" 12 55 4\ + $(cat blkline)\ + 3>&1 1>&2 2>&3 3>&-) + drv="/dev/"$(lsblk | grep disk | awk '{print $1}' | sed -n "$sel"p) + rm -f blkline > /dev/null +} + +jo_get_swap_size() { + gogogo=false + while [ "$gogogo" = false ]; do + swps=$(dialog\ + --nocancel --title "$1"\ + --inputbox "Please enter your swap partition disired size: (__G)"\ + 7 65\ + "4"\ + 3>&1 1>&2 2>&3 3>&-) + if [ "$swps" = "" ]; then + dialog --msgbox "Can't be empty. Retrying..." 5 32 + gogogo=false + elif ! [[ $swps =~ $numregex ]]; then + dialog --msgbox "Illegal value, please enter only numerical values. Retrying..." 6 38 + gogogo=false + else + gogogo=true + fi + done +} + +jo_get_root_size() { + gogogo=false + while [ "$gogogo" = false ]; do + rts=$(dialog\ + --nocancel --title "$1"\ + --inputbox "Please enter your root partition disired size: (__G)"\ + 7 65\ + "25"\ + 3>&1 1>&2 2>&3 3>&-) + if [ "$rts" = "" ]; then + dialog --msgbox "Can't be empty. Retrying..." 5 32 + gogogo=false + elif ! [[ $rts =~ $numregex ]]; then + dialog --msgbox "Illegal value, please enter only numerical values. Retrying..." 6 38 + gogogo=false + else + gogogo=true + fi + done +} + +jo_get_disk_config() { + answr=false + while [ "$answr" = false ]; do + answr=false + btsze="128M" + swps="" + rts="" + jo_get_disk "$1" + jo_get_swap_size "$1" + jo_get_root_size "$1" + rtsze=$rts"G" + swpsze=$swps"G" + drv1="$drv""1" + drv2="$drv""2" + drv3="$drv""3" + drv4="$drv""4" + if dialog --title "Confirm this is correct"\ + --yesno "\ +Drive to use:$drv\n\ +\n\ +boot partition ($drv1) - $btsze\n\ +swap partition ($drv2) - $swpsze\n\ +root partition ($drv3) - $rtsze\n\ +home partition ($drv4) - All that remains"\ + 10 50; then + answr=true + else + answr=false + fi + done +} + +jo_warn_wiping() { + if ! dialog --title "WARNING"\ + --yesno "Warning: disk $drv will be wiped. \ +Are you sure you wish to continue?"\ + 6 45; then + jo_goodbye + fi +} + +jo_get_root_config() { + gogogo=false + while [ "$gogogo" = false ]; do + rtpwd=$(dialog --title "$1"\ + --passwordbox "Enter your desired root password:"\ + 7 40\ + 3>&1 1>&2 2>&3 3>&-) + rtrtpwd=$(dialog --title "$1"\ + --passwordbox "Confirm root password:"\ + 7 40\ + 3>&1 1>&2 2>&3 3>&-) + if ! [ "$rtrtpwd" = "$rtpwd" ]; then + dialog --msgbox "Password mismatch" 5 22 + gogogo=false + elif [ "$rtpwd" = "" ]; then + dialog --msgbox "Password can't be empty" 5 28 + gogogo=false + else + gogogo=true + fi + done +} + +jo_get_usr_config() { + gogogo=false + while [ "$gogogo" = false ]; do + usr=$(dialog\ + --nocancel --title "$1"\ + --inputbox "Enter your desired username:"\ + 7 40\ + 3>&1 1>&2 2>&3 3>&-) + if [ "$usr" = "" ]; then + dialog --msgbox "Username can't be empty" 5 28 + gogogo=false + else + usr=$(echo "$usr" | tr '[:upper:]' '[:lower:]') + gogogo=true + fi + done + isusr=true + gogogo=false + while [ "$gogogo" = false ]; do + usrpwd=$(dialog --title "$1"\ + --passwordbox "Enter your desired password for $usr:"\ + 7 50\ + 3>&1 1>&2 2>&3 3>&-) + usrusrpwd=$(dialog --title "$1"\ + --passwordbox "Confirm $usr password:"\ + 7 50\ + 3>&1 1>&2 2>&3 3>&-) + if ! [ "$usrusrpwd" = "$usrpwd" ]; then + dialog --msgbox "Password mismatch" 5 22 + gogogo=false + elif [ "$usrpwd" = "" ]; then + dialog --msgbox "Password can't be empty" 5 28 + gogogo=false + else + gogogo=true + fi + done + if dialog --title "$1"\ + --yesno "Should $usr be sudo?"\ + 6 45; then + isusrsudo=true + fi + usrshell=$(dialog --title "$1"\ + --menu "Choose a shell for $usr:"\ + 10 40 3\ + "zsh" "The z shell"\ + "bash" "The bourne-against shell"\ + "sh" "The OG shell"\ + 3>&1 1>&2 2>&3 3>&-) +} + +jo_pacstrap() { + paclen=$(echo -n "$1" | wc -c) + diaglen=$(echo "15 + $paclen" | bc) + dialog --title "$1" --infobox "Installing $1" 3 "$diaglen" + if pacstrap /mnt/arch "$1" > /dev/null 2>&1; then + dialog --title "$1" --infobox "$1 installed" 3 "$diaglen" + sleep 0.5 + fi +} +#==================================================================================================# +#--------------------------------------------- START ----------------------------------------------# +#==================================================================================================# +clear +dialog --title "Welcome" --msgbox "Welcome to Joe's Arch Linux installation utility!" 6 35 +#==================================================================================================# +#--------------------------------------- INTERNET CHECK -------------------------------------------# +#==================================================================================================# +jo_chk_internet +#==================================================================================================# +#---------------------------------------- HOSTNAME SETUP ------------------------------------------# +#==================================================================================================# +jo_get_hstnm "I. CORE SETUP" +#==================================================================================================# +#------------------------------------ LTS AND XORG SETUP ------------------------------------------# +#==================================================================================================# +jo_get_options "I. CORE SETUP" +#==================================================================================================# +#------------------------------------------ DISK SETUP --------------------------------------------# +#==================================================================================================# +jo_get_disk_config "II. DISK SETUP" +jo_warn_wiping +#==================================================================================================# +#------------------------------------ USERS AND ROOT SETUP ----------------------------------------# +#==================================================================================================# +jo_get_root_config "III. USERS SETUP" +if dialog --title "III. USERS SETUP"\ + --yesno "Would you like to add a user to the system?"\ + 6 45; then + jo_get_usr_config "III. USERS SETUP" +fi +#==================================================================================================# +#-------------------------------------- THE ACTUAL INSTALL ----------------------------------------# +#==================================================================================================# +#================================================================# +#--------------------------- NTP DATE ---------------------------# +#================================================================# +dialog --title "IV. INSTALLING LINUX"\ + --infobox "Setting date via ntp"\ + 3 28 +timedatectl set-ntp true > /dev/null 2>&1 +sleep 2 +#================================================================# +#------------------------- WIPING DISK --------------------------# +#================================================================# +dialog --title "IV. INSTALLING LINUX"\ + --infobox "Partitioning filesystem"\ + 3 28 +wipefs --all --force "$drv" > /dev/null 2>&1 +#================================================================# +#--------------------- PARTITIONING DISK ------------------------# +#================================================================# +if [ "$efimode" = true ]; then + fdisk --wipe-partition always "$drv" << FDISK_EFI_INPUT > /dev/null 2>&1 +g +n +1 + ++$btsze +n +2 + ++$swpsze +n +3 + ++$rtsze +n +4 + + +t +2 +19 +w +FDISK_EFI_INPUT +else + fdisk --wipe-partition always "$drv" << FDISK_BIOS_INPUT > /dev/null 2>&1 +o +n +p +1 + ++$btsze +n +p +2 + ++$swpsze +n +p +3 + ++$rtsze +n +p + + +w +FDISK_BIOS_INPUT +fi +dialog --title "IV. INSTALLING LINUX"\ + --infobox "Making filesystem"\ + 3 28 +if [ "$efimode" = true ]; then + mkfs.fat -F32 "$drv""1" > /dev/null 2>&1 +else + mkfs.ext2 "$drv""1" > /dev/null 2>&1 +fi +mkswap "$drv""2" > /dev/null 2>&1 +mkfs.ext4 "$drv""3" > /dev/null 2>&1 +mkfs.ext4 "$drv""4" > /dev/null 2>&1 +sleep 2 +#================================================================# +#---------------------- MOUNT PARTITIONS ------------------------# +#================================================================# +dialog --title "IV. INSTALLING LINUX"\ + --infobox "Mounting partitions"\ + 3 28 +mkdir /mnt/arch > /dev/null 2>&1 +swapon "$drv""2" > /dev/null 2>&1 +mount "$drv""3" /mnt/arch > /dev/null 2>&1 +mkdir /mnt/arch/boot > /dev/null 2>&1 +mkdir /mnt/arch/boot/efi > /dev/null 2>&1 +if [ "$efimode" = true ]; then + mount "$drv""1" /mnt/arch/boot/efi > /dev/null 2>&1 +else + mount "$drv""1" /mnt/arch/boot > /dev/null 2>&1 +fi +mkdir /mnt/arch/home > /dev/null 2>&1 +mount "$drv""4" /mnt/arch/home > /dev/null 2>&1 +sleep 2 +clear +#================================================================# +#------------------------ BASE DOWNLOAD -------------------------# +#================================================================# +echo +jo_pacstrap base +jo_pacstrap base-devel +jo_pacstrap pacman-contrib +jo_pacstrap networkmanager +if [ "$isusr" = true ]; then + if [ "$usrshell" = "zsh" ]; then + jo_pacstrap zsh + fi +fi +jo_pacstrap os-prober +if [ "$efimode" = true ]; then + jo_pacstrap efibootmgr +fi +jo_pacstrap grub +jo_pacstrap mkinitcpio +if [ "$ltskern" = true ]; then + jo_pacstrap linux-lts + jo_pacstrap linux-lts-headers +else + jo_pacstrap linux + jo_pacstrap linux-headers +fi +dialog --title "IV. INSTALLING LINUX"\ + --infobox "Base packages installed"\ + 4 28 +sleep 4 +#================================================================# +#----------------------- UTILS DOWNLOAD -------------------------# +#================================================================# +if [ "$utils" = true ]; then + jo_pacstrap zip + jo_pacstrap unzip + jo_pacstrap p7zip + jo_pacstrap vim + jo_pacstrap mc + jo_pacstrap alsa-utils + jo_pacstrap syslog-ng + jo_pacstrap mtools + jo_pacstrap dostools + jo_pacstrap lsb-release + jo_pacstrap ntfs-3g + jo_pacstrap exfat-utils + jo_pacstrap git + jo_pacstrap ntp + jo_pacstrap cronie + echo && echo + echo -e "${BGREEN}Utils installed.${END}" + sleep 4 +fi +#================================================================# +#------------------------ EXTRA DOWNLOAD ------------------------# +#================================================================# +if [ "$extras" = true ]; then + clear + echo -e "${BMAGENTA}\ +#====== IV. INSTALLING LINUX =====# +# # +# 5.5 Installing # +# some more utils # +# (${BYELLOW}gst plugins${BMAGENTA}, ${BYELLOW}Xorg...) ${BMAGENTA}# +# # +#=================================#${END}" + echo + jo_pacstrap gst-plugins-{base,good,bad,ugly} + jo_pacstrap gst-libav + jo_pacstrap xorg-{server,xinit,apps} + jo_pacstrap xf86-input-{mouse,keyboard} + jo_pacstrap xdg-user-dirs + jo_pacstrap mesa + echo && echo + echo -e "${BGREEN}Extra packages installed.${END}" + sleep 4 +fi +if lscpu | grep -q Intel; then + intelamdcpu="intel" +elif lscpu | grep -q AMD; then + intelamdcpu="amd" +fi +if lspci | grep -q Intel; then + intelamdgpu="intel" +elif lspci | grep -q AMD; then + intelamdgpu="amd" +fi +#================================================================# +#--------------------- GPU DRIVERS DOWNLOAD ---------------------# +#================================================================# +if [[ $intelamdgpu == "intel" && "$extras" = true ]]; then + clear + echo -e "${BMAGENTA}\ +#====== IV. INSTALLING LINUX =====# +# # +# 5.5 Installing # +# some more utils # +# (${BYELLOW}xf86-video${BMAGENTA}) # +# # +#=================================#${END}" + echo + jo_pacstrap xf86-video-intel +fi +sleep 2 +if [[ $intelamdgpu == "amd" && "$extras" = true ]]; then + sleep 2 + clear + echo -e "${BMAGENTA}\ +#====== IV. INSTALLING LINUX =====# +# # +# 5.5 Installing # +# some more utils # +# (${BYELLOW}xf86-video${BMAGENTA}) # +# # +#=================================#${END}" + echo + jo_pacstrap xf86-video-amdgpu +fi +#================================================================# +#-------------------- CPU MICROCODE DOWNLOAD --------------------# +#================================================================# +if [[ $intelamdcpu == "intel" ]]; then + clear + echo -e "${BMAGENTA}\ +#====== IV. INSTALLING LINUX =====# +# # +# 6. Installing CPU # +# microcode # +# # +#=================================#${END}" + echo + jo_pacstrap intel-ucode +fi +if [[ $intelamdcpu == "amd" ]]; then + clear + echo -e "${BMAGENTA}\ +#====== IV. INSTALLING LINUX =====# +# # +# 6. Installing CPU # +# microcode # +# # +#=================================#${END}" + echo + jo_pacstrap amd-ucode +fi +sleep 2 +#================================================================# +#------------------------ FSTAB CONFIG -------------------------# +#================================================================# +clear +echo -e "${BMAGENTA}\ +#====== IV. INSTALLING LINUX =====# +# # +# 7. Generating fstab # +# # +#=================================#${END}" +genfstab -U -p /mnt/arch > /mnt/arch/etc/fstab +sleep 2 +#================================================================# +#------------------------- ARCH-CHROOT --------------------------# +#================================================================# +clear +echo -e "${BMAGENTA}\ +#====== V. CONFIGURING LINUX =====# +# # +# 1. Now changing root # +# # +#=================================#${END}" +echo -e "${BBLUE}" +sleep 2 +arch-chroot /mnt/arch << ARCH_CHROOT_CMDS + clear + #===== V. CONFIGURING LINUX ======# + # # + # 2. Setting time zone # + # to Paris, France, # + # for this is my time zone. # + # Change this later accordingly # + # to your own time zone # + # (Joe didn't find a quick # + # and easy way to ask you # + # about your time zone, # + # Joe hopes your can understand) # + # # + #=================================# + ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime + sleep 8 + clear + #===== V. CONFIGURING LINUX ======# + # # + # 3. Setting hardware clock # + # and ntp again # + # # + #=================================# + hwclock --systohc + sleep 1 + clear + #===== V. CONFIGURING LINUX ======# + # # + # 4. Localization # + # (en_US.UTF-8) # + # # + #=================================# + sed -i 's/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen + locale-gen + echo "LANG=en_US.UTF-8" > /etc/locale.conf + sleep 2 + clear + #===== V. CONFIGURING LINUX ======# + # # + # 5. Setting hostname # + # # + #=================================# + echo "$hstnm" > /etc/hostname + echo "127.0.0.1 localhost" > /etc/hosts + echo "::1 localhost" >> /etc/hosts + echo "127.0.1.1 $hstnm.localdomain $hstnm" >> /etc/hosts + sleep 2 + clear + #===== V. CONFIGURING LINUX ======# + # # + # 6. Setting root password # + # # + #=================================# + passwd +$rtpwd +$rtpwd + systemctl enable NetworkManager + sleep 2 + clear + #===== V. CONFIGURING LINUX ======# + # # + # 7. journald stuff # + # # + #=================================# + sed -i 's/#ForwardToSyslog=no/ForwardToSyslog=yes/' /etc/systemd/journald.conf + sleep 2 +ARCH_CHROOT_CMDS +if [ "$isusr" = true ]; then + if [ "$isusrsudo" = true ]; then + arch-chroot /mnt/arch << ARCH_CHROOT_CMDS + sleep 2 + clear + #===== V. CONFIGURING LINUX ======# + # # + # 9. Generating user # + # # + #=================================# + useradd -m -g wheel -s /bin/$usrshell $usr + passwd $usr +$usrpwd +$usrpwd + sed -i 's/# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/' /etc/sudoers + sleep 2 + exit +ARCH_CHROOT_CMDS + else + arch-chroot /mnt/arch << ARCH_CHROOT_CMDS + sleep 2 + clear + #===== V. CONFIGURING LINUX ======# + # # + # 9. Generating user # + # # + #=================================# + useradd -m -s /bin/$usrshell $usr + passwd $usr +$usrpwd +$usrpwd + sed -i 's/# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/' /etc/sudoers + sleep 2 + exit +ARCH_CHROOT_CMDS + fi +fi +if [ "$ltskern" = false ]; then + arch-chroot /mnt/arch << ARCH_CHROOT_CMDS + clear + #===== VI. CONFIGURING BOOT ======# + # # + # 1. Configuring the Kernel # + # # + #=================================# + mkinitcpio -p linux +ARCH_CHROOT_CMDS +else + arch-chroot /mnt/arch << ARCH_CHROOT_CMDS + clear + #===== VI. CONFIGURING BOOT ======# + # # + # 1. Configuring the Kernel # + # # + #=================================# + mkinitcpio -p linux-lts +ARCH_CHROOT_CMDS +fi +echo -e "${BBLUE}" +sleep 2 +if [ "$efimode" = true ]; then +arch-chroot /mnt/arch << ARCH_CHROOT_EFI_GRUB_CMDS + clear + #===== VI. CONFIGURING BOOT ======# + # # + # 2. Configuring GRUB # + # # + #=================================# + grub-install --target=x86_64-efi --bootloader-id=GRUB --efi-directory=/boot/efi --recheck + mkdir -p /boot/grub + grub-mkconfig -o /boot/grub/grub.cfg + mkdir -p /boot/efi/EFI/BOOT + cp /boot/efi/EFI/GRUB/grubx64.efi /boot/efi/EFI/BOOT/BOOTX64.EFI + echo "bcf boot add 1 fs0:\\EFI\\GRUB\\grubx64.efi \"GRUB bootloader\"" > /boot/efi/startup.nsh + echo "exit" >> /boot/efi/startup.nsh + sleep 4 + exit +ARCH_CHROOT_EFI_GRUB_CMDS +else +arch-chroot /mnt/arch << ARCH_CHROOT_BIOS_GRUB_CMDS + clear + #===== VI. CONFIGURING BOOT ======# + # # + # 2. Configuring GRUB # + # # + #=================================# + grub-install --target=i386-pc $drv + grub-mkconfig -o /boot/grub/grub.cfg + sleep 4 + exit +ARCH_CHROOT_BIOS_GRUB_CMDS +fi +echo && echo +clear +echo -e "${BMAGENTA}\ +#========= ${BGREEN}WORK COMPLETE ${BMAGENTA}=========# +# # +# Your system should now # +# be installed. # +# Thank your for using Joe's # +# ARCH LINUX # +# UEFI INSTALL UTILITY # +# # +# Your system will now reboot # +# # +#=================================#${END}" +echo && echo +sleep 10 +umount -R /mnt/arch +reboot |