Arch Linux installation guide
But it can be confusing for new users because of how much information it provides. In this tutorial, I'll show you how I install Arch Linux, without showing you too many choices.
Prerequisites
- Your desktop/laptop
- A USB key
- Some basic knowledge of Linux
The base system
Verify the boot mode
Make sure you're booting in EFI mode, check if the directory exists:
ls /sys/firmware/efi/efivars
Connect to the internet
Ethernet
You don't need to do anything.
Wifi
Get your device name:
iwctl station list
Scan for networks:
iwctl station wlan0 get-networks
Connect to your network:
iwctl station wlan0 connect MYWIFI
Update the system clock
Ensure the system clock is accurate:
timedatectl set-ntp true
Check the service status:
timedatectl status
Partition the disks
Identify disks:
lsblk
Disks are assigned to a block device such as /dev/nvme0n1
.
Clean the entire disk (do not do this if you want to keep your data):
# gdisk /dev/nvme0n1
x
for extra functionalityz
to zap (destroy) GPT data structures and exity
to proceedy
to blank out MBR
Create boot partition and root partition:
# cfdisk /dev/nvme0n1
- Select
gpt
- Hit
[ New ]
to create a new patition - Give the boot partition
1G
and let the rest for the root partition - Select the boot partition and hit
[ Type ]
to chooseEFI System
- Hit
[ Write ]
then typeyes
to save, then hit[ Quit ]
Format the partitions
Format the boot partition to FAT32:
mkfs.fat -F32 /dev/nvme0n1p1
Format the root partition to ext4:
mkfs.ext4 /dev/nvme0n1p2
Mount the file systems
Mount root partition first:
mount /dev/nvme0n1p2 /mnt
Then create mount point for boot partition and mount it accordingly:
mkdir /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot
Install the base and base-devel packages
Use the pacstrap script:
pacstrap /mnt base linux linux-firmware base-devel
Generate an fstab file
Use -U
or -L
to define by UUID or labels:
genfstab -U /mnt >> /mnt/etc/fstab
Chroot
Change root to the new system:
arch-chroot /mnt
Install some essential packages
Microcode:
pacman -S intel-ucode
(or amd-ucode
)
Network manager:
pacman -S networkmanager
Your text editor of choice:
pacman -S neovim
(or nano
or micro
)
And some packages for my personal config:
pacman -S ansible git zsh
Create swap file
As an alternative to creating an entire swap partition, a swap file offers the ability to vary its size on-the-fly, and is more easily removed altogether.
Create a 32GiB (adjust the number depending on your RAM, I recommend a number equal to the amount of RAM) swap file:
fallocate -l 32GiB /swapfile
Set the right permissions:
chmod 600 /swapfile
format it to swap:
mkswap /swapfile
Activate the swap file:
swapon /swapfile
Edit fstab at /etc/fstab
to add an entry for the swap file:
nvim /etc/fstab
/swapfile none swap defaults 0 0
Configure time zone
Set your time zone by region:
ln -sf /usr/share/zoneinfo/Asia/Ho_Chi_Minh /etc/localtime
Generate /etc/adjtime
:
hwclock --systohc
Configure locale
Uncomment en_US.UTF-8 UTF-8
in /etc/locale.gen
(or just overwrite the file like below), then generate locale:
echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen
locale-gen
Set LANG variable in /etc/locale.conf
:
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
Change host name
Create hostname file at /etc/hostname
contain the host name, for example:
echo 'Precision' > /etc/hostname
Set your root password
passwd
Enter your password then confirm it.
Install boot loader
Install systemd-boot
to the /boot
partition:
bootctl --path=/boot install
Edit systemd-boot
options:
nvim /boot/loader/loader.conf
default arch
timeout 0
Add Arch boot entry:
nvim /boot/loader/entries/arch.conf
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options root=/dev/nvme0n1p2 rw
Enable network services
systemctl enable NetworkManager
Add new user
Add a new user named myname
:
useradd -m -G wheel -s /bin/zsh -c "My Name" myname
Protect the newly created user myname
with a password:
passwd myname
Establish nvim
as the visudo editor:
EDITOR=nvim visudo
Then uncomment %wheel ALL=(ALL) ALL
to allow members of group wheel
sudo access.
Reboot to the new system
Exit the chroot environment by typing:
exit
Restart the machine:
reboot
Login
Login with your user account after the machine has rebooted. Use nmtui
to connect to the Internet if you're using wifi.
Graphical user interface
You'll have a lot of choices when it comes to Linux user interface, but for the sake of tutorial, I'll choose GNOME because it's the simplest one to install and use.
sudo pacman -S gnome
sudo systemctl enable --now gdm
Personally I don't like GNOME, here's some of my recommendation:
- KDE: Fast, looks nice by default, tons of feature
- Build your own desktop environment with a window manager:
Checkout the r/unixporn subreddit for much more eye candy screenshot of Linux.