Installing Arch

From Mage
Jump to navigation Jump to search

How to install Arch Linux (shorter/much less thorough than the official).

Preparing media

First you'll need to go get Arch. Be kind and use the torrent. If you're installing Arch onto a virtual machine you can simply mount the ISO file. If you're installing Arch onto a physical machine you're probably going to want to transfer the ISO to media.


USB

Linux

Run the following command, replacing /dev/sdx with your drive, e.g. /dev/sdc. (Do not append a partition number, so do not use something like /dev/sdc1)

dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress oflag=sync

This irrevocably destroys all data on /dev/sdx and writes an iso9660 filesystem signature to the drive. To restore it as an empty, usable storage device after using the Arch ISO image, remove the signature by running the following command as root, before repartitioning and reformatting the USB drive.

wipefs --all /dev/sdx


Windows

Rufus is a multi-purpose USB ISO writer. Simply select the Arch Linux ISO, the USB drive you want to create the bootable Arch Linux onto and click start.

Since Rufus does not care if the drive is properly formatted or not and provides a GUI it may be the easiest and most robust tool to use. Be sure to select DD image mode or the image will be transferred incorrectly.


CD/DVD

Linux

Install cdrtools.

pacman -S cdrtools

Replace /dev/sr0 with your CD/DVD/BR burner's location.

cdrecord -v -sao dev=/dev/sr0 archlinux.iso


Windows

On modern versions of Windows, right click the ISO image and click Burn disc image. For older versions, search is your friend.



Create and format partitions

Once you've booted into the Arch ISO environment, you should check whether you're using UEFI mode by issuing the following command:

ls /sys/firmware/efi/efivars

If the directory does not exist, the system may be booted in BIOS or CSM mode. Refer to your motherboard's manual for details.


Your partition scheme is going to vary based on which mode your system is in. For BIOS machines I prefer to use the older MBR schema (unless the disk is over 2TB), while UEFI requires GPT. Any filesystems which users may fill should be separated from / such as /var and /home to maintain system stability in the event of user idiocy. For example if you know you're going to be hosting a user writable service under /srv/torrent, give it a partition of its own. Here are my bare minimum guidelines for a ~50GB hard drive, all partitions are ext4 unless otherwise noted:

  • UEFI
/boot/efi      # At least 100MB, must be FAT and set to EFI Partition
/              # 5GB+
/var           # 10GB+
/var/tmp       # 4GB+
/home          # Remainder of the disk space
  • BIOS
/boot          # At least 100MB
/              # 5GB+
/var           # 10GB+
/var/tmp       # 4GB+
/home          # Remainder of the disk space

You can use fdisk -l to list your recognized physical disks and fdisk /dev/sdX to make changes as necessary. LVM layouts are preferred for maintenance reasons later in the life of the machine. LVM is way more flexible and allows for some clever solutions to storage issues that can arise. Bootloaders may not like being on an LVM partition though, so we'll create a unique partition for it. Swap can be handled later by creating swap files . The following commands will create the layout and leave ~8GB (on a 50GB disk) to expand your LVMs as needed down the line.

  • UEFI
root@archiso ~ # fdisk /dev/sda
                 g       # Creates a new GPT partition table
                 n       # Create a new partition
                 1       # This will be the first partition
                 [Enter] # Accept the default - should allow adequate space for alignment
                 +512M   # Create a 512MiB /boot/efi partition
                 t       # Set the partition type
                 1       # The code for 'EFI System' partitions
                 n       # Create a new partition
                 2       # This will be the second partition
                 [Enter] # Accept the default
                 [Enter] # Consume the remainder of space on the drive
                 t       # Set partition type
                 2       # Select the second partition
                 31      # The code for 'Linux LVM' partitions
                 w       # Write these changes to the disk
root@archiso ~ # mkfs.fat -F32 /dev/sda1
root@archiso ~ # pvcreate /dev/sda2
root@archiso ~ # vgcreate vg_sys /dev/sda2
root@archiso ~ # lvcreate -L 7680M -n lv_root vg_sys       # 7.5GB /
root@archiso ~ # lvcreate -L 10240M -n lv_var vg_sys       # 10GB /var
root@archiso ~ # lvcreate -L 4096M -n lv_vartmp vg_sys     # 4GB /var/tmp
root@archiso ~ # lvcreate -L 20480M -n lv_home vg_sys      # 20GB /home
root@archiso ~ # mkfs -t ext4 -m 1 -v /dev/vg_sys/lv_root
root@archiso ~ # mkfs -t ext4 -m 1 -v /dev/vg_sys/lv_var
root@archiso ~ # mkfs -t ext4 -m 1 -v /dev/vg_sys/lv_vartmp
root@archiso ~ # mkfs -t ext4 -m 1 -v /dev/vg_sys/lv_home
  • BIOS
root@archiso ~ # fdisk /dev/sda
                 o       # Creates a new DOS/MBR partition table
                 n       # Create a new partition
                 p       # This will be a primary partition
                 1       # This will be the first partition
                 [Enter] # Accept the default - should allow adequate space for alignment
                 +512M   # Create a 512MiB /boot partition
                 a       # Set the bootable flag on the first partition
                 n       # Create a new partition
                 p       # This will be a primary partition
                 2       # This will be the second partition
                 [Enter] # Accept the default
                 [Enter] # Consume the remainder of space on the drive
                 t       # Set partition type
                 2       # Select the second partition
                 8e      # The code for 'Linux LVM' partitions
                 w       # Write these changes to the disk
root@archiso ~ # mkfs -t ext4 -m 1 -v /dev/sda1
root@archiso ~ # pvcreate /dev/sda2
root@archiso ~ # vgcreate vg_sys /dev/sda2
root@archiso ~ # lvcreate -L 7680M -n lv_root vg_sys       # 7.5GB /
root@archiso ~ # lvcreate -L 10240M -n lv_var vg_sys       # 10GB /var
root@archiso ~ # lvcreate -L 4096M -n lv_vartmp vg_sys     # 4GB /var/tmp
root@archiso ~ # lvcreate -L 20480M -n lv_home vg_sys      # 20GB /home
root@archiso ~ # mkfs -t ext4 -m 1 -v /dev/vg_sys/lv_root
root@archiso ~ # mkfs -t ext4 -m 1 -v /dev/vg_sys/lv_var
root@archiso ~ # mkfs -t ext4 -m 1 -v /dev/vg_sys/lv_vartmp
root@archiso ~ # mkfs -t ext4 -m 1 -v /dev/vg_sys/lv_home




Mount the filesystems

Mount the filesystems to /mnt, and create mount points for any remaining partitions. For example:

  • UEFI
root@archiso ~ # mount /dev/vg_sys/lv_root /mnt
root@archiso ~ # mkdir -p /mnt/var /mnt/home /mnt/boot/efi
root@archiso ~ # mount /dev/sda1 /mnt/boot/efi
root@archiso ~ # mount /dev/vg_sys/lv_var /mnt/var
root@archiso ~ # mount /dev/vg_sys/lv_home /mnt/home
root@archiso ~ # mkdir /mnt/var/tmp
root@archiso ~ # mount /dev/vg_sys/lv_vartmp /mnt/var/tmp
  • BIOS
root@archiso ~ # mount /dev/vg_sys/lv_root /mnt
root@archiso ~ # mkdir /mnt/var /mnt/home /mnt/boot
root@archiso ~ # mount /dev/sda1 /mnt/boot
root@archiso ~ # mount /dev/vg_sys/lv_var /mnt/var
root@archiso ~ # mount /dev/vg_sys/lv_home /mnt/home
root@archiso ~ # mkdir /mnt/var/tmp
root@archiso ~ # mount /dev/vg_sys/lv_vartmp /mnt/var/tmp


Installation

Packages to be installed must be downloaded from mirror servers, which are defined in /etc/pacman.d/mirrorlist. Select a local one and disable/delete the others as this will greatly speed up your install in the following steps. This file will later be copied to the new system by pacstrap, so it's worth getting right.

Install the base packages

Use the pacstrap script to install the base package group:

pacstrap /mnt base

This group does not include all the tools from the live installation. You can append additional packages or groups such as dnsutils or net-tools to the pacstrap command. You can also install packages with pacman after the #Chroot step.



Configure the system

Fstab

Generate an fstab file (use -U or -L to define by UUID or labels, respectively):

genfstab -U /mnt >> /mnt/etc/fstab

Check the resulting file in /mnt/etc/fstab afterwards, and edit it in case of errors.


Chroot

Change root into the new system:

arch-chroot /mnt


Time zone

Set the time zone to your location. See the full current list under /usr/share/zoneinfo/. Here's an example for the US east coast:

ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime


Locale

Uncomment en_US.UTF-8 and other needed localizations in /etc/locale.gen, and generate them with:

locale-gen

Set the LANG variable in locale.conf accordingly, for example:

echo "LANG=en_US.UTF-8" > /etc/locale.conf


Network configuration

Create the hostname file:

echo "bar" > /etc/hostname

...and matching entries in /etc/hosts

127.0.0.1     localhost
127.0.1.1     bar.localdomain.local   bar

Don't forget to set an IP address if you need to.


Users and Passwords

Set the root password:

passwd

Add a new user to the system:

useradd foo
passwd foo
mkdir /home/foo
chown foo:foo /home/foo


Sudo

Don't kid yourself and just install it now.

pacman -S sudo

Add your user to the /etc/sudoers file.


Mkinitcpio LVM

Edit /etc/mkinitcpio.conf and set the HOOKS line to:

HOOKS=(base systemd udev autodetect modconf block sd-lvm2 filesystems keyboard fsck)

Then generate new kernel images by issuing:

mkinitcpio -p linux


Boot loader

Ignore the rest, stick with the best. Install GRUB .



Double check your settings

At this point you have a system that looks something like this:



Reboot

Exit the chroot environment by typing exit or pressing Ctrl + D.

(Optional) Manually unmount all the partitions with umount -R /mnt: this allows noticing any "busy" partitions, and finding the cause with fuser.

Finally, restart the machine by typing reboot. Any partitions still mounted will be automatically unmounted by systemd. Remember to remove the installation media and then login to the new system with your user account.

(Optional) Set your DNS configuration up in /etc/resolv.conf:

nameserver 192.168.1.1
nameserver 8.8.8.8
search localdomain.local
domain localdomain.local


Post-installation

See Linux and Networking for more tutorials on things to setup on your new system. Also check out Arch's General recommendations for more ideas.