Given the decision was made to not support a GUI installer for a long time, Arch Linux has required expert installation knowledge in recent times. This is a collection of scripts based off the official installation guide that help with automating the install of Arch Linux for my particular needs, which are:
- Using a modern and simple desktop environment
- Developing in C#
- Using general image, video, document, and messaging productivity tools
- Using programs that support a security orientation
- Using a discrete NVIDIA GPU to have
- Excellent gaming performance to replace a console
- Excellent video encoding performance to back up optical media
- Using an ASUS motherboard
- Using btrfs to mirror critical data with redundancy
The file and folder structure of the repository is a template of sorts that others may be able to reuse for their needs. Start with modifying common.sh and then modify other files from there.
- A wired internet connection is available and used for the entire process
- Back up files
- Prepare USB automation drive and UEFI firmware
- Prepare USB installer drive
- Reboot
- Update UEFI firmware
- Configure BIOS and motherboard
- Installation
- Post installation
Two separate USB drives are needed to support the installation process.
Run the following commands on one USB drive.
sudo sgdisk -Z /dev/sdX
sudo sgdisk -n 1:1M:+4G -t 1:8302 -c 1:files /dev/sdX
mkfs.fat -F32 /dev/sdXN
cp -rf arch-linux-setup-scripts <mounted /dev/sdXN>
cp -f *.CAP <mounted /dev/sdXN>
Download the Arch Linux installer ISO image and then use the following commands on the other USB drive.
sudo sgdisk -Z /dev/sdY
sudo dd if=archlinux-x86_64.iso of=/dev/sdY bs=1M status=progress
Within the ASUS UEFI menus, browse to the USB automation drive with the new firmware file to perform the update. This may only be done from a FAT32 filesystem.
A few one-time firmware settings and physical switch changes are needed on the ASUS Pro WS W880-ACE SE.
Change the following from their defaults in the UEFI firmware menus:
- Advanced > CPU Configuration > Total Memory Encryption → Enabled. Turns on Intel Total Memory Encryption. GNOME's built-in Device Security assessment expects this for a hardened system.
- Advanced > APM Configuration > ErP Ready → Enabled (S4+S5). Cuts standby power in the hibernate (S4) and soft-off (S5) states. Without it, the board's firmware wakes the machine moments after it powers down for hibernation, interrupting the cycle and preventing a clean resume.
The following ship enabled by default, but the encrypted, hardware-backed setup depends on them, so confirm they remain enabled:
- Advanced > System Agent (SA) Configuration > VT-d → Enabled. Exposes the Intel IOMMU so the kernel can confine each device's direct memory access. The
intel_iommu=on iommu.strict=1 iommu.passthrough=0parameters on the systemd-boot entries depend on it; together they block DMA attacks that could otherwise read LUKS keys out of RAM while the machine is suspended. This also backs the firmware's pre-boot DMA protection, which guards the window before the kernel's IOMMU takes over (GNOME's Device Security report lists it separately as Pre-boot DMA Protection). After booting, confirm it is active withcat /sys/kernel/iommu_groups/*/type— every group should readDMA, notidentity. - Advanced > PCH-FW Configuration > PTT → Enabled. Turns on Intel Platform Trust Technology, the CPU's built-in firmware TPM 2.0. This presents
/dev/tpmrm0, whichsystemd-cryptenrollcan use to seal a LUKS key to the Secure Boot state for password-less unlock.
Set the following physical switches on the motherboard while the system is powered off. This board is a server/desktop hybrid, and disabling the unused components shortens boot time:
- Switch 13 (BMC) → off. Disables the onboard baseboard management controller.
- Switch 29 (VGA) → off. Disables the onboard VGA output.
Boot into the live environment with the two USB drives plugged in and then use the following commands to create a bootable system.
If the USB automation drive contains a LUKS partition that needs to be unlocked, it may be done so by doing:
cryptsetup open /dev/sdX cryptusb
Then, instead of using /dev/sdX, use /dev/mapper/cryptusb to mount the device.
cd ~
mkdir files
mount /dev/sdX files
cd files/boot
./install.sh <block device>
cd ~
umount files
arch-chroot /mnt
mount /dev/sdX /mnt
cd /mnt/boot
./bootstrap.sh
exit
reboot
Log in as root. Use the following commands to minimally configure the system and add a GUI desktop.
mount /dev/sdX /mnt
cd /mnt/chroot
./install.sh
reboot
This sections contains instructions to follow after a system has been fully restored with most of its configurations and data and is mostly functional.
Bulk data is stored on a btrfs RAID1 mirror layered on LUKS. LUKS underpins both drives and systemd-boot unlocks them during startup; btrfs then mirrors the data with end-to-end checksums, so bit rot is detected and self-healed from the good copy.
Run the following to set up storage. This destroys all data on both devices:
sudo ./storage.sh /dev/sdA /dev/sdB
This creates a generic mount point at /data (a dedicated btrfs subvolume) that can be used for anything, scrubbed monthly by btrfs-scrub@data.timer to verify and repair the mirror.
Browse to the GNOME Shell Extensions website, install the GNOME Shell integration browser extension from the banner, and then install the following GNOME Shell extensions:
- ArcMenu
- Dash to Panel
- Night Theme Switcher
- Power Off Options
By default Steam disables GPU accelerated rendering in its web views on NVIDIA. Since the entire client UI--including Big Picture mode--is rendered by the CEF (Chromium) web helper, this forces it to composite in software. On a 4K display that makes the client and Big Picture mode painfully slow. To fix it:
- Open Steam > Settings > Interface.
- Enable Enable GPU accelerated rendering in web views.
- Restart Steam.
The script installs /usr/local/sbin/secure-boot-sign and /etc/pacman.d/hooks/99-secure-boot-sign.hook so kernel and systemd updates automatically trigger signing. Hook 99 is intentionally ordered after the existing 95-systemd-boot.hook, so systemd-boot is copied first and then signed.
-
Reboot into UEFI firmware and open
Boot > Secure Boot. -
Set
OS TypetoWindows UEFI Mode. -
Set
Secure Boot ModetoCustom. -
Open
Key Managementand doClear Secure Boot keys. -
Exit saving changes and reboot into Linux.
-
Create keys, sign bootloader, and enroll keys:
sudo ./chroot/secure-boot.sh -e -
Back up private signing keys and store them securely:
sudo tar -C /var/lib/sbctl -czf ~/sbctl-keys.tar.gz keys -
Reboot into Linux.
-
Verify Secure Boot and signing status (see
Verify Secure Bootbelow).
-
Reboot into UEFI firmware and open
Boot > Secure Boot. -
Set
OS TypetoOther OS. -
Exit saving changes and reboot into Linux.
-
Start and finish Linux install process.
-
Import keys and sign bootloader:
tar -xzf ~/sbctl-keys.tar.gz -C /tmp sudo ./chroot/secure-boot.sh -k /tmp/keys -
Reboot into UEFI firmware and open
Boot > Secure Boot. -
Set
OS TypetoWindows UEFI Mode. -
Exit saving changes and reboot into Linux.
-
Verify Secure Boot and signing status (see
Verify Secure Bootbelow).
If firmware keys were reset or cleared, use the first-time enrollment flow again.
sudo bootctl status
sudo sbctl status
sudo sbctl verify