- 1 Introduction
- 2 Arch Linux Web sites
- 3 Booting with and using the live CD
- 3.1 Connect to the Internet
- 3.2 Update the system clock
- 3.3 Partitions -- prepare your hark drive
- 3.4 Format the partitions
- 3.5 Mount the file systems
- 3.6 Installation -- select the mirrors
- 3.7 Installation -- install essential packages
- 3.8 Configure the system -- generate fstab
- 3.9 Chroot
- 3.10 Time zone
- 3.11 Generate /etc/adjtime
- 3.12 Localization
- 3.13 Network configuration
- 3.14 Set the root password
- 3.15 Install a boot loader
- 3.16 Reboot
- 4 Additional things to know and to do
- 5 Installing packages from AUR (Arch User Repository)
Arch Linux is exceptionally pleasant to use. However, there is no visual installer with a "friendly" GUI interface. So, you do the installation by booting from a "live CD", then running commands at the bash command line (or maybe it's zsh). And, while the installation instructions at the Arch Wiki are excellent, a few additional notes might be helpful.
And, by the way, if a GUI installer is a must-have for you, take a look at Manjaro Linux: https://manjaro.org/. It's a different and separate Linux distribution, but it is based on Arch.
If you are looking for an even easier way to install Arch Linux, take a look at EndeavourOS -- https://endeavouros.com/. It's Arch Linux with a more friendly installer. From their Web site:
We’re offering you an installation with a friendly installer that will set up your system in a headache-free and swiftly manner.
After install you’re set up with a lightly customized and an almost bare Xfce desktop shipped with Firefox, our in-house update-notifier, an AUR helper called Yay and a welcome greeter that guides you through the first steps, ready to discover the endless possibilities an Arch-based system has. At first glance, EndeavourOS may look intimidating with its terminal commands, but we have the premium advantage of an active and friendly community, our wiki and an online magazine called Discovery to guide you through your journey into Archlinux.
One possible downside is that the EndeavourOS iso or image is about 1.6 GB and you need to be able to copy that onto a device that you can boot from. Likely you will want to use a USB drive. In contrast, the plain Arch Linux iso can be burned on a 700 MB CD. If the USB drive works for you, consider giving EndeavourOS a try. In my case, my old laptop did not support booting from a USB drive. So, I installed plain Arch. And, that's what the rest of this blog article is about. And, that's what the rest of this blog article is about.
Here are a few sites/pages you will want to look at for information about and help with Arch Linux:
- The main Arch Linux Web site is here: https://www.archlinux.org/
- The installation guide is at the Arch Linux Wiki: https://wiki.archlinux.org/index.php/Installation_guide
- You can get Arch Linux at the download page: https://www.archlinux.org/download/
Insert and boot from the live CD.
The easiest way to do this is to use a wired connection. To do so, plug in an Ethernet cable connected to your router.
If you need to use a wireless connection, follow the instructions in the "Installation guide".
Note that in order to use a wireless connection after you reboot to your new installation, you will need network management software. See below.
Verify your connection with something like this:
# ping archlinux.org
# timedatectl set-ntp true
Note that on some machines you will have a static drive.
Warning: This operation possibly destroys data. I'm going to assume here that you are going to clear out your hard drive and wipe it clean of any existing contents. If, for example, you have a partition that you want to preserve, then you will do something different.
The install guide suggests that you use fdisk. That's certainly a good choice, and, for the straight forward layout that we're going to create, is easy enough to use, once you have learned a few commands.
The Arch Linux live CD that I used (dated 11/01/2019) also contained cfdisk. You might find that a little more friendly and intuitive than fdisk, although for my purposes, fdisk seemed easy enough to use.
If you want a slightly more intuitive program, consider cfdisk:
Note that cfdisk provides basic partitioning functionality with a user-friendly interface. If you need advanced features, use fdisk(8) instead.
Using fdisk, we'll need the following commands:
- m -- print this menu -- Display a menu of available commands.
- p -- print the partition table -- Display a table of the existing partitions.
- d -- delete a partition -- Delete an existing partition. You will be asked for the number of the partition you wish to delete.
- n -- add a new partition -- Create a new partition. You will
be asked for:
- The partition number -- Accept the default.
- Whether to create a primary or extended partition -- Respond "p": primary.
- The starting position -- Accept the default.
- The ending position/size -- Specify the size in gigabytes, for example: "+200G".
- t -- change a partition type -- For the swap partition, change it to "Linux swap".
- l -- list known partition types -- Use these numbers with the t command, in particular change the type of the swap partition to "Linux swap".
- a -- [mark partition as bootable] -- Do this to your first partition.
- w -- write table to disk and exit.
- q -- quit without saving changes.
For the purposes of illustration in this blog article, we'll create the following rather simple partition layout:
- A root partition / -- 40 GB.
- A swap partition -- 10 GB.
- A users partition /home -- the remainder of the disk.
Here are the steps you can follow:
Determine the device. You can use df or df -h. Example:
$ df -h Filesystem Size Used Avail Use% Mounted on udev 3.5G 0 3.5G 0% /dev tmpfs 723M 1.7M 721M 1% /run /dev/sda2 37G 14G 22G 40% / tmpfs 3.6G 151M 3.4G 5% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 3.6G 0 3.6G 0% /sys/fs/cgroup /dev/sda3 1.9G 6.1M 1.9G 1% /boot/efi /dev/sda4 860G 56G 761G 7% /home o o o
Start fdisk. Example:
$ fdisk /dev/sda
You might need to use sudo.
Note that we use the device without a partition number, for example /dev/sda and not /dev/sda1.
Delete all existing partitions. Use the d command, several times if necessary.
Create the root partition. Use the n command. Specify a primary (not extended) partition. Accept the default for the start location. For the end, specify a size, for example "+40GB".
Create a swap partition. Specify a primary (not extended) partition. Accept the default for the start location. For the end, specify a size, for example "+8GB".
Create a home partition. Specify a primary (not extended) partition. Accept the default for the start location. For the end/size, specify the remainder of available space.
Mark the first partition (the root partition) as bootable. Use the "a" command.
Change the type of the swap partition to Linux Swap. Use the "t" command.
Save your configuration and exit. Use the "w" and "q" commands.
Notes on partitions:
- Above I recommend that you create a primary partitions rather than an extended partition. There are other layouts that might work for you. However, in what I describe above, we only need three partitions, so primary partitions will work well. There is a limitation on the number of primary partitions, and since that limit is a maximum of four, we're good with three. If you wanted more than four partitions, then you'd make one of your partitions an extended partition and you'd create logical partitions within that extended partition.
- Why a separate home partition? Why not create a swap partition and a root partition. A separate home partition is not really necessary. A number of years ago, I wanted to be able to reformat and re-install Linux in the root partition ("/") without losing my home and data partition. If you think that might be a need for you, then create three partitions, as described above, with a separate home partition. Arch Linux, with its rolling releases, makes that need less likely, I suppose, but still ...
- A note on partition sizes -- The example sizes that I give above are somewhat arbitrary and likely are excessive. A common recommendation is to have a swap partition whose size is double the size of your machines RAM (memory) up to 8 GB. A quick Web search will turn up recommendations. Here is one: https://opensource.com/article/19/2/swap-space-poll.
Assuming that you followed the above partition scheme (partition 1: root, partition 2: swap, partition 3: home), do the following, replacing "sdX" with your device:
$ mkfs.ext4 /dev/sdX1 $ mkswap /dev/sdX2 $ swapon /dev/sdX2 $ mkfs.ext4 /dev/sdX3
The above commands format the two data partitions with ext4 file systems and initializes the swap partition.
On my system, I did the following:
$ mount /dev/sda1 /mnt $ mkdir /mnt/home $ mount /dev/sda3 /mnt/home
- Replace "sda" with your device, if necessary.
- You want to mount /home in addition to / so that both these partitions are configured in /etc/fstab when you, later, run genfstab. See below.
The mirror list is in /etc/pacman.d/mirrorlist. You can move files (lines) higher up in the list to give them priority.
Run the following:
$ pacstrap /mnt base linux linux-firmware
In order to create a functioning system, you will want to install additional packages. See the following: https://wiki.archlinux.org/index.php/Installation_guide#Install_essential_packages
In particular, you may want to consider installing the following:
- Networking -- Install networkmanager or netctl. With networkmanager installed, you can use nmtui to select and connect to a wireless network. netctl is an alternative to networkmanager.
- A text editor -- nano is a simple text mode editor. vim is a much more powerful editor. neovim is a more modern implementation of vim.
- If you intend to be compiling and installing packages written in C, install package base-devel.
As long as you can connect to the network after you reboot without the live CD, you can install any of the packages you need later.
You can install a package with the following:
$ pacman -S <package-name>
You can search for a package if you know part of its name with the following:
$ pacman -Ss <name> $ pacman -Ss <name> | less
If after rebooting, you find that you omitted some needed step. If so, you can reboot from the live CD, remount your file systems, then, for example, install additional needed packages.
Generate /etc/fstab. This will enable the system to automatically mount your file systems when you boot. Run this:
$ genfstab -U /mnt >> /mnt/etc/fstab
View file /etc/fstab (e.g. with nano or vim). Make sure that it has lines for / and /home and swap.
Change root into the new system -- This will enable us to run commands with root privileges:
$ arch-chroot /mnt
Set the time zone -- Make a symbolic link to the time zone file for your region. Use the following, but replace "Region" and "City":
$ ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
For example, I did:
$ ln -sf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime
Run hwclock(8) to generate /etc/adjtime:
$ hwclock --systohc
This command assumes the hardware clock is set to UTC. See System time#Time standard for details.
Uncomment en_US.UTF-8 UTF-8 and other needed locales in /etc/locale.gen, and generate them with:
Create the locale.conf(5) file, and set the LANG variable accordingly. Add the following to /etc/locale.conf:
If you set the keyboard layout, make the changes persistent in vconsole.conf(5) -- /etc/vconsole.conf:
Create the hostname file -- Edit /etc/hostname. Insert a line that give the host name for your system:
Add matching entries to hosts(5) -- For example, add the following in /etc/hosts:
127.0.0.1 localhost ::1 localhost 127.0.1.1 myhostname.localdomain myhostname
If the system has a permanent IP address, it should be used instead of 127.0.1.1.
You may want to install some network tools. For example, I installed networkmanager:
$ pacman -S networkmanager
And, enter a new password.
Choose and install a boot loader. I installed grub:
$ pacman -S grub $ grub-install --target=i386-pc /dev/sdX
- For grub-install, use "/dev/sdX", not "/dev/sdX1". For example, on my system, I used "/dev/sda".
Exit the chroot environment -- Type exit or use Ctrl-d.
Remove the live CD from the CD drive.
Reboot -- Type reboot.
Some capabilities are provided as system services. You will want to enable them, so that they automatically start up during the boot process and you may want to start them immediately. The following does that, for example, for the networkmanager service:
$ systemctl enable networkmanager $ systemctl start networkmanager
On my system, I wanted to add myself as a user who could use sudo to run commands with root privileges. So, I did the following:
$ useradd -m dkuhlman $ passwd dkuhlman # and enter a new password
And, to give add myself to the sudoers group and enable myself to use sudo to run commands with root privileges, I used visudo and added a line for myself by copying the one for root and replacing "root" with my user name:
# User privilege specification ## root ALL=(ALL) ALL dkuhlman ALL=(ALL) ALL
pacman is our tool for installing and maintaining packages on Arch Linux. It's our not-so-intuitive package manager. But, if your experience is anything like mine, you will find that using pacman becomes very convenient quite quickly.
There is a good cheat sheet on pacman commands and options here:
Here are a few common tasks that you are likely to want to do:
Get help for pacman commands -- Examples:
$ pacman -h $ pacman -h -S $ pacman -h -F
Search for a package:
$ pacman -Ss some_search_string
Install a package:
$ sudo pacman -S package_name
Upgrade installed packages -- Use this command to update the package database on you system and then upgrade the packages installed on your system so that they are the latest versions:
$ sudo pacman -Syu
Search installed packages for the packages that contain a file:
$ pacman -F some_file_name
List the files installed by a package:
$ pacman -Fl package_name
I installed Arch Linux on a rather old laptop. I had a bit of trouble figuring out which video drivers I needed to install in order to support Xorg (package xserv-org). Here is what I did.
Install support for Xorg -- I wanted to be able to use both the Xfce4 desktop and the i3 window manager. So, using pacman, I installed the following packages:
- Install xorg-server -- See https://wiki.archlinux.org/index.php/Xorg
- Install xfce4 and xfce4-goodies -- See https://wiki.archlinux.org/index.php/Xfce4
- Install i3-wm -- See https://wiki.archlinux.org/index.php/I3wm
Installing needed video drivers -- There is good information and help here: https://wiki.archlinux.org/index.php/Xorg#Driver_installation. The above page tells you both (1) how to detect which drivers you need and (2) what packages are available containing the supporting drivers.
Basically, I installed driver packages until I was able to bring up the Xfce4 and i3 desktops. I likely installed some drivers that I did not need. But, that's OK. Now, it works.
Consider installing packages for Alsa and PulseAudio.
On my system, sound was initially muted. I fixed this by starting up alsamixer, and then unmuting "Master".
I have multiple machines connected to my LAN (local area network). I wanted those other machines to be able to address my Arch Linux machine by host name. To support that, I installed the avahi support packages. Actually, I believe that I have avahi installed on all my Linux machines.
The AUR is here: https://aur.archlinux.org/
You can learn how to install packages from the AUR here: https://wiki.archlinux.org/index.php/Arch_User_Repository
Here is a summary of the steps you follow. Details are here: https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages.
Find the package you want.
Click on the version you want to install.
Use the "Git Clone URL" on the package details page to clone the repository. Example:
$ git clone https://aur.archlinux.org/cdargs.git
Go to the new directory. Example:
$ cd cdargs
Check the build file. It should be plain text and should have no binary code:
$ less PKGBUILD
Download dependencies, build the package, and install it:
$ makepkg -si