2020-10-06 19:16:04 +00:00
# Install Arch Linux with encrypted filesystem(optional) and on btrfs partition (UEFI)
2020-10-07 07:41:24 +00:00
Official guide for basic install: [https://wiki.archlinux.org/index.php/Installation_Guide ](https://wiki.archlinux.org/index.php/Installation_Guide )
2020-10-06 15:03:28 +00:00
it is always good to consult with official guide, cause arch config might change in time
2021-07-25 14:20:59 +00:00
For setting up different locale, check official guide
2020-10-06 15:03:28 +00:00
# 1. Boot ISO
### Download the ISO file from [https://www.archlinux.org](https://www.archlinux.org/)
2020-10-07 07:41:24 +00:00
### Put on pedrive
2021-07-25 14:20:59 +00:00
```bash
dd if=archlinux.img of=/dev/sdX bs=16M & & sync
```
2020-10-06 15:03:28 +00:00
### Boot from the usb.
### Set keymap
2021-07-25 14:20:59 +00:00
```bash
loadkeys pl
```
2020-10-07 07:41:24 +00:00
### Update clock
2021-07-25 14:20:59 +00:00
```bash
timedatectl set-ntp true
```
### Optionally (recommended) update mirrorlist
```bash
reflector --country 'Poland' --age 24 --verbose --sort rate --save /etc/pacman.d/mirrorlist
```
2020-10-06 15:03:28 +00:00
# 2. Prepare Disk
### Update btrfs-progs
2021-07-25 14:20:59 +00:00
```bash
pacman -Syy btrfs-progs
```
### Display disks setup
```bash
fdisk -l
```
2020-10-07 07:41:24 +00:00
### Create partitions (if you have not already)
2021-07-25 14:20:59 +00:00
```bash
fdisk /dev/sdX
```
2020-10-07 07:41:24 +00:00
1. 100MB EFI partition
2020-10-06 15:03:28 +00:00
2. 100% size partiton # ( encrypted optionally) for BTRFS, this partition will require formatting AFTER encryption if you do encryption
2020-10-07 07:41:24 +00:00
### Swap will be as file in its own subvolume
2021-07-25 14:20:59 +00:00
```bash
mkfs.vfat -F32 /dev/sdX1
```
2020-10-06 15:03:28 +00:00
### ----------------- encryption (optional) ------------------
### Setup the encryption of the system, don't use letters outside en-us keyboard like ąęć etc. for password
2021-06-29 17:00:33 +00:00
### Grub have some kind of support for luks2 now but still cannot decrypt luks2, so specify luks1 for now
2021-07-25 14:20:59 +00:00
```bash
cryptsetup -c=aes-xts-plain64 --key-size=512 --hash=sha512 --iter-time=3000 --pbkdf=pbkdf2 --use-random luksFormat --type=luks1 /dev/sdX2
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
cryptsetup luksOpen /dev/sdX2 MainPart
```
2020-10-07 07:41:24 +00:00
### Formatting as btrfs now when it is already encrypted
2021-07-25 14:20:59 +00:00
```bash
mkfs.btrfs -L "Arch Linux" /dev/mapper/MainPart
```
2020-10-06 15:03:28 +00:00
### ---------------- end of encryption ------------------------
### Format the partition if not yet formatted:
2021-07-25 14:20:59 +00:00
```bash
pacman -Syy btrfs-progs
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
mkfs.btrfs -L "Arch Linux" /dev/sdX2
```
2020-10-07 07:41:24 +00:00
### Mount partition to be able to create btrfs subvolumes
### If using encryption, change /dev/sdX2 to /dev/mapper/MainPart:
2021-07-25 14:20:59 +00:00
```bash
mount /dev/sdX2 /mnt
```
2020-10-06 15:03:28 +00:00
## Create subvolumes
2020-10-07 07:41:24 +00:00
### Using more complicated sheme, (but there actually is only need for separate @swap subvolume , other files can be on default top subvolume)
2021-07-25 14:20:59 +00:00
```bash
btrfs su cr /mnt/@
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
btrfs su cr /mnt/@swap
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
btrfs su cr /mnt/@home
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
btrfs su cr /mnt/@var
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
btrfs su cr /mnt/@tmp
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
btrfs su cr /mnt/@snapshots
```
2021-06-29 14:22:27 +00:00
#### disable copy on write on var, tmp and swap
2021-07-25 14:20:59 +00:00
```bash
chattr +C /mnt/@var
chattr +C /mnt/@tmp
chattr +C /mnt/@swap
2021-06-29 14:14:17 +00:00
2021-07-25 14:20:59 +00:00
umount /mnt
```
2020-10-07 07:41:24 +00:00
### If using encryption, change /dev/sdX2 to /dev/mapper/MainPart:
2021-07-25 14:20:59 +00:00
```bash
mount -o defaults,noatime,discard,ssd,subvol=@ /dev/sdX2 /mnt
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
mkdir /mnt/swap
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
mkdir /mnt/home
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
mkdir /mnt/var
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
mkdir /mnt/tmp
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
mkdir /mnt/snapshots
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
mkdir /mnt/efi # for EFI partition /dev/sdX1
```
2020-10-07 07:41:24 +00:00
### If using encryption, change /dev/sdX2 to /dev/mapper/MainPart
2021-06-21 12:31:38 +00:00
### for swap subvolume add nodatacow option to disable CoW (works only if its separate partition)
2020-10-07 07:41:24 +00:00
### Discard ssd and noatime are for ssd disks only
2021-07-25 14:20:59 +00:00
```bash
mount -o defaults,noatime,nodatacow,discard,ssd,subvol=@swap /dev/sdX2 /mnt/swap
2020-10-07 07:41:58 +00:00
2021-07-25 14:20:59 +00:00
mount -o defaults,noatime,discard,ssd,subvol=@home /dev/sdX2 /mnt/home
2020-10-07 07:41:58 +00:00
2021-07-25 14:20:59 +00:00
mount -o defaults,noatime,discard,ssd,subvol=@var /dev/sdX2 /mnt/var
2020-10-07 07:41:58 +00:00
2021-07-25 14:20:59 +00:00
mount -o defaults,noatime,discard,ssd,subvol=@tmp /dev/sdX2 /mnt/tmp
2020-10-07 07:41:58 +00:00
2021-07-25 14:20:59 +00:00
mount -o defaults,noatime,discard,ssd,subvol=@snapshots /dev/sdX2 /mnt/snapshots
2020-10-07 07:41:58 +00:00
2021-07-25 14:20:59 +00:00
mount /dev/sdX1 /mnt/efi
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
```
2020-10-06 15:03:28 +00:00
# 3. Install Arch Linux
### Select the mirror to be used if not updated with reflector on start
2021-07-25 14:20:59 +00:00
```bash
nano /etc/pacman.d/mirrorlist
```
2020-10-07 07:41:24 +00:00
### This command can be customized with additional packages
2021-07-25 14:20:59 +00:00
```bash
pacstrap /mnt/ base base-devel git btrfs-progs efibootmgr linux linux-headers linux-firmware mkinitcpio dhcpcd bash-completion sudo
```
### Use genfstab with -U parameter if no encryption
```bash
genfstab /mnt >> /mnt/etc/fstab
```
### If using swapfile check if nodatacow is added for @swap
```bash
vim /mnt/etc/fstab
```
2020-10-06 15:03:28 +00:00
# 4. Configure the system
2020-10-07 07:41:24 +00:00
### Switch to installed system root user
2021-07-25 14:20:59 +00:00
```bash
arch-chroot /mnt /bin/bash
```
2020-10-06 15:03:28 +00:00
2020-10-07 07:41:24 +00:00
### Nano can be usefull when editing config files
2021-07-25 14:20:59 +00:00
```bash
pacman -Syy nano
```
2020-10-06 15:03:28 +00:00
### Setup system clock
2021-07-25 14:20:59 +00:00
```bash
ln -s /usr/share/zoneinfo/Europe/Warsaw /etc/localtime
2021-11-09 08:48:56 +00:00
hwclock --systohc --utc
2021-07-25 14:20:59 +00:00
```
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
### Set the hostname in `/etc/hostname`
```test
myhostname
```
### Edit vconsole in `/etc/vconsole.conf`
```text
KEYMAP=pl
FONT=Lat2-Terminus16.psfu.gz
FONT_MAP=8859-2
```
2020-10-07 07:41:24 +00:00
### Setup locale
2021-07-25 14:20:59 +00:00
### Uncomment pl_PL.UTF-8 in /etc/locale.gen and then run:
```bash
locale-gen
```
### Update locale in `etc/locale.conf`
```text
LANG=en_US.UTF-8
LC_COLLATE=pl_PL.UTF-8
LC_MEASUREMENT=pl_PL.UTF-8
LC_MONETARY=pl_PL.UTF-8
LC_NUMERIC=pl_PL.UTF-8
LC_TIME=pl_PL.UTF-8
```
### Hosts in `/etc/hosts`
```text
127.0.0.1 localhost
::1 localhost
127.0.1.1 myhostname.localdomain myhostname
```
2020-10-31 19:36:18 +00:00
### Now create 4GiB swap file. nodatacow is already on @swap but if you follow exactly then @swap is on same partition as other subvolumes and nodatacow will not work for whole subvolume so you need to disavle CoW manualy :
2021-07-25 14:20:59 +00:00
```bash
touch /swap/swapfile
```
2020-10-07 07:41:24 +00:00
### Check if C attribute is enabled with
2021-07-25 14:20:59 +00:00
```bash
lsattr /swap/swapfile'
```
2020-10-07 07:41:24 +00:00
### If not then disable COW for swapfile manually:
2021-07-25 14:20:59 +00:00
```bash
chattr +C /swap/swapfile
```
2020-10-07 07:41:24 +00:00
### Expanding empty file to 4GiB swap file
2021-07-25 14:20:59 +00:00
```bash
dd if=/dev/zero of=/swap/swapfile bs=1024K count=4096
2020-10-06 15:03:28 +00:00
2021-07-25 14:20:59 +00:00
chmod 600 /swap/swapfile
```
2020-10-06 15:03:28 +00:00
### Format the swap file.
2021-07-25 14:20:59 +00:00
```bash
mkswap /swap/swapfile
```
2020-10-06 15:03:28 +00:00
### Turn swap file on.
2021-07-25 14:20:59 +00:00
```bash
swapon /swap/swapfile
```
### You also need to update `/etc/fstab` to mount swapfile on boot:
```text
/swap/swapfile none swap sw 0 0
```
2020-10-06 15:03:28 +00:00
### Set password for root
2021-07-25 14:20:59 +00:00
```bash
passwd
```
2020-10-06 15:03:28 +00:00
### Add real user
2021-07-25 14:20:59 +00:00
```bash
useradd -m MYUSERNAME
passwd MYUSERNAME
```
2020-10-06 15:03:28 +00:00
### Configure mkinitcpio with modules needed for the initrd image
2021-07-25 14:20:59 +00:00
```bash
vim /etc/mkinitcpio.conf
```
2021-06-29 14:43:11 +00:00
### Remove 'fsck' and add 'keyboard', 'keymap', 'encrypt' and 'btrfs' to HOOKS before filesystems
2020-10-07 07:41:24 +00:00
### If no encryption then only remove fsck and add on that place btrfs
2021-07-25 14:20:59 +00:00
```text
HOOKS=(... keyboard keymap block encrypt btrfs ... filesystems ...)
```
2020-10-06 15:03:28 +00:00
###### optionally add BINARIES=(/usr/bin/btrfs) for rescue?
2021-07-25 14:20:59 +00:00
### Regenerate initrd images
```bash
mkinitcpio -P
```
2020-10-06 15:03:28 +00:00
# 5. Install bootloader
### Setup grub (UEFI)
2021-07-25 14:20:59 +00:00
```bash
pacman -S grub efibootmgr os-prober dosfstools mtools
```
2020-10-06 15:03:28 +00:00
### -------------encryption only---------------------
2021-07-25 14:20:59 +00:00
#### edit `/etc/default/grub`
```text
GRUB_ENABLE_CRYPTODISK=y
```
2021-06-30 15:57:40 +00:00
### Find UUID (UUID for /dev/sdX2) of crypto partition so we can add it to grub config
2021-07-25 14:20:59 +00:00
```bash
blkid
```
2021-06-29 15:34:04 +00:00
### Now set this line including proper UUID in place of "\<device-UUID>":
2021-06-29 17:35:38 +00:00
#### (temporarly you can use /dev/sdX2 in place of "UUID=\<device-UUID>" and change it later easy in gui mode)
2021-07-25 14:20:59 +00:00
edit `/etc/default/grub`
```text
GRUB_CMDLINE_LINUX="cryptdevice=UUID=\<device-UUID>:MainPart:allow-discards"
```
2020-10-06 15:03:28 +00:00
### allow-discards is only for ssd
2021-06-29 15:07:12 +00:00
### Generate key so grub don't ask twice for password on boot
2021-07-25 14:20:59 +00:00
```bash
dd bs=512 count=4 if=/dev/random of=/crypto_keyfile.bin iflag=fullblock
chmod 600 /crypto_keyfile.bin
chmod 600 /boot/initramfs-linux*
cryptsetup luksAddKey /dev/sdX2 /crypto_keyfile.bin
```
2020-10-07 07:41:24 +00:00
### If you change name of key file there is need to add kernel parameter like cryptkey=rootfs:path
### Crypto_keyfile.bin is the default name that kernel will guess anyway
2021-07-25 14:20:59 +00:00
### Now add this file to `/etc/mkinitcpio.conf`
```text
FILES=(/crypto_keyfile.bin)
```
then run:
```bash
mkinitcpio -P
```
2020-10-06 15:03:28 +00:00
### -------------encryption end---------------------
2020-10-07 07:41:24 +00:00
### Install
2021-07-25 14:20:59 +00:00
```bash
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
```
2020-10-06 15:03:28 +00:00
### Exit new system
2021-07-25 14:20:59 +00:00
```bash
exit
```
2020-10-06 15:03:28 +00:00
### Unmount all partitions
2021-07-25 14:20:59 +00:00
```bash
swapoff -a
umount -R /mnt
```
2020-10-06 15:03:28 +00:00
### Reboot into the new system, don't forget to remove the CD/pendrive
2021-07-25 14:20:59 +00:00
```bash
reboot
```
2020-10-06 15:03:28 +00:00
### or
2021-07-25 14:20:59 +00:00
```bash
shutdown now
```
2020-10-07 07:41:24 +00:00
## Addtitional tips
### To get proper locale and keymap, check:
2021-07-25 14:20:59 +00:00
```bash
localectl status
```
2020-10-07 07:41:24 +00:00
### On KDE plasma , also set settings > ... > keyboard layout && regional settings