-
Star
(111)
You must be signed in to star a gist -
Fork
(29)
You must be signed in to fork a gist
-
-
Save HardenedArray/31915e3d73a4ae45adc0efa9ba458b07 to your computer and use it in GitHub Desktop.
# OBJECTIVE: Install Arch Linux with encrypted root and swap filesystems and boot from UEFI. | |
# Note this encrypted installation method, while perfectly correct and highly secure, CANNOT support encrypted /boot and | |
# also CANNOT be subsequently converted to support an encrypted /boot!!! A CLEAN INSTALL will be required! | |
# Therefore, if you want to have an encrypted /boot or will want an encrypted /boot system at some point in the future, | |
# please ONLY follow my encrypted /boot installation guide, which lives here: | |
https://gist.github.com/HardenedArray/ee3041c04165926fca02deca675effe1 | |
# My encrypted /boot guide varies in several different, critically important, ways from the correct and secure encrypted | |
# root / and swap installation process I have outlined below. | |
# Note: This method supports both dedicated Arch installs and those who wish to install Arch on a multi-OS-UEFI booting system. | |
# External USB HDD/SSD Installers Notes: Encrypted Arch installs can be booted and run from an external USB HDD or SSD, but | |
# only when the installation is correctly set up. There are several necessary changes to my standard procedure you'll want | |
# to make during the install process. Read my External USB HDD/SSD Installation section below before proceeding. | |
# VirtualBox Installers Notes: This installation method can also be used to install Arch Linux as an UEFI-booting | |
# Guest system in VirtualBox. You must have UEFI-booting enabled in VBox's Guest System Settings prior to installation. | |
# I have written a separate guide dedicated to the specifics of achieving an encrypted Arch Linux VirtualBox installation. | |
# My Arch Linux VirtualBox Guest installation guide is available at: | |
https://gist.github.com/HardenedArray/d5b70681eca1d4e7cfb88df32cc4c7e6 | |
# The official Arch installation guide contains details that you should refer to during this installation process. | |
# That guide resides at: https://wiki.archlinux.org/index.php/Installation_Guide | |
# Download the archlinux-*.iso image from https://www.archlinux.org/download/ and its GnuPG signature. | |
# Use gpg --verify to ensure your archlinux-*.iso is exactly what the Arch developers intended. For example: | |
$ gpg -v archlinux-2019.11.01-x86_64.iso.sig | |
gpg: WARNING: no command supplied. Trying to guess what you mean ... | |
gpg: assuming signed data in 'archlinux-2019.11.01-x86_64.iso' | |
gpg: Signature made Fri Nov 1 16:34:35 2019 UTC | |
gpg: using RSA key 4AA4767BBC9C4B1D18AE28B77F2D434B9741E8AC | |
gpg: using pgp trust model | |
gpg: Good signature from "Pierre Schmitz <[email protected]>" [unknown] | |
gpg: WARNING: This key is not certified with a trusted signature! | |
gpg: There is no indication that the signature belongs to the owner. | |
Primary key fingerprint: 4AA4 767B BC9C 4B1D 18AE 28B7 7F2D 434B 9741 E8AC | |
gpg: binary signature, digest algorithm SHA256, key algorithm rsa2048 | |
# Burn the archlinux-*.iso to a 1+ Gb USB stick. On linux, do something like: | |
dd bs=4M if=archlinux-*.iso of=/dev/sdX status=progress oflag=sync | |
# If running Windows, use Rufus to burn the archlinux-*.iso to your USB stick in DD mode. | |
# Also, if you are running BitLocker to encrypt your Windows system, read my BitLocker notes below, before proceeding. | |
# UEFI-Boot from your USB stick. If your USB stick fails to boot, ensure that Secure Boot is disabled in your UEFI configuration. | |
# Set your keymap only if not you are not using the default English language. | |
# It is typically wiser to be hard wired to the Net during installation. However, Arch supports WiFi-only installs. Also | |
# note that in mid-2020 the Arch devs deprecrated the use of `wifi-menu`. The current installation images support `iwd`, | |
# which provides `iwctl`. Carefully note that `iwd` will NOT be installed on your new system. If you will require WiFi | |
# access following reboot, we install `iwd` in the pacstrap command and then enable it after we enter arch-chroot, below. | |
# Connect to WiFi using: | |
iwctl | |
# then to connect to your WiFi station; do something like: | |
station <wlan device name> connect <wifi-station-name tab-auto-complete> | |
# then enter your wifi station's passphrase | |
# It is possible to access this guide from within your Arch installation environment using the built-in elinks text browser. | |
# For those interested, open a new terminal at tty2 using ctrl-alt-f2, then use elinks to search for 'HardenedArray Gists' | |
# which should return the URL of my Arch installation guides: | |
https://gist.github.com/HardenedArray/31915e3d73a4ae45adc0efa9ba458b07 | |
# You can then return to your installation terminal using ctrl-alt-f1. | |
# Create and size partitions appropriate to your goals using gdisk. | |
# Carefully Note: Multi-OS booters who have an existing EFI partition on their drive should NOT create a new EFI partition. | |
# Instead, we will append Arch as another OS to your existing EFI partition. See my Multi-OS-Booting Notes, below. | |
gdisk /dev/sdX | |
# Create the partitions you need: | |
Partition X = 100 MiB EFI partition # Hex code EF00 | |
Partition Y = 250 MiB Boot partition # Hex code 8300 | |
Partition Z = Choose a reasonable size for your encrypted root and swap system partition, or just size it to the | |
last sector of your drive. # Hex code 8300. | |
# Review your partitions with 'p'. | |
# Write your gdisk changes with 'w'. | |
# Reboot, if necessary, so the kernel reads your new partition structure. | |
, | |
# I strongly recommend you zero-out each of of your new partitions prior to creating filesystems on them. Obviously, multi-OS | |
# booters should NEVER zero-out an existing EFI partition. You can either use the Arch installer's ddrescue or, if you don't | |
# mind not having a progress indicator, it's more efficient to run: | |
cat /dev/zero > /dev/sdXY followed by | |
cat /dev/zero > /dev/sdXZ | |
# Create filesystems for /boot/efi and /boot | |
mkfs.vfat -F 32 /dev/sdXX | |
mkfs.ext2 /dev/sdXY # Note that ext4 or btrfs are also fine choices for your /boot partition. | |
# Encrypt and open your system partition | |
cryptsetup -c aes-xts-plain64 -h sha512 -s 512 --use-random luksFormat /dev/sdXZ | |
cryptsetup luksOpen /dev/sdXZ 2016-Global-OpSec-Champion-LyingHillary # (or use any word or phrase you're fond of) | |
# Create encrypted LVM partitions | |
# These steps create a required root partition and an optional partition for swap. Note that using a swap file with BTRFS is | |
# a very poor idea. Swap partitions are not controlled by BTRFS so they work fine. Read the BTRFS ArchWiki before proceeding. | |
# Also note that BTRFS fully supports, detects, and properly configures settings for all modern SSDs, which is the drive type | |
# almost everyone should be running when installing ArchLinux! HDDs are only useful for infrequently accessed data, and | |
# for storing your SSD's critical directories as encrypted backups. | |
# Modify this structure only if you need additional, separate partitions. The sizes used below are only suggestions. | |
# The VG and LV labels 'Arch, root and swap' can be changed to anything memorable to you. Use your labels consistently, below! | |
pvcreate /dev/mapper/2016-Global-OpSec-Champion-LyingHillary | |
vgcreate Arch /dev/mapper/2016-Global-OpSec-Champion-LyingHillary | |
lvcreate -L +512M Arch -n swap | |
lvcreate -l +100%FREE Arch -n root | |
# Create filesystems on your encrypted partitions | |
mkswap /dev/mapper/Arch-swap | |
mkfs.ext4 /dev/mapper/Arch-root | |
# Note that Arch Linux fully supports btrfs, and btrfs is also an excellent filesystem choice for your encrypted root. | |
# If you want a btrfs filesystem on your root logical volume, instead of 'mkfs.ext4 /dev/mapper/Arch-root', do this: | |
mkfs.btrfs /dev/mapper/Arch-root | |
# If you've created a btrfs root filesystem, do not forget to append 'btrfs-progs' to the pacstrap installation command | |
# we use immediately after correctly mounting our partitions below. | |
# Mount the new system | |
mount /dev/mapper/Arch-root /mnt | |
swapon /dev/mapper/Arch-swap | |
mkdir /mnt/boot | |
mount /dev/sdXY /mnt/boot | |
mkdir /mnt/boot/efi | |
mount /dev/sdXX /mnt/boot/efi | |
# Optional - Edit the Mirrorlist To Optimize Package Download Speeds | |
nano /etc/pacman.d/mirrorlist | |
# Copy one or two mirrors near your physical location to the top of the mirrorlist. | |
# Install your Arch system | |
# If you read the contents of https://www.archlinux.org/ you would know the Arch developers made significant | |
# changes to the 'base' package in October 2019. | |
# The new base-metapackage does not contain a kernel nor an editor and several other important packages. | |
# We will be addressing those issues in our pacstrap command below. | |
# This installation command provides a decent set of basic system programs which will also support WiFi through | |
# iwd's `iwctl` after initially booting into your Arch system. Having WiFi following installation is particularly | |
# critical for anyone running a modern ultrabook, as most are equipped with WiFi-only access to the Net. Recommended, yet | |
# optional: make and enjoy some fresh java while the following command completes. Once completed, you'll only | |
# be a few minutes away from putting your new system to serious work! | |
pacstrap /mnt base base-devel grub efibootmgr dialog wpa_supplicant linux linux-headers nano dhcpcd | |
iwd lvm2 linux-firmware man-pages | |
# Create and review FSTAB | |
genfstab -U /mnt >> /mnt/etc/fstab # The -U option pulls in all the correct UUIDs for your mounted filesystems. | |
cat /mnt/etc/fstab # Check your fstab carefully, and modify it, if required. | |
# Enter the new system | |
arch-chroot /mnt /bin/bash | |
# Set the system clock | |
ln -s /usr/share/zoneinfo/UTC /etc/localtime # This will harmlessly fail if your system's CMOS clock is already set to UTC. | |
hwclock --systohc --utc | |
# If you require WiFi access following reboot, enable iwd: | |
systemctl enable iwd | |
# Assign your hostname | |
echo MyHostName > /etc/hostname | |
# Set or update your locale | |
# If English is your native language, you need to edit exactly two lines to correctly configure your locale language settings: | |
a. In /etc/locale.gen **uncomment only**: en_US.UTF-8 UTF-8 | |
b. In /etc/locale.conf, you should **only** have this line: LANG=en_US.UTF-8 | |
# Now run: | |
locale-gen | |
# Set your root password | |
passwd | |
# Create a User, assign appropriate Group membership, and set a User password. 'Wheel' is just one important Group. | |
useradd -m -G wheel -s /bin/bash MyUserName | |
passwd MyUserName | |
# Configure mkinitcpio with the correct HOOKS required for your initrd image | |
nano /etc/mkinitcpio.conf | |
# Use this HOOKS statement: | |
HOOKS="base udev autodetect modconf block keymap encrypt lvm2 resume filesystems keyboard fsck" | |
# Note that recent ArchLinux installation images have shipped with a new version of /etc/mkinitcpio.conf. The | |
# only difference is that the new version uses '(' and ')' instead of dual double quotation marks: ' " " '. Therefore, | |
# the current HOOKS statement should be: | |
HOOKS=(base udev autodetect modconf block keymap encrypt lvm2 resume filesystems keyboard fsck) | |
# You do not need or want 'resume' in your HOOKS statement if you are not using swap. | |
# Generate your initrd image | |
mkinitcpio -p linux | |
# Install and Configure Grub-EFI | |
# The correct way to install grub on an UEFI computer, irrespective of your use of a HDD or SSD, and whether you are | |
# installing dedicated Arch, or multi-OS booting, is: | |
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/sdYZ:MyDevMapperMountpoint resume=/dev/mapper/MyVolGroupName-MyLVSwapName" | |
# Maintaining consistency with the examples provided above, you would use something like: | |
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sdXZ:2016-Global-OpSec-Champion-LyingHillary resume=/dev/mapper/Arch-swap" | |
# If you are not using swap, eliminate the 'resume' statement above. | |
# I have also noticed that recent releases of grub2 now offer this new option within /etc/default/grub: | |
# Uncomment to enable booting from LUKS encrypted devices | |
# GRUB_ENABLE_CRYPTODISK=y | |
# Note that you do NOT need to enable that cryptodisk statement to boot your LUKS encrypted / and swap ArchLinux system, | |
# assuming you are **NOT** trying to decrypt an encrypted /boot. If you want to encrypt /boot, read my encrypted boot | |
# installation guide, which requires an entirely different, and incompatiable, installation procedure. | |
# Generate Your Final Grub Configuration: | |
grub-mkconfig -o /boot/grub/grub.cfg | |
# Exit Your New Arch System | |
exit | |
# Unmount all partitions | |
umount -R /mnt | |
swapoff -a | |
# Reboot and Enjoy Your Encrypted Arch Linux System! | |
reboot | |
# After you are satisfied that your Arch system is running well, if you are like most people not running an Arch server, | |
# you'll want a Desktop Environment so you can begin using your new system productively. See my: 'Installing a | |
# Plasma-KDE Desktop Post Arch Install' section below for some ideas and an efficient DE installation process. | |
__________________________ | |
If you ever get dropped to the EFI Shell prompt when powering up Arch Linux, which I most often notice within | |
VirtualBox when running Arch Linux as UEFI-enabled Guest System, do the following: | |
At the Shell prompt, type the following entries, as indicated (also remember we used --bootloader-id=ArchLinux, above): | |
Shell> fs0: | |
fs0:> \EFI\ArchLinux\grubx64.efi | |
Hit Enter and now you should see your graphical grub Arch Linux menu. Note my atypical use of backslashes. | |
To prevent being dropped to the EFI Shell prompt in the future, enter your Arch Linux system, become root, and do: | |
# nano /boot/efi/startup.nsh | |
In your startup.nsh file, add these two lines: | |
fs0: | |
\EFI\ArchLinux\grubx64.efi | |
Save and exit nano. To test that you will no longer be dropped to the EFI Shell prompt, poweroff, not reboot, and fire up | |
your Arch Linux system again. | |
If you simply cannot bear the agony of the EFI Shell's five second wait prior to its loading of startup.nsh, hit any key, | |
except for 'esc', and you should be immediately directed to your (hopefully, beautifully configured) grub graphical | |
Arch Linux boot screen. | |
This solution also works when you have installed Arch Linux as an UEFI-enabled Guest system within VirtualBox. | |
__________________________ | |
External USB HDD/SSD Encrypted Arch Installation: | |
Almost all of my standard Arch install procedure can be followed without modification when installing Arch to an external device. | |
However, if you already have an encrypted Arch installation on a system HDD/SSD, you must ensure the names assigned to your | |
PV, VG and LVs are different than whatever you used on your system drive's Arch installation. Failure to use different names | |
will cause major udev and therefore, /dev/mapper, assignment problems for you, especially when you try to mount your | |
multiple encrypted Arch drives! | |
Additionally, we don't want to instruct grub to use standard device names as these are very likely to change when using an | |
external USB drive. For example, our external SSD may be assigned /dev/sdc by udev during installation, but when we try to | |
initially boot from it, udev may assign that external SSD to /dev/sdb, resulting in an unbootable system. | |
The solution is to use PARTUUID, as opposed to a standard device name, in the cryptdevice statement in /etc/default/grub. | |
Therefore, instead of using this example from above: | |
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sdXZ:2016-Global-OpSec-Champion-LyingHillary resume=/dev/mapper/Arch-swap" | |
Run 'blkid' as root, and find the correct PARTUUID for your external device's encrypted partition. | |
N.B.: PARTUUIDs are completely unrelated to UUIDs. | |
Substitute the correct PARTUUID for the standard device name. You should end up with a statement that looks similar to this: | |
GRUB_CMDLINE_LINUX="cryptdevice=PARTUUID=4d2aed94-92d4-7b5e-b8df-81d7554495cf4:ArchUSBSSD resume=/dev/mapper/ArchSSD-swap" | |
Now regardless of the device name assigned by udev to your external drive, the kernel will be able to find the | |
correct cryptdevice. | |
All other parts of my installation procedure should be followed without modification. | |
__________________________ | |
Multi-OS-Booting Notes: | |
I UEFI boot and run more than five operating systems from my SSD. | |
All of my OSes UEFI boot from my single, 100 MiB, EFI partition. | |
All of my OSes have encrypted root and swap, utilizing my SSD's native hardware-based AES-256-bit encryption support | |
with BitLocker or Linux's software-based LUKS on LVM encryption to secure my data, when at rest. | |
My Arch Linux install is just another encrypted Linux OS installation that happens to reside on my SSD. | |
If you multi-boot, ensure you mount Arch's /boot/efi at your existing ESP partition. | |
If you installed Windows 10 first, your EFI partition is likely to be /dev/sda2. | |
In all cases, /boot, /boot/efi, and '/' partitions, at a minimum, are required to be mounted during Arch installation. | |
As an example, an EFI-addicted, multi-OS booter might be doing something like: | |
mount /dev/mapper/Arch-root /mnt | |
swapon /dev/mapper/Arch-swap | |
mkdir /mnt/boot | |
mount /dev/sda17 /mnt/boot | |
mkdir /mnt/boot/efi | |
mount /dev/sda2 /mnt/boot/efi | |
In this example, the user is likely to be using /dev/sda18 as the physical drive partition where their encrypted | |
Arch root and swap filesystems will reside. Note the user's re-use of their existing EFI partition which resides | |
at /dev/sda2. | |
Adapt, as necessary, for your drive's partition structure. | |
Following successful Arch system installation, the path to your Arch-EFI boot file should be: | |
/boot/efi/EFI/ArchLinux/grubx64.efi | |
When you are multi-OS booting correctly, you should have one directory per operating system, each residing at: | |
/boot/efi/EFI/ | |
__________________________ | |
BitLocker Users on Windows Notes: | |
If you are running hardware-based BitLocker encryption on Windows, I recommend you Turn Off BitLocker encryption prior to | |
installing Arch, or any other operating system. | |
As I don't use software-based BitLocker, I cannot say whether leaving it enabled during Arch installation will cause problems. | |
Obviously, if you experience issues, you could turn BitLocker off temporarily. | |
You can tell if you are using AES-256 bit hardware-based BitLocker encryption when you run from within PowerShell, | |
as an Administrator: | |
PS C:\WINDOWS\system32> manage-bde -status | |
You see this line: | |
Encryption Method: Hardware Encryption - 1.3.111.2.1619.0.1.2 | |
Also note that hardware-based BitLocker can either encrypt, or decrypt, a multi-hundred GiB drive in less than 3 seconds. | |
You can re-enable BitLocker after your new encrypted Arch system is UEFI booting correctly and running smoothly. | |
__________________________ | |
Installing a Plasma-KDE Desktop Post Arch Install | |
After you have rebooted into your new Arch system, and are satisfied that every aspect of your system is running correctly, | |
if you're like most people not running an Arch server, you will likely want to install a desktop so you can utilize your new | |
Arch system productively. | |
Your choice of desktop environment is entirely up to you. Personally, I have tried them all. It is my opinion that if | |
you are running a modern, reasonably powered PC or laptop you are doing yourself a significant disservice by running any | |
of the 'lightweight desktops.' I also think the Gnome DE is best suited for children, or unskilled users. Keep in mind | |
that you can install multiple desktops, and then choose which one to fire up at each login, but that is beyond the scope | |
of this guide. | |
I prefer the Plasma5-KDE environment over all the others. If you would like to efficiently install a full Plasma5-KDE | |
environment, do the following, in this order: | |
# Log in as root, and not as a user | |
# Fully update your Arch system: | |
pacman -Syu # If a new kernel becomes available and is now installed, reboot, before proceeding. | |
# If you don't have network connectivity in your Arch system, run: | |
systemctl start dhcpcd <ethernet or wlan interface name> | |
# Now that you have an updated system, do: | |
pacman -S linux-headers | |
pacman -S dkms # This will automatically rebuild your kernel modules as new upstream kernels are released. | |
pacman -S xorg # This will install a mandatory X server. | |
pacman -S xorg-apps | |
reboot | |
__________________________ | |
# Log in as root, and not as a user, and do: | |
pacman -S plasma-meta # This large package set will also provide us with sddm, the recommended Plasma5 login manager. | |
systemctl enable sddm | |
systemctl enable NetworkManager # After your next reboot you will have full, correct, networking support from boot. | |
pacman -S kde-applications-meta | |
pacman -S xdg-user-dirs | |
# If you want full (US English) spelling support for all of your applications, do: | |
pacman -S hunspell-en_US hyphen-en libmythes mythes-en aspell-en | |
# Everyone has their own font preferences, but I agree with Arch's initial ttf-font recommendations because they look great!: | |
pacman -S ttf-dejavu ttf-liberation | |
reboot | |
__________________________ | |
# Log in to sddm's GUI as your user | |
# Your first stop is System Settings. Tweak 'all the things' into full compliance with 'your way.' | |
# Go ROCK your fully enabled Plasma DE, and your properly encrypted Arch Linux system!!! | |
__________________________ |
Hi Array.
Ive made one instalation following this steps. If I want to multi boot now, should i use same boot and boot/efi or a diffrent boot for this new instalation? Should i install grub or just config grub whit this new instalation?
Hi Array,
Guide's working flawless, but I ran into a regular "real world problem". When my laptop is off, and I somehow unluckily hit the power button, or if my children, somehow without me seeing it, lifts the lid and closes it -> the laptop will turn on (ofc), and wait for password to be entered to decrypt the boot folder. There is no timeout , so the laptop will be on until the battery is drained and if it's in the bag it will get warm :)
Yes, real life problem ;)
Is there any way to add a timeout to the password prompt?
i think that using sedutil is better approach
Hi @thepenguinthatwants,
I only boot with grub because of its superb encryption and multi-OS booting support. I have ZERO desire to change a very important tool that I know works flawlessly!
Cheers,
HardenedArray