Updates:

2021–12–06: There is an easy way to install Arch Linux if you want to get an arch installation up and running within a few minutes without the hassle. The Arch Installer is a python script provided with the arch ISO that follows the same philosophies of Arch. You can invoke the arch installer with the following command and follow the screen instructions.

archinstall

Repository:https://github.com/archlinux/archinstall

Although this is simple and fast, I would encourage following the guide and setting up your arch to understand how everything works together, make mistakes, and resolve those. It would save time in the future.


Arch Linux is an excellent Linux distribution with the support for multiple desktop environments, and it has a great community behind it.

Every step here is described in detail in ArchWiki https://wiki.archlinux.org, so if you run into any issues, the wiki is the first place you should look at.

Arch Linux installation is hands-on, compared to the installation of other Linux distributions like Ubuntu. The best experience about this is that once you install it, Arch feels like the distribution that you always needed.

The installation can be different on the hardware you have, for example, if you have an AMD processor and or UEFI based hardware, boot configuration can be different from an Intel-based system.

File system: btrfs DE: Gnome Boot: UEFI with GPT (systemd-boot) / BIOS with MBR untested — refer to the arch documentation for partition layouts. https://wiki.archlinux.org/index.php/Partitioning#Example_layouts Processor: AMD Graphics: AMD and Nvidia

**Last updated: **07/June/2020


Step 1: Download the Arch ISO and create a bootable USB

Download:https://archlinux.org/download/

Make sure you have read the system requirements on the download page.

To create a bootable disk, you can use Etcher or Rufus. If you are on Windows, use Rufus. It does the job really well, and I have not had any problems so far.

If you use Rufus, make sure you select the target system as *BIOS or UEFI *that will make sure the bootable will work with both BIOS and UEFI systems.

Step 2: Boot from the live USB and Partitioning disks

Boot from the Live USB you have created, and Arch Installer will boot into a shell prompt.

Use timedatectl to ensure the system clock is accurate:

timedatectl set-ntp true

Before starting the partitioning process, use the below command to identify the disk you need to partition:

fdisk -l

then create the following partition structure:

  1. boot
  • 512MB
  • EFI system partition type
  1. root
  • Remaining space
  • Default type Linux file system

I prefer to use gdisk utility to create partitions there are other partitioning tools like cfdisk, you can use your preferred partitioning tool.

gdisk /dev/nvme0n1

Press **o to create a new gpt **partition table and press n to add a new partition.

Press enter for the first sector, for the last sector type +512MB, set the file system type as ef00 to create UEFI boot partition for UEFI systems.

again press n to add a new partition notice that partition number automatically identified as 2 and start sector is automatically set after the Last sector of the first sector. Just press enter for the rest of the prompts. This will create the second partition using the rest of the disk space, and finally, press w to write the new partition table to the disk.

Step 3: Create filesystem

Create filesystem for the first partition we resaved for UEFI and create a btrfs partition for the second partition.

mkfs.fat -F32 /dev/
mkfs.btrfs /dev/

Since we are using btrfs as our root volume, now is the time to create subvolumes.

  • / subvolume
  • /home subvolume in case a root snapshot needs to be restored
  • /var changes often so also a separate subvolume.
  • noatime and nodiratime are used to prevent a write every time a file or directory is accessed (not great for a COW filesystem like btrfs).
  • zstd is used for compression because it is fast and provides compression similar to xz.
  • Don’t use discard . Issue manual trim commands with fstrim or enable the fstrim.timer.
mount /dev/nvmen1p2 /mnt
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@var
umount /mnt

mount -o subvol=@,ssd,compress=zstd,noatime,nodiratime /dev/nvme0n1p2 /mnt
mkdir -p /mnt/{boot,home,var}
mount -o subvol=@home,ssd,compress=zstd,noatime,nodiratime /dev/nvme0n1p2 /mnt/home
mount -o subvol=@var,ssd,compress=zstd,noatime,nodiratime /dev/nvme0n1p2 /mnt/var
mount /dev/nvme0n1p1 /mnt/boot

Step 4: Installation of the system

Install base system:

Here I install zsh and released packages because I prefer zsh over bash. If you like to keep bash as default, you can remove all zsh* package arguments.

AMD systems

pacstrap c /mnt base base-devel linux linux-firmware btrfs-progs zsh zsh-autosuggestions zsh-completions zsh-syntax-highlighting amd-ucode vim

Intel Systems

pacstrap c /mnt base base-devel linux linux-firmware btrfs-progs zsh zsh-autosuggestions zsh-completions zsh-syntax-highlighting intel-ucode vim

Generate fstab and verify:

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

Step 5: Configure system

Use arch-chroot and enter the mounted disk as root. This is an operation that changes the apparent root directory for the current running process and their children. A program that is run in such a modified environment cannot access files and commands outside that environmental directory tree. This modified environment is called a chroot jail.

arch-chroot /mnt

Setup the hostname:

echo barney > /etc/hostname

edit /etc/hosts

127.0.0.1   localhost
::1         localhost
127.0.1.1   barney.localdomain   barney
::1         barney.localdomain   barney

Change the shell to zsh: Continue to the next step if you do not like zsh as default

chsh -s /bin/zsh

Set the timezone:

timedatectl list-timezones
timedatectl set-timezone Asia/Colombo

Enable NTP auto time synchronisation:

systemctl enable systemd-timesyncd

Install and Enable network manager:

pacman -S networkmanager
systemctl enable NetworkManager

Localization:

Set up locale by uncommenting the correct locale in /etc/locale.gen file

vim /etc/locale.gen

locale-gen

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

Setup root password:

passwd

Step 5: Setup the boot loader

Since we are using btrfs as root partition we need to configure

vim /etc/mkinitcpio.conf

Add btrfs to HOOKS. This will make sure btrfs module will be added to the Linux boot image when generating.

HOOKS=”base udev autodetect modconf block btrfs filesystems keyboard fsck”

Regenerate the boot image:

mkinitcpio -p linux

Install systemd-boot bootloader:

bootctl --path=/boot install

Get UUID of cryptoLUKS partition:

blkid

Create Arch entries:

Create /boot/loader/entries/arch.conf:

This is a script I used to copy UUID to arch.conf file. It will create the file with UUID.

blkid | grep -i p2 | awk '{ print $2 }' > /boot/loader/entries/arch.conf

modify the file to match with below configuration

for AMD based systems:

title Arch Linux 
linux /vmlinuz-linux
initrd /amd-ucode.img
initrd /initramfs-linux.img
options root=UUID=**UUID_FROM_ABOVE** rootflags=subvol=@ rw

for Intel based systems:

title Arch Linux 
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options root=UUID=UUID_FROM_ABOVE rootflags=subvol=@ rw

Edit /boot/loader/loader.conf and add below:

default arch

Verify the config:

Navigate to /boot/loader/entries and check the configurations

  • Default
exit
umount -R /mnt
reboot

You should have a fully functioning Arch system. What comes next is your personal preferences. The example is a very basic vanilla Gnome desktop.

Step 6: Install a desktop environment

There are many desktop environments supported you can visit here and find the instructions to install your favourite desktop.

pacman -Syu gnome realtime

Ignore realtime package if you are using DE other than gnome. the realtime package is required for jack and jack2 audio used by the gnome.

**Add user and set the password: **Make sure you set the correct shell for the user. I have used zsh as default, if you prefer bash use /bin/bash

useradd -mUG lp,network,power,sys,wheel,realtime -s /bin/zsh 
passwd newuser

Add user to wheel group to support administrative(sudo) permissions

EDITOR=nano visudo

Uncomment and save

%wheel ALL=(ALL) ALL

Enable display manager:

systemctl enable gdm

Reboot:

systemctl reboot

Step 7: Install graphic drivers

Installation of the graphic drivers can be different based on the graphics hardware.

to install Nvidia graphic driver

pacman -S nvidia

to install AMD graphics

pacman -S f86-video-ati

Step 8: Install yay for aur package management

The Arch User Repository (AUR) is a community-driven repository for Arch users. It contains package descriptions (PKGBUILDs) that allow you to compile a package from source with makepkg and then install it via pacman.

Install git:

sudo pacman -S git

Clone yay repo from aur:

cd /opt
git clone https://aur.archlinux.org/yay-git.git

generate the yay package and install:

cd yay-git
makepkg -si

Enjoy!


Discover more from FastCode

Subscribe to get the latest posts sent to your email.

Leave a Reply

Index