There’s no doubt about it -
Installing Arch Linux is hard.
I remember the first time looking at all the linux distributions and coming across Arch. Manual install from the command line?
Talk about intimidating!
So, why on earth would anyone want to install this advanced, ‘super complicated’ Linux distribution?
One of the main reasons to choose Arch is due to the simplicity and minimal amount of software and space that is required.
In addition, it’s fun to learn new things. There’s satisfaction in knowing you’re able to accomplish something that very few other people are capable of doing.
Check out the YouTube video below for a few of the key points:
Let’s get started because today I’ve got something special for you. You’re going to get my personal step by step guide and a detailed, but easy to understand Arch Linux installation.
But first, do to the versatility of this amazing distro, we need to make a few things clear.
There are a million ways to get Arch up and running.
Below is but one specific way. In my opinion, it’s the best way to do it.
… okay. So maybe I’m a little biased since this install meets my needs specifically, but that’s what makes this Arch so amazing!
Arch Linux is so customizable that no matter what you use it for, you can create an install that’s specific to your needs.
This is not a standard installation. This is a LVM on LUKS with a UEFI system. There is nothing basic about it.
Even though this is an advanced install, this guide is written with the noob in mind. Anyone should be able to install Arch on a similar system if they follow the steps, step by step, found in the guide below.
It’s important to remember that ever computer is different. These instructions work flawlessly on the hardware that I use.
Geforce GTX 965M
This install is on a hardcore gamer laptop
This bad boy has 16 gigabytes of RAM and 500 gigs of storage.
Why do I need such a powerful machine for a distro that can run on a computer with a minimum of 512 MB RAM and less than 800 MB of disk space?
Well, one of my favorite past times is building an ethical hacking lab which requires multiple virtual servers. Anyone who knows anything about running multiple virtual machines on a single piece of hardware all at once (sometimes up to 10 at a time or more!), knows that a resources get used up quick!
Now that we have a general idea of my personal system requirements -
Let’s get started.
Step 1 - Get A Copy Of Arch Linux on USB
On an existing Linux platform, head over to the official Arch download site.
Choose a method of getting the latest copy. There are many options to download arch including torrents (which is my preference).
Once you have a copy, plug in your USB and use the following command to get arch installed on the USB.
#! /bin/bash dd if=/path/to/archlinux.img of=/dev/sdX bs=16M && sync
dd Command Explained
An overly simplified explanation of dd is basically that ‘if’ is the source data, ‘of’ is the destination for that data. You can kind of think of it like copy (again overly simplified).
So in this example, dd is copying your downloaded copy of Arch Linux to the USB that can be found in the path /dev/sdX (with ‘X’ being a variable usually ‘a’ or ‘b’ - depending on which slot you inserted the USB into.)
bs is simply referring to how many bytes to read and write at a time. It’s the speed at which data is transferred. 16M ensures a proper and optimal copy takes place onto our USB.
Step 2 - UEFI or ‘BIOS’ Setup
My system uses UEFI aka Unified Extensible Firmware Interface or EFI for short. Without getting too in depth, UEFI is basically the modern replacement for BIOS.
To get to the BIOS screen, press the power button and immediately start pressing the ‘F2’ button over and over again until you are brought to the BIOS menu.
Once there, arrow over to the security tab and disable secure boot so that it looks like this:
Next, tab over to the boot tab so that and disable fast boot so that it looks like this:
Finally, save and exit the UEFI BIOS menu.
Step 3 - Boot From USB and Connect To Wi-Fi
#! /bin/bash wifi-menu
Step 4 - Killing 2 Birds (System Wipe and Partitioning) With Sgdisk
#! /bin/bash sgdisk -Z -a 2048 -o /dev/sda -n 1::+512M -n 2::: -t 1:ef00
I absolutely love this one liner. Not only does it completely clean your existing data on the computer, but it also creates the partition structure we need to get arch installed properly.
Let’s dig in a little deeper:
We use -Z to destroy existing GPT data structures.
The -a tag followed by 2048 will set our alignment value.
We then want to clear out all partition data on our working partition /dev/sda using -o.
Now that everything is cleared out, it’s time to start building our partition scheme.
Using -n let’s create two new partitions. The 1st we size at 512Mb. This will be our boot partition. The 2nd will automatically size to take up the remaining disk space.
Only two partitions?
Yup. As you will soon see we are going to make our install super secure as well as fast using LVM and LUKS on our Linux file system. If we want any additional partitions we can add them in our virtual machine later.
The last part of this one liner is defining our partition types. For this we use -t. Our first partition type is the UEFI system (or just EFI) and it’s code is ef00. Our second partition is undefined, so it defaults to 8300 aka linux file system.
Step 5 - Better Encrypt Or Risk Getting Hacked
This next step protect your private data stored on partitions from what are known as ‘bare-metal attacks’. These are the attacks where hackers can physically break into your system using a USB aka pentest.
#! /bin/bash cryptsetup -c aes-xts-plain64 -s 512 -h sha512 -i 5000 --use-random --verify-passphrase luksFormat /dev/sda2 cryptsetup luksOpen /dev/sda2 luks
Step 6 - Create Your Physical Volume, Volume Group, And Logical Volume
#! /bin/bash pvcreate /dev/mapper/luks vgcreate vg /dev/mapper/luks lvcreate -l 100%FREE vg-lvol0
Step 7 - Make and Mount Filesystems
#! /bin/bash mkfs.ext4 /dev/mapper/vg-lvol0 mkfs.fat -F32 /dev/sda1 mount /dev/mapper/vg-lvol0 /mnt mkdir -p /mnt/boot mount /dev/sda1 /mnt/boot
Step 8 - (Finally) Pacstrap
#! /bin/bash pacstrap /mnt \ base base-devel \ iw wget openssh wpa_supplicant wireless_tools dhcpcd dialog git \ intel-ucode nvidia nvidia-libgl nvidia-utils \ xorg-server xorg-server-utils xorg-xinit xf86-input-synaptics xf86-video-intel \ i3 rxvt-unicode \ vim vim-spell-en \ lxterminal \
Step 9 - fstab
#! /bin/bash genfstab -pU /mnt >> /mnt/etc/fstab echo 'tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0' >> /mnt/etc/fstab
Step 10 - Enter Into You’re New System
#! /bin/bash arch-chroot /mnt
Step 11 - Locals
#! /bin/bash echo "en_US.UTF-8" > /etc/locale.gen echo "KEYMAP=us" > /etc/vconsole.conf echo "LANG=en_US.UTF-8" > /etc/locale.conf ln -s /usr/share/zoneinfo/America/Chicago /etc/localtime locale-gen hwclock --systohc --utc
Step 12 - Host Name
#! /bin/bash echo INSERT_NAME_OF_SYSTEM_HERE > /etc/hostname
Step 13 - mkinitcpio
#! /bin/bash sed -i "/^HOOK/s/block/block keymap encrypt/" /etc/mkinitcpio.conf sed -i "/^HOOK/s/filesystems/lvm2 filesystems/" /etc/mkinitcpio.conf sed -i "/^MODULES/s/''/'ext4'/" /etc/mkinitcpio.conf mkinitcpio -p linux bootctl --path=/boot install
Step 14 - Hosts
#! /bin/bash sed -i "/127.0.0.1/s/$/ arch/" /etc/hosts sed -i "/::1/s/$/ arch/" /etc/hosts
Step 15 - Arch Config
#! /bin/bash vim /boot/loader/entries/arch.conf
title Arch Linux linux /vmlinuz-linux initrd /intel-ucode.img initrd /initramfs-linux.img options cryptdevice=UUID=$(blkid -s UUID -o value /dev/sda2):lvm:allow-discards root=/dev/mapper/vg0-root rw quiet loglevel=0 udev.log-priority=3
Step 16 - Boot Loader
#! /bin/bash vim /boot/loader/loader.conf
default Arch Linux timeout 0 editor 0
Step 17 - Set Root Password
#! /bin/bash passwd