Installing Arch from an Existing Linux Installation

May 1, 2015, 6 p.m.


For some people, the typical method of installing Arch -- using the downloaded ISO installation environment, which provides all of the very basic command line tools to install Arch, and manually configuring everything, is more difficulty than they are willing to endure. The most intimidating element of this process being configuring the network during installation. Fortunately, Arch, like any distribution, can be installed by using a chroot environment from an existing Linux installation, greatly simplifying the normal process of installing Arch. Arch actually provides a customized chroot environment that makes installing from an existing Linux installation easy. When this chroot environment is used from an existing Linux on a machine that is connected to a network the process is much easier than the standard method of installing Arch because the network configuration will not have to be performed for the installation, although the user will still need to follow most of the standard process, with the exception of network setup. Other steps are also avoided with the chroot method. For example, preparing the partitions outside of the installation process -- another deviation from the standard Arch installation process described in the Arch Linux Beginners' Guide -- also simplifies the installation, allowing the use of a graphical tool available in the existing Linux. Selecting packages that will automatically install dependencies instead of installing dependencies first, because the goal is to get to a working desktop environment in as few steps as possible will further simplify the process.


The steps I describe in this article are those that I used to install Arch and the Xfce desktop environment in January of 2015. (When Arch announced the availability of Plasma 5.2.2, a version considered stable enough for daily use a few days later, I also installed it.) This installation method was painless and took about four hours to have a working desktop environment with a working wireless network configuration. (I've heard of an Arch installation taking days) I did face the problem of some Xfce components not starting automatically when logging into Xfce, but based on the types of errpr messages that were displayed by Xfce, I think this was due to my choice of installing the Xfce environment before creating a non-root user. Despite this error in the order of steps, for the most part, the order of the steps after the set of base packages, it seems like the order of the remaining steps is arbitrary.

There were a few other post installation configuration items, like editing the polkit configuration file to allow rootless access to other partitions on the system, but these were matters of convenience and could not be considered part of the isntallation rather part of the normal Arch user configuration, and will be discussed in a later article.

In fact this method was even easier than installing the Arch derivative, Antergos, which provides an ISO with a live GNOME environment and a graphical installer, the difficulty with Antergos being an unstable installer and non-standard default choices for using EFI System parition. More on that distribution in a later article. For first time Arch users who want an even easier Arch set up than the chroot from an existing Linux installation should try Manjaro over this method or Antergos. The Arch derived Manjaro, while not pure Arch, mainly because it uses its own repositories and delays updates and makes minor changes for added stability, is still a rolling Arch based distribution and offers a reliable graphical installer, installation of a graphical package manager -- which are not available in the official Arch repositories but only in the AUR, preconfigurs the AUR, takes care of user interventions that Arch requires, and provides nice theming, among other items that make Arch easier to use and maintain.

This installation was done on a Lenovo V570 with Phoenix Technologies EFI v 2.0, an Intel Core-i5 2450M processor, integrated Intel Graphics HD3000, and an Intel Centrino® Wireless-N + WiMAX 6150 wireless network interface. The existing Linux I performed the installation from was first Manjaro 0.8.10 or 0.8.11 (I don't remember the snapshot version). After the point in the installation process where I installed sddm I had to stop the installation and resumed it later from openSUSE 13.2 after I set up the arch-root again in openSUSE.

Read on for the full step by step guide to installing Arch Linux from an existing Linux OS on a different partition of the same computer.


I would first prepare the partitions in which the Arch installation will reside using the tools available in the existing Linux installation where the chroot . Assigning labels to the partitions is also a good idea.

  1. The arch-chroot tool is part of the installation bootstrap image. Download the Arch bootstrap image from an Arch mirror of your choice. The mirror for downloading the image can be selected from the list on the Arch downloads page which lists mirrors by country. I chose the mirror at UMD because it is close to me and UMD also provided a fast mirror for Sabayon. The screenshot below shows the path to the current image file, archlinux-bootstrap-2015.04.01-x86_64.tar.gz
    arch bootstrap image download mirror
    Mirror URL Directory Listing
    The bootstrap image file is named obviously. This mirror URL also the contains ISO image for the normal Arch installation for those that want to install it the hard way or the more educational way.
    The download is performed with:
    brook @ V570-MANJARO  ~
    └─ $ ▶curl -O
    . Note that the date in the name of the image file will change to whatever is current at the time you visit the mirror. Move the downloaded tar.gz archive to /tmp with
    brook @ V570-MANJARO  ~
    └─ # ▶sudo mv archlinux-bootstrap-2015.01.01-x86_64.tar.gz /tmp/archlinux-bootstrap-2015.01.01-x86_64.tar.gz
  2. I changed to root at this point instead of using sudo. Change directory to the /tmp directory and extract the tar archive with:
    root @ V570-MANJARO  /tmp
    └─ # ▶tar xzf archlinux-bootstrap-2015.01.01-x86_64.tar.gz
    Extracting the archive will create a directory called root.x86_64
  3. Select the mirrors you would like to use by uncommenting the servers appropriate for your location in the mirrorlist file. I used nano with the command:
    root @ V570-MANJARO  /tmp
    └─ # ▶nano /tmp/root.x86_64/etc/pacman.d/mirrorlist

Installing the Base System

  1. If the existing installation from which this process is performed uses a bash greater than Version 4, enter the chroot environment with:
    root @ V570-MANJARO  /tmp
    └─ # ▶/tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64/
    Otherwise use the following series of commands one at a time, copied from the Arch guide:
      cd /tmp/root.x86_64
      cp /etc/resolv.conf etc
      mount -t proc /proc proc
      mount --rbind /sys sys
      mount --rbind /dev dev
      mount --rbind /run run
      chroot /tmp/root.x86_64 /bin/bash
    As my system had bash 4.3, the first method was enough.
  2. Initialize the gpg keyring with:
    sh-4.3# pacman-key --init
    Notice that once in the arch-chroot environment the command prompt changed. This will output something like this:
    gpg: /etc/pacman.d/gnupg/trustdb.gpg: trustdb created
    gpg: no ultimately trusted keys found
    gpg: starting migration from earlier GnuPG versions
    gpg: porting secret keys from '/etc/pacman.d/gnupg/secring.gpg' to gpg-agent
    gpg: migration succeeded
    gpg: Generating pacman keyring master key...
    gpg: key C2A9121F marked as ultimately trusted
    gpg: directory '/etc/pacman.d/gnupg/openpgp-revocs.d' created
    gpg: Done
    ==> Updating trust database...
    gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
    gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
  3. Then populate the Arch gpg keys with:
    sh-4.3# pacman-key --populate archlinux
    which will output something like this:
    ==> Appending keys from archlinux.gpg...
    gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
    gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
    ==> Locally signing trusted keys in keyring...
      -> Locally signing key 0E8B644079F599DFC1DDC3973348882F6AC6A4C2...
      -> Locally signing key 684148BB25B49E986A4944C55184252D824B18E8...
      -> Locally signing key 44D4A033AC140143927397D47EFD567D4C7EA887...
      -> Locally signing key 27FFC4769E19F096D41D9265A04F9397CDFD6BB0...
      -> Locally signing key AB19265E5D7D20687D303246BA1DFB64FFF979E7...
    ==> Importing owner trust values...
    gpg: inserting ownertrust of 4
    gpg: setting ownertrust to 4
    gpg: setting ownertrust to 4
    gpg: setting ownertrust to 4
    gpg: setting ownertrust to 4
    ==> Disabling revoked keys in keyring...
      -> Disabling key F5A361A3A13554B85E57DDDAAF7EF7873CFD4BB6...
      -> Disabling key 7FA647CD89891DEDC060287BB9113D1ED21E1A55...
      -> Disabling key D4DE5ABDE2A7287644EAC7E36D1A9E70E19DAA50...
      -> Disabling key BC1FBE4D2826A0B51E47ED62E2539214C6C11350...
      -> Disabling key 9515D8A8EAB88E49BB65EDBCE6B456CAF15447D5...
      -> Disabling key 4A8B17E20B88ACA61860009B5CED81B7C2E5C0D2...
      -> Disabling key 63F395DE2D6398BBE458F281F2DBB4931985A992...
      -> Disabling key 0B20CA1931F5DA3A70D0F8D2EA6836E1AB441196...
      -> Disabling key 8F76BEEA0289F9E1D3E229C05F946DED983D4366...
      -> Disabling key 66BD74A036D522F51DD70A3C7F2A16726521E06D...
      -> Disabling key 81D7F8241DB38BC759C80FCE3A726C6170E80477...
      -> Disabling key E7210A59715F6940CF9A4E36A001876699AD6E84...
    ==> Updating trust database...
    gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
    gpg: depth: 0  valid:   1  signed:   5  trust: 0-, 0q, 0n, 0m, 0f, 1u
    gpg: depth: 1  valid:   5  signed:  62  trust: 0-, 0q, 0n, 5m, 0f, 0u
    gpg: depth: 2  valid:  60  signed:   5  trust: 60-, 0q, 0n, 0m, 0f, 0u
    gpg: next trustdb check due at 2016-01-22
  4. The directory /mnt already exists on the Arch bootstrap image in the root.x86_64 directory. Once the partition on which Arch will be installed is mounted at /mnt, it will represent the new installation's root file system. Directories created in /mnt will also be needed for the /home partition for the Arch installation as well as the EFI System partition.
    sh-4.3# mkdir -p /mnt/home
    sh-4.3# mkdir -p /mnt/boot/efi
  5. Then mount the actual partitions where the Arch installation will be placed to these mount points inside the bootstrap image. In the following commands the actual block names on my system are shown; be sure to substitute your own device names. Mount the partition to be used for Arch's / partition with:
    sh-4.3# mount /dev/sda25 /mnt
    Mount the partition to be Arch's /home partition with:
    sh-4.3# mount /dev/sda26 /mnt/home
    Mount the EFI System partition with:
    sh-4.3# mount /dev/sda2 /mnt/boot/efi
    Activate the swap partition so that it is recognized by Arch's fstab generation script with:
    sh-4.3# swapon -s
    This command returned:
    Filename                                Type            Size    Used    Priority
    /dev/sda8                               partition       6291452 0       -1
    In my case, /dev/sda8 is the swap partition on the multi-boot system and was active in the Manjaro that the arch-chrootwas running.
  6. Now it's time to get excited. The actual installation of the base Arch system happens with the following command:
    sh-4.3# pacstrap /mnt base
    This will synchronize the package database and then prompt for a selection as shown in the following code block.
    ==> Creating install root at /mnt
    ==> Installing packages to /mnt
    :: Synchronizing package databases...
     core                                              121.6 KiB   365K/s 00:00 [##########################################] 100%
     extra                                            1806.0 KiB   192K/s 00:09 [##########################################] 100%
     community                                           2.5 MiB   196K/s 00:13 [##########################################] 100%
    :: There are 50 members in group base:
    :: Repository core
       1) bash  2) bzip2  3) coreutils  4) cryptsetup  5) device-mapper  6) dhcpcd  7) diffutils  8) e2fsprogs  9) file
       10) filesystem  11) findutils  12) gawk  13) gcc-libs  14) gettext  15) glibc  16) grep  17) gzip  18) inetutils
       19) iproute2  20) iputils  21) jfsutils  22) less  23) licenses  24) linux  25) logrotate  26) lvm2  27) man-db
       28) man-pages  29) mdadm  30) nano  31) netctl  32) pacman  33) pciutils  34) pcmciautils  35) perl  36) procps-ng
       37) psmisc  38) reiserfsprogs  39) s-nail  40) sed  41) shadow  42) sysfsutils  43) systemd-sysvcompat  44) tar
       45) texinfo  46) usbutils  47) util-linux  48) vi  49) which  50) xfsprogs
    Enter a selection (default=all):
  7. Press enter to accept the default selection. The packages to be installed will then be displayed and a prompt to confirm the installation, as in the following:
    resolving dependencies...
    looking for conflicting packages...
    warning: dependency cycle detected:
    warning: ncurses will be installed before its bash dependency
    Packages (123) acl-2.2.52-2  archlinux-keyring-20141218-1  attr-2.4.47-1  ca-certificates-20140923-9
                   ca-certificates-cacert-20140824-2  ca-certificates-mozilla-3.17.3-2  ca-certificates-utils-20140923-9
                   cracklib-2.9.1-1  curl-7.40.0-1  db-5.3.28-2  dbus-1.8.12-1  expat-2.1.0-4  gdbm-1.11-1  glib2-2.42.1-1
                   gmp-6.0.0-1  gnupg-2.1.1-1  gnutls-3.3.12-1  gpgme-1.5.3-1  groff-1.22.3-2  hwids-20141214-1  iana-etc-2.30-4
                   iptables-1.4.21-1  kbd-2.0.2-1  keyutils-1.5.9-1  kmod-19-1  krb5-1.13-1  libaio-0.3.110-1
                   libarchive-3.1.2-8  libassuan-2.1.3-1  libcap-2.24-2  libdbus-1.8.12-1  libffi-3.2.1-1  libgcrypt-1.6.2-1
                   libgpg-error-1.17-1  libidn-1.29-1  libksba-1.3.2-1  libldap-2.4.40-2  libpipeline-1.4.0-1  libsasl-2.1.26-7
                   libseccomp-2.1.1-1  libssh2-1.4.3-2  libsystemd-218-1  libtasn1-4.2-1  libtirpc-0.2.5-1  libunistring-0.9.4-1
                   libusb-1.0.19-1  libutil-linux-2.25.2-1  linux-api-headers-3.18.1-1  linux-firmware-20141201.38e5405-1
                   lz4-127-1  lzo-2.08-3  mkinitcpio-18-2  mkinitcpio-busybox-1.21.1-2  mpfr-3.1.2.p11-1  ncurses-5.9-7
                   nettle-2.7.1-1  npth-1.1-1  openresolv-3.5.7-2  openssl-1.0.1.k-1  p11-kit-0.22.1-3
                   pacman-mirrorlist-20150105-1  pam-1.1.8-5  pambase-20130928-1  pcre-8.36-2  pinentry-0.9.0-1  popt-1.16-7
                   pth-2.0.7-5  readline-6.3.006-1  systemd-218-1  thin-provisioning-tools-0.4.1-1  tzdata-2014j-1  xz-5.2.0-1
                   zlib-1.2.8-3  bash-4.3.033-1  bzip2-1.0.6-5  coreutils-8.23-1  cryptsetup-1.6.6-1  device-mapper-2.02.114-1
                   dhcpcd-6.6.7-1  diffutils-3.3-2  e2fsprogs-1.42.12-1  file-5.22-1  filesystem-2014.10-3  findutils-4.4.2-6
                   gawk-4.1.1-1  gcc-libs-4.9.2-2  gettext-0.19.3-1  glibc-2.20-6  grep-2.21-1  gzip-1.6-1  inetutils-1.9.2-2
                   iproute2-3.17.0-1  iputils-20121221-3  jfsutils-1.1.15-4  less-471-1  licenses-20140629-1  linux-3.18.2-2
                   logrotate-3.8.8-2  lvm2-2.02.114-1  man-db-2.7.1-1  man-pages-3.77-1  mdadm-3.3.2-1  nano-2.2.6-3
                   netctl-1.9-1  pacman-4.2.0-5  pciutils-3.3.0-1  pcmciautils-018-7  perl-5.20.1-1  procps-ng-3.3.10-1
                   psmisc-22.21-2  reiserfsprogs-3.6.24-1  s-nail-14.7.11-1  sed-4.2.2-3  shadow-4.2.1-2  sysfsutils-2.1.0-9
                   systemd-sysvcompat-218-1  tar-1.28-1  texinfo-5.2-3  usbutils-008-1  util-linux-2.25.2-1  vi-1:050325-4
                   which-2.20-7  xfsprogs-3.2.2-1
    Total Download Size:   156.31 MiB
    Total Installed Size:  462.88 MiB
    :: Proceed with installation? [Y/n]
    Press enter to proceed with the installation. Then the packages are downloaded and installed. You will now learn one of the most important rules of being an Arch user, which is that you must pay attention to the messages and warnings that are displayed during installation after all of the packages have been downloaded. During an initial installation pacman messages will only include a list of optional dependencies for a package as in
    Optional dependencies for systemd
        python: systemd library bindings
        cryptsetup: required for encrypted block devices [pending]
        libmicrohttpd: remote journald capabilities
        quota-tools: kernel-level quota management
        systemd-sysvcompat: symlink package to provide sysvinit binaries [pending]
        polkit: allow administration as unprivileged user
    If the message shows pending, the optional package has already been selected automatically for installation and will be installed in a later step. After the installation there will also be other types of messages, including informational messages and warnings that must be acted upon.
  8. The next step will be to generate the /etc/fstab file for the new Arch system, which is done with:
    sh-4.3# genfstab -p /mnt >> /mnt/etc/fstab
  9. Next change root into the installed Arch. This is a chroot from a chroot environment.
    sh-4.3# arch-chroot /mnt
  10. Change the hostname. I chose the name V570-ARCH.
    sh-4.3# echo V570-ARCH > /etc/hostname
    At about this point in the normal installation guide, the network would be set up for the new Arch installation. It turns out that these steps can be skipped and all that will be required in this method for a working networking is to install a few network related packages and NetworkManager, in my opinion the best option of all those described in the Arch wiki for Network management. When the desktop environment is ultimately started after the installation, all network interfaces, including wireless will be available.
  11. I then set the time zone. I am in the Eastern US so I set America/New_York. Arch suggests that the hardware clock be set to UTC, even if Windows is installed on the computer. Steps to set Windows to recognize that the hardware clock is set to UTC are available on the Arch wiki.
    sh-4.3# ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime
  12. Set the system locale by editing the /etc/locale.gen file to uncomment the appropriate locale. For me this meant uncommenting en_US.UTF-8 UTF-8. An ISO locale encoding is also available in the file, but Arch recommends using the UTF encoding.
    sh-4.3# nano /etc/locale.gen
  13. Generate the locale.
    sh-4.3# locale-gen
    sh-4.3# echo LANG=en_US.UTF-8 > /etc/locale.conf
  14. Set the system language environment parameter.
    sh-4.3# export LANG=en_US.UTF-8
  15. Generate the inital ram disk with:
    sh-4.3# mkinitcpio -p linux
    With this step the system will be bootable, although with some other OSes bootloader or a rescue disk will be necessary since a bootloader has not been installed yet in Arch.
  16. Create the root password with the following command, entering the desired password at the prompts.
    sh-4.3# passwd

At this point, the Arch Beginners Guide instructs setting up the bootloader, exiting the chroot environment and rebooting, which will start the newly installed Arch system in a console environment since not even the X server has been installed at this point. To avoid this, I decided to stay in the chroot environment and continue to install the X server, the networking packages, and a desktop environment, so that when I boot the system for the first time I would have a working desktop. I installed the bootloader much later from within the actual running Arch system which I booted into after updating GRUB on the Linux system I was performing this installation from.

Now might actually be a good time to add the first non-root user instead of when I did it later in the process, for reasons previously mentioned.

Install the Graphics Driver and the X Window System

The process up to this point installed a base system -- with only root as a user thus far -- except for a bootloader, which wasn't really necessary since I would initially use the GRUB of the installed system from which I was performing this Arch installation. What I really cared about at this point was installing a desktop environment that would be available to me when I did start the Arch system and having an easily configured working wireless connection. The steps I followed to do this, while still in the second level chrooted environment, are below.

One of the things that the process of installing Arch teaches a fairly inexperienced Linux user is the layers of components that make up a usable Linux system, although the details are hidden.

  • A properly formatted root file system.
  • The base system packages including the kernel and the very low level GNU tools.
  • An /etc/fstab file that will list the block devices to be mounted at boot.
  • Basic configuration of the system, including time and locale.
  • An initial ram file system that will be started by the bootloader, that will then continue the rest of the OS startup process.
  • User configuration.

Then the user sees the higher level layers, the first of which are those related to the X Window and graphics components.

  1. The rest of the installation begins with installing the graphics driver which will install many components as dependencies. Since my system uses an integrated Intel graphics chip, I installed the intel driver.
    sh-4.3# pacman -S xf86-video-intel
    This will give the response shown in the following code block, with a prompt to select the provider that will satisfy a dependency. I chose the default because it is the closest to the core repository. (The three official repositories in Arch, in order of importance are the core, then extra, then community; the AUR is unofficial.)
    resolving dependencies...
    :: There are 9 providers available for mesa-dri:
    :: Repository extra
       1) mesa
    :: Repository community
       2) i810-dri  3) mach64-dri  4) mga-dri  5) r128-dri  6) savage-dri  7) sis-dri
       8) tdfx-dri  9) unichrome-dri
    Enter a number (default=1):
    This will produce the following output, with a warning that a package will be installed before its dependency -- but this problem was taken care of by the subsequent installation -- and the list of packages to be installed, as below:
    looking for conflicting packages...
    warning: dependency cycle detected:
    warning: libtxc_dxtn will be installed before its mesa dependency
    Packages (30) damageproto-1.2.1-3  elfutils-0.161-2  fixesproto-5.0-3  kbproto-1.0.6-2
                  libdrm-2.4.58-1  libomxil-bellagio-0.9.3-1  libpciaccess-0.13.2-2
                  libtxc_dxtn-1.0.1-5  libx11-1.6.2-2  libxau-1.0.8-2  libxcb-1.11-1
                  libxdamage-1.1.4-2  libxdmcp-1.1.1-2  libxext-1.3.3-1  libxfixes-5.0.1-1
                  libxshmfence-1.2-1  libxv-1.0.10-1  libxvmc-1.0.8-1  libxxf86vm-1.1.3-1
                  llvm-libs-3.5.1-1  mesa-10.4.2-1  pixman-0.32.6-1  videoproto-2.3.2-1
                  wayland-1.6.0-1  xcb-proto-1.11-1  xcb-util-0.4.0-1  xextproto-7.3.0-1
                  xf86vidmodeproto-2.3.1-3  xproto-7.0.27-1  xf86-video-intel-2.99.917-1
    Total Download Size:   19.46 MiB
    Total Installed Size:  89.54 MiB
    :: Proceed with installation? [Y/n] 
    During the installation the following message is displayed -- an example of some of the useful messages to observe when installing or updating packages.
    >>> This driver uses SNA as the default acceleration method. You can
        fall back to UXA if you run into trouble or test experimental
        Glamor acceleration. To do so, save a file with the following 
        content as /etc/X11/xorg.conf.d/20-intel.conf :
          Section "Device"
            Identifier  "Intel Graphics"
            Driver      "intel"
            Option      "AccelMethod"  "sna"
            #Option      "AccelMethod"  "uxa"
            #Option      "AccelMethod"  "glamor"
    Optional dependencies for xf86-video-intel
        libxrandr: for intel-virtual-output
        libxinerama: for intel-virtual-output
        libxcursor: for intel-virtual-output
        libxtst: for intel-virtual-output
  2. Install the other packages related to the video driver.
    sh-4.3# pacman -S mesa-libgl
    sh-4.3# pacman -S libva-intel-driver libva
  3. Install the X Window system.
    sh-4.3# pacman -S xorg-server xorg-server-utils xorg-apps
    You will be presented with a choice of which components of the xorg-apps to install. The default is all, so press enter to accept the defaults, which is what I did. There will be a warning in the output, shown below, that a package is installed before a dependency. In this case it is not a problem that causes pacman to fail, but like in the previous instance, occurs because so many low level packages are being installed at the same time and because, I think, this package manager is not atomic.
    resolving dependencies...
    looking for conflicting packages...
    warning: dependency cycle detected:
    warning: harfbuzz will be installed before its freetype2 dependency
    Packages (84) compositeproto-0.4.2-3  dmxproto-2.3.1-3  fontconfig-2.11.1-1
                  fontsproto-2.1.3-1  freetype2-2.5.5-1  graphite-1:1.2.4-1  harfbuzz-0.9.37-1
                  inputproto-2.3.1-1  libdmx-1.1.3-1  libepoxy-1.2-2  libevdev-1.3.2-1
                  libfontenc-1.1.2-1  libice-1.0.9-1  libpng-1.6.16-1  libsm-1.2.2-2
                  libxaw-1.0.12-1  libxcomposite-0.4.4-2  libxcursor-1.1.14-2  libxfont-1.5.0-1
                  libxft-2.3.2-1  libxi-1.7.4-1  libxinerama-1.1.3-2  libxkbfile-1.0.8-2
                  libxmu-1.1.2-1  libxpm-3.5.11-1  libxrandr-1.4.2-2  libxrender-0.9.8-1
                  libxt-1.1.4-1  libxtst-1.2.2-1  libxxf86dga-1.1.4-1  mcpp-2.7.2-5
                  mtdev-1.1.5-1  randrproto-1.4.0-2  recordproto-1.14.2-2  renderproto-0.11.1-3
                  xf86-input-evdev-2.9.1-1  xf86dgaproto-2.1-3  xineramaproto-1.2.1-3
                  xkeyboard-config-2.13-1  xorg-font-util-1.3.0-2  xorg-font-utils-7.6-4
                  xorg-fonts-alias-1.0.3-1  xorg-fonts-encodings-1.0.4-4
                  xorg-fonts-misc-1.0.3-2  xorg-server-common-1.16.3-2  xorg-bdftopcf-1.0.5-1
                  xorg-iceauth-1.0.7-1  xorg-luit-1.1.1-2  xorg-mkfontdir-1.0.7-2
                  xorg-mkfontscale-1.1.2-1  xorg-server-1.16.3-2  xorg-server-utils-7.6-4
                  xorg-sessreg-1.0.8-2  xorg-setxkbmap-1.3.0-2  xorg-smproxy-1.0.5-2
                  xorg-x11perf-1.5.4-2  xorg-xauth-1.0.9-1  xorg-xbacklight-1.2.1-1
                  xorg-xcmsdb-1.0.4-2  xorg-xcursorgen-1.0.6-1  xorg-xdpyinfo-1.3.1-1
                  xorg-xdriinfo-1.0.4-4  xorg-xev-1.2.1-2  xorg-xgamma-1.0.5-2
                  xorg-xhost-1.0.6-1  xorg-xinput-1.6.1-1  xorg-xkbcomp-1.3.0-1
                  xorg-xkbevd-1.1.3-2  xorg-xkbutils-1.0.4-2  xorg-xkill-1.0.4-1
                  xorg-xlsatoms-1.1.1-2  xorg-xlsclients-1.1.3-1  xorg-xmodmap-1.0.8-1
                  xorg-xpr-1.0.4-2  xorg-xprop-1.2.2-1  xorg-xrandr-1.4.3-1  xorg-xrdb-1.1.0-1
                  xorg-xrefresh-1.0.5-1  xorg-xset-1.2.3-1  xorg-xsetroot-1.1.1-2
                  xorg-xvinfo-1.1.2-2  xorg-xwd-1.0.6-1  xorg-xwininfo-1.1.3-1
    Total Download Size:   13.61 MiB
    Total Installed Size:  42.86 MiB
    :: Proceed with installation? [Y/n]
    Press enter to proceed with the installation.

Install the Desktop Environment

Now that the base system, the graphics driver, and the X Window system had been installed, I installed my second or third favorite desktop environment, Xfce. I believe installing the desktop before creating a non-root user was a mistake, as it may have been the cause of error messages regarding the Xfce panel when I logged on for the first time as a regular user. I would suggest making your regular users before installing the desktop as I did later in the process outlined here.

  1. Install your desktop of choice. On Arch, installing Xfce, requires two package groups.
    sh-4.3# pacman -S xfce4 xfce4-goodies
    Since xfce4 is a package group, like meta packages in some distributions and a pattern in openSUSE, Arch's pacman will ask which members of the group to install.
    	:: There are 18 members in group xfce4:
    	:: Repository extra
    	1) exo  2) garcon  3) gtk2-xfce-engine  4) gtk3-xfce-engine  5) thunar  6) thunar-volman
    	7) tumbler  8) xfce4-appfinder  9) xfce4-mixer  10) xfce4-panel  11) xfce4-power-manager
    	12) xfce4-session  13) xfce4-settings  14) xfce4-terminal  15) xfconf  16) xfdesktop
    	17) xfwm4  18) xfwm4-themes
    	Enter a selection (default=all): 
    Press enter to accept the default. Pacman will also ask the same question for the xfce4-goodies group.
    :: There are 35 members in group xfce4-goodies:
    :: Repository extra
       1) mousepad  2) orage  3) thunar-archive-plugin  4) thunar-media-tags-plugin  5) xfburn
       6) xfce4-artwork  7) xfce4-battery-plugin  8) xfce4-clipman-plugin
       9) xfce4-cpufreq-plugin  10) xfce4-cpugraph-plugin  11) xfce4-datetime-plugin
       12) xfce4-dict  13) xfce4-diskperf-plugin  14) xfce4-eyes-plugin
       15) xfce4-fsguard-plugin  16) xfce4-genmon-plugin  17) xfce4-mailwatch-plugin
       18) xfce4-mount-plugin  19) xfce4-mpc-plugin  20) xfce4-netload-plugin
       21) xfce4-notes-plugin  22) xfce4-notifyd  23) xfce4-quicklauncher-plugin
       24) xfce4-screenshooter  25) xfce4-sensors-plugin  26) xfce4-smartbookmark-plugin
       27) xfce4-systemload-plugin  28) xfce4-taskmanager  29) xfce4-time-out-plugin
       30) xfce4-timer-plugin  31) xfce4-verve-plugin  32) xfce4-wavelan-plugin
       33) xfce4-weather-plugin  34) xfce4-xkb-plugin
    :: Repository community
       35) ristretto
    Enter a selection (default=all):
    Again, accept the default.
  2. Next install the audio components.
    sh-4.3# pacman -S alsa-utils alsa-plugins
    sh-4.3# pacman -S libpulse
  3. I configured the first non-root user next. As stated before, I learned the hard way that I should have installed this before installing the desktop environment.
    sh-4.3# useradd -m -G wheel -s /bin/bash brook
    The option -G wheel will make the user an administrator. After entering the command, follow the prompts to set the password.
  4. Next, I installed the display manager, SDDM. I chose SDDM because I planned to install KDE Plasma 5 later and that is the preferred display manager for the future of KDE.
    sh-4.3# pacman -S sddm
  5. Set the hardware clock to UTC with:
    sh-4.3# hwclock --systohc --utc
    I unknowingly used
    sh-4.3# hwclock --systohc --localtime
    to configure the hardware clock for use in the Arch, setting the hardware clock to local time. I later changed it to UTC using timedatectl after learning how to deal with Windows and the hardware clock being set to UTC. It is recommended to set the hardware clock to UTC on all of the installed OSes on the computer, including Windows. The Arch wiki shows how to do this on Windows and avoid problems. I think this is especially important if any of the OSes use btrfs which caused me some problems on openSUSE 13.2 until I realized not setting all of the installed OSes to UTC was the problem. Read my openSUSE 13.2 review and the guide on btrfs/Snapper to see why this was important for using btrfs.

Installing Networking Components

At this point in the process, everything except the needed networking components and the bootloader were installed. I then installed the necessary components for networking.

pacman -S iw
pacman -S wpa_supplicant
pacman -S networkmanager

This last package is very important as when you boot into the new Arch installation, it will have networking, including wireless, automatically configured and ready to go. I performed this installation process at a public hotspot and was pleasantly surprised that when I booted into the new Arch installation and clicked on Xfce's Network Manager applet, the available wireless networks were visible and that I could connect to them. Installing these three packages, when following this process was all that was required to configure the working network. Compare this to the procedures and options discussed in the sections of the Arch installation guides pertaining to networking.

GRUB Bootloader for EFI

When I installed Arch using the above process, I didn't install a bootloader because I chose to use openSUSE's GRUB installation. I booted into the new Arch installation by updating openSUSE's GRUB, rebooted, and in the new GRUB menu chose Arch. I did install Arch's GRUB bootloader eventually.

To install GRUB for an EFI/UEFI system -- an EFI/UEFI system has an EFI System partition used to store the firmware bootloader and uses an EFI/UEFI firmware instead of the traditional BIOS -- do the following before exiting the arch-chroot environment,

  1. Install the grub package.
    pacman -S grub
  2. Install the bootloader into the EFI partition.
    grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch --recheck
    /boot/efi was chosen as the mount point for the EFI partition early in this process after changing to the arch-chroot environment. An installation of GRUB into the EFI System partition and into the firmware, as this command does will, at least on my hardware will make this the default GRUB bootloader, and will be used when the system reboots. You can change the order of bootloaders used by entering the EFI/UEFI setup when first powering on the computer. Also see my guides on GRUB and the EFI System Partition.
  3. Update the GRUB configuration.
    grub-mkconfig -o /boot/grub/grub.cfg


For anyone who is interested in installing Arch, this method saves a lot of time and frustration. As you saw in the steps outlined above there was no configuration of the network, other than installation of several packages. One of the packages networkmanager which provides the NetworkManager service takes care of everything autmatically, obviating one of the most difficult parts of installing Arch from the normal installation environment.

blog comments powered by Disqus