refactor(all): complete rewrite
This commit is contained in:
parent
9f928f4786
commit
757d21f0e8
67 changed files with 4053 additions and 974 deletions
636
src/content/blog/artix-install-guide/index.md
vendored
Normal file
636
src/content/blog/artix-install-guide/index.md
vendored
Normal file
|
@ -0,0 +1,636 @@
|
|||
---
|
||||
title: "Artix Linux install guide"
|
||||
description: "Guide to installing Artix Linux with OpenRC and full disk encryption for UEFI and BIOS systems."
|
||||
date: "2025-01-07"
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
## Introduction
|
||||
|
||||
The goal of this guide is to set up a minimal installation of **Artix Linux** with **OpenRC** as an init system and **full disk encryption** on an **UEFI** or **BIOS** system. This guide is meant to be read alongside the wiki's.
|
||||
|
||||
---
|
||||
|
||||
## Acquire an installation image
|
||||
|
||||
1. Go to the downloads page https://artixlinux.org/download.php
|
||||
2. Scroll down to the **Official ISO images** section.
|
||||
3. Under the **base** section, download the file starting with `artix-base-openrc` and ending with `.iso`
|
||||
|
||||
---
|
||||
|
||||
## Prepare an installation medium
|
||||
|
||||
### Windows
|
||||
|
||||
Use [Rufus](https://rufus.ie/en), here is a [guide](https://www.wikihow.com/Use-Rufus) if you need it.
|
||||
|
||||
### Linux
|
||||
|
||||
1. Insert a USB flash drive into your PC with at least 2 GB of space available on it.
|
||||
2. Find the corresponding block device for the flash drive in `/dev` folder. Usually it is `/dev/sdb`.
|
||||
3. Burn the image to the flash drive (assuming your flash drive is /dev/sdb and that your terminal is opened in the directory of the image)
|
||||
|
||||
```sh
|
||||
sudo dd bs=4M if=./artix-base-openrc-YYYY.MM.DD-x86_64.iso of=/dev/sdb conv=fsync oflag=direct status=progress
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Boot the live environment
|
||||
|
||||
> [!Info]
|
||||
>Artix Linux installation images do not support Secure Boot. You will need to disable Secure Boot to boot the installation medium.
|
||||
|
||||
1. Power off your PC.
|
||||
2. Insert the flash drive into the computer on which you are installing Artix Linux.
|
||||
3. Power on your PC and press _boot menu_ key.
|
||||
4. Boot the installation medium.
|
||||
|
||||
---
|
||||
|
||||
## Enter the live environment
|
||||
Login with the default credentials.
|
||||
* Username: `root`
|
||||
* Password: `artix`
|
||||
|
||||
## Connect to the internet
|
||||
|
||||
### Via Ethernet
|
||||
|
||||
Connect the computer via an Ethernet cable
|
||||
|
||||
### Via WiFi
|
||||
|
||||
> [!Note]
|
||||
>When encountering a code block as below throughout this guide, execute the commands within it directly in the terminal.
|
||||
|
||||
```sh
|
||||
sudo rfkill unblock wifi
|
||||
sudo ip link set wlan0 up
|
||||
connmanctl
|
||||
```
|
||||
|
||||
> [!Tip]
|
||||
>Network names can be tab-completed.
|
||||
|
||||
```sh
|
||||
agent on
|
||||
scan wifi
|
||||
services
|
||||
```
|
||||
|
||||
> [!example]
|
||||
>connect wifi_dc85de828967_38303944616e69656c73_managed_psk
|
||||
|
||||
```sh
|
||||
connect {WiFi name}
|
||||
quit
|
||||
```
|
||||
|
||||
### Verify internet connectivity
|
||||
|
||||
Check for internet
|
||||
```sh
|
||||
ping artixlinux.org
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Update the system clock
|
||||
|
||||
Activate the NTP daemon to synchronize the computer's real-time clock:
|
||||
```sh
|
||||
rc-service ntpd start
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Partition the disk
|
||||
|
||||
1. Install `gdisk`.
|
||||
```sh
|
||||
pacman -Sy gdisk
|
||||
```
|
||||
|
||||
2. Partition your drive. You can find your drive name using the `lsblk` command.
|
||||
|
||||
> [!Note]
|
||||
> `nvme0n1` will be used as the target install drive throughout this guide, adapt it to your drive name.
|
||||
> If you have an hdd, your drive will start with `sda`.
|
||||
|
||||
```sh
|
||||
gdisk /dev/nvme0n1
|
||||
```
|
||||
|
||||
2. Delete any existing partitions
|
||||
```txt
|
||||
Command (m for help): d
|
||||
```
|
||||
|
||||
3. Create a boot partition
|
||||
```txt
|
||||
Command (m for help): n
|
||||
Partition number (1-128, default 1):
|
||||
First sector (...):
|
||||
Last sector (...): +512M
|
||||
Hex code or GUID (...): ef00
|
||||
```
|
||||
|
||||
4. Create a root partition
|
||||
```txt
|
||||
Command (m for help): n
|
||||
Partition number (2-128, default 1):
|
||||
First sector (...):
|
||||
Last sector (...):
|
||||
Hex code or GUID (...): 8300
|
||||
```
|
||||
|
||||
5. Save the changes
|
||||
```txt
|
||||
Command (m for help): w
|
||||
Do you want to proceed? (Y/N): y
|
||||
```
|
||||
|
||||
6. Verify partitioning
|
||||
```sh
|
||||
lsblk
|
||||
```
|
||||
|
||||
> [!Note]
|
||||
>It should look something like this:
|
||||
|
||||
```txt
|
||||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
|
||||
nvme0n1 259:0 0 465,8G 0 disk
|
||||
├─nvme0n1p1 259:1 0 512M 0 part
|
||||
└─nvme0n1p2 259:2 0 465,3G 0 part
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Encrypt root partition
|
||||
|
||||
1. Encrypt your root partition.
|
||||
|
||||
> [!Tip]
|
||||
>Make sure to enter a secure passphrase and to write it down in a secure place as you will not be able to change it later
|
||||
|
||||
```sh
|
||||
cryptsetup luksFormat /dev/nvme0n1p2
|
||||
Are you sure (Type `yes` in capital letters): YES
|
||||
```
|
||||
|
||||
2. Open the encrypted partition
|
||||
```sh
|
||||
cryptsetup open /dev/nvme0n1p2 root
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Create file systems
|
||||
|
||||
1. Create the boot file system
|
||||
```sh
|
||||
mkfs.fat -F32 /dev/nvme0n1p1
|
||||
```
|
||||
|
||||
1. Create the root file system
|
||||
```sh
|
||||
mkfs.ext4 /dev/mapper/root
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Mount file systems
|
||||
|
||||
1. Mount the root file system
|
||||
```sh
|
||||
mount /dev/mapper/root /mnt
|
||||
```
|
||||
|
||||
2. Mount the boot file system
|
||||
```sh
|
||||
mount -m /dev/nvme0n1p1 /mnt/boot
|
||||
```
|
||||
|
||||
3. Verify mounting
|
||||
```sh
|
||||
lsblk
|
||||
```
|
||||
|
||||
> [!Note]
|
||||
>It should look something like this:
|
||||
|
||||
```txt
|
||||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
|
||||
nvme0n1 259:0 0 465,8G 0 disk
|
||||
├─nvme0n1p1 259:1 0 512M 0 part /mnt/boot
|
||||
└─nvme0n1p2 259:2 0 465,3G 0 part
|
||||
└─root 254:0 0 465,2G 0 crypt /mnt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Install Essentials
|
||||
|
||||
Install the base system, kernel, init system and other essential packages.
|
||||
|
||||
```sh
|
||||
basestrap /mnt base linux linux-firmware openrc elogind-openrc cryptsetup cryptsetup-openrc efibootmgr doas nano
|
||||
```
|
||||
|
||||
> [!Note]
|
||||
> Install AMD or Intel microcode, depending on your system's CPU
|
||||
|
||||
### AMD CPU
|
||||
|
||||
Install AMD CPU microcode updates
|
||||
|
||||
```sh
|
||||
basestrap /mnt amd-ucode
|
||||
```
|
||||
|
||||
### Intel CPU
|
||||
|
||||
Install Intel CPU microcode updates
|
||||
|
||||
```sh
|
||||
basestrap /mnt intel-ucode
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Generate File System Table
|
||||
|
||||
```sh
|
||||
fstabgen -U /mnt >> /mnt/etc/fstab
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Switch to New Installation
|
||||
|
||||
```sh
|
||||
artix-chroot /mnt bash
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Network stack
|
||||
|
||||
```sh
|
||||
pacman -S wpa_supplicant networkmanager networkmanager-openrc iwd iwd-openrc
|
||||
rc-update add NetworkManager
|
||||
rc-update add iwd
|
||||
|
||||
cat << EOF >> /etc/NetworkManager/conf.d/wifi_backend.conf
|
||||
[device]
|
||||
wifi.backend=iwd
|
||||
EOF
|
||||
```
|
||||
|
||||
### MAC randomization
|
||||
|
||||
> [!Info]
|
||||
>MAC randomization can be used for increased privacy by not disclosing your real MAC address to the WiFi network.
|
||||
|
||||
```sh
|
||||
cat << EOF >> /etc/NetworkManager/conf.d/00-macrandomize.conf
|
||||
[device-mac-randomization]
|
||||
wifi.scan-rand-mac-address=yes
|
||||
|
||||
[connection-mac-randomization]
|
||||
ethernet.cloned-mac-address=random
|
||||
wifi.cloned-mac-address=random
|
||||
EOF
|
||||
```
|
||||
|
||||
## Localization
|
||||
|
||||
### Set the locale
|
||||
|
||||
> [!Note]
|
||||
>Feel free to change `en_DK.UTF-8` to your preferred locale such as `en_US.UTF-8` or `en_GB.UTF-8`
|
||||
|
||||
1. Uncomment `en_DK.UTF-8`
|
||||
```sh
|
||||
nano /etc/locale.gen
|
||||
```
|
||||
|
||||
2. Generate locales.
|
||||
```sh
|
||||
locale-gen
|
||||
echo 'LANG=en_DK.UTF-8' > /etc/locale.conf
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Set the time zone
|
||||
|
||||
> [!example]
|
||||
>`ln -sf /usr/share/zoneinfo/Asia/Dubai /etc/localtime`
|
||||
|
||||
```sh
|
||||
ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Set hardware clock from system clock
|
||||
|
||||
```sh
|
||||
hwclock --systohc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Hostname and Host
|
||||
|
||||
> [!Note]
|
||||
>Change `artix` to your desired hostname in all of the following commands
|
||||
|
||||
```sh
|
||||
echo 'artix' > /etc/hostname
|
||||
```
|
||||
|
||||
1. Edit `/etc/conf.d/hostname`
|
||||
```sh
|
||||
nano /etc/conf.d/hostname
|
||||
```
|
||||
|
||||
2. Replace `hostname="localhost"` with `hostname="artix"`
|
||||
|
||||
3. Edit `/etc/hosts`
|
||||
```sh
|
||||
nano /etc/hosts
|
||||
```
|
||||
|
||||
4. Add the following:
|
||||
```conf
|
||||
127.0.0.1 localhost
|
||||
::1 localhost
|
||||
127.0.1.1 artix.localdomain artix
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Initramfs
|
||||
|
||||
1. Edit `/etc/mkinitcpio.conf`
|
||||
```sh
|
||||
nano /etc/mkinitcpio.conf
|
||||
```
|
||||
|
||||
2. In the `HOOKS` array, add `encrypt` between `block` and `filesystems`
|
||||
|
||||
> [!Note]
|
||||
>It should look something like this:
|
||||
|
||||
```conf
|
||||
HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt filesystems fsck)
|
||||
```
|
||||
|
||||
3. Run this
|
||||
|
||||
```sh
|
||||
mkinitcpio -P
|
||||
```
|
||||
---
|
||||
|
||||
## Add a user
|
||||
|
||||
1. Set the root password.
|
||||
```sh
|
||||
passwd
|
||||
```
|
||||
|
||||
2. Create a user and set his password.
|
||||
|
||||
> [!Tip]
|
||||
>Change `artix` to your desired username
|
||||
|
||||
```sh
|
||||
useradd -m artix
|
||||
passwd artix
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configure doas
|
||||
|
||||
1. Create the config file.
|
||||
```sh
|
||||
touch /etc/doas.conf
|
||||
chown -c root:root /etc/doas.conf
|
||||
chmod -c 0400 /etc/doas.conf
|
||||
```
|
||||
|
||||
2. Edit `/etc/doas.conf`
|
||||
```sh
|
||||
nano /etc/doas.conf
|
||||
```
|
||||
|
||||
3. Add the following:
|
||||
```conf
|
||||
permit artix as root
|
||||
permit nopass artix as root cmd pacman
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Boot Loader
|
||||
### Check for UEFI support
|
||||
|
||||
> [!Tip]
|
||||
>If you see a bunch of files listed, use EFISTUB.
|
||||
>If you do not see a bunch of files listed, your system does not support UEFI and you should use GRUB.
|
||||
|
||||
```sh
|
||||
ls /sys/firmware/efi/efivars
|
||||
```
|
||||
|
||||
### EFISTUB
|
||||
|
||||
1. Get the UUID of your root partition.
|
||||
```sh
|
||||
blkid -s UUID -o value /dev/nvme0n1p2
|
||||
```
|
||||
|
||||
2. Create a boot entry where xxxx is the UUID that you obtained earlier.
|
||||
|
||||
> [!Tip]
|
||||
>Replace xxxx with the UUID that you obtained earlier.
|
||||
>Replace `intel-ucode.img` with `amd-ucode.img` if you have an AMD CPU
|
||||
|
||||
```sh
|
||||
efibootmgr -c -d /dev/nvme0n1 -p 1 -l /vmlinuz-linux -L "Artix" -u "cryptdevice=UUID=xxxx:root root=/dev/mapper/root rw initrd=\intel-ucode.img initrd=\initramfs-linux.img loglevel=3 quiet"
|
||||
```
|
||||
|
||||
### GRUB
|
||||
|
||||
1. Install grub on your boot partition
|
||||
```sh
|
||||
pacman -S grub
|
||||
grub-install /dev/sda
|
||||
```
|
||||
|
||||
2. Get the UUID of your root partition.
|
||||
```sh
|
||||
blkid -s UUID -o value /dev/nvme0n1p2
|
||||
```
|
||||
|
||||
3. Edit `/etc/default/grub`
|
||||
```sh
|
||||
nano /etc/default/grub
|
||||
```
|
||||
|
||||
4. Add the following to the `GRUB_CMDLINE_LINUX` line, where xxxx is the UUID that you obtained earlier.
|
||||
```conf
|
||||
cryptdevice=UUID=xxxx:root root=/dev/mapper/root
|
||||
```
|
||||
|
||||
> [!Note]
|
||||
>It should look something like this:
|
||||
|
||||
```conf
|
||||
GRUB_CMDLINE_LINUX="cryptdevice=UUID=550e8400-e29b-41d4-a716-446655440000:root root=/dev/mapper/root"
|
||||
```
|
||||
|
||||
5. Uncomment `#GRUB_ENABLE_CRYPTODISK=y`
|
||||
|
||||
6. Generate the config file.
|
||||
```sh
|
||||
grub-mkconfig -o /boot/grub/grub.cfg
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Reboot
|
||||
|
||||
1. You can reboot and enter into your new installation.
|
||||
```sh
|
||||
exit
|
||||
umount -R /mnt
|
||||
reboot now
|
||||
```
|
||||
|
||||
> [!Note]
|
||||
>Unplug your flash drive after the screen turns black.
|
||||
|
||||
---
|
||||
|
||||
## Post install
|
||||
|
||||
You will now be greeted with a similar screen as when you first booted from the flash drive.
|
||||
Login using the credentials that you set, if you followed the example your username would be `artix`.
|
||||
|
||||
### Add arch repositories and sort for fastest mirrors
|
||||
#### Add arch extra repository
|
||||
|
||||
1. Install packages
|
||||
```sh
|
||||
doas pacman -Syu artix-archlinux-support curl
|
||||
doas pacman-key --populate archlinux
|
||||
doas sh -c "curl https://archlinux.org/mirrorlist/all -o /etc/pacman.d/mirrorlist-arch"
|
||||
```
|
||||
|
||||
2. Edit `/etc/pacman.d/mirrorlist-arch`
|
||||
```sh
|
||||
doas nano /etc/pacman.d/mirrorlist-arch
|
||||
```
|
||||
|
||||
3. Uncomment the first server entries under the worldwide section
|
||||
|
||||
4. Edit `/etc/pacman.conf`
|
||||
```sh
|
||||
doas nano /etc/pacman.conf
|
||||
```
|
||||
|
||||
5. Add the following to the bottom of the file
|
||||
```conf
|
||||
##Arch
|
||||
[extra]
|
||||
Include = /etc/pacman.d/mirrorlist-arch
|
||||
|
||||
##[multilib]
|
||||
##Include = /etc/pacman.d/mirrorlist-arch
|
||||
```
|
||||
|
||||
#### Sort for fastest mirrors
|
||||
|
||||
```sh
|
||||
doas pacman -Syu reflector pacman-contrib
|
||||
doas reflector --verbose -p https -l 30 -f 5 --sort rate --save /etc/pacman.d/mirrorlist-arch
|
||||
doas sh -c "curl https://gitea.artixlinux.org/packages/artix-mirrorlist/raw/branch/master/mirrorlist -o /etc/pacman.d/mirrorlist.bak"
|
||||
doas sh -c "rankmirrors -v -n 5 /etc/pacman.d/mirrorlist.bak > /etc/pacman.d/mirrorlist"
|
||||
```
|
||||
|
||||
### AUR
|
||||
#### Install paru
|
||||
|
||||
```sh
|
||||
doas pacman -S --needed base-devel
|
||||
git clone https://aur.archlinux.org/paru.git
|
||||
cd paru
|
||||
makepkg -si
|
||||
cd ..
|
||||
rm -rf paru
|
||||
```
|
||||
|
||||
#### Replace sudo with doas
|
||||
|
||||
```sh
|
||||
doas pacman -Rdd sudo
|
||||
doas ln -s /usr/bin/doas /usr/bin/sudo
|
||||
```
|
||||
|
||||
### Laptop power profiles
|
||||
|
||||
Install and enable the powerprofiles daemon
|
||||
|
||||
```sh
|
||||
doas pacman -S power-profiles-daemon power-profiles-daemon-openrc
|
||||
doas rc-update add power-profiles-daemon
|
||||
doas rc-service power-profiles-daemon start
|
||||
```
|
||||
|
||||
### Add swap
|
||||
|
||||
```sh
|
||||
doas fallocate -l 4G /swapfile
|
||||
doas chmod 600 /swapfile
|
||||
doas mkswap /swapfile
|
||||
doas swapon /swapfile
|
||||
doas cp /etc/fstab /etc/fstab.bak
|
||||
echo '/swapfile none swap sw 0 0' | doas tee -a /etc/fstab
|
||||
```
|
||||
|
||||
### Auto-mount an external LUKS encrypted drive
|
||||
|
||||
```sh
|
||||
doas fdisk /dev/sdb
|
||||
>g, n, w
|
||||
|
||||
doas cryptsetup luksFormat /dev/sdb1
|
||||
doas cryptsetup luksOpen /dev/sdb1 hdd1
|
||||
doas mkfs.ext4 /dev/mapper/hdd1
|
||||
doas mkdir /mnt/hdd1
|
||||
doas mount /dev/mapper/hdd1 /mnt/hdd1
|
||||
doas chown artix:artix /mnt/hdd1
|
||||
doas dd if=/dev/urandom of=/root/keyfile_hdd1 bs=512 count=4
|
||||
doas chmod 0400 /root/keyfile_hdd1
|
||||
doas cryptsetup luksAddKey /dev/sdb1 /root/keyfile_hdd1
|
||||
UUID=$(doas blkid -s UUID -o value /dev/sdb1)
|
||||
|
||||
doas sh -c "cat << EOF >> /etc/conf.d/dmcrypt
|
||||
target=hdd1
|
||||
source=UUID='$UUID'
|
||||
key=/root/keyfile_hdd1
|
||||
wait=2
|
||||
EOF"
|
||||
|
||||
doas rc-update add dmcrypt boot
|
||||
doas reboot
|
||||
```
|
Loading…
Add table
Add a link
Reference in a new issue