Skip to content

Arch Linux Installation

Sources used:


Preparing the Arch ISO

Downloading the ISO

From the official website https://archlinux.org/download/

Verifying signatures

On Windows 11, open PowerShell as administrator:

certutil -hashfile ".\archlinux-2025.07.01-x86_64.iso" SHA256

On Linux:

sha256sum archlinux-2025.07.01-x86_64.iso

Compare the obtained hash with the one listed on the Arch website.


Preparing USB

In Windows simpy use Rufus or something else

In Linux (Arch in this case) follow next instructions:

Identify the USB device

lsblk

Example:

sdb
├─sdb1

Make sure you correctly identify the USB drive — choosing the wrong device will erase your data!

Unmount all USB partitions

sudo umount /dev/sdX*

Wipe old filesystem signatures and bootloaders

sudo wipefs -a /dev/sdX

Create a new GPT partition table

sudo parted /dev/sdX mklabel gpt

Create a single FAT32 partition

sudo parted -a optimal /dev/sdX mkpart primary fat32 0% 100%

Format the partition as FAT32

sudo mkfs.vfat -F32 /dev/sdX1

Write the ISO to the USB using dd

sudo dd bs=4M if=~/Downloads/archlinux-x86_64.iso of=/dev/sdX status=progress oflag=sync

Sync and safely remove the USB

sync

Preparing for installation

Enabling EFI

  • VirtualBox: go to Machine Settings → System → Enable EFI
  • Physical machine: enter BIOS and enable the appropriate settings (see your motherboard manual)

Checking CPU architecture

cat /sys/firmware/efi/fw_platform_size

Possible outputs:

  • 64 → UEFI-64b
  • 32 → UEFI-32b
  • If nothing is returned → the machine was not booted in UEFI mode (see above)

Changing keyboard layout

Checking available layouts

localectl list-keymaps | grep 'pl'

Selecting a layout

loadkeys pl

Checking internet connection

For a wired network, the machine should connect to the internet automatically.

Checking network configuration

ip a

Test connection

ping ping.archlinux.org

Updating system clock

timedatectl

If this is a VM, dual-boot, or you came from Windows, the time may be incorrect (Just Windows Things). Don't worry at this stage; it will be fixed later.


Disk partitioning

For a single disk, if you want to use 100% of the space.

Displaying current disks and partitions

fdisk -l

Example output

Already configured disk

Disk /dev/nvme1n1: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors
Disk model: Lexar SSD NM790 2TB                     
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 130CE33F-082D-419A-AFBC-5EA31EA0B140

Device            Start        End    Sectors  Size Type
/dev/nvme1n1p1     2048    2099199    2097152    1G EFI System
/dev/nvme1n1p2  2099200   10487807    8388608    4G Linux swap
/dev/nvme1n1p3 10487808 4000796671 3990308864  1.9T Linux filesystem

Selecting the disk

fdisk /dev/nvme1n1

Partitioning

Mount point Type Recommended size
/boot efi 1GiB
/swap swap 4GiB
/ root at least 23-32GiB
g - GPT table
n - new partition
t - type of partition

Creating EFI partition
n → 1 → Return (default start) → +1G
t → 1 → uefi

Creating swap partition
n → 2 → Return → +4G
t → 2 → swap

Creating root partition
n → 3 → Return → Return (all remaining space)

w - write changes and exit fdisk

Check partitions:

fdisk -l

Formatting partitions

EFI partition:

mkfs.fat -F 32 /dev/nvme1n1p1

SWAP partition:

mkswap /dev/nvme1n1p2
swapon /dev/nvme1n1p2

Root/system partition:

mkfs.ext4 /dev/nvme1n1p3

Mounting

Mount system partition:

mount /dev/nvme1n1p3 /mnt

Create directory and mount EFI partition:

mount --mkdir /dev/nvme1n1p1 /mnt/boot

Installation

Required packages

pacstrap -K /mnt base linux linux-firmware
  • base-devel – compilers, make, autoconf, needed for AUR
  • networkmanager – useful for automatic network management
  • vim – text editor
  • grub – bootloader
  • efibootmgr – manage EFI entries

CPU and GPU drivers (adjust to your hardware, here Ryzen 7 9800X3D + RTX 4070 Super): * amd-ucode – microcode for Ryzen * nvidia – NVIDIA driver * nvidia-utils – NVIDIA libraries and tools


System configuration

Generate fstab:

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

Check fstab contents

cat /mnt/etc/fstab

If no errors, continue.

Chroot

arch-chroot /mnt

Set time

Set timezone:

ln -sf /usr/share/zoneinfo/Europe/Warsaw /etc/localtime

Synchronize hardware clock:

hwclock --systohc

Locale

Edit locales:

vim /etc/locale.gen

Uncomment en_US.UTF-8 and pl_PL.UTF-8 UTF-8

Generate locales:

locale-gen

Set locale.conf

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

Set keyboard layout:

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

Network

Change hostname:

echo "pc-arch-mn" >> /etc/hostname

Enable NetworkManager:

systemctl enable NetworkManager

GRUB

Install GRUB

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

Generate config

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

Change root password

passwd

Finishing

Exit chroot:

exit

Unmount:

umount -R /mnt

Reboot:

reboot

Make sure to remove the installation media (USB drive, etc.)


After reboot

Create a user

Install sudo:

pacman -S sudo

Create a sudo user:

useradd -m -G wheel -s /bin/bash mateusz

Set user password:

passwd mateusz

Allow wheel group full permissions:

EDITOR=vim visudo 

Uncomment:
%wheel ALL=(ALL:ALL) ALL

Lock root account

Log in as new user. Check sudo permissions:

sudo whoami

Should return root. If not, fix before continuing.

Lock root account:

sudo passwd -l root

Unlock root account (if needed):

sudo passwd -u root

Install additional packages

pacman -S kitty dolphin git xorg plasma sddm
  • kitty – terminal emulator
  • dolphin – KDE file manager
  • git – git
  • xorg – X11 display server
  • plasma – KDE Plasma desktop environment
  • sddm – graphical login manager

Enable SDDM:

systemctl enable sddm

Reboot:

reboot

Final Stage

Logging into the system

I use Arch, btw.