Installing Arch Linux (2019)


Technical Notes Page.

As long as the prompt says "root@archiso#", you are in the "live system". "Live system" refers to the system that starts up when you boot from the iso.

Step -1 (Negative One)

Get the boot media.

Go to that website, the one in the line immediately above this line. Find a country that is near you in the "HTTP Direct Downloads" section of the website.

Click on one of the links.

You'll see a list of files. Some of them will end in ".iso".

You're looking for a filename that looks like this:

[ ] archlinux-2018.05.01-x86_64.iso 01-May-2018 05:08 560M

Click that link. You'll start downloading the file. It's 560 Megabytes, so it'll take some time to download.

When you're finished downloading the file, you can either copy it to a USB drive to create a Live USB, or you can run the installation in a virtual machine. I ran the installation on 14 May 2018 in a virtual machine that was running in VirtualBox. If you don't know how to run a virtual machine in VirtualBox, I'll write a tutorial explaining how to set up a virtual machine in VirtualBox.

When you boot either a real machine from the Live USB or a virtual machine with the arch .iso connected to it, you are ready to begin with step zero below.

Step 0

Choose "Boot Arch Linux" from the menu that appears when you boot the system.

Step 0.5 Wireless Network Setup

# wifi-menu

note: Install the "dialog" package to use "wifi-menu".

1 - Set up time synchronization

root@archiso# timedatectl set-ntp true


root@archiso@ timedatectl set-timezone "Australia/Brisbane"

2 - List the storage device

List the /dev/sda device, to make sure that it's there.

root@archiso# lsblk /dev/sda


sda 8:0 0 50G 0 disk

NOTE (04 Jun 2019)

On a virtual machine, the command is

root@archiso#lsblk /dev/vda

"vda" is the virtual disk a

3 Create partitions

This step can be done different ways. It can be done with "fdisk" and with "parted". In this example, I explain painstakingly, step-by-step, how to do it with fdisk.

root@archiso# fdisk -l

[The contents of the disk are listed. "/dev/sda" will probably be the name of the disk you will alter.]

root@archiso# fdisk /dev/sda

Welcome to fdisk (util-linux 2.32)

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

Device does not contain a recognized partition table.

Created a new DOS disklabel with disk identifier 0xe726af76.

Command (m for help): p

Disk /dev/sda: 50GiB, 53687091200 bytes, 104857600 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0xe726af76

Command (m for help): n

Partition type

p primary (0 primary, 0 extended, 4 free)

e extended (container for logical partitions)

Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-104857599, default 2048): 2048

Last sector, +sectors or +size{K,M,G,T,P} (2048-104857599, default 104857599): +1G

Created a new partition 1 of type 'Linux' and of size 1GiB.

Command (m for help): n

Partition type

p primary (1 primary, 0 extended, 3 free)

e extended (container for logical partitions)

Select (default p): p

Partition number (2-4, default 2): 2


arFirst sector (2099200-104857599, default 2099200): 2099200

Last sector, +sectors or +size{K,M,G,T,P} (2099200-104857599, default 104857599): +10G

Created a new partition 2 of type 'Linux' and of size 10GiB.

Command (m for help): n

Partition type

p primary (2 primary, 0 extended, 2 free)

e extended (container for logical partitions)

Select (default p): p

Partition number (2-4, default 3): 3

First sector (23070720-104857599, default 23070720): 23070720

Last sector, +sectors or +size{K,M,G,T,P} (23070720-104857599, default 104857599): +8G

Created a new partition 3 of type 'Linux' and of size 8GiB.

Command (m for help): n

Partition type

p primary (3 primary, 0 extended, 1 free)

e extended (container for logical partitions)

Select (default e): p

Selected partition 4

First sector (39847936-104857599, default 39847936): 39847936

Last sector, +sectors or +size{K,M,G,T,P} (39847936-104857599, default 104857599): 104857599

Created a new partition 4 of type 'Linux' and of size 31 GiB.

Command (m for help): t

Partition number (1-4, default 4): 3

Hex code (type L to list all codes): 82

Changed type of partition 'Linux' to 'Linux swap / Solaris'.

Command (m for help): a

Partition number (1-4, default 4): 1

The bootable flag on partition 1 is enabled now.

Command (m for help): w

The partition table has been altered.

Calling ioctl() to re-read partition table.

Syncing disks.

4 - Create filesystems.

root@archiso# mkfs.ext4 /dev/sda1 root@archiso# mkfs.ext4 /dev/sda2 root@archiso# mkfs.ext4 /dev/sda4

5 Mount the filesystems

root@archiso# mount /dev/sda2 /mnt root@archiso# mkdir -p /mnt/boot root@archiso# mount /dev/sda1 /mnt/boot root@archiso# mkdir -p /mnt/home root@archiso# mount /dev/sda4 /mnt/home

6 Set up and activate swap.

root@archiso# mkswap /dev/sda3 Setting up swapspace version 1, size = 8 GiB (8589930496 bytes) no label, UUID=bc4f947e-9957-4b11-9b52-0ebbc0639383 root@archiso# swapon /dev/sda3

7 Install Arch.


Run this command:

root@archiso# pacstrap /mnt base base-devel intel-ucode xfce4 gdm dialog wpa_supplicant


Overview: Edit the mirrorlist file to point to local mirrors. Run pacstrap. /etc/pacman.d/mirrorlist - This file contains all mirrors. You can edit it, moving geographically-closer mirrors to the top of the file to make the downloads faster. root@archiso# pacstrap /mnt base base-devel intel-ucode xfce4 gdm dialog wpa_supplicant This step takes a long time. I have run it many times, and it usually takes around thirty minutes when run over a wireless network. I began this step at 1458 aest 14 May 2018. Here is what I installed and how long it took: base base-devel intel-ucode gdm 14:27.29 total base base-devel intel-ucode xfce4 gdm This took 49 minutes on 15 May 2018. base base-devel intel-ucode xfce4 gdm This took 12 minutes of 15 May 2018, in the late afternoon. I was near the wireless access point. This took 2 minutes and 15 seconds of 09 Feb 2020, in the prenoon (finishing at 11:51). I was using Optus 4G. base base-devel intel-ucode xfce4 gdm 25:08.57 total I altered the method of installation (I used, and I got this result: base base-devel intel-ucode xfce4 gdm 04:24.97 total This method involves using "elinks" to go to, and using that page to generate a list of servers. When the list of servers is generated, press "ESC" to bring up the file menu, and save the page as a file called "abc". This will put the file "abc" in your liveiso home directory. Press "ESC" and then "x" to exit from "elinks". Then overwrite the /etc/pacman.d/mirrorlist file by running the command "# cp abc /etc/pacman.d/mirrorlist". Then run the command "sed -i "s/#S/S/g" /etc/pacman.d/mirrorlist" to uncomment the servers listed in the /etc/pacman.d/mirrorlist file.


Generate the file system table. root@archiso# genfstab -U /mnt >> /mnt/etc/fstab


Change the root directory. root@archiso# arch-chroot /mnt /bin/bash


Uncomment "en_US.UTF-8 UTF-8" in "/etc/locale.gen".


Run locale-gen [root@archiso /]# locale-gen Generating locales... en_US.UTF-8... done Generation complete.


Select the timezone. [root@archiso /]# tzselect You can make this change permanent for yourself by appending the line TZ='Australia/Brisbane'; export TZ to the file '.profile' in your home directory; then log out and log in again.


Set the timezone and the hardware clock. [root@archiso/]# ln -sf /usr/share/zoneinfo/Region/City /etc/localtime [root@archiso /]# hwclock --systohc --utc (e.g., in my case, the first of these two commands is "ln -sf /usr/share/zoneinfo/Australia/Brisbane /etc/localtime". This sets the system's clock to display Brisbane time.)


Generate initramfs [root@archiso /]# mkinitcpio -p linux This takes about a minute. As of 09 Feb 2020, this might not be necessary. "mkinitcpio" creates an initial ramdisk environment.


Install the grub package and the os-prober package. [root@archiso /]# pacman -S grub os-prober resolving dependencies... looking for conflicting packages... Packages (2) grub-2:2.02-5 os-prober-1.76-1 Total Download Size: 6.05 MiB Total Installed Size: 30.07 MiB :: Proceed with installation [Y/n] Y


Install GRUB on the /dev/sda filesystem. [root@archiso /]# grub-install --target=i386-pc /dev/sda Installing for i386-pc platform. Installation finished. No error reported.


Create the grub.cfg file. [root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg Generating grub configuration file ... Found linux image: /boot/vm-linuz-linux Found initrd image: /boot/intel-ucode.img /boot/initramfs-linux.img Found fallback initrd image(s) in /boot: initramfs-linux-fallback.img WARNING: Failed to connect to lvmetad. Falling back to device scanning. done


Set the hostname. # vi /etc/hostname or # echo "arch" > /etc/hostname (Add the line "arch" to this file to set the system's hostname to "arch".)


Discover the name of the wired network device. [root@archiso /]# ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00:00 brd 00:00:00:00:00:00 inet scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forver 2: enp0s3: mtu 1500 qdisc fq_code1 state UP group defualt qlen 1000 link/ether 08:00:27:58:0a:6c brd ff:ff:ff:ff:ff:ff inet brd scope global noprefixroute enp0s3 valid_lft forever preferred_lft forever inet6 fe80::363c:1cb3:7251:2ac8/64 scope link valid_lft forever preferred_lft forever In this example, the name of the wired network device is "enp0s3". The section after "1:" refers to the loopback device, which is another way of saying "This system." The section after "2:" refers to the wired network device, and is the device that we're looking for in this installation procedure.


Enable the network connection - DO NOT DO THIS IF YOU ARE USING WIFI -- set up wifi after the reboot WIRED METHOD [root@archiso /]# systemctl enable dhcpcd@enp0s3.service Created symlink /etc/systemd/system/ -> /usr/lib/systemd/system/dhcpcd@.service. In the above example, "enp0s3", which you discovered in Step 19, is the key part of this command. It might be the case that your wired device isn't called "enp0s3". If it is the case that it's not called "enp0s3", then you should replace "enp0s3" with whatever the wired device is called. NOTE: if you enable dhcpcd, you won't be able to use netctl to set up a wireless network connection. In order to use wifi-menu (which is a frontend for netctl), you have to turn off the wlp3s0 connection. wifi-menu won't work otherwise. In order to turn off the wlp3s0 connection, run the following command: # ip link set wlp3s0 down When this is done, you can run this command: # wifi-menu


Set the root password. [root@archiso /]# passwd New password: Retype new password: passwd: password updated successfully


Exit the chroot environment. [root@archiso /]# exit arch-chroot /mnt /bin/bash 18.70s user 6.15s system 3% cpu 12:01.21 total


Unmount the partitions. root@archiso ~ # umount -R /mnt


Reboot. root@archiso ~ # reboot [Take the .iso out of the disk drive. This might mean that you have to shut the computer down. If so, do it. Alternatively, you can choose "Boot from existing OS" in the Arch boot menu that appears when you boot from the .iso.]


Log in to the system. Arch Linux 4.16.8-1-ARCH (tty1) arch login: root Password: [root@arch ~]#


Create a non-root account and give it sudo privileges. [root@arch]# useradd -m -G wheel -s /bin/bash username [root@arch]# passwd username [root@arch]# visudo Find this line: root ALL=(ALL) ALL Add this line immediately below it: username ALL=(ALL) ALL Uncomment the line that reads # %wheel ALL=(ALL) ALL That means that you should change the line so that it looks like this: %wheel ALL=(ALL) ALL The "-m" flag in the "useradd" command" creates a home directory for the user that the useradd command specifies. If you don't use this flag, you have to create a home directory and chown it, setting ownership to the user's identity. If this paragraph is just a bunch of jargon to you, ignore it and trust that it will make sense when you know more about user creation and system administration.


Connect the wireless network to the operating system WIRELESS METHOD [root@archiso/]# wifi-menu -o This command generates a file whose name is made up of the network interface name (for instance "wlp3s0") and the network name (for instance "TP-Link_5G"). The file appears in the "/etc/netctl" directory. The absolute location of the file is "/etc/netctl/wlp3s0_TP-Link_5G".sydo Move to the "/etc/netctl" directory where the network configuration profile was outputted to: [root@archiso/]# cd /etc/netctl Use "netctl" to turn on the network: [root@archiso/etc/netctl]# netctl start wlp3s0_TP-Link_5G Use "netctl" to make the network connection persist between reboots: [root@archiso/etc/netctl]# netctl enable wlp3s0_TP-Link_5G


Install gdm $ sudo pacman -S gdm $ sudo systemctl enable gdm $ sudo systemctl start gdm


Install and enable ssh $ sudo pacman -S openssh $ sudo systemctl enable sshd


Other software $ sudo pacman -S net-tools xterm vim firefox opera


Q: I can't run "gnome-terminal" after I install the "gnome" group. A: On 14 May 2018, I had this problem, and I did the following: # locale-gen # localectl set-locale LANG="en_US.UTF-8" # reboot After that, "gnome-terminal" could be launched from the ALT+F2 launcher. How To Install Software $ sudo pacman -S vim How To Uninstall Software $ sudo pacman -R vim How To Install VirtualBox $ sudo pacman -S virtualbox linux-headers virtualbox-host-modules-arch When that's done, run $ sudo modprobe vboxdrv This command loads the kernel module "vboxdrv". Inside a VirtualBox instance that is running Arch Linux, it seems that you can't install Arch from an x86_64 (64-bit) iso. Instead, you need a 32-bit iso. The 32-bit iso can be obtained at "". How to Install elinks $ sudo pacman -S elinks during pacstrap: # pacstrap elinks How to generate a superior mirrorlist for installation: [root@archiso /]# elinks Go to Generate a mirrorlist for your country. Save it to the local filesystem. (use the "File" menu to save the file to your filesystem). How to Install Kodi # pacman -S kodi # pacman -S libnfs # pacman -S alsa-utils "libnfs" is necessary so that Kodi can attach to NFS shares. "alsa-utils" provides "alsamixer", which allows you to un-mute the system (Arch is muted every time I've done an installation of it, and I have to run "alsamixer" and press "m" to unmute the system.) How to Install an X Server and a Window Manager (not a Desktop Environment) # pacman -S xorg-server xorg-apps xorg xorg-xinit xterm fluxbox # xinit This works only when signed in as root. When you sign in as a user, you must run # startx or you will get a message that reads "init: unable to connect to X server: connection refused". "xorg-xinit" is the package that provides the "xinit" command. This was unknown to me until 30 May 2018. Discovering this made it possible for me to launch an Xorg session, and thereby to launch fluxbox. Previously, I was wandering in the night in which all cows are black. How to set Fluxbox to launch when you run "startx" $ cp /etc/X11/xinit/xinitrc ~/.xinitrc Add the following to any white space in .xinitrc: exec fluxbox Then run this command again: $ startx How to Get Audio Working (Probably) By default, alsamixer has muted the audio channels. Install "alsa-utils" and use "alsamixer" to fix this. # pacman -S alsa-utils $ alsamixer Then select the audio channels (use the left and right arrows) and press "m" to unmute them. After they're unumted, use the up and down arrows to set the volume however loud you want it. How to Install a Screen-Locker # pacman -S xtrlock "xtrlock" is invoked through the command line or the application launcher. It freezes the screen in the state the screen is in when the command is invoked. To unlock the screen, type your user password and press ENTER. How to Install and Set Up an Apache Web Server # pacman -S apache # systemctl start httpd # systemctl enable httpd # touch testfile # cp testfile /srv/http/ Now go to the port-forwarded ip address of the machine on which the Apache Web Server is running. Stack Tracing # pacman -S gdb Without this package, you cannot perform stack tracing. When Kodi crashes, you will not have a stack trace in the log unless this package has been installed. Managing Access Through SSH (blocking malicious actors) On 03 Jun 2018 I noticed that actors from China and Croatia were trying to get access to my Arch machine. I used the program "ipset" to block the Chinese IP: How to Install "packer" 1. Install dependencies $ sudo pacman -S wget git expac jshon 2. Create a temporary directory for the installation: $ mkdir packer $ cd packer 3. Download the package build script from AUR: $ sudo wget 4. Download the package build script from AUR: $ mv PKGBUILD?h=packer PKGBUILD 5. Compile the package using PKGBUILD: $ makepkg 6. Install the package: $ sudo pacman -U packer-20150808-1-any.pkg.tar.gz 7. Remove the temporary installation directory: $ cd; sudo -rm dR packer Test by installing "chromium": $ sudo packer -S chromium If you get Error 404 when trying to Install a Package In this case, synchronize your repository information and update your system. # pacman -Syu How to get the "ifconfig" command working You have to install the "net-tools" package. # pacman -S net-tools How to use AUR Go to and acquire buildfiles. Verify that the PKGBUILD and the accompanying files are not malicious or untrustworthy. Run "makepkg -si" in the directory where the files are saved. This performs the whole installation procedure. An Arch Linux installation Guide, found here: ## Arch Linux installation ### Verify the boot mode * `ls /sys/firmware/efi/efivars` >> In EFI mode if result is not empty ### Connect to the internet * `lspci -k` >> show drivers * `ip link` >> show interfaces * `ip link set up` >> bring up wireless interface * `iw dev scan | less ` >> scan wireless network * `wpa_passphrase "My SSID" "My Password" > pass` >> generate WPA password * `wpa_supplicant -B -i -c /path/to/pass` >> connect to network * `dhcpd > get assigned IP address ### Partition disks * `parted` >> enter interactive mode (using **parted** which is a terminal partitioning tool * `mkpart primary ebs 1Mib 513MiB` >> create EFI file system * `mkpart primary linux-swap 513MiB 3000MiB` >> create swap (*change size accordingly*) * `mkpart primary ext4 3000 50%` >> create ext4 for installation * `print` >> to show partition tables ### Format the partitions * `mkfs.ext4 /dev/sdax` >> format **sdax** to be ext4 (**x** is a number, e.g: **sda1**) * `mkswap /dev/sdax` >> format swap partition ### Mount the file systems * `mount /dev/sda3 /mnt` >> assuming installation is in sda3 * `mkdir /mnt/boot/efi` >> create EFI for grub install * `mount /dev/sda1 > /mnt/boot/efi` >> mount EFI to this dir * `mkdir /mnt/boot` ### Installation * ##### Select mirrors: * Move the geographically closest mirrors to the top of the list, which is located in `/etc/pacman.d/mirrorlist` * ##### Install the base packages * `pacstrap /mnt base` * ##### Config the system * Fstab: `genfstab -U /mnt >> /mnt/etc/fstab` * Chroot: `arch-chrrot /mnt` * Set timezone: `/usr/share/zoneinfo/Region/City /etc/localtime` * Locale: `locale-gen` * Hostname: `echo yourhostname > /etc/hostname` * Initramfs: `mkinitcpio -p linux` * Set root password: `passwd` * Install network manager: `pacman -S networkmanager` * ##### Boot loader * Install GRUB: `pacman -S grub` and then `grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub /dev/sda` * Finally: `grub-mkconfig -o /boot/grub/grub.cfg` ## Post installation #### Create user * `useradd -m -g users -G wheel -s /bin/bash sondv` >> create a user with name **sondv** belong to **wheel** group * `pacman -S sudo` and then `visudo` >> comment **wheel** and **sudo** group * `pacman -S pulseaudio pulseaudio-alsa xorg xorg-xinit` * `echo "exec startkde" > ~/.xinitrc"` * `pacman -S plasma-desktop dolphin firefox kate terminator plasma-nm sddm` * `startx` to start graphical interface * `pacman -Syyu` >> synchronize packages * `systemctl enable sddm.service` >> enable graphical interface * `pacman -S ttf-freefront breeze-gtk breeze-kde4 kde-gtk-config powerdevil plasma-pa redshift` *

To learn more HTML/CSS, check out these tutorials!