Installing 2019 Arch Linux on a Vultr Server
Arch Linux has a smaller, but still strong, following than more popular distributions. Its philosophy is quite different, with advantages and disadvantages.
Arch requires its users to be more do it yourself oriented. Arch does not have a GUI installation, but this guide will get a basic Arch installation running on your Vultr server. Arch does not configure everything for you by itself, but that lets you choose how to do it; which can be especially beneficial since there are multiple ways. Arch does not install a huge amount of packages, including a desktop environment; instead allowing you to choose what you want on your system, and leave off numerous packages that you don't use.
The Arch repositories strongly favor leaving packages as they are made by their original upstream developers. If you run into problems with a package on other distributions, upstream maintainers may often refer you to your distribution, since it often makes changes that could be responsible. That rarely happens on Arch, as changes made are usually limited to: those necessary to work with Arch, such as its file-system hierarchy; and major upstream bug fixes and security back ports that are temporarily used until the next upstream release is made that will include them. That said, some other distributions sometimes add features and bug fixes to packages that the distribution didn't bother sending upstream or that upstream developers didn't accept, and these extra patches aren't added in Arch packages, unless really necessary.
Arch operates as a "rolling release". There are no versions or release cycles for Arch as a whole. Trusted Arch package maintainers submit new upstream releases into Arch's repositories. Users periodically update all packages to the latest ones. Some users update daily, some weekly and some even less frequently. An Arch user gets the benefits of running the latest releases, instead of potentially months or years old versions on other distributions, but may also run into problems that upstream testing didn't catch before a new release was made.
Arch is considered a more advanced and technically demanding distribution than many others. Someone completely new to Linux can use Arch, but he or she must be prepared and eager to do a lot of learning. The Arch community is extremely helpful, but it is expected that a user will make a good effort searching for how to fix a problem, rather than immediately just asking others for help.
Boot from Arch ISO
Although Arch is not a "Server Type" listed when deploying a new server on Vultr, you can easily boot an Arch ISO, and install your server yourself.
Arch releases a new ISO at the beginning of every month. If the most recent Arch ISO on Vultr is not from the current month, you can manually upload the newest one to Vultr and use that instead. When you use an Arch ISO to install to a hard drive, it gets the most recent versions of all packages from Arch's servers. The versions of packages on the Arch ISO are not what are installed to your server. So, unless there's a bug fix or feature not included on Vultr's most recent Arch ISO in its ISO Library, one that affects the installation process, you probably don't need to manually upload the newest one.
Vultr ISO library
After choosing "Deploy New Server", under "Server Type", switch to the "ISO Library" tab, and select the most recent Arch Linux ISO.
Manually upload most recent ISO
To get the most recent ISO, visit https://www.archlinux.org/download/ and click on one of the HTTP direct download links. On the next page, copy the link to the "
.iso" file. Visit your Vultr ISO upload area at https://my.vultr.com/iso/. Click "Add ISO", paste in the link you just copied, and click "Upload". The page will automatically refresh showing its download progress, and after a few minutes, it will show the ISO is available. Choose "Deploy New Server", and under "Server Type", switch to the "Upload ISO" tab, and select the ISO.
Connect to the ISO console
After deploying your new server, click on it to bring up the "Server Information" page. (If you see a note saying your server may still be finishing installing, you can ignore this, as your server is likely booted off the ISO for you to proceed.) Click on the icon in the upper right that looks like a computer monitor, that shows "View Console" on hover.
Press ENTER on "
Boot Arch Linux (x86_64)", and in a moment you will be logged in as root. (You may need to resize the window to show the entire console.)
The ISO uses DHCP to automatically configure networking, which works properly with Vultr's setup. Verify this worked.
# ping -c 1 archlinux.org
Synchronize the clock
Make sure the system clock is accurate.
# timedatectl set-ntp true
Packages on Arch's servers can be signed by newer encryption keys than are on the ISO, so update to the newest trusted keyset.
# pacman -Sy archlinux-keyring
View the block devices detected.
The ISO CD will likely be
loop0 is being used to mount part of the ISO. This tutorial assumes you chose a standard Vultr server with a single hard drive, so also assumes your hard drive is
vda. This is because Vultr standard servers give a virtual hard drive using QEMU
virtio_blk for faster performance.
Partition the disk.
# fdisk /dev/vda
You need to decide now if you need a swap partition. If you're unsure, it might be useful to look ahead to the section titled "Create Swap Space".
Note: If you wanted to use a GPT instead of DOS partition table, you would need to create a 1MB BIOS boot partition for GRUB.
No swap partition
Press N followed by ENTER 5 times to create a single partition of maximum size. Press W followed by ENTER to write the partition table. Your system partition is
With Swap Partition
Press N followed by ENTER 4 times. Next enter
+<SIZE> (for example:
+512M), then ENTER to create the swap partition. Press T, ENTER, then input
82, and ENTER again to mark it as a swap partition. Press N followed by ENTER 5 times to create your system partition. Press W, then ENTER to write the partition table. Your system partition is
Create a file-system
Btrfs is based on copy-on-write. When changed data is written, it is not simply written to overwrite the original data as in other file-systems. Changed blocks are written elsewhere and only after a successful write will the "pointers" to these new blocks be updated. This increases fault tolerance, so if something goes wrong during a write, the original data isn't lost. It allows file-system provided snapshots. Behind the scenes, it maintains checksums on each block to automatically detect and sometimes silently correct corrupted data. Btrfs allows most file-system level modifications to be performed while it is mounted and in use, compared to most others that require they be offline. Btrfs has had some bumps while being developed, but as Arch will be running the most recent kernel, btrfs has been considered quite stable for quite some time now, with the exception of RAID levels 5 and 6 which are still being worked on.
# mkfs.btrfs --label arch <SYSTEM_PARTITION>
Ext4 doesn't have the latest file-system features, and doesn't perform the best, but has been around since 2008, and is based on ext3 which has been around since 2001. Its code base is fairly stable, so some would argue it is more stable than newer file-systems, but as others have matured over the years, this argument has become less relevant.
# mkfs.ext4 -L arch <SYSTEM_PARTITION>
XFS is designed around parallel IO, focusing on scalability. It provides better performance than ext4, and, depending on the situation, provides slightly better or slightly worse performance compared to btrfs. XFS does not use copy-on-write, and only maintains checksums on its metadata rather than the data itself.
# mkfs.xfs -L arch <SYSTEM_PARTITION>
Use the following command to mount the file-system:
# mount /dev/disk/by-label/arch /mnt
Create swap space
Swap space isn't strictly necessary. You are better off running with 2GB of memory and no swap space, than 1GB of memory and 1GB of swap space. Swap space is a crutch to get by with less actual memory than your system and all of its programs require. Running out of memory on Linux should be avoided, because the kernel will automatically attempt freeing up memory by killing processes.
If you want to run without swap space, you can skip the rest of this section.
If you want to run with swap space, you can use a swap partition or a swap file. A swap partition has the benefits of being untouched by a file-system, so it never gets fragmented, and never gets tied up if your file-system is having momentary problems. A swap file has the benefit of being able to easily be resized, or deleted and added when needed.
Note btrfs is only expected to support swap files in Linux 5.0+, expected some time early to mid 2019.
# mkswap /dev/vda1 # swapon /dev/vda1
# dd if=/dev/zero of=/mnt/swapfile bs=1M count=<SIZE IN MB> status=progress # chmod 600 /mnt/swapfile # mkswap /mnt/swapfile # swapon /mnt/swapfile
Install base package group
If you are running btrfs use the following command.
# pacstrap /mnt base btrfs-progs
Otherwise use this command.
# pacstrap /mnt base
This installed a minimal amount of packages that Arch assumes to be installed on every system, and leaving any of them off risks breaking things at your own risk. Note the ISO includes many more packages than are in the "base" group. The base group will only take about 1.4GB.
Note you may notice
WARNING: Possibly missing firmware for module: aic94xx and
wd719x. These may be ignored.
Configure your new system
Automatically generate your
/etc/fstab file (automatically mounts file-systems).
# genfstab -L /mnt >> /mnt/etc/fstab
You can now change root into your new installation, which basically treats your new installation at
/mnt/ as if it were at
/. While in the chroot environment, it will run programs installed on your hard drive rather than the ISO, as the ISO file-system is not visible within it.
# arch-chroot /mnt
Your system will internally keep track of time using UTC, but you can choose what time zone it should use when displaying the date and time. Determine which region to use.
# ls /usr/share/zoneinfo
Assuming you will use
America, determine which city to use.
# ls /usr/share/zoneinfo/America
Assuming you will use
New_York, choose that time zone.
# ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime # hwclock --systohc
Choose a UTF-8 locale.
# sed 's/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' -i /etc/locale.gen # locale-gen # echo 'LANG=en_US.UTF-8' > /etc/locale.conf
The easiest way to configure networking on a Vultr server is through DHCP. Vultr's DHCP servers will still give you a public static IP address.
To see the networking devices detected.
# ip addr
The loopback device is labeled
lo. On Vultr servers, you will likely see the networking device as
# cat <<EOF > /etc/systemd/network/ens3.network > [Match] > Name=ens3 > > [Network] > DHCP=ipv4 > EOF
Make DHCP automatically run at boot.
# systemctl enable systemd-networkd
Make DNS resolution automatically run at boot.
# systemctl enable systemd-resolved
/etc/resolv.conf forward requests to
# ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
Set the hostname for your server.
# echo '<YOUR_HOSTNAME>' > /etc/hostname
Using the hostname you chose, and the static IP address in place of
<YOUR_STATIC_IP> shown when you ran
ip addr, setup your hosts file.
$ cat <<EOF > /etc/hosts > <YOUR_STATIC_IP> localhost > ::1 localhost > <YOUR_STATIC_IP> <YOUR_HOSTNAME>.localdomain <YOUR_HOSTNAME> > EOF
Set your root password
Use the following command to set a password. You will be prompted to enter your new password twice.
Configure boot loader
Install the grub package.
# pacman -S grub
Install it to the hard drive.
# grub-install --target=i386-pc /dev/vda
Note: The argument is the disk itself, NOT your system partition.
By default at boot, grub will wait for 5 seconds before choosing the default option. To disable this wait, use the following.
# sed 's/^GRUB_TIMEOUT=5$/GRUB_TIMEOUT=0/' -i /etc/default/grub
Note: If you still want access to the grub boot menu, you might want to set this to 1 second instead of 0.
By default, grub gives the kernel the
quiet option which
systemd also follows. Use the following to show startup and shutdown messages.
# sed 's/^GRUB_CMDLINE_LINUX_DEFAULT="quiet"$/GRUB_CMDLINE_LINUX_DEFAULT=""/' -i /etc/default/grub
Create the grub configuration.
# grub-mkconfig -o /boot/grub/grub.cfg
Reboot into your hard drive
Exit the chroot environment.
Power off your server.
# systemctl poweroff
Go back into Vultr's "Server Information" page for your server. On the "Settings" tab, click on "Custom ISO", then "Remove ISO". Click on the "Server Restart" icon, then "View Console".
Login as root, with the password you chose earlier.
# pacman -S sudo
Allow members in group
wheel to use
# cp /etc/sudoers /etc/sudoers.new # sed 's/# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/' -i /etc/sudoers.new # visudo -c -f /etc/sudoers.new && mv /etc/sudoers.new /etc/sudoers
Create a user account.
# useradd --create-home --groups wheel <USERNAME>
Set the user's password.
# passwd <USERNAME>
Log out as root.
Log in as the newly created user.
The commands below are still required to be run as root, so are still prefixed by
#. The recommended way to run commands as root is to, as a regular user, prefix each of them with
sudo. When you run
sudo, the password it asks you for is your user password, not the root password.
Configure time synchronization
For a lightweight time synchronization client with rough accuracy use the following.
# systemctl enable --now systemd-timesyncd
If you would prefer better accuracy.
# pacman -S ntp # systemctl enable --now ntpd
Install a SSH server, so you can use SSH to connect to your Arch system instead of using Vultr's virtual console.
# pacman -S openssh # sed 's/#Port 22/Port 22/' -i /etc/ssh/sshd_config # systemctl enable --now sshd
At this point, you can close the virtual console, and connect with SSH. Note, by default sshd will not allow you to login as root.
Because Arch is a "rolling release", you can upgrade all packages you have installed whenever you'd like. Users may upgrade on their own schedule, daily, weekly and so on. If you upgrade often, not many packages will need to be upgraded at once, and any potential problems you may run into will be easier to pinpoint. It is important to upgrade all packages at once, as the following command will do. It's easy to imagine why upgrading something like "glibc" alone, without the programs that use it, would cause problems.
# pacman -Syu
After upgrading, it is important to look through the output for messages given to you. It may tell you there are things you need to do. For this reason, do NOT setup automatic upgrading.
Note any already running programs before an upgrade won't be the newer version until they're restarted. In that case, when something really foundational that can't just be restarted, like the linux kernel, glibc or systemd is updated, it is a good idea to reboot.
Keep startup messages
To show successful startup and shutdown messages, you need to have removed the
quiet kernel parameter above from your grub configuration. (If you didn't do so, you still can now with also re-creating the grub configuration.) Note these messages will only show through Vultr's virtual console, not on ssh sessions. Part way through the boot process, the system will switch into a KMS (kernel mode setting graphics mode), which will lose messages before then. You can change the switch into KMS to happen earlier, to retain all messages.
# sed 's/^MODULES=()$/MODULES=(cirrus)/' -i /etc/mkinitcpio.conf # mkinitcpio -p linux
By default, after the system boots and a tty initializes, it clears the screen. Although that's aesthetically pleasing, it prevents you from simply looking at the messages during boot. You can turn off this behavior.
# mkdir /firstname.lastname@example.org
Redirecting the output
sudo cat will not use root permissions, so this is a way around that. (You do not need to prefix the
cat command itself with sudo, so it is prefixed by
$ cat <<EOF | sudo tee /email@example.com/noclear.conf > [Service] > TTYVTDisallocate=no > EOF