**Article summary**

General installation documentation for the Arch Linux distribution.

This guide is only valid for release 2010.05 or newer.
This guide is maintained in [aif git](http://projects.archlinux.org/?p=aif.git)  
Git pull requests, patches, comments are welcome on the arch
[releng mailing list](http://www.archlinux.org/mailman/listinfo/arch-releng)

This guide is available in the /usr/share/aif/docs directory of release media and on
[The arch wiki](http://wiki.archlinux.org/index.php/Official_Arch_Linux_Install_Guide)

**Related articles**

[Beginners Guide](http://wiki.archlinux.org/index.php/Beginners_Guide) (If you are new to Arch)

#  Introduction

##  What is Arch Linux?

Arch Linux is an independently developed i686 and x86_64 optimized Linux
distribution that was originally based on ideas from CRUX.   
Development is focused on a balance of simplicity, elegance, code-correctness
and bleeding edge software.  
Its lightweight and simple design makes it easy to extend and mold into
whatever kind of system you're building.

##  License

Arch Linux and scripts are copyright

2002-2007 Judd Vinet

2007-2010 Aaron Griffin

and are licensed under the GNU General Public License (GPL).

#  Pre-Installation

## Architectures

Arch Linux is optimized for i686 and x86_64 processors and therefore will not
run on any lower or incompatible generations of x86 CPUs (i386, i486 or i586).
A Pentium Pro, Pentium II or AMD Athlon (K7) processor or higher is required.
(technically, cpu's without the cmov instruction such as AMD K6 and via C3 are also
i686, but we use gcc and it uses cmov instructions)
Before installing Arch Linux, 
you should decide which installation method you would like to use.

## Available images

Arch Linux provides isofiles which can be written to CD-roms or to disks and usb sticks

The Isolinux bootloader is used.
There are two variants of each installation medium which only differ
in terms of supplied packages.

  * The "core" images contain a snapshot of the core packages.  
    These images are best suited for people who have an internet connection
    which is slow or difficult to set up.

  * The "net" images contain no packages at all,
    and will always use the network to install packages.

Both types of images can be used to perform a netinstall, yielding an up-
to-date system, although with a "core" image you don't have to.
All images can also be used as fully functioning recovery environments.
The images run like any regular installed Arch Linux system.  
In fact, they're exactly the same, just installed to a CD or USB image instead
of a hard disk.   
They include the entire "base" package set, as well as various
networking utilities and drivers and have the aif package installed.  
If there's something else you happen to need
at runtime, just get your Internet connection up and install it using pacman.  
A short pacman command reference is available at the end of this document.

All images are available in a i686, x86_64 or dual variant. The latter contains both and lets you choose
an architecture at boot.

## AIF, the installation tool

Arch Linux uses AIF aka 'Arch Linux Installation Framework' to perform
installations.  
This tool - written in bash - consists of some libraries to perform various
functions (installing packages, setting up disks etc) and some so called
procedures which use these libraries to provide an easy means to do
an installation or to smaller related tasks ('partial procedures').
These procedures are shipped by default:

* interactive: An interactive installation procedure, which asks you some
               questions, guides you through an installation and helps you
               configuring the target system by automatically changing some
               settings for you depending on what you did earlier
               (eg network settings)  
               The installed system will initially have only a customisable
               set of "base" packages installed with whatever utilities
               and drivers you need to get online.  
               Then once you've
               successfully booted the installed system, you'll run a full
               system upgrade and install any other packages you want.
               (aliased as `/arch/setup`)
* automatic:   An automated, deploy-tool-alike procedure designed for
               low-to zero interactivity.  
               uses profiles for configuration of the target system.  
               See /usr/share/aif/examples/ for example profile files.
               The examples implement quite generic scenarios but you're
               free to change them how you like to install extra packages,
               do configuration tweaks, etc.
* base:        basic, little-interactivity installation with some
               common defaults.  
               This procedure is used by the others to inherit from,
               it is NOT meant to be used directly by end users
* partial-configure-network: exposes the network configuration step from
                             the interactive procedure, to help you setup
                             the network in the live environment
* partial-disks: Process disk subsystem or do a rollback
* partial-keymap: change your keymap/console font settings. (aliased as `km`)

The benefit of procedures such as partial-keymap and
partial-configure-network over direct usage of tools such as loadkeys or
ifconfig is that when running the interactive procedure, you will get asked
if you want to apply your settings to the config files of the target system.

If you want to go further, you can also:

* write your own procedures from scratch or by overriding certain parts of
  other procedures
* write your own libraries, to provide new, reusable functionality
* create your own configs for the procedures that support them (eg automatic)

For more information, consult the readme of AIF.

##  Acquiring Arch Linux

  * You can download Arch Linux from any of the mirrors listed on the
[download][45] page.

  * You may also purchase an installation CD from Archux, OSDisc or LinuxCD
and have it shipped anywhere in the world.

   [45]: http://www.archlinux.org/download/
(http://www.archlinux.org/download/)

##  Preparing the Installation Media

  * Download your chosen medium through torrent (preferred) or from your favorite mirror.

  * Download iso/<release>/sha1sums.txt

  * Verify the integrity of the .iso image using sha1sum:


     sha1sum --check sha1sums.txt

     archlinux-XXX.iso: OK


  * Burn the ISO image to a CD-R or CD-RW using any software of your choice, or if using a USB mass storage device, such as a thumb drive,
using dd or similar raw-write software:


     dd if=archlinux-XXX.iso of=/dev/sdX


Make sure to use /dev/sdX and not /dev/sdX1.  
This command will irrevocably delete all files on your USB stick,
so make sure you don't have any important files on it before doing this.


# Installing Arch Linux

##  Using the Install Media

### Pre-boot

Make sure your BIOS is set in a way to allow booting from your CD-ROM or USB
device. Reboot your computer with the Arch Linux Installation CD in the drive or
the USB stick plugged in the port. Once the installation medium has started
booting, you will see the Arch Linux logo and an Isolinux menu waiting for your
selection. Most likely you can just hit enter at this point.


### Post-boot
At the end of the boot procedure, you should be at a login prompt with some
simple instructions at the top of the screen.  
You should login as root. At this point you can
optionally perform manual preparations and commence the actual installation

* If you prefer a non-US keymap or specific consolefont, type `km` to change
  any of these.
* If for some reason you need network access before starting the installer
  (the interactive procedure lets you configure the network for NET
  installations)  
  you can type `aif -p partial-configure-network`

For both items, changed settings will be remembered to be optionally applied
to the target system when using the interactive procedure.

There is also an `arch` login which can be usefull if you want to do things
as non-privileged user.  
Most people don't need this.

You will find that everything you need to perform this installation
(a copy of this guide, aif README, shortcuts to common aif procedures)
can be found in /arch

## Using PXE (Network booting)

### Server

On another machine running (Arch) Linux (live or normal),  
you need to install and configure a dhcp and tftpd daemon.
Dnsmasq is a fine choice which can do both.  
You also need a nbd (network block device) daemon so the client can load 
the needed files.

You can find more info on the wiki
[Community contributed documentation](http://wiki.archlinux.org/index.php/Archiso-as-pxe-server)

(this section could be a bit more elaborate)
### Client

Configure your system to try network booting (pxe) first.
On most systems this happen by default.
You will get an IP from the server and load all needed files over the network
automatically.  Once booted, you can proceed as normal.

## Performing the installation
You can either use the interactive procedure or the automatic one.  
See section [2.3 AIF, the installation tool](#Aif_the_installation_tool)
or the AIF readme for more info.

### Interactive Installation Procedure

Type `/arch/setup` (or `aif -p interactive -d -l`, which is the same) to start.

After the welcome message and disclaimer you will be presented with the main
installation menu. You can use UP and DOWN arrow to navigate menus. Use TAB to
switch between buttons and ENTER to select. At any point during the install
process, you can switch to your 7th virtual console (ALT-F7) to view the
output from the commands the setup is running. Use (ALT-F1) to get back to
your first console where the installer is running, and any F-key in between if
you need to open another console to intervene manually for any reason.

####  Select Source

As a first step you must choose repositories where to install Arch Linux from.
If you have a fast Internet connection, you might prefer enabling network
mirrors to ensure you get the latest packages instead of using the potentially
outdated CD or USB image contents.
If you're using a NET image you don't have much choice ;-).
You can also mount your own repositories in the filesystem tree manually.
If you are using a core image and don't have a fast internet connection, you
probably want to use the included core archive, unless it's very outdated.
The only requirement is you select a core repository.
You can combine local and remote repositories but only do this if you know what
you're doing.  (combining an older core archive with newer packages from a
network mirror will result in broken packages)

##### Optional: only when using network mirror

######  Setup Network

The entry Setup Network will allow you to install and configure your
network device. If you are using a wireless device you will still need to use
the usual utilities to configure it manually, in which case this part of the
installer isn't much use to you. A list of all currently available network
devices is presented to you. If no ethernet device is available yet, or the
one you wish to use is missing, either hit OK and go on to probe for it, or
switch to another console and load the module manually. If you still can't
configure your network card, make sure it's physically been properly
installed, and that it is supported by the Linux kernel.

When the correct module is loaded, and your desired network card is listed,
you should select the ethernet device you want to configure and you will be
given the option to configure your network with DHCP. If your network uses
DHCP, hit YES and let the installer do the rest. If you select NO, you will be
asked to enter the networking information manually. Either way, your network
should be successfully configured, and you may check connectivity using
standard tools like ping on another console.

###### Choose Mirror

Choose Mirror will allow you to choose the preferred mirror to download the
packages that will be installed in your Arch Linux system. You should choose a
mirror situated near where you live, in order to achieve faster download
speed. At some later point of the installation, you will be given the option
to use the mirror you choose at this step, as the default mirror to download
packages from.

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

These menu entries are only available when choosing FTP Installation, for
rather obvious reasons. After successful preparation, choose Return to Main
Menu.

### Set Editor

Allows you to change your editor preference.
You'll have the choice between nano and vi (and pico/joe/vim if you install those
in a separate console).  You can skip this menu, but you will be asked again when
needed.

####  Set Clock

Set Clock will allow you to set up your system clock and date.
First you have to say if your hardwareclock is (or should be) in UTC or
localtime.
UTC is preferred, but if you have an OS installed which cannot handle UTC
BIOS times correctly -like Windows- you'll have to choose localtime.
Next the setup will want you to select your continent/country (timezone),
and allow you to set the date and time (for which you can also use
[NTP](http://www.ntp.org/) if your network is up)

####  Prepare Hard Drive

Prepare Hard Drive will lead you into a submenu offering two alternatives of
preparing your target drive(s) for installation, and a means to undo changes if
you want to retry.

* Auto-prepare will automatically partition (and fully overwrite) one disk
  of your choice.
  It creates a simple layout with a /boot, swap, / and /home partition where
  you have some control over the used filesystems and sizes thereof.
* If you wish/need more control you can manually partition one or more hard
  disks and then manually specify a complete setup using the partitions on your
  disks.  You can also use things such as lvm and dm_crypt here.
* The Rollback feature will check which filesystems were created by either
  of these methods, unmount the relevant filesystems and destroy lvm and
  dm_crypt volumes if they were created by you.  You need this option if you
  want to undo or redo a certain scheme.  You will be prompted for this if
  you forget.

Notes:

* AIF can help you set up new dm_crypt and lvm volumes, but not (yet) softraid.
* AIF currently doesn't help you creating volumegroups that span multiple
  physical volumes.  (if you need this -unlikely- : use vgcreate)
* AIF supports reusing filesystems, but only if it can find the blockdevice.
  If you want to reuse a filesystem that is on top of lvm/dm_crypt/softraid,
  you'll need to bring up the volumes yourself.

#####  Auto-Prepare

Auto-Prepare will automatically partition a hard drive of your choice
into a /boot, swap, a root partition, and a /home and then create filesystems
on all four. These partitions will also be automatically mounted
in the proper place. To be exact, this option will create:

  * 32 MB ext2 /boot partition
  * 256 MB swap partition
  * 7.5 GB root partition
  * /home partition with the remaining space

You will be prompted to modify the sizes to your requirements, but /home will
always use the remaining disk space.  You can customize the used filesystem
for /boot and for both of root and /home at once.

**AUTO-PREPARE WILL ERASE ALL DATA ON THE CHOSEN HARD DRIVE!**

##### Manually partition Hard Drives

Here you can select the disk(s) you want to partition, and you'll be
dropped into the cfdisk program where you can freely modify the partitioning
information until you [Write] and [Quit]. You will need at least a root
partition to continue the installation.

##### Manually configure block devices, filesystems and mountpoints

In this menu all recognized partitions are listed.  On top of these you can
create new filesystems.
You should be aware of these things:

* All of this is just a model, everything will only be set up after you confirm.
* Not all blockdevices support all filesystems (Eg you cannot put an LVM
  volumegroup on something other then a LVM physical volume).
  The installer will automatically filter the list of possible filesystems
  and even select the one automatically for you if there's only one option.
* Some filesystems will cause new blockdevices to be created.
  This is the case for dm_crypt and lvm volumes.
  You will see them appear in the model and you can use them to put another
  filesystem on top of it.
* When asked for (optional) options to mkfs tools, pass
  arguments which will literally be added when calling mkfs.
  For example, to disable the journal on ext filesystems:
  * don't do: `^has_journal`
  * but rather: `-O ^has_journal`
* Use 'dev' for the most straightforward way to refer to your disks in config
  files such as fstab and the grub menu.lst (plain devicefiles).
  Kernel updates can cause devices to be renamed, which can cause issues.
  'uuid' is a hassle-free (albeit a bit ugly), solid way to refer to your
  disks, 'label' will use filesystem labels - which you can choose - and
  fallback to 'dev' if needed.

When filesystems setup is complete, you can select 'Done'.  At this point a
check will be run which will tell you any critical errors (such as no root
filesystem) and/or give you some warnings which you may ignore (like no
swap).
If anything is found, you can go back to fix these issues, or continue at
which point everything will be setup the way you asked.

For example, if you want a setup that uses LVM on top of dm_crypt, you would:

* make sure that you have a 2 partitions: a small one for the unencrypted
  boot (about 100M) and one for the rest of the (encrypted) system.
  (do this in "Manually partition hard drives")
* on your /dev/sdX1, make an ext2 filesystem with mountpoint /boot
* on your /dev/sdX2, make a dm_crypt volume, with label sdX2crypt
  (or whatever you want)
* /dev/mapper/sdX2crypt will appear.  Put a LVM physical volume on this
* /dev/mapper/sdX2crypt+ appears.  This is the representation of the
  physical volume.  Put a volumegroup on this, with label cryptpool
  (or whatever you want)
* /dev/mapper/cryptpool appears.  On this volumegroup you are able to put
  multiple logical volumes.  Make 2:
  * one with size 5G: label this cryptroot
  * one with size 10G: label this crypthome
* 2 new volumes appear:
  * /dev/mapper/cryptpool-cryptroot: on this blockdevice, you can put your
    root filesystem, with mountpoint /.
  * /dev/mapper/cryptpool-crypthome is the blockdevice on which you can put
    the filesystem with mountpoint /home.
* If you want swapspace, make a logical volume for swap and put
  a swap volume on it.
* That's it! If you select 'done' it should process the model and create
  your disk setup the way you specified.
  The cool part is that you can pick relatively small
  values for your volumes to start with, and if you need more space later
  you can grow the logical volume and the filesystem on top of it.


##### Rollbacks

The rollback function will do everything necessary to "undo" changes you
made in the 'Manually configure block devices, filesystems and mountpoints'
or 'Autoprepare' step, to allow you completely redo your setup.

It will:

* unmount filesystems from the target system
* destroy/undo lvm and dm_crypt volumes.

It will not:

* undo any partitioning
* remove 'simple' filesystems such as ext3, xfs, swap etc.

The reason for this is simple: only things that might disturb subsequent
hard disk preparations need to be undone.

####  Select Packages

Select Packages will let you select the packages you wish to install from the
CD, USB or your NET mirror. First, you are prompted to select a bootloader
package (the bootloader will be configured later on in the "Install Bootloader"
stage). After this, you can select package groups from which you'd generally
like to install packages, then fine-tune your coarse selection by (de)selecting
individual packages from the groups you have chosen using the space bar. It is
recommended that you install all the "base" packages, but not anything else at
this point. The only exception to this rule is installing any packages you need
for setting up Internet connectivity.

Once you're done selecting the packages you need, leave the selection screen
and continue to the next step.

####  Install Packages

Install Packages will now install the base system and any other packages you
selected with resolved dependencies onto your harddisk.

####  Configure System

Configure System does multiple things:

* automatically preseed some configuration files (eg grub's menu.lst,
  mkinitcpio.conf's HOOKS, keymap settings in rc.conf, pacman mirror etc)
* preseed some configuration files after you agreed. (eg network settings)
* allow you to manually change important config files for your target system.
* allow you to set the root password for the target.
* automatically run some tools which use the updated configuration (locales,
  mkinitcpio, time settings, etc)

**Configuration Files**

These are the core configuration files for Arch Linux.
If you need help configuring a specific service, please read the appropriate
manpage or refer to any online documentation you need.
In many cases, the Arch Linux [Wiki][46] and
[forums][47] are a rich source for help as well.

   [46]: http://wiki.archlinux.org/ (http://wiki.archlinux.org/)

   [47]: http://bbs.archlinux.org/ (http://bbs.archlinux.org/)

  * /etc/rc.conf
  * [ /etc/fstab][48]
  * /etc/mkinitcpio.conf
  * /etc/modprobe.d/modprobe.conf
  * /etc/resolv.conf
  * /etc/hosts
  * /etc/locale.gen
  * /etc/pacman.d/mirrorlist
  * /etc/pacman.conf
  * /etc/crypttab

   [48]: http://wiki.archlinux.org/index.php/Fstab (Fstab)



**/etc/rc.conf**

This is the main configuration file for Arch Linux. It allows you to set your
keyboard, timezone, hostname, network, daemons to run and modules to load at
bootup, profiles, and more.

**LOCALE:** This sets your system language, which will be used by all i18n-
friendly applications and utilities. See locale.gen below for available
options. This setting's default is fine for US English users.

**HARDWARECLOCK:** Either UTC if your BIOS clock is set to UTC, or localtime
if your BIOS clock is set to your local time. If you have an OS installed
which cannot handle UTC BIOS times correctly, like Windows, choose localtime
here, otherwise you should prefer UTC, which makes daylight savings time a
non-issue and has a few other positive aspects.

**USEDIRECTISA:** If set to "yes" it tells hwclock to use explicit I/O
instructions to access the hardware clock. Otherwise, hwclock will try to use
the /dev/rtc device it assumes to be driven by the rtc device driver. This
setting's default "no" is fine for people not using an ISA machine.

**TIMEZONE:** Specifies your time zone. Possible time zones are the relative
path to a zoneinfo file starting from the directory /usr/share/zoneinfo. For
example, a German timezone would be Europe/Berlin, which refers to the file
/usr/share/zoneinfo/Europe/Berlin. If you don't know the exact name of your
timezone file, worry about it later.

**KEYMAP:** Defines the keymap to load with the loadkeys program on bootup.
Possible keymaps are found in /usr/share/kbd/keymaps. Please note that this
setting is only valid for your TTYs, not any graphical window managers or X!
Again, the default is fine for US users.

**CONSOLEFONT:** Defines the console font to load with the setfont program on
bootup. Possible fonts are found in /usr/share/kbd/consolefonts.

**CONSOLEMAP:** Defines the console map to load with the setfont program on
bootup. Possible maps are found in /usr/share/kbd/consoletrans. Set this
to a map suitable for the appropriate locale (8859-1 for Latin1, for example)
if you're using an UTF-8 locale above, and use programs that generate 8-bit
output. If you're using X11 for everyday work, don't bother, as it only
affects the output of Linux console applications.

**USECOLOR:** Enable (or disable) colorized status messages during boot-up.

**MOD_AUTOLOAD:** If set to "yes", udev will be allowed to load modules as
necessary upon bootup. If set to "no", it will not.

**MODULES:** In this array you can list the names of modules you want to load
during bootup without the need to bind them to a hardware device as in the
modprobe.conf. Simply add the name of the module here, and put any options
into modprobe.conf if need be. Prepending a module with a bang ('!') will
blacklist the module, and not allow it to be loaded.

**USELVM:** Set to "yes" to run a vgchange during sysinit, thus activating any
LVM groups

**HOSTNAME:** Set this to the hostname of the machine, without the domain
part. This is totally your choice, as long as you stick to letters, digits and
a few common special characters like the dash.

**INTERFACES:** Here you define the settings for your networking interfaces.
The default lines and the included comments explain the setup well enough. If
you use DHCP, 'eth0="dhcp"' should work for you. If you do not use DHCP just
keep in mind that the value of the variable (whose name must be equal to the
name of the device which is supposed to be configured) equals the line which
would be appended to the ifconfig command if you were to configure the device
manually in the shell.

**ROUTES:** You can define your own static network routes with arbitrary names
here. Look at the example for a default gateway to get the idea. Basically the
quoted part is identical to what you'd pass to a manual route add command,
therefore reading man route is recommended or simply leave this alone.

**[ NET_PROFILES][49]:** Enables certain network profiles at bootup. Network
profiles provide a convenient way of managing multiple network configurations,
and are intended to replace the standard INTERFACES/ROUTES setup that is still
recommended for systems with only one network configuration. If your computer
will be participating in various networks at various times (eg, a laptop) then
you should take a look at the /etc/network-profiles/ directory to set up some
profiles. There is a template file included there that can be used to create
new profiles. This now requires the netcfg package.

   [49]: /index.php/Network_Profiles (Network Profiles)

**DAEMONS:** This array simply lists the names of those scripts contained in
/etc/rc.d/ which are supposed to be started during the boot process. If a
script name is prefixed with a bang (!), it is not executed. If a script is
prefixed with an "at" symbol (@), then it will be executed in the background,
ie. the startup sequence will not wait for successful completion before
continuing. Usually you do not need to change the defaults to get a running
system, but you are going to edit this array whenever you install system
services like sshd, and want to start these automatically during bootup.


**[ /etc/fstab][50]**

   [50]: http://wiki.archlinux.org/index.php/Fstab (Fstab)

Filesystem settings and mountpoints are configured here. The installer
should have created the necessary entries. Ensure they are accurate and
correct.

**/etc/mkinitcpio.conf**

This file allows you to fine-tune the initial ramdisk for your system. The
ramdisk is a gzipped image that is read by the kernel during bootup. Its
purpose is to bootstrap the system to the point where it can access the root
filesystem. This means it has to load any modules that are required to "see"
things like IDE, SCSI, or SATA drives (or USB/FW, if you are booting off a
USB/FW drive). Once the ramdisk loads the proper modules, either manually or
through udev, it passes control to the Arch system and your bootup continues.
For this reason, the ramdisk only needs to contain the modules necessary to
access the root filesystem. It does not need to contain every module you would
ever want to use. The majority of your everyday modules will be loaded later
on by udev, during the init process.

By default, mkinitcpio.conf is configured to autodetect all needed modules for
IDE, SCSI, or SATA systems through so-called HOOKS. The installer should
also have inserted hooks like crypt, lvm, keymap and usbinput if relevant.
This means the default initrd should work for almost everybody.
You can edit mkinitcpio.conf and remove the subsystem HOOKS
(ie, IDE, SCSI, RAID, USB, etc) that you don't need.
You can customize even further by specifying the exact modules you need
in the MODULES array and remove even more of the hooks, but proceed with
caution.

If you're using RAID on your root filesystem, the RAID settings near the
bottom must be configured.  See the wiki pages for
RAID and mkinitcpio for more info. If you're using
a non-US keyboard, you should also add the 'keymap' hook, as well as the
'usbinput' hook if you are using a USB keyboard.


**/etc/modprobe.d/modprobe.conf**

This tells the kernel which modules to load for system devices, and
what options to set. For example, to have the kernel load the Realtek 8139
ethernet module when it starts the network (ie. tries to setup eth0), use this
line:


     alias eth0 8139too


Most people will not need to edit this file.


**/etc/resolv.conf**

Use this file to manually setup your preferred nameserver(s). It
should basically look like this:


     search domain.tld

     nameserver 192.168.0.1

     nameserver 192.168.0.2


Replace domain.tld and the ip addresses with your settings. The so-called
search domain specifies the default domain that is appended to unqualified
hostnames automatically. By setting this, a ping myhost will effectively
become a ping myhost.domain.tld with the above values. These settings usually
aren't mighty important, though, and most people should leave them alone for
now. If you use DHCP, this file will be replaced with the correct values
automatically when networking is started, meaning you can and should happily
ignore this file.


**/etc/hosts**

This is where you stick hostname/ip associations of computers on your network.
If a hostname isn't known to your DNS, you can add it here to allow proper
resolving, or override DNS replies. You usually don't need to change anything
here, but you might want to add the hostname and hostname + domain of the
local machine to this file, resolving to the IP of your network interface.
Some services, postfix for example, will bomb otherwise. If you don't know
what you're doing, leave this file alone until you read man hosts.


**/etc/locale.gen**

This file contains a list of all supported locales and charsets available to
you. When choosing a LOCALE in your /etc/rc.conf or when starting a program,
it is required to uncomment the respective locale in this file, to make a
"compiled" version available to the system, and run the locale-gen command as
root to generate all uncommented locales and put them in their place
afterwards. You should uncomment all locales you intend to use.

During the installation process, you do not need to run locale-gen manually,
this will be taken care of automatically after saving your changes to this
file. By default, all locales are enabled that would make sense by rc.conf's
LOCALE= setting. To make your system work smoothly, you should edit this file
and uncomment at least the one locale you're using in your rc.conf.


**/etc/pacman.d/mirrorlist**

This file contains a list of mirrors from which pacman will download packages
for the official Arch Linux repositories. The mirrors are tried in the order
in which they are listed. The $repo macro is automatically expanded by pacman
depending on the repository (core, extra, community or testing).

If you are performing an FTP installation, the mirror you used to download the
packages from will be added on top of the mirror list, in order to be used as
the default mirror in your new Arch Linux system.


**/etc/pacman.conf**

Here you can customize pacman settings such as which repositories to use.


**/etc/crypttab**

If you use encryption on a device which is not used to bring up your root,
(and hence is not enabled by the encrypt hook in mkinitcpio.conf), you should
configure the volume in this file.


**Set Root Password**

At this step, you must set the root password for your system. Choose this
password carefully, preferably as a mixture of alphanumeric and special
characters, since this password allows you to modify critical parts of your
system.

When you are done editing the configuration files choose Return to return to
the main menu. The setup will regenerate the initial ramdisk to enable the
changes you made in mkinitcpio.conf.

####  Install Bootloader

Install Bootloader will install and help you configure the bootloader that you
selected in the "Select Packages" stage.


An editor will open, allowing you to edit the appropriate bootloader
configuration file which the installer has pre-populated. You should check and
modify this file, if needed, to accommodate your boot setup.

**/boot/syslinux/syslinux.cfg** (Syslinux)

After checking your bootloader configuration for correctness, you'll be asked to
allow the installer to Set the Boot Flag and install the Syslinux MBR.

**/boot/grub/menu.lst** (Grub)

After checking your bootloader configuration for correctness, you'll be
prompted for a disk to install the loader to. You should install GRUB to the MBR
of the installation disk.

####  Exit Install

You will be shown a summary of the installation, listing the steps and whether
they executed successfully or not.
If all went well, exit the installer, type reboot at the command line, remove
your installation media and cross your fingers!


### Automatic Installation Procedure

With the automatic installation procedure, you can do scripted/automatic
installations.
See [2.3 AIF, the installation tool](#Aif_the_installation_tool)
In /usr/share/aif/examples you will find example profiles which will need
no or minimal editing in order to install a system:

* generic-install-on-sda
  this file demonstrates some things you can do (adding custom packages,
  setting timezone, update config files etc)
  it sets up a simple installation (with a structure similar to what you get
   with Auto-prepare) on /dev/sda
* fancy-install-on-sda
  very similar to generic-install-on-sda,
  but sets up a "filesystems on lvm on dm_crypt" system on /dev/sda

Note that these files are plain bash files, so if you want to define for
example `SYNC_URL` it must be singlequoted to prevent bash expanding `$repo`

Invoke as `aif -p automatic -c /path/to/configfile`
Obviously, don't forget to change the hard disk names unless you want
to use /dev/sda.

#### Config file syntax

Config files will be sourced by the bash shell, so they need to be valid
bash code.

**PARTITIONS:** Allows you to define partitions for your hard disk,
separated by spaces.

* first comes the device file for the hard disk
* then for each partition you want: size in MiB (or '*' for all remaining
  space),filesystem type and optionally a '+' to toggle the bootable flag.
  separated by colons (':')

**BLOCKDATA:** In this multi-line variable you can describe for each
partition you'll have how it should be used.  Study the examples to see how
it works.

### Customizing Installations

You can also customize your installation experience by writing new
procedures (possibly inheriting from current procedures) or config files for
procedures that support it (eg automatic).
You have all the aif libraries at your disposal and you can create new
libraries. (see /usr/lib/aif)
This is a moving target, so consult the AIF readme for more information.


# Your new system
If all went well, you can reboot your system (make sure you don't boot again
from the same USB disk or CD-ROM drive) and your new system will boot.

You'll notice that in the early userspace (the part that comes after the
bootloader) the hooks (as defined in mkinitcpio.conf) needed to get your root
filesystem are run.  
If you have lvm, it will run the lvm hook.  If you use encryption, it will
run the keymap and encrypt hooks so you can enter your password to decrypt the
volume.

Once the system is booted, login as root.  By default the password is empty
but in the interactive procedure you can change it.

# More information
##  Package Management

Pacman is the package manager which tracks all the software installed on your
system. It has simple dependency support and uses the standard gzipped tar
archive format for all packages. Some common tasks you might need to use
during installation, are explained below with their respective commands. For
an extensive explanation of pacman's options, read man pacman or consult the
Arch Linux [Wiki][51].

   [51]: http://wiki.archlinux.org/index.php/Pacman
(http://wiki.archlinux.org/index.php/Pacman)


**Typical tasks:**

  * Refreshing the package list


     # pacman --sync --refresh

     # pacman -Sy


This will retrieve a fresh master package list from the repositories defined
in the /etc/pacman.conf file and decompress it into the database area.

  * Search the repositories for a package


     # pacman --sync --search <regexp>

     # pacman -Ss <regexp>


Search each package in the sync databases for names or descriptions that match
regexp.

  * Display specific package info from the repository database


     # pacman --sync --info foo

     # pacman -Si foo


Displays information from the repository database on package foo (size,
build date, dependencies, conflicts, etc.)

  * Adding a package from the repositories


     # pacman --sync foo

     # pacman -S foo


Retrieve and install package foo, complete with all dependencies it requires.
Before using any sync option, make sure you refreshed the package list.

  * List installed packages


     # pacman --query

     # pacman -Q


Displays a list of all installed packages in the system.

  * Check if a specific package is installed


     # pacman --query foo

     # pacman -Q foo


This command will display the name and version of the foo package if it is
installed, nothing otherwise.

  * Display specific package info


     # pacman --query --info foo

     # pacman -Qi foo


Displays information on the installed package foo (size, install date, build
date, dependencies, conflicts, etc.)

  * Display list of files contained in package


     # pacman --query --list foo

     # pacman -Ql foo


Lists all files belonging to package foo.

  * Find out which package a specific file belongs to


     # pacman --query --owns /path/to/file

     # pacman -Qo /path/to/file


This query displays the name and version of the package which contains the
file referenced by its full path as a parameter.

##  APPENDIX

See [Official Arch Linux Install Guide Appendix](http://wiki.archlinux.org/index.php/Official_Arch_Linux_Install_Guide_Appendix)
for some related unofficial documentation, new users may find useful.
