Arch Linux
Arch Linux Install Guide
Arch Linux Install Guide
[!info] This guide was edited using Claude based off of my original Arch Install Guide from a few years ago to include any updates and heads up.
[!warning] This guide installs Arch single-boot using systemd-boot (far less headache than GRUB). If you ever dual-boot, you’d use GRUB and reuse the existing Windows EFI partition instead.
[!note] BIOS prep for a new machine (OptiPlex 5060) Before booting the ISO, in the Dell BIOS:
- Secure Boot: OFF — the Arch ISO / systemd-boot / stock kernel aren’t signed against Microsoft keys.
- TPM 2.0: leave ON (or ignore it). TPM does not need to be disabled — nothing in this install touches it unless you later enroll it (e.g.
systemd-cryptenrollfor LUKS auto-unlock). The Windows-11 “requires TPM” thing is unrelated.- Boot mode: UEFI (disable Legacy/CSM).
This machine’s SSD that we’ll be using as an example is M.2 SATA, so it shows up as
/dev/sda, not/dev/nvme0n1.nvme listwill show nothing. Device names below use/dev/sda— always confirm withlsblkfirst.
- Set Font
ls /usr/share/kbd/consolefonts/ # Hit <Tab> twice
setfont ter-132b
- Verify Boot Mode:
cat /sys/firmware/efi/fw_platform_size
# "64" = 64-bit UEFI. If the file doesn't exist, you're in BIOS/Legacy mode
- Verify Network
ping archlinux.org # Skip to 3 if this works (desktop on Ethernet: should just work)
# If on Wi-Fi:
iwctl
device list # Assume output was "wlan0"
station wlan0 scan
station wlan0 get-networks
station wlan0 connect <SSID>
exit
ping archlinux.org
- Set Clock (optional in live env)
timedatectl set-timezone America/New_York
- Verify Drive and RAM
lsblk # Lists all drives. Your M.2 SATA SSD is almost certainly /dev/sda.
# nvme list # Use this if you have NVME drives.
free -h # Lists available/total RAM which swap size. We have 8GB.
- Partition Drive
fdisk /dev/sda
# Partition 1: EFI at +1GiB (type: EFI System)
# Partition 2: SWAP at +16GiB (see note below)
# Partition 3: root at Everything Else (Linux filesystem)
# "+1GiB" tells fdisk to cut the partition off after 1GiB, leaving the rest free.
# "-1GiB" would instead leave 1GiB free at the end. We never need '-' since root is last.
#
# Swap sizing: the old "2x RAM" rule is dead. Real reason to size swap here is HIBERNATION:
# you need swap >= RAM (>=8GiB) to suspend-to-disk. 16GiB is fine and leaves headroom.
# If you don't care about hibernation, 4-8GiB is plenty. zram is a good modern alternative.
#
# Dual-booting only: skip the EFI partition and reuse the Windows ESP (with GRUB).
- Format/Mount Partitions
mkfs.fat -F 32 /dev/sda1
mkswap /dev/sda2
mkfs.ext4 /dev/sda3
mount /dev/sda3 /mnt
swapon /dev/sda2
mount --mkdir /dev/sda1 /mnt/boot
# systemd-boot convention: mount the ESP at /boot so kernel + loader live together.
# ('mount --mkdir' creates /mnt/boot for you.)
- Install Packages
pacstrap -K /mnt base linux linux-firmware intel-ucode
# intel-ucode = CPU microcode for the i5-8500. Loaded at boot via a loader initrd line (step 11).
# -K initializes a fresh pacman keyring.
- GenFstab, Chroot, Install Prereqs, Set Time Zone
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt
pacman -S vim
ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime
hwclock --systohc
# NOTE: don't run `timedatectl set-ntp true` in chroot since systemd isn't running (no D-Bus). NTP gets enabled later via systemd-timesyncd (step 15).
- Generate Locale
vim /etc/locale.gen
# Uncomment: "en_US.UTF-8 UTF-8"
locale-gen
vim /etc/locale.conf
# Write: "LANG=en_US.UTF-8" (WITHOUT THE QUOTES)
- Set Hostname and Root Password
vim /etc/hostname
passwd
- Install and Setup Bootloader
bootctl install
bootctl # Should say "0 entries" at the bottom (we create them manually next)
# Grab JUST the filesystem UUID of the root partition:
# ^ copy this value into the two entries below (root=UUID=...).
# Careful: UUID (filesystem) != PARTUUID (partition). Since we use root=UUID=, use the UUID.
vim /boot/loader/entries/arch.conf
# Write:
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
# ^ intel-ucode initrd MUST come before the kernel's initramfs.
# Add UUID to Config:
echo "options root=UUID=$(blkid -s UUID -o value /dev/sda3) rw" >> /boot/loader/entries/arch.conf
# exit Vim (lol), then copy the previous command to a new file
cp /boot/loader/entries/arch{.conf,-fallback.conf}
# Note UUID here; when you VIM into fallback, you SHOULD see that UUID.
blkid -s UUID -o value /dev/sda3
# Edit Fallback config
vim /boot/loader/entries/arch-fallback.conf
# ONLY THESE TWO LINES NEED TO BE CHANGED:
title Arch Linux (fallback initramfs)
initrd /initramfs-linux-fallback.img
# Edit Bootloader Config
vim /boot/loader/loader.conf
# Write:
default arch.conf
timeout 0 # Hold <Space> during boot to reach the menu
console-mode max
editor 0
# Verify:
bootctl # Should now list the default entry we created
- Setup Network Manager
pacman -S networkmanager
systemctl enable NetworkManager
# The 5060 is a desktop — Ethernet only unless a Wi-Fi card was added, so plain NetworkManager
# is enough. Don't also enable iwd standalone; two daemons fighting over one device causes grief.
#
# If this WERE a Wi-Fi box and you wanted iwd as the backend (better than wpa_supplicant),
# install iwd and add /etc/NetworkManager/conf.d/wifi_backend.conf:
# [device]
# wifi.backend=iwd
# ...and enable ONLY NetworkManager (it drives iwd over D-Bus). Do not enable iwd.service too.
- Exit Live Environment
exit
umount -R /mnt # If it complains, lazy unmount: umount -R -l /mnt
reboot
# On login screen, login as root.
- Verify Network
ping archlinux.org
# Ethernet should be up automatically via NetworkManager.
- Update System
pacman -Syu
# S: Sync y: Refresh package DB u: Upgrade installed packages
systemctl enable --now systemd-timesyncd.service
# Enables NTP time sync (the piece we skipped in chroot).
Next Steps:
- [[Patch EFI Security Hole]]
- Create [[New User]]
- Setup [[Sudo]]
- Install graphics drivers — not Nvidia on this box. The i5-8500 uses integrated UHD 630:
pacman -S mesa intel-media-driver(addvulkan-intelif you want Vulkan) - Install [[i3 Desktop Environment]] or [[Archive/KDE Plasma DE on Arch]]
- Customize Arch Linux