Installation

You are now presented with a shell prompt, automatically logged in as root.

Changing the keymap

Tip: This step is optional for the vast majority of users and it can be used at any point during the instalation. Useful only if you plan on writing in your own language in any of the configuration files, if you use diacritical marks in the wifi password, etc.

By default, the keyboard layout is set to us. If you have a non-US keyboard layout, run:

# loadkeys layout

...where layout can be fr, uk, be-latin1, etc. See here for a comprehensive list.

Don't worry if some of the letters show up as white squares or as other symbols. It's probably just the console font missing those glyphs. The glyph codes are correct and if you press the correct keys they will show up fine when (or if) you set up a graphical environment later.

Network setup

The dhcpcd network daemon is started automatically at boot and it will attempt to start a wired connection, if available. Try pinging a website to see if it was successful. And since Google is always on...

Wired

Follow this procedure if you need wired connectivity (Ethernet) during the installation process.

If your computer is connected to an Ethernet network, in most cases, you will have one interface, called eth0. If you have additional network cards (apart from the one integrated on the motherboard, for example), their name will follow the sequence eth1, eth2, etc.

You should now have a working network connection. If you do not, check the detailed Configuring Network page.

Wireless

Follow this procedure if you need wireless connectivity (WiFi) during the installation process.

The wireless drivers and utilities are now available to you in the live environment of the installation media. A good knowledge of your wireless hardware will be of key importance to successful configuration. Note that the following quick-start procedure executed at this point in the installation will initialize your wireless hardware for use in the live environment of the installation media. These steps (or some other form of wireless management) must be repeated from the actual installed system after booting into it.

Also note that these steps are optional if wireless connectivity is unnecessary at this point in the installation; wireless functionality may always be established later.

Note: The following examples use wlan0 for the interface and linksys for the ESSID. Remember to change these values according to your setup.

The basic procedure will be:

(optional) Identify the wireless interface:

# lspci | grep -i net

or, if using a USB adapter:

# lsusb

Ensure udev has loaded the driver, and that the driver has created a usable wireless kernel interface with /usr/sbin/iwconfig:

Note: If you do not see output similar to this, then your wireless driver has not been loaded. If this is the case, you must load the driver yourself. Please see Wireless Setup for more detailed information.

Bring the interface up with:

# ip link set wlan0 up

A small percentage of wireless chipsets also require firmware, in addition to a corresponding driver. If the wireless chipset requires firmware, you are likely to receive this error when bringing the interface up:

# ip link set wlan0 up

SIOCSIFFLAGS: No such file or directory

If unsure, invoke /usr/bin/dmesg to query the kernel log for a firmware request from the wireless chipset.

Example output from an Intel chipset which requires and has requested firmware from the kernel at boot:

$ dmesg | grep firmware

firmware: requesting iwlwifi-5000-1.ucode

If there is no output, it may be concluded that the system's wireless chipset does not require firmware.

Warning: Wireless chipset firmware packages (for cards which require them) are pre-installed under /usr/lib/firmware in the live environment (on CD/USB stick) but must be explicitly installed to your actual system to provide wireless functionality after you reboot into it! Package installation is covered later in this guide. Ensure installation of both your wireless module and firmware before rebooting! See Wireless Setup if you are unsure about the requirement of corresponding firmware installation for your particular chipset. This is a very common error.

If the ESSID has been forgotten or is unknown, use iwlist <interface> scan to scan for nearby networks:

Using wpa_passphrase, provide your wireless network name and WPA key to be encrypted and written to /etc/wpa_supplicant/wpa_supplicant.conf.

The following example encrypts the key "my_secret_passkey" of the "linksys" wireless network, generates a new configuration file (/etc/wpa_supplicant/wpa_supplicant.conf), and subsequently redirects the encrypted key, writing it to the file:

And if you are still having problems because of special characters in your network name or passphrase, you may try the following, where (~/mykey) is a temporary text file containing only your passphrase:

Note:/etc/wpa_supplicant/wpa_supplicant.conf is stored in plain text format. This is not risky in the installation environment, but when you reboot into your new system and reconfigure WPA, remember to change the permissions on /etc/wpa_supplicant/wpa_supplicant.conf (e.g. chmod 0600 /etc/wpa_supplicant/wpa_supplicant.conf to make it readable by root only).

Associate your wireless device with the access point you want to use. Depending on the encryption (none, WEP, or WPA), the procedure may differ. You need to know the name of the chosen wireless network (ESSID).

Note: The network connection process may be automated later by using the default Arch network daemon, netcfg, wicd, or another network manager of your choice.

Note: If connection to a wireless network is required, remember to select and install the wireless_tools package. Some wireless interfaces also need ndiswrapper and/or a specific firmware. If you plan to use WPA encryption, you will need wpa_supplicant. The Wireless Setup page will help you choose the correct packages for your wireless device. Also strongly consider installing netcfg, which will help you set up your network connection and profiles after you reboot into your new system.

Note: If you are booting from a live environment and have chrooted into your regular installation, you can start networkmanager from the commandline with /etc/rc.d/dbus start and /etc/rc.d/networkmanager start, list available connections with nmcli con list and use a connection with nmcli con up id NAME where NAME is the name of the connection.

After utilizing the appropriate association method outlined above, wait a few moments and confirm you have successfully associated to the access point before continuing, e.g.:

# iwconfig wlan0

Output should indicate the wireless network is associated with the interface.

Request an IP address with /sbin/dhcpcd <interface>, e.g.:

# dhcpcd wlan0

You should now have a working network connection. If you do not, check the detailed Wireless Setup page.

Proxy Server

If you are behind a proxy server, you will need to export the http_proxy and ftp_proxy environment variables. Click here for more information.

Prepare hard drive

Warning: Partitioning hard drives can destroy data. You are strongly cautioned and advised to backup any critical data before proceeding.

Note: Use any partitioning tool you prefer, such as GParted or other available tools. The current install media includes the disk partitioning tools cfdisk, gdisk, and parted.

If you have already partitioned your hard disk, verify current disk identities and layout by invoking /sbin/fdisk with the -l (lower-case L) switch.

At the root prompt enter:

# fdisk -l

Take note of the disk(s) and/or partition(s) to utilize for the Arch installation. Each partition is identified with a number suffix. Example: sda1 specifies the first partition of a drive while sda designates the entire drive. You may now proceed to Configure block devices, filesystems, and mountpoints.

Note: If you are not dual booting with windows then it is advisable to use GPT instead of MBR. GPT partitioning can only be done with gdisk or parted. Read GPT for list of advantages.

The remainder of this section shows an example configuration for a beginner's Arch installation and uses the fdisk partitioning tool. You are not required to use this configuration or this tool; it is presented here only as an example.

For more information on partitioning your hard disk, see Partitioning.

Manually partition hard drives

Note: The current install media includes the disk partitioning tools cfdisk, gdisk, and parted. gdisk supports only GPT partition tables, cfdisk supports only MBR partition tables and parted supports both. This example uses cfdisk, but can also easily be followed substituting in gdisk for cfdisk to allow use of the newer GPT partitioning.

Use cfdisk to open the selected target disk for manual partitioning (if you have an SSD drive other choices like gdisk or GNU Parted will be needed). This example uses the first hard disk, designated sda:

# cfdisk /dev/sda

The example system will contain a 15GB root (/) partition, a 1GB swap partition, and a /home partition for the remaining disk space. It is emphasized again that partitioning is a personal choice and this example is only for illustration.

Choose New -> 'Primary' and enter the desired size (15.44 GB in this example) for the root (/) filesystem. The partition will be put at the beginning of the disk. Select the Type and designate it as 83 Linux. The created / partition will appear as sda1. Thereafter select "Bootable" to flag root as bootable.

Next, create a second partition for swap. Select an appropriate size (~1 GB here) and specify the Type as 82 (Linux swap / Solaris). The created swap partition will appear as sda2.

The remaining space is used to create a third partition for the /home directory. Identify it as a primary partition and set the size. Select the Type as 83 Linux. The created /home partition will appear as sda3.

Be aware that this operation will destroy data on your disk so double check all of your work and make sure you are happy with the partition sizes as well as the partition table layout before continuing. If you would like to start over, you can simply select Quit to quit without saving changes and then restart cfdisk.

Once satisfied choose Write to finalize and write the partition table to the disk. After the partition table is written it will automatically exit cfdisk.

For more information on partitioning your hard disk, see Partitioning.

Note: Since the latest developments of the Linux kernel which include the libata and PATA modules, all IDE, SATA and SCSI drives have adopted the sdx naming scheme. This is perfectly normal and should not be a concern.

Note: If you are using (U)EFI you will most probably need another partition to host the UEFI System partition. Read this article.

Configure block devices, filesystems, and mountpoints

Use the mkfs utility to format the partitions into filesystems. In this example configuration, we are using the ext4 filesystem for both root and home partitions.

Mount the partitions

Mount the root partition on /mnt.

# mount /dev/sda1 /mnt

Create a directory for the /home partition and mount it:

# mkdir /mnt/home && mount /dev/sda3 /mnt/home

Select installation mirror

Before installing, you may want to edit /etc/pacman.d/mirrorlist such that your preferred mirror is first. This copy of the mirrorlist will be installed on your new system by pacstrap as well, so it's worth getting it right.

Note: ftp.archlinux.org is throttled to 50KB/s.

Install the base system

The base system is installed using the pacstrap script. A minimal system requires the base package group; also installing the base-devel package group at this time is highly recommended. If you require other packages at this time, simply add them to the pacstrap command.

# pacstrap /mnt base base-devel

base: Software packages from the [core] repo to provide the minimal base environment.

base-devel: Extra tools from [core] such as make, and automake. Most beginners should choose to install it, as it will likely be needed to expand your new system. The base-devel group will be required to install software from the Arch User Repository.

This will give you a basic Arch system. Other packages can be installed later using pacman.

Note: If pacman fails to verify your packages, check your system time. If the system date is invalid (e.g. it shows year 2010), signing keys will be considered expired (or invalid), signature checks on packages will fail and installation will be interrupted. Make sure to correct the system time, either by doing so manually, or with ntp client, and retry running the pacstrap command. Refer to Time page for more information on correcting system time.

Generate fstab

Generate an fstab file with the following command. (If you prefer to use UUIDs or labels, add the -U or -L option, respectively.)

# genfstab -p /mnt >> /mnt/etc/fstab

Note: It is a good idea to check the auto-generated fstab file (/mnt/etc/fstab) before continuing. If you encounter errors running genfstab or later in the install process, do not run genfstab again; just edit the fstab file. Also, only the "/" partition needs "1" for the last field. Everything else should have "2" or "0" (see #Field definitions).

Chroot into system

Tip: If you forgot to install packages with the pacstrap script, you may install them after the chroot with pacman -S <package>.

Configure the system

Tip: Closely following and understanding these steps is of key importance to ensure a properly configured system.

At this stage of the installation, you will configure the primary configuration files of your Arch Linux base system.

Configuration files

/etc/rc.conf is the configuration file for Arch's initscripts, and in the past used to also contain configurations for other parts of the system. Unless you are using an alternate init system like systemd, /etc/rc.conf configures which daemons to start during boot-up and some networking and storage information.

Note: Using the legacy configuration options in /etc/rc.conf for system configuring still works (for now) with the default init system, but the new configuration files take precedence and using them is recommended. The new files will also work for configuring systemd.

Configuration

Configuration file(s)

Legacy /etc/rc.conf section

Hostname

/etc/hostname

/etc/hosts

NETWORKING

Console fonts and Keymap

/etc/vconsole.conf

LOCALIZATION

Locale

/etc/locale.conf

/etc/locale.gen

LOCALIZATION

Timezone

/etc/timezone

/etc/localtime

LOCALIZATION

Hardware clock

/etc/adjtime

LOCALIZATION

Kernel modules

/etc/modules-load.d/

HARDWARE

Daemons

/etc/rc.conf

DAEMONS

Wired Network

/etc/rc.conf

NETWORKING

Configuration files can simply be created if they do not exist already and you wish to change the defaults. During this procedure you use the editor nano. For example to edit your hostname file in /etc/hostname you'll type:

Warning: This format, including the "localhost" and your actual host name, is required for program compatibility. Errors in this entry may cause poor network performance and/or certain programs to open very slowly, or not work at all.

If you use a static IP, add another line using the syntax: <static-IP> <hostname.domainname.org> <hostname> e.g.:

192.168.1.100 myhostname.domain.org myhostname

Tip: For convenience, you may also use /etc/hosts aliases for hosts on your network, and/or on the Web, e.g.:

192.168.1.90 media
192.168.1.88 data

The above example would allow you access a media and data server on your network by name and without the need for typing out their respective IP addresses.

Console fonts and keymap

To edit vconsole.conf:

# nano /etc/vconsole.conf

KEYMAP=us
FONT=
FONT_MAP=

KEYMAP – If you want, you can use the one from the beginning of the install process: Changing the keymap, but the default (us) is fine for the vast majority of keyboards. Please note that this setting is only valid for your TTYs, not any graphical window managers or Xorg.

Locale

Enable locales

The /usr/sbin/locale-gen command reads from /etc/locale.gen to generate specific locales. They can then be used by glibc and any other locale-aware program or library for rendering text, correctly displaying regional monetary values, time and date formats, alphabetic idiosyncrasies, and other locale-specific standards:

# nano /etc/locale.gen

By default /etc/locale.gen is an empty file with commented documentation. Once edited, the file remains untouched. locale-gen runs on every glibc upgrade, generating all the locales specified in /etc/locale.gen.

Choose the locale(s) you need by removing the # in front of the lines you want, e.g.:

Setting up system-wide locale

Setting only LANG should be enough. It acts as the default value for all other locale settings.

You can override parts of a locale using LC_* variables – for example, setting LC_COLLATE=C disables locale-aware sorting, but keeps all other features. You can see all LC_* variables by running locale.

LC_ALL overrides all other settings. Because of that, you cannot set it from locale.conf. It is recommended that you use LC_ALL only when needed – do not put it in your default environment.

For the ramdisk creation that will follow later, you should now set the LANG variable. Example:

# export LANG=en_US.UTF-8

Hardware clock time

This is set in /etc/adjtime. Set the hardware clock mode uniformly between your operating systems on the same machine. Otherwise, they will overwrite the time and cause clock shifts (which can cause time drift correction to be miscalibrated).

You can generate /etc/adjtime automatically by using one of the following commands.

Note: Make sure HARDWARECLOCK in /etc/rc.conf is not set when using this method.

Note: Using UTC for the hardware clock does not mean time will be displayed in UTC in software.

localtime (discouraged) - Used by default in Windows

# hwclock --systohc --localtime

Warning: Using localtime may lead to several known and unfixable bugs. However, there are no plans to drop support for localtime.

Setting time in a Windows dual boot setup

If you are setting up a dual-boot with Windows on your system, you have two options:

Recommended: Set both Arch Linux and Windows to use UTC (a quick registry fix is needed, see this page for instructions). Also, be sure to prevent Windows from synchronizing the time with the Internet, as it will make the hardware clock use localtime again. If you want such functionality (NTP sync), you should use ntpd on your Arch Linux installation instead.

Not recommended: Set Arch Linux to localtime and later (in Configure the system) remove hwclock from the DAEMONS array in /etc/rc.conf (Windows will take care of hardware clock corrections).

Kernel modules

Tip: Normally all needed modules are automatically loaded by udev, so you will rarely need to add something here. Only add modules that you know are missing.

Edit /etc/modules-load.d/ to configure kernel modules to load during boot in a static list. Each configuration file is named in the style of /etc/modules-load.d/<program>.conf. The configuration files should simply contain a list of kernel module names to load, separated by newlines. Empty lines and lines whose first non-whitespace character is # or ; are ignored. Example:

/etc/modules-load.d/virtio-net.conf

# Load virtio-net.ko at boot
virtio-net

Daemons

Tip: The daemons line need not be changed at this time, but it is useful to explain what daemons are, as they will be addressed later in this guide.

Daemons are programs that run in the background, waiting for events to occur and offering services. A good example is a web server that waits for a request to deliver a page (e.g.: httpd) or an SSH server waiting for a user login (e.g.: sshd). While these are full-featured applications, there are also daemons whose work is not that visible. Examples are a daemon which writes messages into a log file (e.g. syslog, metalog), and a daemon which provides a graphical login (e.g.: gdm, kdm).

These programs can be added to the DAEMONS line in /etc/rc.conf and will be started when the system boots. The DAEMONS array simply list the names of those scripts contained in /etc/rc.d/ which are to be started during the boot process, and the order in which they start.

DAEMONS=(network @syslog-ng netfs @crond)

If a script name is prefixed with a bang (!), it is not run.

If a script is prefixed with an "at" symbol (@), it is run in the background; the startup sequence will not wait for successful completion of this daemon before continuing to the next (this may shorten system boot time). Do not background daemons that are needed by other daemons. For example mpd depends on network, so backgrounding network may cause mpd to break.

Edit this array whenever new system services are installed, if starting them automatically during boot is desired.

Tip: A list of available services (and their running status) can be found using this command: rc.d list.

Configure the network

You need to configure the network again, but this time for your newly installed environment. The procedure and prerequisites are very similar to the one described above, except we are going to make it persistent and automatically run at boot.

Wired Network

If you only use a single wired network connection, you can use the network daemon, a simple solution for both dynamic and static IP addressing. First, insure that the daemon is listed in the DAEMONS array:

/etc/rc.conf

DAEMONS=(... network ...)

Then configure the NETWORKING section of /etc/rc.conf as follows, depending on your IP addressing type.

Dynamic IP (DHCP)

Assuming the network interface to activate at start is eth0, use this configuration:

interface=eth0
address=
netmask=
gateway=

Your DNS server addresses will be automatically filled in by the dhcpcd daemon.

Static IP

You will also need to add your name servers' (DNS) IP addresses and your local domain name to your /etc/resolv.conf like this:

nameserver 61.23.173.5
nameserver 61.95.849.8
search example.com

Tip: The network daemon is suitable for systems connecting wired to a single network. For multiple network configurations (e.g. using a laptop), it is recommended to use a network manager program, such as netcfg, which has been designed to manage both wired and wireless connections.

Wireless network

The network daemon is not sufficient to handle Wireless networking, which requires additional configuration. You will need to install other programs to configure and manage wireless network profiles, such as netcfg. NetworkManager and Wicd are popular alternatives.

Create a network profile for your wireless connection in the /etc/network.d directory:

Copy and rename a configuration template from /etc/network.d/examples/ to /etc/network.d/mynetwork (mynetwork being an example; the name is not a network setting and does not need to match the wireless network name (SSID)). These templates are adapted to the type of your wireless connection, such as wireless-wep or wireless-wpa. See Netcfg#Configuration for a list of available templates and their usage.

Set INTERFACE to the correct wireless interface. This can be checked with iwconfig.

Ensure the ESSID and KEY (passkey) are set correctly for wireless connections. Typos in these fields are common errors.

Note that WEP string keys (not hex keys) must be specified with a leading s: (e.g. KEY="s:somepasskey").

For WPA-Personal, it is possible to specify the passkey in plain text or as an encoded hex.

Add net-auto-wireless to the DAEMONS array in /etc/rc.conf:

/etc/rc.conf

DAEMONS=(... net-auto-wireless ...)

And specify the desired wireless interface with the WIRELESS_INTERFACE variable in /etc/conf.d/netcfg:

/etc/conf.d/netcfg

WIRELESS_INTERFACE="wlan0"

It is also possible to define a list of network profiles that should be automatically connected with the AUTO_PROFILES variable in /etc/conf.d/netcfg. If AUTO_PROFILES is not set, all wireless networks will be tried.

Note:Netcfg also provides other daemons to connect automatically, including both wireless and wired networking. Refer to the netcfg article for more information.

Direct Modem Connection

Create an initial ramdisk environment

Configure /etc/mkinitcpio.conf as needed (see mkinitcpio) and create an initial ramdisk with

# mkinitcpio -p linux

Tip: Most users can simply accept the defaults provided in the /etc/mkinitcpio.conf file.

Install and configure a bootloader

Install either Syslinux or GRUB. There is no need to install both. Syslinux is considered to be easier to understand and to configure because it has only one configuration file. In spite of GRUB's many configuration files (for which the recommended method is to re-generate the grub.cfg file each time you change anything in one of those files), using GRUB could make it more comfortable to transition to BURG in the future, a much more customizable GRUB fork. Of course, Syslinux can also be customized. (*)

Note: If you have a separate boot partition, first check with lsblk /dev/sda to make sure it is mounted. If you don't see a /boot mountpoint for your designated boot partition, then you should reboot the computer and from the Arch LiveCD:

Note: In rare cases you may need to use grub-efi-i386 instead; on older macs for instance, where Apple hardware uses some kind of mixture between UEFI v1.x and v2.x. In such cases, GRUB would only work with 32 bit modules, even though the CPU may be 64 bit.