Skip to main content

Arch Linux Install

··655 words·4 mins
Photo by Lukas on Unsplash

Introduction #

This is the basic framework that I use to install Arch Linux, with a few changes catered to the Lenovo ThinkPad E15 Gen 2. I have found that this is a decent mid range laptop, excellent linux compatibility, great keyboard, and overall provides a good value.

Getting started #

This tutorial assumes the following:

  • You are booting from a USB drive with the Arch install ISO.
  • Wireless or wired network is detected and drivers are configured automatically.
  • You want drive encrytion on your root partition, but not on your boot/efi/swap partitions.

Verify UEFI boot mode #

The following command should show directory without error:

# ls /sys/firmware/efi/efivars

Configure wireless network #

The following command will drop you into the iwd daemon:

# iwctl

From there:

# device list
# station *device* scan
# station *device* get-networks
# station *device* connect *SSID*

Verify internet connectivity #

# ping archlinux.org

Update system clock #

# timedatectl set-ntp true
# timedatectl status

Disks, partition table & partitions #

The following assumes that your NVME drive is found as /dev/nvme0n1. Partitions will then be /dev/nvme0n1p1 and so on.

Wipe disk #

List disks:

# fdisk -l

Wipe all file system records:

# wipefs -a /dev/nvme0n1

Create new partition table #

Open nvme0n1 with gdisk:

# gdisk /dev/nvme0n1

Create GPT partition table with option “o”.

Create EFI partition #

Create new EFI partition w/ 550mb with option “n”, using the following parameters:

Partition #1
Default starting sector
+550M
Change partition type to EFI System (ef00)

Create boot partition #

Create new boot partition w/ 550mb with option “n”, using the following parameters:

Partition #2
Default starting sector
+550M
Leave default type of 8300

Create swap partition #

The old rule of thumb used to be that a swap partition should be the same size as the amount of memory in the system, but given the typical amount of memory in modern systems this is obviously no longer necessary. For my system with 16 or 32 GB of memory, a swap of 8 GB is rarely even used.

Create new Swap partition w/ 8GB with option “n”, using the following parameters:

Partition #3
Default starting sector
+8G
Change to linux swap (8200)

Create root partition #

Create new root partition w/ remaining disk space with option “n”, using the following parameters:

Partition #4
Default starting sector
Remaining space
Linux LUKS type 8309

And then exit gdisk.

Write file systems #

EFI partition #

Write file system to new EFI System partition:

# cat /dev/zero > /dev/nvme0n1p1 
# mkfs.fat -F32 /dev/nvme0n1p1 

Boot partition #

Then boot partition:

# cat /dev/zero > /dev/nvme0n1p2 
# mkfs.ext2 /dev/nvme0n1p2

Root partition #

Prepare root partition w/ LUKS:

# cryptsetup -y -v luksFormat --type luks2 /dev/nvme0n1p4
# cryptsetup luksDump /dev/nvme0n1p4
# cryptsetup open /dev/nvme0n1p4 archcryptroot
# mkfs.ext4 /dev/mapper/archcryptroot
# mount /dev/mapper/archcryptroot /mnt

I use archcryptroot for the name of my encrypted volume, but change as necessary.

Swap partition #

Then swap:

# mkswap /dev/nvme0n1p3
# swapon /dev/nvme0n1p3

Create mount points #

# mkdir /mnt/boot
# mount /dev/nvme0n1p2 /mnt/boot
# mkdir /mnt/boot/efi
# mount /dev/nvme0n1p1 /mnt/boot/efi

System install #

Install base packages #

# pacstrap /mnt base base-devel linux linux-firmware grub-efi-x86_64 efibootmgr

Generate fstab #

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

Enter new system #

# arch-chroot /mnt /bin/bash

Set clock #

# ln -sf /usr/share/zoneinfo/America/Chicago /etc/localtime
# hwclock –systohc

Generate locale #

In /etc/locale.gen uncomment only: en_US.UTF-8 UTF-8

# locale-gen

In /etc/locale.conf, you should only have this line: LANG=en_US.UTF-8

# nano /etc/locale.conf

Set hostname & update hosts #

# echo linuxmachine > /etc/hostname

Update /etc/hosts with the following:

127.0.0.1   localhost
::1         localhost
127.0.1.1   linuxmachine.localdomain    linuxmachine

Set root password #

# passwd

Update /etc/mkinitcpio.conf & generate initrd image #

Edit /etc/mkinitcpio.conf with the following:

HOOKS=(base udev autodetect modconf block keymap encrypt resume filesystems keyboard fsck)

Then run:

# mkinitcpio -p linux

Install grub #

# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ArchLinux

Edit /etc/default/grub so it includes a statement like this:

GRUB_CMDLINE_LINUX="cryptdevice=/dev/nvme0n1p4:archcryptroot resume=/dev/nvme0n1p3"

Generate final grub configuration:

# grub-mkconfig -o /boot/grub/grub.cfg

Exit & reboot #

# exit
# umount -R /mnt
# swapoff -a
# reboot

To be continued.