123 lines
3.4 KiB
Bash
123 lines
3.4 KiB
Bash
#!/bin/sh
|
|
|
|
echo "+===============================+"
|
|
echo "| Kalle's Arch Installer Script |"
|
|
echo "+===============================+"
|
|
|
|
#
|
|
# Early setup
|
|
#
|
|
|
|
# Ping my server to check network.
|
|
ping -c 1 kallestruik.nl > /dev/null
|
|
|
|
# Check if the ping was successful. If it was not inform the user and exit.
|
|
if [ $? != 0 ]; then
|
|
echo "[!] You do not seem to have a network connect. Please establish one first."
|
|
echo ""
|
|
echo "[?] For wireless networks you can use the 'iwctl' command to establish a connection."
|
|
exit 1
|
|
fi
|
|
|
|
# Enable NTP to sync system time.
|
|
timedatectl set-ntp true
|
|
|
|
#
|
|
# Partitioning
|
|
#
|
|
|
|
echo "+================================+"
|
|
echo "| Partitioning |"
|
|
echo "+================================+"
|
|
|
|
# Print a list of block devices.
|
|
lsblk -o NAME,LABEL,HOTPLUG,SIZE,MODEL
|
|
|
|
|
|
|
|
echo "[?] Above is a list of block devices found on the system. Please choose the one that you want to use for this installation."
|
|
echo "[?] Or enter manual to drop to a shell for manual partitioning."
|
|
read -p "[/dev/sda,/dev/nvme0n1,manual,etc] " disk_base
|
|
|
|
# Check for manual mode and drop them into a shell.
|
|
if [ $disk_base == "manual" ]; then
|
|
echo "[?] Make sure to also mount the full file structure under the /mnt directory."
|
|
echo "[?] Good luck! Type exit to return to the installer."
|
|
zsh
|
|
else
|
|
if [ ! -f $disk_base ]; then
|
|
echo "[!] Device $disk_base does not exist."
|
|
exit 1
|
|
fi
|
|
|
|
# Make sure that the user wants to erase the full disk.
|
|
read -p "[!] This will destroy all data on device $disk_base! Are you sure you want to continue? [y/N] " confirmation
|
|
|
|
# If they are not exit.
|
|
if [ $confirmation != "y" ]; then
|
|
echo "[?] Goodbye! :)"
|
|
exit 0
|
|
fi
|
|
|
|
echo "[?] Creating GPT"
|
|
# Create a new GPT.
|
|
parted $disk_base -- mklabel gpt
|
|
|
|
# Get the size of swap to use.
|
|
read -p "[?] How large do you want your swap to be? [GiB] " swap_size
|
|
|
|
# Create partitions.
|
|
echo "[?] Creating partitions."
|
|
|
|
# Create the root partition.
|
|
parted $disk_base -- mkpart primary 512MiB -"$swap_size"GiB
|
|
|
|
# Create the swap partition.
|
|
parted $disk_base -- mkpart primary linux-swap -"$swap_size"GiB 100%
|
|
|
|
# Create the EFI partition.
|
|
parted $disk_base -- mkpart ESP fat32 1MiB 512MiB
|
|
parted $disk_base -- set 3 esp on
|
|
|
|
# Get the partition prefix from the user.
|
|
echo "[?] What prefix should be used for partitions? For HDDs and SATA SSDs this is probably the same as the device you selected earlier."
|
|
echo "[?] For nvme SSDs it will most likely be something like /dev/nvme0n1p"
|
|
read -p "[?] " partition_base
|
|
|
|
# Create filesystems.
|
|
echo "[?] Creating file systems. This might take a while."
|
|
|
|
# Create root filesystem.
|
|
mkfs.ext4 -L Arch "$partition_base"1
|
|
# Create swap.
|
|
mkswap -L swap "$partition_base"2
|
|
# Create EFI filesystem.
|
|
mkfs.fat -F 32 -n boot "$partition_base"3
|
|
|
|
# Mount filesystems.
|
|
mount "$partition_base"1 /mnt
|
|
mkdir -p /mnt/boot
|
|
mount "$partition_base"3 /mnt/boot
|
|
|
|
# And turn on swap
|
|
swapon "$partition_base"2
|
|
fi
|
|
|
|
#
|
|
# Package installation
|
|
#
|
|
|
|
echo "[?] Installing packages using pacstrap. This will take quite a bit of time."
|
|
echo "[?] Go get a cup of thee or something."
|
|
|
|
sleep 5
|
|
|
|
# Use pacstrap to install all packages from the packages file.
|
|
pacstrap /mnt ${cat packages}
|
|
|
|
echo "[?] Package installation done. Generating /etc/fstab now."
|
|
|
|
# Generate fstab.
|
|
genfstab -U /mnt >> /mnt/etc/fstab
|
|
|