Pre-installation Steps
First and foremost, having some basic Linux, debugging and command line knowledge would be helpful for the installation process.
There are a couple of things that we need to do in order to install Arch Linux. Here are the prerequisites in an ordered manner.
- Head over to Arch Linux official download page.
- Find the mirror of your country or closest to your country.
- Download the
x86_64.iso
file and optionally download thesha256sums.txt
- Verify the hash of the downloaded ISO by comparing to the text file's. In Microsoft Windows, we can use the built-in
certutil
command to verify the signature. - After the ISO image has been verified, we need to burn it into a new removable USB flash drive (4GB is enough) using balenaEtcher or rufus.
- Next, plug in the newly burned flash drive into the target machine.
- Turn on the power and hit the Esc key repetitively until the BIOS menu shows up.
- Depending on your hardware, you need to figure out the way to boot the computed with the flash drive.
HP Pavilion
If you are installing Arch on a HP Pavilion machine, there might be a couple of extra steps that you need to take to boot the machine with the flash drive.
First, hit F9 to enter the Boot Loader and select the name of the flash drive that has the Arch Linux image mounted. Try to hit Enter to boot with the flash drive.
If there is an error message saying "Selected boot image did not authenticate, press Enter to continue" and unable to proceed with the boot, hit Enter and subsequently F10 to go to the BIOS settings. Navigate to "System Configuration", then "Boot Options", and finally enable the "Legacy Support" setting.
F10 BIOS settings -> System Configuration -> Boot Options -> Legacy Support -> Enable
The machine will reboot after the changes have been saved and it will prompt "Operating System Boot Mode Change", and instruct to enter a four-digit number followed by Enter to confirm the change.
At this point, the flash drive should now be bootable without any hindrance.
Installation
The installation steps are ordered as follows. Only proceed with the installation if the boot is completed and landed on the tty screen.
Check and Connect WiFi
This step is to connect the machine to the internet via WiFi. For ethernet users, this step can be skipped.
First, type iwctl
to enter into the iNet Wireless Daemon (iwd) mode.
iwctl
Next, type the following command to show, scan and connect to the WiFi network. The #
sign indicates that it is in the iwd mode.
# station wlan0 show
# station wlan0 scan
# station wlan0 connect 'Wifi Name'
Passphrase: ***
# quit
Update GPG Key
This step can be skipped if we don't intend to use the archinstall
script to install Arch Linux.
pacman-key --init
pacman-key --populate archlinux
Set Time
Next, we need to synchronize the Linux system clock with an NTP server with the following command.
timedatectl set-ntp true
timedatectl status
Partition Disk
Disk partitioning is the most crucial part of installing Arch Linux. To list the hard disks available, use the fdisk
command with -l
flag to retrieve the info.
fdisk -l
There should be at least sda
in the results, which will be used for formatting and partitioning. To start the process, provide the disk path to fdisk
to enter the fdisk
mode.
fdisk /dev/sda
The prompt should change to Command (m for help):
. We will need to partition the disk into three sections, first is for the EFI system, second is for the swap and third is for the general file system.
Hit g to create a label, and followed by n to create a partition. To create a partition, it will prompt for partition number, start and end. Here is what I do to create 3 new partitions. The consecutive commas means that I leave the field blank and use the default value.
Command (m for help): g
Command (m for help): n, , ,+550M // EFI system
Command (m for help): n, , ,+16G // Linux swap
Command (m for help): n, , , // Linux filesystem
Change Partition Type
By default, all partitions created with the n
command are of type "Linux filesystem". Hence, we will need to correct the partition type for the first partition to "EFI system" and the second partition to "Linux swap". The third partition is correct.
To update the partition type, use the t
command.
Command (m for help): t
Partition 1 --> 1 (EFI system)
Partition 2 --> 19 (Linux swap)
After the partitions has been correctly configured, type w to save the changes and exit fdisk
.
Create Storage
Next, create the respective storage according to their partition type. The partitioning with fdisk
does not create the usable storage type altogether.
mkfs.fat -F32 /dev/sda1
mkswap /dev/sda2
swapon /dev/sda2
mkfs.ext4 /dev/sda3
Mounting sda3
We need to mount /dev/sda3
to /mnt
to work with it.
mount /dev/sda3 /mnt
Installing System
After the filesystem is mounted, run the pacstrap
command to install Arch Linux into our hard drive (sda3).
pacstrap /mnt base base-devel linux linux-firmware
Fstab
Next, generate a file system table with the following command.
genfstab -U /mnt >> /mnt/etc/fstab
Arch Chroot
Enter the chroot mode with the following command. It is required for us to continue the installation steps hereafter.
arch-chroot /mnt
Set Timezone
To configure the correct time zone for our machine, we can use the ln
(link) command as follows.
ln -sf /usr/share/zoneinfo/<REGION>/<CITY> /etc/localtime
# example
ln -sf /usr/share/zoneinfo/Asia/Kuala_Lumpur /etc/localtime
If you are unsure of your region or city, use the following command to explore the available regions and cities or visit the timezone table Wikipedia page
ls /usr/share/zoneinfo
Set Hardware Clock
Hardware clock is different from Linux managed clock. Hardware clock runs even after the system is switched off. We need to sync the hardware clock with the current system clock by running hwclock
with the --systohc
flag which stands for "system to hardware clock."
hwclock --systohc
Installing Nano
Nano is a simple command line text editor that we will use for editing the locale file in the next step. Run the following command to install Nano. Alternatively, you can use Vim or Emacs for editing files. In that case, you may skip this and install them instead.
pacman -S nano
Configuring Locales
Locales are used for displaying information that makes most sense for you by providing the context to the system. Open the /etc/locale.gen
file and uncomment the locale(s) that you want to use.
nano /etc/locale.gen
After saving the file, run locale-gen
to generate the symlink.
locale-gen
Set Hostname
Hostname is the name that identifies the computer. For my case, I am using HP Pavilion and hence I will use pavilion
as the hostname. However, there is no strict rules when it comes to setting the hostname. Use whatever name as you please.
We need to set the hostname by creating a new file at /etc/hostname
and insert the desired hostname at the first line of the file.
nano /etc/hostname
After that, save and exit the text editor.
Set Hosts
Next, we need to configure the hosts of the machine.
nano /etc/hosts
Copy the following content and append to the /etc/hosts
file and replace the <hostname>
with your actual hostname.
127.0.0.1 localhost
::1 localhost
127.0.1.1 <hostname>.localdomain <hostname>
Here is how it looks like for my configuration file.
127.0.0.1 localhost
::1 localhost
127.0.1.1 pavilion.localdomain pavilion
Create Password
Next, we need to set a password for our root user with the passwd
command.
passwd
Enter the password and confirm the password as prompted.
Add User
Currently, we only have one superuser which is the "root" and it is recommended to create an underprivileged user and use that user instead for better security. We can create a new user and configure a password for that user as follows.
useradd -m <username>
passwd <username>
Add User to Group
We need to add the newly created user to some predefined groups to gain access to features that otherwise will need root access.
usermod -aG wheel,audio,video,optical,storage <username>
Install sudo
To use the sudo
command, it will need to be installed first.
pacman -S sudo
Open the sudoer's file and uncomment %wheel ALL=(ALL) ALL
.
EDITOR=nano visudo
Save the file and exit Nano.
Install grub and deps
pacman -S grub efibootmgr dosfstools os-prober mtools
Create Boot Dir
mkdir /boot/EFI
mount /dev/sda1 /boot/EFI
grub-install --target=x86_64-efi --bootloader-id=grub_uefi --recheck
Create Grub Config
Next, generate a grub config file with the command below.
grub-mkconfig -o /boot/grub/grub.cfg
Install NetworkManager
NetworkManger is used for WiFi connection.
pacman -S networkmanager
To enable the NetworkManager, type the command below.
systemctl enable NetworkManager
Exit Chroot and Unmount
Exit the chroot and unmount the storage partition.
exit
umount -l /mnt
The Arch Linux has been installed. To verify the installation, reboot the machine with the USB flash drive unplugged. You should still be able to boot into Arch Linux after that.
Setup WiFi Connection (After Reboot)
After rebooting the machine for the first time, we will need to connect to the WiFi again. This time using the NetworkManager that was installed earlier.
If the NetworkManager service is not running yet, use the enable
command to activate it and run status
to verify that it is already running in the background.
systemctl enable NetworkManager.service --now
systemctl status NetworkManager.service
To connect to a network, simply run the terminal UI of NetworkManager as shown. We should be able to connect to our WiFi network by navigating the UI.
nmtui
Alternatively, we can connect the WiFi by using the one-liner CLI command instead:
nmcli device wifi connect 'WiFi Name' password *****
After connected to the network, we can verify the internet access with ping
.
ping google.com
Congratulations. Everything is now completely set up. Next, we can install our favourite packages and software such as window manager, desktop environment and login manager according to our needs.
Extras
Additionally, we can update the mirror list for pacman to improve the download speed. Starting off by installing a package called reflector
.
sudo pacman -S reflector
Next, create a backup for the existing mirror list in case of disaster.
sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
Finally, we can update the mirror list with reflector.
sudo reflector --verbose --latest 10 --protocol https --sort rate --save /etc/pacman.d/mirrorlist
The mirror list should be updated according to the availability on the region.