Difference between revisions of "Beginners' guide"

From ArchWiki
Jump to: navigation, search
(replaced disk with drive, because it can also be an SSD)
(Select installation mirror: added more info and removed the note about "ftp.archlinux.org" because from what I can see, there are 4 mirrors that use this and I have a feeling that none of them are throttled at 50k)
Line 338: Line 338:
=== Select installation mirror ===
=== Select installation mirror ===
Before installing, you may want to edit {{ic|/etc/pacman.d/mirrorlist}} such that your preferred mirror is first. This copy of the mirrorlist will be installed on your new system by {{ic|pacstrap}} as well, so it's worth getting it right.
Before installing, you may want to edit the {{ic|mirrorlist}} file and place your preferred mirror first. A copy of this file will be installed on your new system by {{ic|pacstrap}} as well, so it's worth getting it right.
{{Note|ftp.archlinux.org is throttled at 50KB/s.}}
{{hc|# nano /etc/pacman.d/mirrorlist|2=
## Arch Linux repository mirrorlist
## Sorted by mirror score from mirror status page
## Generated on 2012-XX-YY
## Score: #, Country
Server = http://mirror.example.xyz/archlinux/$repo/os/$arch
* {{Keypress|Alt+6}} to copy a {{ic|Server}} line.
* {{Keypress|PageUp}} key to scroll up.
* {{Keypress|Ctrl+U}} to paste it at the top of the list.
If you want, you can make it the ''only'' mirror available by getting rid of everything else (using {{Keypress|Ctrl+K}}), but it's usually a good idea to have a few more, in case the first one goes offline.
{{Tip|Use the [http://www.archlinux.org/mirrorlist/ Mirrorlist Generator] to get an updated list for your country. HTTP mirrors are faster than FTP, because of something called [[Wikipedia:Keepalive|keepalive]]. With FTP, pacman has to send out a signal each time each time it downloads a package, resulting in a brief pause.}}
=== Install the base system ===
=== Install the base system ===

Revision as of 09:10, 27 August 2012

Tip: This is part of a multi-page article for The Beginners' Guide. Click here if you would rather read the guide in its entirety.


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

Change 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.

Template:Keypress activates it.

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.

Establish an internet connection

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...

# ping -c 3 www.google.com
PING www.l.google.com ( 56(84) bytes of data.
64 bytes from wb-in-f105.1e100.net ( icmp_req=1 ttl=50 time=17.0 ms
64 bytes from wb-in-f105.1e100.net ( icmp_req=2 ttl=50 time=18.2 ms
64 bytes from wb-in-f105.1e100.net ( icmp_req=3 ttl=50 time=16.6 ms

--- www.l.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 16.660/17.320/18.254/0.678 ms

If you get a ping: unknown host error, you will need to set up the network manually, as explained below.

Otherwise, move on to Prepare the storage drive.


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 need to know these settings:

  • Static IP address.
  • Subnet mask.
  • Gateway's IP address.
  • Name servers' (DNS) IP addresses.
  • Domain name (unless you're on a local LAN, in which case you can make it up).

Activate the connected Ethernet interface, e.g. for eth0:

# ip link set eth0 up

Add the address:

# ip addr add <ip address>/<subnetmask> dev <interface>

For example:

# ip addr add dev eth0

For more options, run man ip.

Add your gateway like this, substituting your own gateway's IP address:

# ip route add default via <ip address>

For example:

# ip route add default via

Edit resolv.conf, substituting your name servers' IP addresses and your local domain name:

# nano /etc/resolv.conf
nameserver 61.95.849.8
search example.com
Note: Currently, you may include a maximum of 3 nameserver lines.

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


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:
# iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
wlan0    unassociated  ESSID:""
         Mode:Managed  Channel=0  Access Point: Not-Associated
         Bit Rate:0 kb/s   Tx-Power=20 dBm   Sensitivity=8/0
         Retry limit:7   RTS thr:off   Fragment thr:off
         Power Management:off
         Link Quality:0  Signal level:0  Noise level:0
         Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
         Tx excessive retries:0  Invalid misc:0   Missed beacon:0

wlan0 is the available wireless interface in this example.

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:
# iwlist wlan0 scan
Cell 01 - Address: 04:25:10:6B:7F:9D
                    Frequency:2.417 GHz (Channel 2)
                    Quality=31/70  Signal level=-79 dBm
                    Encryption key:off
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s
                    Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s
                              36 Mb/s; 48 Mb/s; 54 Mb/s
  • If using WPA encryption:

Using WPA encryption requires that the key be encrypted and stored in a file, along with the ESSID, to be used later for connection via wpa_supplicant. Thus, a few extra steps are required:

For the purpose of simplifying and backup, rename the default wpa_supplicant.conf file:

# mv /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf.original

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:

# wpa_passphrase linksys "my_secret_passkey" > /etc/wpa_supplicant/wpa_supplicant.conf
Note: If the above fails with a bash: event not found error, it may be due to special characters (e.g. !) used in your wireless network name. In that case try the following:
# tee /etc/wpa_supplicant/wpa_supplicant.conf < <(wpa_passphrase linksys "passphrase")

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:

# cat ~/mykey | wpa_passphrase linksys > /etc/wpa_supplicant/wpa_supplicant.conf
Also, for security reasons, you may want to remove this file (~/mykey) after you configure /etc/wpa_supplicant.conf.

Check WPA Supplicant for more information and troubleshooting.

Note: 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 its permissions (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).
Encryption Command
No Encryption iwconfig wlan0 essid "linksys"
WEP w/ Hex Key iwconfig wlan0 essid "linksys" key "0241baf34c"
WEP w/ ASCII passphrase iwconfig wlan0 essid "linksys" key "s:pass1"
WPA wpa_supplicant -B -Dwext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
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 install and start networkmanager from the command-line 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 to confirm that you have successfully associated to the access point before continuing, e.g.:
# iwconfig wlan0

Output should indicate that 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.

xDSL (PPPoE), analog modem or ISDN

If you have a modem or a router in bridge mode, run:

# pppoe-setup

To use these settings and connect to your ISP, run:

# pppoe-start

For an analog modem, see Direct Modem Connection.

Behind a 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 the storage drive

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

Absolute beginners are encouraged to use a graphical partitioning tool. GParted is a good example, ran from a "live" Linux distribution such as Parted Magic, Ubuntu, Linux Mint, etc. Make sure to format the partitions with a filesystem (e.g. ext4, btrfs, etc) before rebooting.

If you have already done so, proceed to Mount the partitions.

Otherwise, see the following example.


The Arch Linux install media includes the following partitioning tools:

  • cfdisk – supports only MBR partition tables.
  • gdisk – supports only GPT partition tables.

This example uses cfdisk, but it can be easily followed using gdisk, which will allow for GPT partitioning.

Note: If you are installing to a USB flash key, see Installing Arch Linux on a USB key.
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 the list of advantages.
# cfdisk /dev/sda

The example system will contain a 15GB root (/) partition, a 1GB swap partition, and a /home partition for the remaining 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 drive. 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.

This is how the example will look:

Name    Flags     Part Type    FS Type           [Label]         Size (MB)
sda1    Boot       Primary     Linux                             15440       #root
sda2               Primary     Linux swap / Solaris              1024        #swap
sda3               Primary     Linux                             133000      #/home

Note that this operation will destroy data, 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 drive. After the partition table is written it will automatically exit cfdisk.

For more information on partitioning your storage drive, see Partitioning.

Note: If you have a UEFI motherboard you will need another partition to host the UEFI System partition. Read this article.

Simply partitioning is not enough. Use the mkfs utility to format the partitions with a filesystem. In this example configuration, we are using the ext4 filesystem for both root and home partitions.

# mkfs.ext4 /dev/sda1
# mkfs.ext4 /dev/sda3

Format and activate the swap partition:

# mkswap /dev/sda2
# swapon /dev/sda2

For more information on possible file system types, see File Systems.

Mount the partitions

Each partition is identified with a number suffix. For example, sda1 specifies the first partition of the first drive, while sda designates the entire drive.

To see the current drive identities and layout:

# fdisk -l

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

Do the same for any other separate partition (/boot, /var, etc), if you have any.

Select installation mirror

Before installing, you may want to edit the mirrorlist file and place your preferred mirror first. A copy of this file will be installed on your new system by pacstrap as well, so it's worth getting it right.

# nano /etc/pacman.d/mirrorlist
## Arch Linux repository mirrorlist
## Sorted by mirror score from mirror status page
## Generated on 2012-XX-YY

## Score: #, Country
Server = http://mirror.example.xyz/archlinux/$repo/os/$arch

If you want, you can make it the only mirror available by getting rid of everything else (using Template:Keypress), but it's usually a good idea to have a few more, in case the first one goes offline.

Tip: Use the Mirrorlist Generator to get an updated list for your country. HTTP mirrors are faster than FTP, because of something called keepalive. With FTP, pacman has to send out a signal each time each time it downloads a package, resulting in a brief pause.

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

Next we chroot into our newly installed system.

# arch-chroot /mnt
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


Console fonts and Keymap /etc/vconsole.conf LOCALIZATION
Locale /etc/locale.conf


Timezone /etc/timezone


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:

# nano /etc/hostname

you press Template:Keypress to either save changes or close the file. When prompted to save changes, press Template:Keypress or Template:Keypress, and Template:Keypress to write the file


Add your hostname in /etc/hostname. Example:


Set it to your liking. This is the name of your computer.

Add also your hostname in /etc/hosts, coinciding with the one specified in /etc/hostname as an alias, so that it looks like this:   localhost.localdomain   localhost myhostname
::1         localhost.localdomain   localhost myhostname
Note: ::1 is the IPv6 equivalent of
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.: 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.: media 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 – 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.
  • FONT – Available alternate console fonts reside in /usr/share/kbd/consolefonts/. The default (blank) is safe.
  • FONT_MAP – Defines the console map to load with the setfont program at boot. Possible maps are found in /usr/share/kbd/consoletrans, if needed. The default (blank) is safe.

See Console fonts and man vconsole.conf for more information.


Available time zones and subzones can be found in the /usr/share/zoneinfo/<Zone>/<SubZone> directories.

To view the available <Zone>, check the directory /usr/share/zoneinfo/:

# ls /usr/share/zoneinfo/

Similarly, you can check the contents of directories belonging to a <SubZone>:

# ls /usr/share/zoneinfo/Europe

Create a symbolic link /etc/localtime to your zone file /usr/share/zoneinfo/<Zone>/<SubZone> using this command:

# ln -s /usr/share/zoneinfo/<Zone>/<SubZone> /etc/localtime


# ln -s /usr/share/zoneinfo/Europe/Minsk /etc/localtime

If you are using systemd's timedated, you might wish to also edit the file /etc/timezone and write your Zone/Subzone.



Read man 5 timezone for more options.

The need for /etc/timezone might go away in the future [1].


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.:

en_US.UTF-8 UTF-8
Note: see the list of the locales and what they stand for here [2].

Then run:

# locale-gen
Setting up system-wide locale

Set locale preferences in /etc/locale.conf.



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.
  • UTC (recommended)
# hwclock --systohc --utc
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:

# Load virtio-net.ko at boot


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.

Note: For more in-depth information on network configration, visit configuring network and Wireless setup.

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:

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:


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

Static IP

If you need to use a static IP address, use this configuration:


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.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.

  • Exit the chroot environment:
# exit
  • Install the required packages:
# pacstrap /mnt wireless_tools netcfg
  • If you use WPA/WPA2 wireless encryption, install:
# pacstrap /mnt wpa_supplicant wpa_actiond
# pacstrap /mnt zd1211-firmware
  • Chroot back:
# arch-chroot /mnt
  • 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:
DAEMONS=(... net-auto-wireless ...)

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


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

For xDSL, analog modem (dial-up) and ISDN, see Direct Modem Connection for detailed instructions.

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:
  • mount the root partition to /mnt
  • mount the boot partition to /mnt/boot
  • run arch-chroot /mnt
and then proceed with the instructions bellow.
Note: For UEFI motherboards read the UEFI Bootloaders article.


Note: Syslinux does not yet support UEFI.

Install the syslinux package and edit syslinux.cfg to point to the right root partition. This step is vital. If it points to the wrong partition, Arch Linux will not boot.

# pacman -S syslinux
# nano /boot/syslinux/syslinux.cfg
LABEL arch
        APPEND root=/dev/sda3 ro

Change /dev/sda3 to reflect your root partition (if you partitioned your drive as we did in the example, your root partition is sda1). Do the same for LABEL archfallback.

Then type the following command to install the files (-i), mark the partition active with the boot flag (-a), and install the MBR boot code (-m):

# syslinux-install_update -iam

For more information on configuring and using Syslinux, see Syslinux.


For BIOS motherboards:

# pacman -S grub-bios
# grub-install --target=i386-pc --recheck /dev/sda

For UEFI motherboards:

# pacman -S grub-efi-x86_64
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck
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.
Note: GRUB is not the only UEFI bootloader available. See UEFI Bootloaders.

To prevent a (harmless) error message at boot time:

# mkdir -p /boot/grub/locale
# cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo

Create the grub.cfg file:

Tip: To automatically search for other operating systems on your computer, install os-prober before running the next command:
# pacman -S os-prober
# grub-mkconfig -o /boot/grub/grub.cfg

For more information on configuring and using GRUB, see GRUB.

Root password

Set the root password with:

# passwd

Unmount the partitions and reboot

Exit from the chroot environment:

# exit

Since the partitions are mounted under /mnt, we use the following command to unmount them.

# umount /mnt/{boot,home,}

Exit the install, and reboot:

# reboot
Tip: Be sure to remove the installation media and change the boot preference in your BIOS (if you changed it to install); otherwise you may boot back into the installation media!
Template:Beginners' Guide navigation