1 - Download & verify ISO
Download the latest ISO from archlinux.org. Verify it with the official checksum.
sha256sum archlinux-2025.05.01-x86_64.iso
Tip: Ensure the hash matches the one published on the website.
2 - Create installer USB
On Linux, find your device with lsblk
and write the ISO with dd
. On Windows, use Rufus.
Linux
lsblk
sudo dd if=archlinux-2025.05.01-x86_64.iso of=/dev/sdX status=progress bs=4M conv=fsync
Replace /dev/sdX
with your installer USB device.
Warning: Make sure that your USB drives do not contain any important data.
Windows
Use Rufus to write the ISO to your USB drive.
3 - Connect to the Internet
Now plug in the USB installer
This next step is only necessary if you are using a Wi-Fi connection. If you are using Ethernet, you can skip it.
Let’s connect to the internet using iwctl
:
- Detect any Wi-Fi adapters:
- Scan for nearby networks:
- List available networks:
- Connect to your Wi-Fi:
- Test your connection:
iwctl device list
You should see a wireless interface (e.g., wlan0
or similar).
iwctl station wlan0 scan
iwctl station wlan0 get-networks
iwctl station wlan0 connect SSID
Replace SSID
with your Wi-Fi network name, press ENTER, type your passphrase, and exit iwctl with exit
.
ping -c3 archlinux.org
4 - Partition target Drive
Tip: To have the best partition layout, it’s recommended to create a separate home partition. This way, if you ever mess up the root partition, you can reinstall the system and mount the existing home partition without losing your personal data.
The general guideline is: the more disk space you have, the better it is to have a separate home partition. I recommend giving your root partition about 25% of the total disk space and leaving the rest for the home partition. This will result in three partitions: EFI, ROOT, HOME.
Example for a 512 GiB Drive
- EFI partition: 2 GiB
- Root partition: 128 GiB (25%)
- Home partition: 382 GiB (remaining space)
As for swap, it’s better to create a swap file instead of a dedicated swap partition. This makes resizing easier. The size of the swap file depends on your RAM and whether you want to enable hibernation. For instance, if you have 16 GiB of RAM, a 16 GiB swap file is a reasonable choice.
Create two partitions on the target Drive (512GiB):
# | Purpose | Size | Type / FS | Mount |
---|---|---|---|---|
1 | UEFI system | 2 GiB | vfat (FAT32) | /boot |
2 | Root | 128 GiB (25%) | Ext4 | / |
3 | Home | Rest | Ext4 | /home |
cfdisk /dev/sdY
After opening the target drive with cfdisk, you need to create two partitions: an EFI partition and a root partition.
Warning: Double‑check the target device (e.g. /dev/sdY
) with lsblk
to avoid wiping the wrong disk.
5 - Create Filesystems
Now that the partitions are ready, we need to format them with appropriate filesystems.
mkfs.vfat -F32 /dev/sdY1
Formats the first partition as FAT32. This is typically used for EFI System Partitions.
mkfs.ext4 /dev/sdY2
Formats the second partition with the Ext4 filesystem
mkfs.ext4 /dev/sdY3
Formats the 3 partition with the Ext4 filesystem
6 - Mount the filesystem
Next, we mount the root filesystem, the home partition, and the EFI partition.
mount /dev/sdY2 /mnt
Mounts the second partition to
/mnt
mkdir -vp /mnt/boot
Creates the
/boot
directory inside/mnt
to mount the corresponding partition.
mount /dev/sdY2 /mnt/boot
Mounts the EFI system partition at
/mnt/boot
.
mkdir -vp /mnt/home
Creates the
/home
directory inside/mnt
to mount the corresponding partition.
mount /dev/sdY3 /mnt/home
Mounts the Home partition at
/mnt/home
.
lsblk -pf /dev/sdY
Lists the partitions, filesystems, and mount points to verify everything is set up correctly.
7 - Install Base System
pacstrap -K /mnt linux linux-firmware linux-headers base base-devel nano \
networkmanager grub efibootmgr os-prober bash-completion iwd
Tip: You will need to add your CPU microcode package: for Intel, add intel-ucode
; for AMD, add amd-ucode
.
- linux – The Linux kernel.
- linux-firmware – Firmware files for various hardware devices.
- linux-headers – Kernel headers for building modules against the kernel.
- base – Essential packages for a minimal Arch Linux system.
- base-devel – Development tools for compiling software (make, gcc, etc.).
- nano – Simple terminal text editor.
- networkmanager – Network management daemon and CLI tools.
- grub – Bootloader to start the OS.
- efibootmgr – EFI boot manager to configure UEFI boot entries.
- os-prober – Detects other OS installations for bootloader configuration.
- bash-completion – Bash completions for core commands.
- iwd – Wireless daemon for managing Wi-Fi connections.
- intel-ucode – Microcode updates for Intel CPUs.
- amd-ucode – Microcode updates for AMD CPUs.
8 - Generate fstab
genfstab -U /mnt > /mnt/etc/fstab
Generates the fstab
file using UUIDs (-U) for all mounted partitions under /mnt
, and writes it to /mnt/etc/fstab
. This file tells the system which partitions to mount at boot.
9 - System Configuration
arch-chroot /mnt
Enters the new system environment at
/mnt
, so all following commands affect the installed system, not the live USB.
echo "zombie" > /etc/hostname
Sets the system name to
zombie
, Change it to your own hostname, which identifies your computer on networks.
timedatectl list-timezones | grep Tokyo
Use the above command with your city name to find your timezone. You can then use its output in the next command.
ln -sf /usr/share/zoneinfo/Japan/Tokyo /etc/localtime
Links your local timezone file to
/etc/localtime
for correct system time. Set it to your own localtime
hwclock --systohc
Writes the system time to the hardware clock so it stays accurate after reboots.
nano /etc/locale.gen
Uncomment the locale you want to use by removing the # and then save the file.
locale-gen
Generates the locale files specified in
/etc/locale.gen
.
echo "LANG=en_US.UTF-8" > /etc/locale.conf
Change the
en_US.UTF-8
to the locale you uncommented in the/etc/locale.gen
file.
echo "KEYMAP=us" > /etc/vconsole.conf
Add your own keymap by changing
us
to your keyboard layout.
passwd
Prompts to set a strong password for the root account.
useradd -mG wheel <yourUserName>
Creates the user with a home directory and adds them to the
wheel
group for administrative privileges. Replace<yourUserName>
with your own username.
passwd <yourUserName>
Sets the password for your new user account.
EDITOR=nano visudo
Edits the
sudoers
file safely. This allows users in thewheel
group to usesudo
for administrative tasks. Uncomment the line at the bottom of the file by removing the # from: %wheel ALL=(ALL) ALL
10 - GRUB Dual Boot (Optional)
nano /etc/default/grub
Open the GRUB configuration file for editing. This file controls bootloader settings and kernel parameters.
GRUB_DISABLE_OS_PROBER=false # Uncomment the line by removing the hashtag (#), then save and exit the file
This enables GRUB to detect and recognize other operating systems.
Use this only if you have another OS and want to dual boot between Arch Linux and that OS. You can skip this step if you don’t want to set up dual booting.
11 - Install GRUB
UEFI
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB --recheck
Installs GRUB for UEFI systems. -
--efi-directory=/boot
specifies the EFI system partition. ---bootloader-id=GRUB
names the boot entry. ---removable
makes it bootable on removable media. ---recheck
ensures device detection is refreshed.
Generate GRUB configuration
grub-mkconfig -o /boot/grub/grub.cfg
Automatically generates the GRUB configuration file, detecting all kernels and operating systems.
12 - Networking, Hosts
systemctl enable systemd-networkd
Enables the systemd network service at boot, which manages network interfaces automatically.
systemctl enable systemd-resolved
Provides DNS resolution and caching for the system, required for hostname lookups and internet connectivity.
systemctl enable NetworkManager
A higher-level tool to manage wired, wireless, and VPN connections with CLI or GUI tools.
host=$(cat /etc/hostname) sh -c "printf '127.0.0.1 localhost\n::1 localhost\n127.0.1.1 $host.localdomain $host\n' > /etc/hosts"
Maps hostnames to IP addresses locally. This ensures your system can resolve its own hostname and loopback addresses without querying DNS.
13 - Desktop Environment (optional)
pacman -S xfce4 xfce4-goodies lightdm lightdm-gtk-greeter network-manager-applet \
bluez bluez-utils wget curl git xdg-utils gvfs openssh alsa-utils \
pipewire pipewire-pulse pavucontrol wireplumber unzip ntfs-3g rsync \
noto-fonts-emoji noto-fonts-cjk noto-fonts-extra chromium reflector cups
- xfce4 – XFCE desktop environment.
- xfce4-goodies – Additional XFCE plugins and tools.
- lightdm – Display manager for graphical login.
- lightdm-gtk-greeter – GTK-based login screen for LightDM.
- network-manager-applet – GUI for managing network connections.
- bluez – Bluetooth protocol stack.
- bluez-utils – Bluetooth utilities for managing devices.
- wget – Command-line file downloader.
- curl – Command-line tool for transferring data with URLs.
- git – Version control system.
- neofetch – Displays system information in terminal.
- xdg-utils – Desktop integration utilities.
- gvfs – Virtual filesystem support for desktop apps.
- openssh – SSH client and server.
- alsa-utils – ALSA audio utilities.
- pipewire – Multimedia server for audio/video.
- pipewire-pulse – PulseAudio compatibility layer for PipeWire.
- pavucontrol – GUI volume control for PulseAudio/PipeWire.
- wireplumber – PipeWire session manager.
- unzip – Extract ZIP archives.
- ntfs-3g – NTFS filesystem support.
- rsync – File synchronization tool.
- noto-fonts – Much-needed fonts to include extra characters for different languages.
- arch-install-scripts – Scripts to aid in installing Arch Linux on other systems.
- gparted – A Partition Magic clone
- reflector – Updates/optimizes Arch Linux mirrors for faster package downloads.
- cups – A Printing system
These packages install XFCE, essential utilities, audio/video support, network management, Bluetooth, and common CLI tools for daily usage.
systemctl enable lightdm
Starts the display manager automatically at boot, providing a login screen.
systemctl enable bluetooth
Starts the Bluetooth service automatically at boot for device pairing and management.
systemctl enable cups
Starts the printing service automatically at boot
14 - Finish
exit
Leaves the chroot environment, returning to the live installer system.
umount -R /mnt
Recursively unmounts all partitions mounted under
/mnt
, ensuring no filesystems are left mounted before shutdown.
poweroff
Shuts down the installer system safely. After this, you can remove the installation media and boot your new system.
Warning: Remove the installer USB and boot your computer.
15 - Post Installation
After booting and logging in as your user, the DNS step is important, while the YAY step is optional.
Let's set up the DNS
sh -c 'printf "nameserver 8.8.8.8\nnameserver 1.1.1.1\n" >> /etc/resolv.conf'
Adds public DNS servers (Google and Cloudflare) for name resolution. To ensures the system can resolve domain names on the internet.
Let's set up YAY, the AUR helper.
cd /tmp/ && git clone https://aur.archlinux.org/yay
cd yay/ && makepkgs -si --noconfirm
And now you can just use yay instead of pacman.
yay -Syu
yay -S fastfetch
fastfetch
Et voilà! You now have installed Arch Linux.