1247 words · 6 min read
Arch Linux is known for, among many other things~~, such as being at the bleeding edge to a point of unstable~~ (*~~ask anyone trying to get GNOME 3.24 on time~~*), having no graphical installer, thus demanding command line knowledge, which is perhaps intimidating for some. However, **Arch Linux allows me to setup a system into my desired state in the shortest amount of time with the least hassles**, which is why I keep returning to Arch Linux despite its various annoyances.
The following setup guide is written primarily for myself, because even someone who has installed Arch Linux multiple times can’t remember every step perfectly. Most of these steps, however, should be applicable to other setups. After the process, you should get a basic installation with GNOME on an encrypted logical volume.
1. Enable network connection
The first thing to do after booting from the installation USB drive is to enable network connection. The exact setup may vary, but for my setup with Intel Wifi card, which is supported by the Linux Kernel out-of-the-box, the first step is to run–
–to connect to a wifi network. After that, test your connection by pinging a random website, such as:
2. Prepare your hard drive
My preferred setup is to have one partition as the EFI partition, and a LVM partition for the rest of the hard drive. There are various tools for partitioning hard drive, though I tend to use
fdisk. To set up the partitions for
/dev/sda, issue the following command:
If there are existing partitions that you wish to remove, press
Enter, then select the partitions you would like to remove one by one. Afterwards, press
Enter to create new partitions.
The first partition to create is the EFI paritition. After pressing
fdisk will ask you a number of questions, such as the beginning and end of the parition you want to create. Other than the end of the first partition, which I will put
+500M in, you can press
Enter to use defaults.
fdisk creates Linux filesystem for all the partitions. To create the correction partition types, press
Enter. First, change the partition 1 to EFI partition putting
1 as the HEX code. Repeat the process for partition 2, but put
31, which stands for Linux LVM.
When you have finished it, press
Enter to write the change to the disk.
Next, we have to format the EFI partition with FAT32.
mkfs.vfat -F32 /dev/sda1
3. Setup encryption and create partitions within the LVM
Encrypt the entire LVM partition by running–
cryptsetup --cipher aes-xts-plain64 --key-size 512 --hash sha512 luksFormat /dev/sda2
You will be prompted to enter a passphrase twice. This passphrase will be used to unlock the partition in the future, as you are about to do now:
cryptsetup luksOpen /dev/sda2 arch
You are about to create a swap partition as well as a root partition within the LVM partition. To create an 8GB swap partition and use all the rest of the space as the root partition, issue the following commands:
pvcreate /dev/mapper/arch vgcreate vol /dev/mapper/arch lvcreate --size 8G vol --name swap lvcreate -l +100%FREE vol --name root mkfs.ext4 /dev/mapper/vol-root mkswap /dev/mapper/vol-swap
4. Mount Partitions
mount /dev/mapper/vol-root /mnt mkdir /mnt/boot mount /dev/sda1 /mnt/boot swapon /dev/mapper/vol-swap
5. Install the system
To install the base system and GNOME desktop, issue the following command:
pacstrap /mnt base base-devel gnome
This will give you the base system, GNOME, and all the dependencies, but without any other software. You can install more (or less) packages at this stage if you wish. If you want to use KDE instead, go ahead.
/etc/fstab file stores the information about the filesystem, and this information will be used at startup to mount partitions. To generate the file, run:
genfstab -U /mnt >> /mnt/etc/fstab
Open the generated
/etc/fstab file to ensure all the necessary partitions are included and set up correctly.
7. Chroot into the system
In this step, we go into the root of the installation, which is mounted at
/mnt for the moment, and pretend it is root:
8. Setup time zone, locale, and hostname
Now we set the timezone by creating symbolic link to the correct timezone file:
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime hwclock --systohc --utc
/usr/share/zoneinfo directory to find the right file to link to.
To setup the locale for the system, open
–and uncomment the language you wish to use for your system. In my case, it is
en_GB.UTF-8 UTF-8. After saving the changes, run:
Finally, to set the hostname, run the following command:
echo *your-host-name* > /etc/hostname
/etc/hosts to look like this:
127.0.0.1 localhost.localdomain localhost ::1 localhost.localdomain localhost 127.0.1.1 *your-host-name*.localdomain *your-host-name*
9. Create user account
Create your user account:
useradd -m -G wheel -s /bin/bash your-user-name
This will put your user account into
wheel group, which is necessary for using
sudo (step 10).
Then setup your password:
This allows you to perform tasks with root privilege without using the actual root login. First, open
–and uncomment the following line to enable root privilege for users inside
# %wheel ALL=(ALL) ALL
11. Disable root login
Since your account can now perform tasks with root privilege, the actual root user is unnecessary, so it is safe to disable root account:
passwd -l root
To configure the generation of the initial ramdisk, you have to configure
/etc/mkinitcpio.conf correctly. The most important part of the file is the
HOOKS section. The following are the hooks I have for my use case:
HOOKS="systemd autodetect modconf keyboard block sd-encrypt sd-lvm2 filesystems"
If there are other modules and hooks necessary for your use case, this is the time to configure them.
Note: By default,
udev hooks are used instead of
systemd. If you opt for the default setup instead,
sd-lvm2 should be replaced with
lvm2. The setup for the bootloader entry will be different if you opt for the default setup.
13. Generate initial ramdisk
/etc/mkinitcpio.conf, generate the image:
mkinitcpio -p linux
14. Install bootloader
bootctl --path=/boot install
systemd-boot doesn’t generate boot entries automatically (strangely enough,
systemd-boot can detect Windows installation and add an entry for Windows automatically), you have to create the entry yourself. Create
/boot/loader/entries/arch.conf. The exact content of this file will vary according to your specific setup, but it will look like this:
title Arch Linux linux /vmlinuz-linux initrd /initramfs-linux.img options rd.luks.uuid=[UUID of the encrypted logical volume] rd.lvm.lv=arch/root rd.lvm.lv=arch/swap rd.luks.options=discard resume=UUID=[UUID of Swap Partition] root=[UUID of Root Parition] ro quiet
15. Enable GDM
GDM is a display manager. It must be enable to allow you to login to your desktop environment. To enable it on startup, run:
systemctl enable gdm
16. Reboot and hope for the best
At this point, the installation should be completed. Exit
chroot, restart the computer, and remove the installation USB drive. If you can’t boot into the system at this point, boot from the installation media again and attempt to fix it.
If you can boot into GNOME desktop, congratulations! You have completed the first step towards building your own system.