Sunday, June 9, 2013

Adventures in Arch (Part I): Installing

Arch Linux
Last updated: 2013-11-02

Inspired by the recent Linux Action Show experience with Arch, I decided to give it a try.

I have now completely changed from Ubuntu to Arch.

Any tips or advises please let me know.



Since I will format and install Arch I need to backup my /home partition.

I created a Ubuntu USB Live Disk, rebooted into the live environment and backed up all my files.
$ sudo rsync -axS --exclude='/*/.gvfs' --exclude='lost+found' /media/home/. /media/externaldrive/home/.

Download Arch

I rebooted again into Ubuntu and went to the Arch Download Page and downloaded the latest Arch iso.

Create an Arch USB boot disk

Check what your usb device is:
$ sudo blkid
Create the USB Arch boot disk:
$ sudo dd bs=4M if=/home/myuser/archlinux-2013.06.01-dual.iso of=/dev/sde

Install Arch

Before starting read the Arch Beginners Guide. During the installation you should have this guide handy. I used my Nexus 7.

Reboot into the USB disk.

You will start at a shell prompt.

Changing the keyboard to Portuguese (check your layout here) and the terminal font:
# loadkeys pt-latin9
# setfont Lat2-Terminus16
If you want to change the language uncomment the UTF-8 entry of that language:
# nano /etc/locale.gen
# locale-gen
# export LANG=pt_PT.UTF-8
At this point I have Internet. Check if you have too:
# ping -c 3
If at some point you don't, try:
# dhcpcd
Also check the Arch Beginners Guide for more information, especially if you have a wireless connection.

Now it's time to prepare the hard drives.

I have a SSD drive for the system and a HDD drive for my /home partition.

I will use GPT partitioning. Check Arch Beginners Guide for the different options.

Check your available drives:
# lsblk
I used cgdisk to partition the SSD and HDD drives:
# cgdisk /dev/sda
In this drive I created 3 partitions, one for /boot/efi (1GB), another for /boot (1GB) and another for /.

I used the following options in cgdisk to create the partitions:
  • o - this option will create a new partition table, destroying the existent one;
  • n - create each one of the partitions, in my case I used this option 3 times. 
    • Partition number: start with 1 and go from there;
    • Start  sector number: can be the default (just press enter);
    • End sector number: you can use +1G for example or enter to choose the remaining space;
    • Hex code: use ef00 for the /boot/efi partition, ef02 for the /boot partition and 8300 for the / partition.
  • x - this is the expert mode. The /boot/efi partition needs to have a legacy BIOS bootable attribute. Use the a option to get to the set attributes menu and for the partition number 1 (/boot/efi) choose the legacy BIOS bootable attribute.
  • w - write the changes.
For the HDD drive I did the same, but created only one partition.
# cgdisk /dev/sdd
Now format the partitions:
# mkfs.vfat /dev/sda1
# mkfs.ext4 /dev/sda2
# mkfs.ext4 /dev/sda3
# mkfs.ext4 /dev/sdd1
And mount them:
# mount /dev/sda3 /mnt
# mkdir -p /mnt/boot/efi
# mount /dev/sda2 /mnt/boot
# mount /dev/sda1 /mnt/boot/efi
# mkdir /mnt/home
# mount /dev/sdd1 /mnt/home
Select a mirror for installing the system:
# nano /etc/pacman.d/mirrorlist
Copy your preferred mirror to the first line.

  • Alt+6 to copy a Server line.
  • PageUp key to scroll up.
  • Ctrl+U to paste it at the top of the list.
  • Ctrl+X to exit, and when prompted to save changes, press Y and Enter to use the same filename.
Refresh the packages list:
# pacman -Syy
Install the base system:
# pacstrap -i /mnt base
Generate an fstab:
# genfstab -U -p /mnt >> /mnt/etc/fstab
Check if it's correct:
# nano /mnt/etc/fstab
Chroot to the system:
# arch-chroot /mnt
Uncomment the languages of the system (choose the UTF-8 entries):
# nano /etc/locale.gen
# locale-gen
Create the /etc/locale.conf file:
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# export LANG=en_US.UTF-8
Console font and keymap:
# nano /etc/vconsole.conf
Time zone:
# ln -s /usr/share/zoneinfo/Europe/Lisbon /etc/localtime
Hardware clock:
# hwclock --systohc --utc
# echo myhostname > /etc/hostname
List your available network interfaces:
# ip link
Enable the interface at boot time and enable the NetworkManager:
# sudo systemctl enable dhcpcd@enp2s0.service
# sudo systemctl enable NetworkManager.service
Set the root password:
# passwd
For the bootloader I used Syslinux. Check the Arch Beginners Guide for other options, like GRUB.
# pacman -S syslinux
As I used GPT partitions I also need:
# pacman -S gptfdisk
Install the bootloader:
# syslinux-install_update -i -a -m
Check if the root partition is correct in the bootloader configuration file:
# nano /boot/syslinux/syslinux.cfg
As I have a EFI motherboard I need to use EFISTUB.
# mkdir -p /boot/efi/EFI/arch/
# cp /boot/vmlinuz-linux /boot/efi/EFI/arch/vmlinuz-arch.efi
# cp /boot/initramfs-linux.img /boot/efi/EFI/arch/initramfs-arch.img
# cp /boot/initramfs-linux-fallback.img /boot/efi/EFI/arch/initramfs-arch-fallback.img
# pacman -S refind-efi efibootmgr
# mkdir -p /boot/efi/EFI/refind
# cp /usr/lib/refind/refind_x64.efi /boot/efi/EFI/refind/refind_x64.efi# cp /usr/lib/refind/config/refind.conf /boot/efi/EFI/refind/refind.conf# cp -r /usr/share/refind/icons /boot/efi/EFI/refind/icons# cp /usr/share/refind/refind_x64.efi /boot/efi/EFI/refind/refind_x64.efi
# cp /usr/share/refind/refind.conf-sample /boot/efi/EFI/refind/refind.conf
# cp /usr/share/refind/icons /boot/efi/EFI/refind/icons
# cp /usr/share/refind/drivers_x64 /boot/efi/EFI/refind/drivers
# nano /boot/efi/EFI/refind/refind.conf
"Boot to X"             "root=/dev/sda3 ro rootfstype=ext4"
"Boot to console"    "root=/dev/sda3 ro rootfstype=ext4
# nano /boot/efi/EFI/arch/refind_linux.conf
"Boot to X"          "root=/dev/sda3 ro rootfstype=ext4"
"Boot to console" "root=/dev/sda3 ro rootfstype=ext4"
# efibootmgr -c -d /dev/sda -p 1 -w -L "rEFInd" -l '\EFI\refind\refind_x64.efi'# efibootmgr -c -d /dev/sda -p Y -1 /EFI/refind/refind_x64.efi -L "rEFInd"
Exit from the chroot environment, unmount the partitions and reboot.
# exit
# umount /mnt/{boot,home,boot/efi,}
# reboot
Log in as root.

Now it's time to create a your user (more on user Management here):
# useradd -m -g users -s /bin/bash youruser
# chfn youruser
# passwd youruser
Create a new group to match your user:
# groupadd yourgroup
# gpasswd -a youruser yourgroup
Add your user as a sudoer:
# pacman -S sudo
# vi /etc/sudoers
youruser   ALL=(ALL) ALL
Install ALSA for sound (more on Sound here):
# pacman -S alsa-utils
Unmute the channels:
# alsamixer
Install the X Window System:
# pacman -S xorg-server xorg-server-utils xorg-xinit
Install mesa for 3D support:
# pacman -S mesa
Install a video driver. To know what chipset you have:
# lspci | grep VGA
In my case I have a NVIDIA card:
# pacman -S nvidia
Test X by installing the default environment:
# pacman -S xorg-twm xorg-xclock xterm
Start the test Xorg session:
# startx
To exit back into the shell prompt:
$ exit
Install a set of TrueType fonts:
# pacman -S ttf-dejavu
Install a Desktop Environment. Choose here.

I chose GNOME:
# pacman -S gnome gnome-extra
Install a Display Manager. Choose here.

I chose GDM:
# pacman -S gdm
Enable GDM at startup:
# systemctl enable gdm.service
Reboot and enjoy:
# reboot
And that is it. Arch with GNOME is installed.

Next I will create a series of other post with post install tips and tricks.