ArchLinux (Re‑)Installation

My current install is getting old (5+ years) and I thought it might be a good idea to start from scratch.

Obviously I follow the Installation Guide as if my life depends on it; this document is for additional notes.

These notes are for an MBR/BIOS install with full system encryption.

Before you start

If you have an old install you might want to consider these steps.

Get a list of all installed packages from your current system:
pacman -Q > pkglist
Get a list of explicitely installed packages:
pacman -Qe > pkglist_explicit
And to be on the safe side, make a copy of /var/log/pacman.log.

Copy your dotfiles into a repository.

I did not delete the old install, so I could copy files and code over from it, but I did create a Firefox bookmark backup before I started.

Partition the disks

I am opting for system encryption as described here.
Leave the last two chapters (Configuring mkinitcpio and bootloader) for later and return to the main article.
After editing the mirrorlist, it's time to install the base system:

# pacstrap /mnt base linux-lts linux-firmware lvm2 nano man-db man-pages dhcpcd syslinux

If you forget something here the Installation Guide recommends chrooting into the system, then installing it with pacman. In other words, do not use pacstrap twice.

And continue with the main article until Initramfs. Now it's time to remember this chapter.

Swap - Suspend (Hibernate) and Resume

The swap partition is inside the only (encrypted) volume group. I want to be able to use it for suspend and resume. The topic is mentioned here, leading me here.

  • First of all, make sure it's in /etc/fstab. I couldn't figure out what its UUID would be, so I used something like /dev/mapper/myVolGroup/swap
  • I also append resume=/dev/mapper/myVolGroup/swap to the bootloader's linux command line.
  • I add the resume hook after the encrypt hook in /etc/mkinitcpio.conf.

Bootloader: Syslinux

For a bootloader I choose syslinux. It seems necessary to edit /boot/syslinux/syslinux.cfg accordingly even after the Automatic install.
If you chose the linux-lts kernel, remember to adjust the LINUX and INITRD accordingly.

Consider loading microcode during early boot.

Dual boot

Syslinux does not find & add other installs automatically. To dual boot one needs to chainload the partition in question - all I had to add was this:

    MENU LABEL Old Arch
    COM32 chain.c32
    APPEND hd0 2

hd0 is the first internal drive, i.e. sda. 2 is the 2nd partition, i.e. sda2.

Also have a look at these instructions (AFAIU they are too complicated; all I had to do was asdd above menu entry; possibly because that other partition is already using syslinux).


Editing /etc/mkinitcpio.conf:

  • I like to load my chosen console font as soon as possible: HOOKS=(consolefont ...
  • I also choose COMPRESSION="cat"; this makes a much larger image, but is a little faster to boot.


Into the encrypted system. There's no internet. We forgot to

# systemctl start dhcpcd
# systemctl status dhcpcd
(gives error messages about the still unconfigured wifi interface, but wired should be OK)
# systemctl enable dhcpcd

General Recommendations

This is really the bigger part of the installation process.

Follow the articles one by one.

Keep boot messages on tty1

This is mentioned in the General Recommendations, but the linking is a little twisted. It is explained here.

Installing a graphical system

Eventually it is time to install a busload of packages. Once again, I opt for a simple Openbox environment without a display manager.

Example, reconstructed with grep pacman /var/log/pacman.log:

# pacman -Syu sudo ttf-ibm-plex ttf-opensans openbox python-xdg xorg-xinit xorg-server xorg-xfontsel rxvt-unicode terminus-font obconf lxappearance xfce4-power-manager tint2 dmenu thunar gvfs thunar-archive-plugin mpv firefox firefox-extension-https-everywhere firefox-umatrix keepassxc git openssh geany network-manager-applet

Don't forget to set up sudo!

Please take some time to configure Firefox as it isn't very privacy aware OOTB.

That last one pulls in network-manager which requires me to

# systemctl disable dhcpcd
# systemctl enable NetworkManager
# reboot

If you created a user as per General Recommendations you should now log in as that. If you like Xorg you can create a (temporary) ~/.xinitrc and startx.

Almost usable

Next we have to move some dotfiles over to the new system lest we reinvent the wheel.

While migrating my login scripts I stumbled upon this: xrdb cannot use the #include directive (which I've been using for years) unless a C preprocessor, such as GNU CPP, in other words gcc, is installed. While you're at it you might just as well install the whole base-devel group, and a few more likely candidates:

# pacman -Syu base-devel wget wmctrl xdotool ...

Many more such dependency issues await the new install, but I prefer it that way so that I only install what I really need.

Network mounts

I use NFS unencrypted over a local network. Assuming the new install will receive the same IP on the LAN there isn't anything to do server-wise. Client-wise, only the package nfs-utils needs to be installed, and the according entries copied over from your old /etc/fstab.


  • Have the Installation Guide open on a secondary device with a sufficiently large screen.
  • Throughout the installation process (and generally alway when using the shell) I recommend using tab completion as much as possible. This is not only more convenient but also reduces the risk of typos and other mistakes.
  • If applicable: add an entry to /etc/fstab to mount your old install to a dedicated directory, e.g.
    UUID=what-ever-it-is /home/OLD ext4 rw,relatime 0 3 - because you'll be needing it a lot during the first days!