Files
archquick/install.sh
2024-06-18 18:45:28 +02:00

138 lines
3.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# For reference: https://wiki.archlinux.org/title/Installation_guide
# TODO:
# - Add support for BIOS platform
# - Add more filesystem options (defaults to ext4)
# - Make script recoverable from errors (save script stage)
# - Add support for custom localization configuration
platform="bios"
input=""
disk="/dev/sda"
timezone="Europe/Amsterdam"
hostname="arch"
password=""
echoerr() { cat <<< "$@" 1>&2; }
# Check is script is being run as root
if [[ $(id -u) -ne 0 ]]; then
echoerr "[ERROR] Please run this script as root or using sudo"
exit 1
fi
# Verify the boot mode
if [[ ! -f "/sys/firmware/efi/fw_platform_size" ]]; then
echoerr "[ERROR] Non UEFI platforms are not supported by this script"
exit 2
else
platform=$(cat /sys/firmware/efi/fw_platform_size)
echo "[INFO] Platform: ${platform}-bit UEFI"
fi
# Test internet connectivity
if ! ping -q -c1 archlinux.org &>/dev/null; then
echoerr "[ERROR] Not connected to the internet"
exit 3
else
echo "[INFO] Connected to the internet"
fi
# Select disk to be partitioned
echo "[INFO] Printing available disks"
fdisk -l
read -p "Enter installation disk (${disk}): " input
if [[ -n "$input" ]]; then
disk="$input"
fi
if [[ ! -b "$disk" ]]; then
echoerr "[ERROR] The selected disk does not exist"
exit 4
fi
# Partition the disk with the following layout:
# | Mount point | Partition Type | Size |
# |-------------|-----------------------|-------------------------|
# | /boot | EFI system partition | 1 GiB |
# | [SWAP] | Linux swap | 4 GiB |
# | / | Linux x86-64 root (/) | Remainder of the device |
echo "[INFO] Partitioning the disk"
(
echo g # Create a new empty GPT partition table
# EFI system partition
echo n # Add a new partition
echo 1 # Partition number
echo # First sector (accept default: 2048)
echo "+1GiB" # Last sector
echo t # Change partition type
echo "uefi" # "EFI system partition" type
# Swap partition
echo n # Add a new partition
echo 2 # Partition number
echo # First sector (accept default)
echo "+4GiB" # Last sector
echo t # Change partition type
echo 2 # Select partition
echo "swap" # "Linux swap partition" type
# Root partition
echo n # Add a new partition
echo 3 # Partition number
echo # First sector (accept default)
echo # Last sector (accept default)
echo t # Change partition type
echo 3 # Select partition
echo 23 # "Linux x86-64 root (/) Linux" partition type
echo w # Write changes
) | fdisk "$disk" &>/dev/null
# TODO: Check if fdisk terminated succesfully
# Format the partitions
echo "[INFO] Formatting the partitions"
mkfs.ext4 "${disk}3" &>/dev/null
mkswap "${disk}2" &>/dev/null
mkfs.fat -F 32 "${disk}1" &>/dev/null
# TODO: Check if formatting the partitions went correctly
# Mount the file systems
echo "[INFO] Mounting the file systems"
mount "${disk}3" /mnt
mount --mkdir "${disk}1" /mnt/boot
swapon "${disk}2"
# TODO: Select the mirrors for faster download speeds
# Install essential packages
echo "[INFO] Installing essential packages"
pacstrap -K /mnt base linux linux-firmware \
intel-ucode amd-ucode \
networkmanager \
grub efibootmgr
# Generate an fstab file
echo "[INFO] Generating fstab file"
genfstab -U /mnt >> /mnt/etc/fstab
# Change root into the new system
cp ./chroot.sh /mnt/chroot.sh
echo "[INFO] Changing root into the new system"
arch-chroot /mnt bash /chroot.sh
# Unmount partitions
umount -R /mnt
# Tell the user that it's ok to reboot now
echo "[INFO] Now you also can say \"I use Arch, BTW\". Reboot when you're ready"
exit 0