Arch Linux Installation for Beginners

A concise, step‑by‑step guide.

Target: sdY/nvmeY drive FS: Ext4 Boot: UEFI

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 and boot from it.

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:

  1. Detect any Wi-Fi adapters:
  2. iwctl device list

    You should see a wireless interface (e.g., wlan0 or similar).

  3. Scan for nearby networks:
  4. iwctl station wlan0 scan
  5. List available networks:
  6. iwctl station wlan0 get-networks
  7. Connect to your Wi-Fi:
  8. iwctl station wlan0 connect SSID

    Replace SSID with your Wi-Fi network name, press ENTER, type your passphrase, and exit iwctl with exit.

  9. Test your connection:
  10. ping -c3 archlinux.org

    You should see some packets being sent and received.

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 three partitions on the target Drive (512GiB):

#PurposeSizeType / FSMount
1UEFI system2 GiBvfat (FAT32)/boot
2Root128 GiB (25%)Ext4/
3HomeRestExt4/home

Open the target drive with cfdisk, you need to create two or three partitions depends if you want a home partition or not: an EFI partition and a root partition. In this example it's thee partitions.

Warning: Double‑check the target device (e.g. /dev/sdY) with lsblk to avoid wiping the wrong disk.

cfdisk /dev/sdY

5 - Create Filesystems

Now that the partitions are ready, we need to format them with appropriate filesystems.

Formats the first partition as FAT32. This is typically used for EFI System Partitions.

mkfs.vfat -F32 /dev/sdY1

Formats the second partition (root partition) with the Ext4 filesystem.

mkfs.ext4 /dev/sdY2

Formats the 3 partition (home partition) with the Ext4 filesystem.

mkfs.ext4 /dev/sdY3

6 - Mount the Filesystem

Next, we mount the root filesystem, the EFI partition, and the home partition.

Mounts the second partition (root partition) to /mnt.

mount /dev/sdY2 /mnt

Creates the /boot directory inside /mnt to mount the corresponding partition (EFI partition).

mkdir -vp /mnt/boot

Mounts the EFI system partition at /mnt/boot.

mount /dev/sdY1 /mnt/boot

Creates the /home directory inside /mnt to mount the corresponding partition.

mkdir -vp /mnt/home

Mounts the Home partition at /mnt/home.

mount /dev/sdY3 /mnt/home

Lists the partitions, filesystems, and mount points to verify everything is set up correctly.

lsblk -pf /dev/sdY

7 - Install Base System

pacstrap -K /mnt linux linux-firmware linux-headers base base-devel nano \
		networkmanager grub efibootmgr os-prober bash-completion wpa_supplicant

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.
  • wpa_supplicant – Handles Wi-Fi authentication.
  • intel-ucode – Microcode updates for Intel CPUs.
  • amd-ucode – Microcode updates for AMD CPUs.

8 - Generate the 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.

genfstab -U /mnt > /mnt/etc/fstab

9 - System Configuration

Enters the new system environment at /mnt, so all following commands affect the installed system, not the live USB.

arch-chroot /mnt

Sets the system name to zombie, Change it to your own hostname, which identifies your computer on networks.

echo "zombie" > /etc/hostname

Use the command with your city name to find your timezone.
You can then use its output in the next command that links your local timezone file to /etc/localtime for correct system time.

timedatectl list-timezones | grep Tokyo
ln -sf /usr/share/zoneinfo/Japan/Tokyo /etc/localtime

Writes the system time to the hardware clock so it stays accurate after reboots.

hwclock --systohc

Uncomment the locale you want to use by removing the # in this example it's en_US.UTF-8 UTF-8 and then save the file.

nano /etc/locale.gen

Generates the locale files specified in /etc/locale.gen.

locale-gen

Change the en_US.UTF-8 to the locale you uncommented in the /etc/locale.gen file.

echo "LANG=en_US.UTF-8" > /etc/locale.conf

Add your own keymap by changing us to your keyboard layout.

echo "KEYMAP=us" > /etc/vconsole.conf

Prompts to set a strong password for the root account.

passwd

Creates the user with a home directory and adds them to the wheel group for administrative privileges.
Replace <yourUserName> with your own username.

useradd -mG wheel <yourUserName>

Sets the password for your new user account.

passwd <yourUserName>

This allows users in the wheel group to use sudo for administrative tasks. Uncomment the line at the bottom of the file by removing the # from: %wheel ALL=(ALL) ALL and save the file.

EDITOR=nano visudo

10 - Install GRUB

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB --recheck

--target=x86_64-efi installs GRUB for UEFI systems.
--efi-directory=/boot specifies the EFI system partition.
--bootloader-id=GRUB names the boot entry.
--recheck ensures device detection is refreshed.

Generate GRUB configuration

Automatically generates the GRUB configuration file, detecting all kernels and operating systems.

grub-mkconfig -o /boot/grub/grub.cfg

GRUB Dual Boot (Optional)

Open the GRUB configuration file for editing. This file controls bootloader settings and kernel parameters.

nano /etc/default/grub

This enables GRUB to detect and recognize other operating systems.

GRUB_DISABLE_OS_PROBER=false     # Uncomment the line by removing the hashtag (#), then save and exit the file

And run:

grub-mkconfig -o /boot/grub/grub.cfg

As for Windows, if it’s on another drive, you should be fine.
If it’s on the same drive, you should do the following after finishing/rebooting the installation:

/dev/sda1 or /dev/nvme0n1p1 should be the EFI Windows partition.
To find out which one it is, use lsblk -f.

mkdir -p /mnt/windows-efi
mount /dev/sda1 /mnt/windows-efi

After that, run grub-mkconfig -o /boot/grub/grub.cfg. In the output, you should see Windows being detected.

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 - Networking

Option 1 (Recommended): Using NetworkManager

NetworkManager handles wired, wireless, and VPN connections.
It also manages DNS automatically.

systemctl enable NetworkManager

After installing the system and rebooting, to add your Wi-Fi network, just run sudo nmtui and select your Wi-Fi.


Option 2: Using systemd-networkd

systemctl enable systemd-networkd
systemctl enable systemd-resolved

systemd-networkd manages network interfaces automatically.
systemd-resolved provides DNS resolution and caching.

Ethernet Configuration

nano /etc/systemd/network/en.network
[Match]
Name=en*

[Network]
DHCP=yes

Replace en* with your Ethernet interface if needed (e.g., enp3s0).
To find the interface name, use ip a or ip link.
It's fine to use en*.
This setup automatically obtains IP, gateway, and DNS from DHCP.

Wi-Fi Configuration

Create a wpa_supplicant config for your Wi-Fi interface (replace wlp3s0 with your interface):

nano /etc/wpa_supplicant/wpa_supplicant-wlp3s0.conf
ctrl_interface=DIR=/run/wpa_supplicant GROUP=netdev
update_config=1

network={
	ssid="YourWiFiSSID"
	psk="YourWiFiPassword"
	key_mgmt=WPA-PSK
}

Replace YourWiFiSSID (WiFi Name) and YourWiFiPassword with your Wi-Fi credentials.

Enable wpa_supplicant for the interface:

systemctl enable wpa_supplicant@wlp3s0

Wi-Fi networkd config (DHCP)

nano /etc/systemd/network/wl.network
[Match]
Name=wl*

[Network]
DHCP=yes

systemd-networkd handles IP, gateway, and DNS after wpa_supplicant connects.

12 - Hosts

Edit /etc/hosts with nano and add:

127.0.0.1   localhost
::1         localhost
127.0.1.1   YourHostName.localdomain   YourHostName

Replace YourHostName with your system’s hostname.
Maps hostnames to IP addresses locally, ensuring your system can resolve its own hostname 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

These packages install XFCE, essential utilities, audio/video support, network management, Bluetooth, and common CLI tools for daily usage.

  • 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

Starts the display manager automatically at boot, providing a login screen.

systemctl enable lightdm

Starts the Bluetooth service automatically at boot for device pairing and management.

systemctl enable bluetooth

Starts the printing service automatically at boot

systemctl enable cups

14 - Finish

Leaves the chroot environment, returning to the live installer system.

exit

Recursively unmounts all partitions mounted under /mnt, ensuring no filesystems are left mounted before shutdown.

umount -R /mnt

Shuts down the installer system safely. After this, you can remove the installation media and boot your new system.

poweroff

Warning: Remove the installer USB and boot your computer.

15 - Post Installation

After booting and logging in as your user, the DNS step and the YAY step are completely optional.

Let's set up the DNS

Edit the file /etc/resolv.conf with nano and add the following lines

nameserver 8.8.8.8
nameserver 1.1.1.1

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/ && makepkg -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.