Skip to content

Instantly share code, notes, and snippets.

@curtismckee
Last active January 8, 2019 11:18
Show Gist options
  • Save curtismckee/a5cdb0ffda024cf35397b6b62b826716 to your computer and use it in GitHub Desktop.
Save curtismckee/a5cdb0ffda024cf35397b6b62b826716 to your computer and use it in GitHub Desktop.

Table of Contents

Introduction

  1. Installing

  2. Configuration

  3. Appearance

Introduction

This is my first Arch install.

A few people have used/stared/forked my Xubuntu reference guide. I figure since Arch is much more involved I would write a reference guide alongside the install process.

I will be constantly updating this reference guide to add missing content, update current content, resolve inconsistencies, add additional resources, make annotations, etc.

Preparation

Version:

release 2018.12.01 - kernel 4.19.4

Basics

Change the Font:
setfont sun12x22

Update Language & Keyboard layout:
TODO

Time & Date:
timedatectl set-ntp true

Verify Bootmode:
efivar -l

Set Mirrors
TODO

Network

General Networking

ip address
ip link set INTERFACE up

general network configuration

Wireless Configuration

iw dev interface scan | less
wpa_passphrase "SSID" "Password" > /etc/wpa_supplicant/wpa_supplicant.conf
wpa_supplicant -B -i INTERFACE -c /etc/wpa_supplicant/wpa_supplicant.conf
dhcpcd INTERFACE

wireless network configuration
wpa_supplicant

Formatting

Drive Preparation

shred -v -z /dev/nvme0n1

OR

cryptsetup open --type plain -d /dev/urandom /dev/nvme0n1 to_be_wipedo
dd if=/dev/zero of=/dev/mapper/to_be_wiped status=progress
.
.
.
cryptsetup close to_be_wiped

drive preparation

Partitioning

gdisk /dev/nvme0n1

GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-242187466, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-242187466, default = 242187466) or {+-}size{KMGTP}: +512M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): EF00
Changed type of partition to 'EFI System'

Command (? for help): n
Partition number (2-128, default 2): 
First sector (34-242187466, default = 1050624) or {+-}size{KMGTP}: 
Last sector (1050624-242187466, default = 242187466) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sda: 242187500 sectors, 115.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 9FB9AC2C-8F29-41AE-8D61-21EA9E0B4C2A
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 242187466
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050623   512.0 MiB   EF00  EFI System
   2         1050624       242187466   115.0 GiB   8300  Linux filesystem

Command (? for help): w

partitioning
efi-system partition
gdisk

LVM and LUKS

mkfs.vfat -F32 /dev/nvme0n1p1  

cryptsetup luksFormat /dev/nvme0n1p2  
cryptsetup open --type luks /dev/nvme0n1p2 lvm

pvcreate /dev/mapper/lvm

vgcreate vg0 /dev/mapper/lvm

lvcreate --size 8G vg0 --name swap
lvcreate --size 64G vg0 --name root
lvcreate -l 100%FREE vg0 --name home

disk-encryption
lvm
pvcreate man page
vgcreate man page
lvcreate man page

Create Filesystems on Encrypted Partitions

mkfs.ext4 /dev/mapper/vg0-root
mkfs.ext4 /dev/mapper/vg0-home

mkswap /dev/mapper/vg0-swap

Mount the Partitions

mount /dev/mapper/vg0-root /mnt

mkdir /mnt/boot
mount /dev/mapper/nvme0n1p1

mkdir /mnt/home
mount /dev/mapper/vg0-home /mnt/home

swapon /dev/mapper/vg0-swap

lsblk

NAME                     MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
loop0                      7:1    0 476.7M  1 loop  /run/archiso/sfs/airootfs
sda                        8:0    0  14.9G  0 disk
├─sda1                   259:3    0   588M  0 part  /run/archiso/bootmnt
└─sda2                   259:2    0    64M  0 part
nvme0n1                  259:0    0   477G  0 disk
├─nvme0n1p1              259:3    0   512M  0 part  /mnt/boot
└─nvme0n1p2              259:2    0 476.4G  0 part
  └─lvm                  253:0    0 476.4G  0 crypt 
    ├─vg0-swap           253:1    0     8G  0 lvm   [SWAP]
    ├─vg0-root           253:1    0    64G  0 lvm   /mnt
    └─vg0-home           253:2    0 404.4G  0 lvm   /mnt/home

Base Installation

Install base packages
pacstrap /mnt base base-devel dialog wpa_supplicant vim zsh git

Generate fstab
genfstab -pU /mnt >> /mnt/etc/fstab

Two optional fstab changes:

  • You might want to change the atime options - These impact drive preformance and wear. By default our generated fstab file uses relatime. This updates file access times if the previous access time was earlier than current modify/change time or access time is older than 24 hours. If using a SSD or NVMe and want to reduce wear on the drive, change all non-boot partitions to use noatime. However this option doesn't work great with applications that need to know if a file has been read since the last time it was modified.
  • Change /tmp directory to use the ramdisk instead of the drive. We accomplish this by appending a tmpfs entry to the file.

vim /mnt/ect/fstab

# <file system> <dir>   <type>  <options>       <dump>  <pass>
# /dev/mapper/vg0-root
UUID=9a180980-d2bf-40d6-a09a-7a95a378f5e3   /       ext4    rw,noatime,data=ordered   0 1

# /dev/mapper/vg0-home
UUID=01e98383-e71a-4319-a70c-348783b1fc4c   /home   ext4    rw,noatime,data=ordered   0 2

# /dev/mapper/vg0-swap
UUID=bd0fe84a-c662-4976-929f-e1b517c6531b   none    swap    defaults,pri=-2   0 0

# /dev/nvme0n1p1
UUID=F679-59DA    /boot   vfat    rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro    0 2

# /tmp ramdisk
tmpfs   /tmp    tmpfs   defaults,noatime,mode=1777    0 0

fstab

Switch to Chroot:
arch-chroot /mnt

Update System Clock:
ln -sf /usr/share/zoneinfo/US/Mountain /etc/localtime
hwclock --systohc

Update Computer Hostname:
echo <computer-hostname> > /etc/hostname

Update Locale:
echo LANG=en_US.UTF-8 >> /etc/locale.conf

Set Root Password:
passwd

Add User:
useradd -m -g users -G wheel -s /bin/zsh <USERNAME>
passwd <USERNAME>

Update Sudoers File:
visudo

Find and uncomment this line:
%wheel ALL=(ALL) ALL

Update mkinitcpio:
We are using disk encryption so we need to update the mkinitcpio with modules for initramfs.

Update MODULES to use ext4.
Update HOOKS to include modules keymap, encrypt, lvm2 and resume before filesystems.

vim /etc/mkinitcpio.conf

MODULES="ext4"
.
.
.
HOOKS="base udev autodetect modconf block keymap encrypt lvm2 resume filesystems keyboard fsck"

Regenerate the initramfs:
mkinitcpio -p linux

mkinitcpio

Boot Manager

Install bootloader:
bootctl --path=/boot install

Create bootloader entry:
vim /boot/loader/entries/arch.conf

title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options cryptdevice=UUID={UUID}:lvm:allow-discards resume=/dev/mapper/vg0-swap root=/dev/mapper/vg0-root rw quiet

To easily get the UUID, this Vim command adds a line to the current file that includes the UUID.
:read ! blkid /dev/nvme0n1p2

Update bootloader config:
vim /boot/loader/loader.conf

timeout 0
default arch
editor 0

Finishing

Exit chroot:
exit

Unmount all drives and partitions:
umount -R /mnt

Reboot into new installation:
reboot

TODO:

  • Xorg : Display Server or Base Graphic-User-Interface Environment
  • AMDGPU : Graphics Drivers
  • LightDM : Display Manager or Login Manager
  • i3-gaps : Window Manager
  • Xranr : Multi-display Manager
  • Feh : Desktop Wallpaper Manager
  • Compton :
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment