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)