Installing full system encrypted arch linux

Posted on Tue 19 May 2020 in dev-journal

This is a documentation of an Arch Linux installation with luks and lvm.

The drive will use a boot partition which will remain unencrypted with a second partition which will be encrypted with luks and then use lvm to create volumes within the lux encrypted partition.

Resources: https://computingforgeeks.com/install-arch-linux-luks-encryption/ https://gist.github.com/mattiaslundberg/8620837

Formatting the disk

The disk will be formatted with fdisk with the following details:

  • 260 MB efi partition
  • The rest of the drive is designated for the linux filesystem
➜  ma@ma-desktop /mnt  sudo fdisk /dev/nvme0n1

Welcome to fdisk (util-linux 2.35.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): g
Created a new GPT disklabel (GUID: 67FB8DF3-A6B6-9F4C-8853-A7DF2CF3EBAD).
The device contains 'dos' signature and it will be removed by a write command. See fdisk(8) man page and --wipe option for more details.

Command (m for help): n
Partition number (1-128, default 1): 
First sector (2048-1953525134, default 2048): 

Partition type (type L to list all types): 1
Changed type of partition 'Linux filesystem' to 'EFI System'.

Command (m for help): n
Partition number (2-128, default 2): 
First sector (1050624-1953525134, default 1050624): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1050624-1953525134, default 1953525134): 

Created a new partition 2 of type 'Linux filesystem' and of size 931 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Current partition scheme:

➜  ma@ma-desktop /mnt  lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0 941.3G  0 disk 
├─nvme0n1p1 259:1    0   260M  0 part 
└─nvme0n1p2 259:3    0   941G  0 part 

install FAT 32 FS for boot partition

➜  ma@ma-desktop /mnt  sudo mkfs.fat -F32 /dev/nvme0n1p1
mkfs.fat 4.1 (2017-01-24)

Create the luks encrypted container on the other partition

➜  ma@ma-desktop /mnt  sudo cryptsetup luksFormat -v --type luks --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 2000 --use-random --verify-passphrase /dev/nvme0n1p2

Open the container

➜  ma@ma-desktop /mnt  sudo cryptsetup open /dev/nvme0n1p2 cryptlvm

Create physical volume

➜  ma@ma-desktop /mnt  sudo pvcreate /dev/mapper/cryptlvm
  Physical volume "/dev/mapper/cryptlvm" successfully created.

Create volume group

➜  ma@ma-desktop /mnt  sudo vgcreate vg0 /dev/mapper/cryptlvm
  Volume group "vg0" successfully created

Create root logical volume

➜  ma@ma-desktop /mnt  sudo lvcreate -L 32G vg0 --name root
  Logical volume "root" created.

Create home logical volume

➜  ma@ma-desktop /mnt  sudo lvcreate -L 100G vg0 --name home
  Logical volume "home" created.

Optional: Create swap logical volume

➜  ma@ma-desktop ~  sudo lvcreate -L 8G vg0 --name swap 
  Logical volume "swap" created

Create filesystem on lvs

➜  ma@ma-desktop /mnt  sudo mkfs.ext4 /dev/vg0/home
➜  ma@ma-desktop /mnt  sudo mkfs.ext4 /dev/vg0/root 

Optional: mkswap

➜  ma@ma-desktop ~  sudo mkswap /dev/mapper/vg0-swap 
Setting up swapspace version 1, size = 8 GiB (8589930496 bytes)

Create and mount necessary directories for chroot

➜  ma@ma-desktop /mnt  sudo mount /dev/vg0/root /mnt/install
➜  ma@ma-desktop /mnt  sudo mkdir /mnt/install/home
➜  ma@ma-desktop /mnt  sudo mkdir /mnt/install/boot
➜  ma@ma-desktop /mnt  sudo mount /dev/vg0/home /mnt/install/home

Bootstrap the system

### bootstrap the system from live cd 
 ➜  pacstrap -i /mnt/install base base-devel vim lvm2

### bootstrap the system from live cd 
# note for -c option 
#    -c             Use the package cache on the host, rather than the target
 ➜  ma@ma-desktop /mnt sudo pacstrap -c -i /mnt/install base base-devel vim lvm2

modify /mnt/install/etc/mkinitcpio to add encrypt and lvm2 before filesystems

HOOKS=(base udev autodetect modconf block keyboard keymap encrypt lvm2 filesystems fsck)
➜  ma@ma-desktop /mnt mkinitcpio -p linux

Finish install

Continue the installation as normal Arch linux installation guide

sudo pacstrap -c -i /mnt/install base base-devel vim lvm2 intel-ucode

modify /etc/mkinitcpio.conf when I first tried this the keyboard layout was still asdf so needed to add the keymap

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