add documentation for arch installation
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
quarkdown-output
|
||||||
@@ -1,5 +1,10 @@
|
|||||||
###! System Installation
|
###! System Installation
|
||||||
|
|
||||||
- [Download Arch Linux](system-installation/001-download-arch-linux.md)
|
- [Download Arch Linux](system-installation/001-download-arch-linux.qd)
|
||||||
- [Basic System Installation](system-installation/002-basic-system-installation.md)
|
- [Basic System Installation](system-installation/002-basic-system-installation.qd)
|
||||||
|
- [System Configuration](system-installation/003-system-configuration.qd)
|
||||||
|
- [Graphical Environment](system-installation/004-graphical-environment.qd)
|
||||||
|
|
||||||
|
###! Hardware Configuration
|
||||||
|
|
||||||
|
- [Thunderbolt](hardware/001-thunderbolt.qd)
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
.docname {Thunderbolt}
|
||||||
|
.include {docs}
|
||||||
|
|
||||||
|
To connect a laptop with a thunderbolt docking station and use all its features, the thunderbolt docking station must be
|
||||||
|
added as a trusted devoce. Without this, only basic features can be used.
|
||||||
|
|
||||||
|
Install the tool bolt: `sudo pacman -S bolt`
|
||||||
|
|
||||||
|
Then list all available devices with `boltctl list`.
|
||||||
|
|
||||||
|
## Temporarily Authorizing Devices
|
||||||
|
|
||||||
|
A device can be authorized with `boltctl authorize <device id>`
|
||||||
|
|
||||||
|
.example {Example}
|
||||||
|
```sh
|
||||||
|
boldctl authorize 000b400c-2177-d400-ffff-ffffffffffff
|
||||||
|
```
|
||||||
|
|
||||||
|
## Permanently Authorizing Devices
|
||||||
|
|
||||||
|
Above command is only a temporary authorization and will be lost upon reboot. To permanently authorize a device,
|
||||||
|
it should be enrolled.
|
||||||
|
|
||||||
|
Use the `boltctl enroll <device id>` command to permanently enroll a device.
|
||||||
|
|
||||||
|
.example {Example}
|
||||||
|
```sh
|
||||||
|
boltctl enroll 000b400c-2177-d400-ffff-ffffffffffff
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
@@ -39,6 +39,8 @@ A system deployed with fz-stack **will not**:
|
|||||||
>
|
>
|
||||||
> .emoji {warning} Incorrectly executed commands can cause irreversible data loss.
|
> .emoji {warning} Incorrectly executed commands can cause irreversible data loss.
|
||||||
|
|
||||||
|
## Todos
|
||||||
|
|
||||||
[arch-linux]: https://archlinux.org
|
[arch-linux]: https://archlinux.org
|
||||||
[arch-linux-wiki]: https://wiki.archlinux.org/title/Main_page
|
[arch-linux-wiki]: https://wiki.archlinux.org/title/Main_page
|
||||||
[hyprland]: https://hypr.land
|
[hyprland]: https://hypr.land
|
||||||
|
|||||||
@@ -1,71 +0,0 @@
|
|||||||
.docname {Basic System Installation}
|
|
||||||
.include {docs}
|
|
||||||
|
|
||||||
This page explains the basic setup of Arch Linux. It was last updated July 2026.
|
|
||||||
|
|
||||||
> Tip: Always cross check this page with the current version of the [Arch Linux Installation Guide][arch-wiki-install],
|
|
||||||
> as the instructions on this page might be outdated or no longer complete.
|
|
||||||
|
|
||||||
> Important: Commands in this guide will modify your hard disk, including partitions, encryption, and more.
|
|
||||||
> Make sure to understand all commands before you execute them. You will lose data!
|
|
||||||
> Consult the [Arch Wiki][arch-wiki] or the man pages of all commands and options you are unfamiliar with.
|
|
||||||
>
|
|
||||||
> Create a backup of all important data that you do not want to lose before you continue with the installation of
|
|
||||||
> Arch Linux!
|
|
||||||
|
|
||||||
## Preparation
|
|
||||||
|
|
||||||
To install Arch Linux, boot from the installation medium. It might be necessary to change UEFI settings to do so.
|
|
||||||
For example:
|
|
||||||
|
|
||||||
- Disable Secure Boot
|
|
||||||
- Delete existing Boot Sequences or Boot Entries
|
|
||||||
- Enable USB Boot Support
|
|
||||||
- Enabled External USB Ports
|
|
||||||
|
|
||||||
.box {DELL XPS 13 9370} type:{note}
|
|
||||||
In the UEFI settings:
|
|
||||||
|
|
||||||
- Enable the support to boot from USB devices:
|
|
||||||
`System Configuration` -> `USB Configuration` -> `Enable USB Boot Support`
|
|
||||||
- Set `POST Behaviour` -> `Fastboot` to any value other than `Minimal`
|
|
||||||
|
|
||||||
Secure Boot can already be enabled and set to audit mode to facilitate Secure Boot installation later. This allows
|
|
||||||
the machine to boot without any valid secure boot keys with a warning message. As soon as we have set up valid
|
|
||||||
keys and signed our boot image, secure boot can then be enabled to fail on unsigned boot images.
|
|
||||||
|
|
||||||
In the UEFI settings:
|
|
||||||
|
|
||||||
- enable `Secure Boot` -> `Secure Boot Enable` -> `Secure Boot Enable`
|
|
||||||
- set `Secure Boot` -> `Secure Boot Mode` to `Audit Mode`
|
|
||||||
- enable `Secure Boot` -> `Expert Key Management` -> `Enable Custom Mode`
|
|
||||||
|
|
||||||
To access the boot menu or UEFI, press
|
|
||||||
|
|
||||||
- .keybinding {F2} to access UEFI settings
|
|
||||||
- .keybinding {F12} to access one-time boot menu
|
|
||||||
|
|
||||||
## Setting Keyboard Layout and Console Font
|
|
||||||
|
|
||||||
List available console key maps with `localectl list-keymaps`, then set the desired key map with
|
|
||||||
`loadkeys <key map>`.
|
|
||||||
|
|
||||||
Console fonts are located in `/usr/share/kbd/consolefonts` and can be set with `setfont <font>`.
|
|
||||||
|
|
||||||
.example
|
|
||||||
```sh
|
|
||||||
loadkeys de-latin1
|
|
||||||
setfont eurlatgr
|
|
||||||
```
|
|
||||||
|
|
||||||
> Note: These changes are temporary and will be lost during reboot. Should you need to reboot your machine before
|
|
||||||
> the installation is finished and before the settings are persisted, repeat these commands after each boot.
|
|
||||||
|
|
||||||
> Tip: On HiDPI screens, a larger font might be desirable. E.g. `ter-132b` (the largest font), or
|
|
||||||
> `ter-118n`. If you need region-specific special characters, set the key map with the `-m` option,
|
|
||||||
> e.g. `setfont ter-118n -m 88591`.
|
|
||||||
|
|
||||||
## Verify Boot Mode
|
|
||||||
|
|
||||||
[arch-wiki]: https://wiki.archlinux.org/
|
|
||||||
[arch-wiki-install]: https://wiki.archlinux.org/title/Installation_guide
|
|
||||||
@@ -0,0 +1,323 @@
|
|||||||
|
.docname {Basic System Installation}
|
||||||
|
.include {docs}
|
||||||
|
|
||||||
|
This page explains the basic setup of Arch Linux. It was last updated July 2026.
|
||||||
|
|
||||||
|
> Tip: Always cross check this page with the current version of the [Arch Linux Installation Guide][arch-wiki-install],
|
||||||
|
> as the instructions on this page might be outdated or no longer complete.
|
||||||
|
|
||||||
|
> Important: Commands in this guide will modify your hard disk, including partitions, encryption, and more.
|
||||||
|
> Make sure to understand all commands before you execute them. You will lose data!
|
||||||
|
> Consult the [Arch Wiki][arch-wiki] or the man pages of all commands and options you are unfamiliar with.
|
||||||
|
>
|
||||||
|
> Create a backup of all important data that you do not want to lose before you continue with the installation of
|
||||||
|
> Arch Linux!
|
||||||
|
|
||||||
|
## Preparation
|
||||||
|
|
||||||
|
To install Arch Linux, boot from the installation medium. It might be necessary to change UEFI settings to do so.
|
||||||
|
For example:
|
||||||
|
|
||||||
|
- Disable Secure Boot
|
||||||
|
- Delete existing Boot Sequences or Boot Entries
|
||||||
|
- Enable USB Boot Support
|
||||||
|
- Enabled External USB Ports
|
||||||
|
|
||||||
|
.box {DELL XPS 13 9370 (2018)} type:{note}
|
||||||
|
To access the boot menu or UEFI, press
|
||||||
|
|
||||||
|
- .keybinding {F2} to access UEFI settings
|
||||||
|
- .keybinding {F12} to access one-time boot menu
|
||||||
|
|
||||||
|
In the UEFI settings:
|
||||||
|
|
||||||
|
- Enable the support to boot from USB devices:
|
||||||
|
`System Configuration` -> `USB Configuration` -> `Enable USB Boot Support`
|
||||||
|
- Set `POST Behaviour` -> `Fastboot` to any value other than `Minimal`
|
||||||
|
|
||||||
|
Secure Boot can already be enabled and set to audit mode to facilitate Secure Boot installation later. This allows
|
||||||
|
the machine to boot without any valid secure boot keys with a warning message. As soon as we have set up valid
|
||||||
|
keys and signed our boot image, secure boot can then be enabled to fail on unsigned boot images.
|
||||||
|
|
||||||
|
In the UEFI settings:
|
||||||
|
|
||||||
|
- enable `Secure Boot` -> `Secure Boot Enable` -> `Secure Boot Enable`
|
||||||
|
- set `Secure Boot` -> `Secure Boot Mode` to `Audit Mode`
|
||||||
|
- enable `Secure Boot` -> `Expert Key Management` -> `Enable Custom Mode`
|
||||||
|
|
||||||
|
.box {DELL XPS 13 9350 (2024)} type:{note}
|
||||||
|
To access the boot menu or UEFI, press
|
||||||
|
|
||||||
|
- .keybinding {F2} to access UEFI settings
|
||||||
|
- .keybinding {F12} to access one-time boot menu
|
||||||
|
|
||||||
|
In the UEFI Settings:
|
||||||
|
|
||||||
|
- Enable the support to boot from USB devices:
|
||||||
|
enable `Integrated Devices` -> `USB/Thunderbolt Configuration` -> `Enable USB Boot Support`
|
||||||
|
|
||||||
|
Secure Boot should be configured to not use any Microsoft UEFI CA keys and should be prepared for enrollment
|
||||||
|
of a custom certificate
|
||||||
|
|
||||||
|
In the UEFI Settings:
|
||||||
|
|
||||||
|
- enable `Boot Configuration` -> `Secure Boot` -> `Enable Secure Boot`
|
||||||
|
- disable `Boot Configuration` -> `Secure Boot` -> `Enable Microsoft UEFI CA`
|
||||||
|
- set `Boot Configuration` -> `Secure Boot` -> `Secure Boot Mode` to ` Auto Mode`
|
||||||
|
- enable `Boot Configuration` -> `Expert Key Management` -> `Enable Custom Mode`
|
||||||
|
|
||||||
|
## Setting Keyboard Layout and Console Font
|
||||||
|
|
||||||
|
List available console key maps with `localectl list-keymaps`, then set the desired key map with
|
||||||
|
`loadkeys <key map>`.
|
||||||
|
|
||||||
|
Console fonts are located in `/usr/share/kbd/consolefonts` and can be set with `setfont <font>`.
|
||||||
|
|
||||||
|
.example
|
||||||
|
Commonly, I set my systems to
|
||||||
|
```sh
|
||||||
|
loadkeys de-latin1-nodeadkeys
|
||||||
|
setfont eurlatgr
|
||||||
|
```
|
||||||
|
|
||||||
|
> Note: These changes are temporary and will be lost during reboot. Should you need to reboot your machine before
|
||||||
|
> the installation is finished and before the settings are persisted, repeat these commands after each boot.
|
||||||
|
|
||||||
|
> Tip: On HiDPI screens, a larger font might be desirable. E.g. `ter-132b` (the largest font), or
|
||||||
|
> `ter-118n`. If you need region-specific special characters, set the key map with the `-m` option,
|
||||||
|
> e.g. `setfont ter-118n -m 88591`.
|
||||||
|
|
||||||
|
## Verify Boot Mode
|
||||||
|
|
||||||
|
Verify that the system is booted in UEFI mode.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cat /sys/firmware/efi/fw_platform_size
|
||||||
|
```
|
||||||
|
|
||||||
|
This command should return `64`. If the command returns `32`, the system is booted in EUFI mode and has a 32-bit IA32
|
||||||
|
UEFI. While this is supported by Arch Linux, it is not part of this guide.
|
||||||
|
|
||||||
|
If the file does not exist, the system may be booted in BIOS or CSM mode. In this case, disable CMS Mode and restart
|
||||||
|
the computer
|
||||||
|
|
||||||
|
> Important: This guide does not work on systems in BIOS mode, or with IA32 UEFI!
|
||||||
|
|
||||||
|
## Connect to the Internet
|
||||||
|
|
||||||
|
Make sure that the computer is connected to the internet by running the following commands:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ip link # check interface link status
|
||||||
|
ip a # check for valid IP address assignment
|
||||||
|
```
|
||||||
|
|
||||||
|
For a quick test, you can try to ping the arch linux website
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ping -c3 archlinux.org
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are not yet automatically connected, follow one of these steps, depending on the connection type you want
|
||||||
|
to set up.
|
||||||
|
|
||||||
|
1. For wireless lan (WiFi) and WWAN , make sure the wireless network card is not blocked by `rfkill`, check
|
||||||
|
```sh
|
||||||
|
rfkill
|
||||||
|
list
|
||||||
|
```
|
||||||
|
2. Connect to the network:
|
||||||
|
- **Ethernet:** Plug in your cable.
|
||||||
|
- **Wi-Fi:** Authenticate to the wirless network using [`iwctl`][arch-wiki-iwctl].
|
||||||
|
- **Mobile Broadband Modem:** connecto the mobile network with the [`nmcli`][arch-wiki-nmcli] utility.
|
||||||
|
3. Configure the network connection:
|
||||||
|
- **DHCP**: dynamic IP address and DNS server assignment should work out of the box.
|
||||||
|
- **Static IP Address**: See [Network Configuration][arch-wiki-network-configuration]
|
||||||
|
|
||||||
|
## Update the System Clock
|
||||||
|
|
||||||
|
Once a network connection is established, the system clock should be updated automatically. Check the correct date and
|
||||||
|
time has been acquired by running `timedatectl`.
|
||||||
|
|
||||||
|
## Partition the Disks
|
||||||
|
|
||||||
|
Get an overview of available disks with `lsblk` and / or `fdisk -l`. Make sure to identify the drives you want to
|
||||||
|
install Arch Linux to.
|
||||||
|
|
||||||
|
This guide sets up two partitions. The first partition is the EFI system partition. It will be used to boot from a
|
||||||
|
unified kernel image. The second partition will be a LUKS encrypted partition. Inside of it will be a LVM2 container
|
||||||
|
with SWAP, system, and data partitions as you see fit. The unencrypted EFI partition is required for the system to boot.
|
||||||
|
|
||||||
|
> Note: Even though we use LVM2 inside of the LUKS encrypted partition, this setup does not allow for the LVM2 volume
|
||||||
|
> group to span multiple disks. This is a limitation of this setup. If this limitation is unacceptabnle for you, check
|
||||||
|
> [LVM on LUKS in the Arch Wiki][arch-wiki-lvm-on-luks] for workarounds or different partition layouts you can use.
|
||||||
|
|
||||||
|
> Important: The following steps will repartition and format the disks you specify in the commands. Double-check all
|
||||||
|
> drive paths in all commands before continuing. Specifying the wrong drive paths **will erase data** from drives that
|
||||||
|
> you did not intend to erase, and that will be **unrecovarbly** lost!
|
||||||
|
|
||||||
|
### Transitioning from a Previously Unencrypted System
|
||||||
|
|
||||||
|
Repartitioning the drives and switching to a new encrypted disk will not mask any of your previously unencrypted data.
|
||||||
|
The unencrypted data might still be recoverable by data recovery or data forensic tools. If you want to make sure that
|
||||||
|
data previously stored on the disk is un-recoverable, you need to overwrite all of the disk with random data.
|
||||||
|
|
||||||
|
Depending on your disk size and write speed, this can take hours.
|
||||||
|
|
||||||
|
If your disk was already encrypted previously, or you do not consider this necessary, you can [skip to the next
|
||||||
|
section](#create-partitions).
|
||||||
|
|
||||||
|
Overwriting your disk with data can be achieved by the following commands
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cryptsetup open -q --type plain -d /dev/urandom <drive path> to_be_wiped
|
||||||
|
dd bs=4M if=/dev/zero of=/dev/mapper/to_be_wiped conv=fsync oflag=direct status=progress
|
||||||
|
cryptsetup close to_be_wiped
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create Partitions {#create-partitions}
|
||||||
|
|
||||||
|
Create a 1GB EFI partition as the first partition. Use the rest of the disk for the encrypted LUKS partition.
|
||||||
|
To format the disk, use `fdisk <drive path>`. Helpful commands:
|
||||||
|
|
||||||
|
- `m` to show help
|
||||||
|
- `g` to create a new GPT partition table
|
||||||
|
- `n` to create a new partition
|
||||||
|
- `t` to change the type of a partition
|
||||||
|
- The EFI partition should be type `1: EFI System`
|
||||||
|
- The LUKS partition should be type `43: Linuzx RAID`
|
||||||
|
- `w` to write the changes and quit
|
||||||
|
|
||||||
|
### Encrypt the System Partition
|
||||||
|
|
||||||
|
Create a LUKS encrypted system partition and open it
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cryptsetup luksFormat <system partition>
|
||||||
|
cryptsetup open <system partition> cryptlvm
|
||||||
|
```
|
||||||
|
|
||||||
|
### TRIM and Workqueues for SSD Drives
|
||||||
|
|
||||||
|
You can [skip this section](#prepare-lvm) if you are not using a SSD (Solid State Drive).
|
||||||
|
|
||||||
|
You might want to configure TRIM support and disable workqueues to improve performance of SSD Drives.
|
||||||
|
|
||||||
|
> Warning: Enabling TRIM support on an encrypted drive has potential security implications. See [TRIM support for solid
|
||||||
|
> state drives][arch-wiki-trim-support]. If this is an issue, you might want to [skip this section](#prepare-lvm).
|
||||||
|
|
||||||
|
Verify your SSD supports TRIM:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
lsblk --discard
|
||||||
|
```
|
||||||
|
|
||||||
|
Enable TRIM support:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cryptsetup --allow-discards --persistent refresh cryptlvm
|
||||||
|
```
|
||||||
|
|
||||||
|
Drive operation workqueues make sense for slow spinning disks. For SSDs, they usually introduce unnecessary delays.
|
||||||
|
Disabling workqueues can double the speed of file operations on SSDs. Disable the workqueues with the following command.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cryptsetup --perf-no_read_workqueue --perf-no_write_workqueue --persistent refresh cryptlvm
|
||||||
|
```
|
||||||
|
|
||||||
|
### Preparing the Logical Volumes {#prepare-lvm}
|
||||||
|
|
||||||
|
Inside the encrypted system partition, create the logical volumes.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pvcreate /dev/mapper/cryptlvm
|
||||||
|
vgcreate vgsys /dev/mapper/cryptlvm
|
||||||
|
lvcreate -L <swap size> vgsys -n lvswap
|
||||||
|
lvcreate -L 64G vgsys -n lvroot
|
||||||
|
lvcreate -L 64G vgsys -n lvhome
|
||||||
|
lvcreate -L 64G vgsys -n lvopt
|
||||||
|
lvcreate -L 64G vgsys -n lvvar
|
||||||
|
```
|
||||||
|
|
||||||
|
> Tip: The SWAP partition can be of any size. You could even go without one if you have enought RAM. The [Arch
|
||||||
|
> Wiki][arch-wiki] recommends at least 4GB. If you want to be able to use hibernation, I would recommend two times of
|
||||||
|
> your physical RAM size
|
||||||
|
>
|
||||||
|
> The (estimated) minimum SWAP space (in bytes) for successful hibernation can be found by looking at
|
||||||
|
> `cat /sys/power/image_size`. It is usually around 2/5 of the physical RAM.
|
||||||
|
|
||||||
|
### Create the File Systems
|
||||||
|
|
||||||
|
Create the file system on the EFI partition, the logical volumes, and the SWAP.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
mkfs.fat -F 32 -n EFI <efi partition>
|
||||||
|
mkfs.ext4 -L root /dev/vgsys/lvroot
|
||||||
|
mkfs.ext4 -L home /dev/vgsys/lvhome
|
||||||
|
mkfs.ext4 -L opt /dev/vgsys/lvopt
|
||||||
|
mkfs.ext4 -L var /dev/vgsys/lvvar
|
||||||
|
mkswap /dev/vgsys/lvswap
|
||||||
|
```
|
||||||
|
|
||||||
|
### Mount the File Systems
|
||||||
|
|
||||||
|
Mount the created file systems
|
||||||
|
|
||||||
|
```sh
|
||||||
|
swapon /dev/vgsys/lvswap
|
||||||
|
mount /dev/vgsys/lvroot /mnt
|
||||||
|
mount --mkdir /dev/vgsys/lvhome /mnt/home
|
||||||
|
mount --mkdir /dev/vgsys/lvopt /mnt/opt
|
||||||
|
mount --mkdir /dev/vgsys/lvvar /mnt/var
|
||||||
|
mount --mkdir <efi partition> /mnt/efi
|
||||||
|
```
|
||||||
|
|
||||||
|
## Install Packages
|
||||||
|
|
||||||
|
Packages are installed from mirror servers, which are defined in `/etc/pacman.d/mirrorlist`. On the ISO, after
|
||||||
|
connecting to the internet, `reflector` updates the mirror list by choosing the 20 most recently synchronized HTTPS
|
||||||
|
mirrors, sorting them by download speed.
|
||||||
|
|
||||||
|
The higher a mirror is placed in the mirror list, the more priority it is given when downloading a packge. You might
|
||||||
|
want to inspect the mirror list to see if it is satisfactory. If it is not, edit the file accordingly or run `reflector`
|
||||||
|
to create a new mirror list specifying custom sorting parameters.
|
||||||
|
|
||||||
|
The file `/etc/pacman.d/mirrorlist` of the live ISO image is the only configuration file that will be copied from the
|
||||||
|
live ISO to the operating system that is being installed. So investing some time now and getting the mirror list right
|
||||||
|
is worth the effort now.
|
||||||
|
|
||||||
|
.example {Reflector Configuration}
|
||||||
|
The following command will instruct reflector to select the 10 most up to date https mirrors from Germany, Austria,
|
||||||
|
Switzerland, and Netherlands - then sort them by most recently updated.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
reflector \
|
||||||
|
--country Germany,Austria,Switzerland,Netherlands \
|
||||||
|
--protocol https \
|
||||||
|
--latest 10 \
|
||||||
|
--sort age \
|
||||||
|
--save /etc/pacman.d/mirrorlist
|
||||||
|
```
|
||||||
|
|
||||||
|
Install the essential packages to the system
|
||||||
|
|
||||||
|
> Tip: This list already contains some essential software that is strictly not needed for a minimal system install.
|
||||||
|
> If you want to go more minimal, check the Arch Wiki for the minimal set of packages required.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pacstrap -K /mnt base linux linux-firmware \
|
||||||
|
exfatprogs e2fsprogs lvm2 \
|
||||||
|
neovim git base-devel man-db man-pages texinfo \
|
||||||
|
terminus-font intel-ucode efibootmgr sbctl openssh wget
|
||||||
|
```
|
||||||
|
|
||||||
|
> Important: On AMD CPU based systems, replace `intel-ucode` with `amd-ucode`.
|
||||||
|
|
||||||
|
[arch-wiki]: https://wiki.archlinux.org/
|
||||||
|
[arch-wiki-install]: https://wiki.archlinux.org/title/Installation_guide
|
||||||
|
[arch-wiki-iwctl]: https://wiki.archlinux.org/title/Iwd#iwctl
|
||||||
|
[arch-wiki-nmcli]: https://wiki.archlinux.org/title/Mmcli
|
||||||
|
[arch-wiki-network-configuration]: https://wiki.archlinux.org/title/Network_configuration
|
||||||
|
[arch-wiki-lvm-on-luks]: https://wiki.archlinux.org/title/Dm-crypt/Encrypting_an_entire_system#LVM_on_LUKS
|
||||||
|
[arch-wiki-trim-support]: https://wiki.archlinux.org/title/Dm-crypt/Specialties#Discard/TRIM_support_for_solid_state_drives_(SSD)
|
||||||
|
|
||||||
@@ -0,0 +1,483 @@
|
|||||||
|
.docname {System Configuration}
|
||||||
|
.include {docs}
|
||||||
|
|
||||||
|
Configure the system for initial boot.
|
||||||
|
|
||||||
|
## File System Table
|
||||||
|
|
||||||
|
Generate the file system table.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
genfstab -U /mnt >> /mnt/efc/fstab
|
||||||
|
```
|
||||||
|
|
||||||
|
Check the table that was generated in `/mnt/etc/fstab`.
|
||||||
|
|
||||||
|
## Change Root
|
||||||
|
|
||||||
|
Change root into the new system
|
||||||
|
|
||||||
|
```sh
|
||||||
|
arch-chroot /mnt
|
||||||
|
```
|
||||||
|
|
||||||
|
> Tip: From this point onwards you will only be able to access programs that we previously installed using the
|
||||||
|
> `pacstrap` command. So for editing text files, you will need to use `neovim` with the `nvim` command instead of `vim`.
|
||||||
|
> You can install additional programs with `pacman -S <package name>` at any time if you need more tools.
|
||||||
|
|
||||||
|
## Time Zone
|
||||||
|
|
||||||
|
Configure the correct time zone.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ln -sf /usr/sahre/zoneinfo/<Region>/<City> /etc/localtime
|
||||||
|
```
|
||||||
|
|
||||||
|
.example {Europe/Berlin}
|
||||||
|
```sh
|
||||||
|
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
|
||||||
|
```
|
||||||
|
|
||||||
|
Then update the system clock with `hwclock --systohc`.
|
||||||
|
|
||||||
|
## Localization
|
||||||
|
|
||||||
|
Edit the file `/etc/locale.gen` and uncomment all needed locales. Generate the locales afterwards by running
|
||||||
|
`locale-gen`.
|
||||||
|
|
||||||
|
.example {Installed Localizations}
|
||||||
|
I usually enable the following locales onmy systems:
|
||||||
|
- `de_DE.UTF-8 UTF-8`
|
||||||
|
- `de_DE ISO-8859-1`
|
||||||
|
- `de_DE@euro ISO-8859-15`
|
||||||
|
- `en_GB.UTF-8 UTF-8`
|
||||||
|
- `en_GB ISO-8859-1`
|
||||||
|
- `en_US.UTF-8 UTF-8`
|
||||||
|
- `en_US ISO-8859-1`
|
||||||
|
|
||||||
|
Create the file `/etc/locale.conf` and set the `LANG` variable as well as other environment variables accordingly. The
|
||||||
|
settings depend on you rlocation and your personal preference
|
||||||
|
|
||||||
|
.example {Localization}
|
||||||
|
```ini
|
||||||
|
LANG=en_GB.UTF-8
|
||||||
|
LANGUAGE=en_GB.UTF-8
|
||||||
|
LC_CTYPE=en_GB.UTF-8
|
||||||
|
LC_NUMERIC=en_GB.UTF-8
|
||||||
|
LC_TIME=en_GB.UTF-8
|
||||||
|
LC_COLLATE=en_GB.UTF-8
|
||||||
|
LC_MONETARY=de_DE.UTF-8
|
||||||
|
LC_MESSAGES=en_GB.UTF-8
|
||||||
|
LC_PAPER=de_DE.UTF-8
|
||||||
|
LC_NAME=de_DE.UTF-8
|
||||||
|
LC_ADDRESS=de_DE.UTF-8
|
||||||
|
LC_TELEPHONE=de_DE.UTF-8
|
||||||
|
LC_MEASUREMENT=de_DE.UTF-8
|
||||||
|
LC_IDENTIFICATION=de_DE.UTF-8
|
||||||
|
```
|
||||||
|
|
||||||
|
Persist the settings of console keyboard layout and font. Create the file `/etc/vconsole.conf`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
FONT=eurlatgr
|
||||||
|
KEYMAP=de-latin1-nodeadkeys
|
||||||
|
```
|
||||||
|
|
||||||
|
## Network Configuration
|
||||||
|
|
||||||
|
### Hostname
|
||||||
|
|
||||||
|
Set a hostname in `/etc/hostname`
|
||||||
|
|
||||||
|
> Tip: For advice on choosing a hostname, see [RFC 1178][rfc-1178]. As explained in [hostname(7)][hostname-7], it must
|
||||||
|
> contain from 1 to 63 characters, using only lowercase `a` to `z`, `0` to `9`, and `-`, and must not start with `-`.
|
||||||
|
|
||||||
|
Install Network Manager to the network interfaces of the system
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pacman -S networkmanager nm-connection-editor network-manager-applet
|
||||||
|
```
|
||||||
|
|
||||||
|
Then enable the systemd services for Network Manager
|
||||||
|
|
||||||
|
```sh
|
||||||
|
systemctl enable NetworkManager
|
||||||
|
systemctl enable systemd-resolved
|
||||||
|
systemctl enable systemd-timesyncd
|
||||||
|
```
|
||||||
|
|
||||||
|
Create the file `/etc/NetworkManager/conf.d/20-connectivity.conf` with the following content
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[connectivity]
|
||||||
|
uri=https://zechert.net/connectivity_check.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Create the file `/etc/NetworkManager/conf.d/10-dns.conf` with the following content
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[main]
|
||||||
|
dns=systemd-resolved
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use Advertised NTP Servers
|
||||||
|
|
||||||
|
To use the NTP Servers advertised by the DHCP Server, create a new network manager dispatcher script in
|
||||||
|
`/etc/NetworkManager/dispatcher.d/10-update-timesyncd` with the following content
|
||||||
|
|
||||||
|
```sh
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
[ -z "$CONNECTION_UUID" ] && exit 0
|
||||||
|
INTERFACE="$1"
|
||||||
|
ACTION="$2"
|
||||||
|
|
||||||
|
case $ACTION in
|
||||||
|
up | dhcp4-change | dhcp6-change)
|
||||||
|
[ -n "$DHCP4_NTP_SERVERS" ] || exit 0
|
||||||
|
mkdir -p /etc/systemd/timesyncd.conf.d
|
||||||
|
cat <<-THE_END >"/etc/systemd/timesyncd.conf.d/ntp-${CONNECTION_UUID}.conf"
|
||||||
|
[Time]
|
||||||
|
NTP=$DHCP4_NTP_SERVERS
|
||||||
|
THE_END
|
||||||
|
systemctl restart systemd-timesyncd.service
|
||||||
|
;;
|
||||||
|
down)
|
||||||
|
rm -f "/etc/systemd/timesyncd.conf.d/ntp-${CONNECTION_UUID}.conf"
|
||||||
|
systemctl restart systemd-timesyncd.service
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
```
|
||||||
|
|
||||||
|
Make the script executable with `chmod +x /etc/NetworkManager/dispatcher.d/10-update-timesyncd`.
|
||||||
|
|
||||||
|
Create the following file `/etc/systemd/system/networkdown.service`:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Unit]
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network.target network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/bin/true
|
||||||
|
ExecStop=/bin/sh -c 'rm -f /etc/systemd/timesyncd.conf.d/ntp-*.conf'
|
||||||
|
RemainAfterExit=yes
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=suspend.target
|
||||||
|
```
|
||||||
|
|
||||||
|
Enable the service with `systemctl enable networkdown`.
|
||||||
|
|
||||||
|
### Configure MAC Address Randomization
|
||||||
|
|
||||||
|
MAC randomization can be used for increased privacy by not disclosing the real MAC address to the network.
|
||||||
|
|
||||||
|
Create the file `/etc/NetworkManager/conf.d/10-random-mac.conf` with the following content:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[device]
|
||||||
|
wifi.scan-rand-mac-address=yes
|
||||||
|
|
||||||
|
[device-mac-randomization]
|
||||||
|
wifi.scan-rand-mac-address=yes
|
||||||
|
|
||||||
|
[connection-mac-randomization]
|
||||||
|
ethernet.cloned-mac-address=stable
|
||||||
|
wifi.cloned-mac-address=stable
|
||||||
|
```
|
||||||
|
|
||||||
|
### Enable IPv6 Privacy Extensions
|
||||||
|
|
||||||
|
Create the file `/etc/NetworkManager/conf.d/10-ipv6-privacy.conf` with the following content:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[connection]
|
||||||
|
ipv6.ip6-privacy=2
|
||||||
|
```
|
||||||
|
|
||||||
|
Create the file `/etc/sysctl.d/40-ipv6.conf` with the following content:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
net.ipv6.conf.all.use_tempaddr=2
|
||||||
|
net.ipv6.conf.default.use_tempaddr=2
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configure a unique DUID per connection
|
||||||
|
|
||||||
|
NetworkManager uses DUID-UUID from `/etc/machin-id` for all DHCPv6 connections. This might be a security breach.
|
||||||
|
Instead, configure NetworkManager to create unique DUIDs for each connection.
|
||||||
|
|
||||||
|
Create the file `/etc/NetworkManager/conf.d/02-duid.conf` with the following content
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[connection]
|
||||||
|
ipv6.dhcp-duid=stable-uuid
|
||||||
|
```
|
||||||
|
|
||||||
|
### Enable DNSSEC
|
||||||
|
|
||||||
|
Create the file `/etc/systemd/resolved.conf.d/30-dnssec.conf` with the following content
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Resolve]
|
||||||
|
DNSSEC=true
|
||||||
|
```
|
||||||
|
|
||||||
|
> Warning: This will break name resolution for all hostnames that do not offer DNSSEC or that are resolved by
|
||||||
|
> nameservers that do not support DNSSEC. This can break resolution to internal hostnames (e.g. Company Intranet) as
|
||||||
|
> well es some public sites.
|
||||||
|
|
||||||
|
### Disable mDNS
|
||||||
|
|
||||||
|
Create the file `/etc/NetworkManager/conf.d/30-mdns.conf` with the following content
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[connection]
|
||||||
|
connection.mdns=0
|
||||||
|
```
|
||||||
|
|
||||||
|
Create the file `/etc/systemd/resolved.conf.d/30-mdns.conf` with the following content
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Resolve]
|
||||||
|
MulticastDNS=no
|
||||||
|
```
|
||||||
|
|
||||||
|
> Warning: Disabling mDNS will break nameserver-less resolution of local hostnames from the same network (DNS via
|
||||||
|
> multicast DNS Queries). This can break auto-discovery and access to other local machines like local printers, sambda
|
||||||
|
> network drives, other devices, etc.
|
||||||
|
>
|
||||||
|
> Change this to `connection.mdns=1` to fully enable mDNS, `connection.mdns=2` to enable resolution but not announcement
|
||||||
|
> of your own machine to the network. For both of these oiptions, set `MulticastDNS=yes` to enable the functionality in
|
||||||
|
> systemd-resolved (or delete the file).
|
||||||
|
|
||||||
|
### Disabled LLMNR
|
||||||
|
|
||||||
|
Create the file `/etc/NetworkManager/conf.d/30-llmnr.conf` with the following content
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[connection]
|
||||||
|
connection.llmnr=0
|
||||||
|
```
|
||||||
|
|
||||||
|
Create the file `/etc/systemd/resolved.conf.d/30-llmnr.conf` with the following content
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Resolve]
|
||||||
|
LLMNR=no
|
||||||
|
```
|
||||||
|
|
||||||
|
## Mkinitcpio Configuration
|
||||||
|
|
||||||
|
Edit the file `/etc/mkinitcpio.conf` and add the necessary hooks for the system.
|
||||||
|
|
||||||
|
Add the hooks `systemd`, `keyboard`, `sd-vconsole`, `sd-encrypt` to the list of hooks as follows:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt lvm2 filesystems fsck resume)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Set Kernel Command Line
|
||||||
|
|
||||||
|
Create the file `/etc/cmdline.d/01-cryptlvm.conf` with the following content
|
||||||
|
|
||||||
|
```ini
|
||||||
|
rd.luks.name=<UUID of encrypted partition>=cryptlvm
|
||||||
|
```
|
||||||
|
|
||||||
|
The UUID can be found with the command `ls -all /dev/disk/by-uuid`.
|
||||||
|
It can be conveniently copied into the `01-cryptlvm.conf` file with the command
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ls -all /dev/disk/by-uuid | grep "<encrypted partition>" | awk '{print $9}' >> /etc/cmdline.d/01-cryptlvm.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
Create the file `/etc/cmdline.d/02-root.conf` with the following content
|
||||||
|
|
||||||
|
```ini
|
||||||
|
root=/dev/vgsys/lvroot
|
||||||
|
```
|
||||||
|
|
||||||
|
Create the file `/etc/cmdline.d/03-resume.conf` with the following content
|
||||||
|
|
||||||
|
```ini
|
||||||
|
resume=/dev/vgsys/lvswap
|
||||||
|
```
|
||||||
|
|
||||||
|
## Enable Unified Kernel Image Booting
|
||||||
|
|
||||||
|
UKI creates a single executable that can be directly booted from the UEFI firmware without any bootloader.
|
||||||
|
|
||||||
|
Modify the file `/etc/mkinitcpio.d/linux.preset`.
|
||||||
|
|
||||||
|
- Un-comment (i.e. remove `#`) the `PRESET_uki=` parameter for each item in `PRESETS=`
|
||||||
|
- Comment out (i.e. add `#`) `PRESET_image=` to avoid storing a redundant `initramfs-*.img` file
|
||||||
|
|
||||||
|
Create the directory `/efi/EFI/Linux`, then create the initcpio `mkinitcpio -P`.
|
||||||
|
|
||||||
|
Make sure that the generation succeeded and two files have been created (`ls /efi/EFI/Linux`), called
|
||||||
|
`arch-linux-fallback.efi` and `arch-linux.efi` (the fallback image might be missing if it is not enabled in the PRESETS).
|
||||||
|
|
||||||
|
## Create Boot Menu Entries
|
||||||
|
|
||||||
|
With `efibootmgr` check for existing EFI Boot Menu Entries, remove them if required, and create new entries for
|
||||||
|
Arch Linux.
|
||||||
|
|
||||||
|
- List all entries `efibootmgr`
|
||||||
|
- Automatically remove duplicate entries `efibootmgr -D`
|
||||||
|
- Remove a specific boot entry `efibootmgr -b XXXX -B`
|
||||||
|
- Change the order of boot entries with `efibootmgr -o XXXX,YYYY,ZZZZ`
|
||||||
|
|
||||||
|
Create the following two new entries
|
||||||
|
|
||||||
|
```sh
|
||||||
|
efibootmgr --create \
|
||||||
|
--disk <efi partition> \
|
||||||
|
--loader=/EFI/Linux/arch-linux.efi \
|
||||||
|
--label "Arch Linux" \
|
||||||
|
--verbose
|
||||||
|
|
||||||
|
efibootmgr --create \
|
||||||
|
--disk <efi partition> \
|
||||||
|
--loader=/EFI/Linux/arch-linux-fallback.efi \
|
||||||
|
--label "Arch Linux Fallback" \
|
||||||
|
--verbose
|
||||||
|
```
|
||||||
|
|
||||||
|
## Enable Secureboot
|
||||||
|
|
||||||
|
Unfortunately the UEFI kernel image is not stored on an encrypted disk, and cannot be. Since the EFI firmware needs to
|
||||||
|
be able to access the image to boot the system. Therefore, the system is at risk by an attacker that can manipulate the
|
||||||
|
kernel image and boot partition. As a remedy to this problem, we will enable secure boot. The boot loader file will be
|
||||||
|
cryptographically signed by a secret key that is stored on our encrypted partition.
|
||||||
|
|
||||||
|
We will use the tool `sbctl` for a user friendly way to configure secure boot.
|
||||||
|
|
||||||
|
First, check the current status with `sbctl status`. You should see that sbctl is not installed, and that secure boot
|
||||||
|
setup mode is enabled.
|
||||||
|
|
||||||
|
Creeate new keys: `sbctl create-keys`. Then enroll the new keys with `sbctl enroll-keys -m`.
|
||||||
|
|
||||||
|
> Warning: The parameter `-m` in the command `sbctl enroll-keys -m` will enroll your own keys alongside with the default
|
||||||
|
> microsoft keys. The microsoft keys might be required by any option roms or some firmware in the system. You can omit
|
||||||
|
> the option `-m` to only enroll your own keys without Microsoft's. But you might create a system that can no longer
|
||||||
|
> boot! Only do this if you know the risk and know what you are doing. If you want to do this, replace `-m` by
|
||||||
|
> `--yes-this-might-brick-my-machine`.
|
||||||
|
|
||||||
|
## Signing EFI Images
|
||||||
|
|
||||||
|
`sbctl` comes with the necessary hooks pre-installed to automatically sign images when needed. Since we have created new
|
||||||
|
and fresh keys, we need to trigger this now manually once. Run `mkinitcpio -P` to recreate images and trigger `sbctl`
|
||||||
|
into signing the new images.
|
||||||
|
|
||||||
|
## Create a User Account
|
||||||
|
|
||||||
|
Set the password for the user `root`, then create a normal user account.
|
||||||
|
Modify the sudoers file, so that the group sudo has access to the `sudo` command.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
passwd root
|
||||||
|
groupadd -r sudo
|
||||||
|
EDITOR=nvim visudo
|
||||||
|
useradd -c "<full user name"> -m -s /bin/bash <username>
|
||||||
|
usermod -aG adm,log,rfkill,sys,wheel,sudo,video,input <username>
|
||||||
|
chfn <username>
|
||||||
|
passwd <username>
|
||||||
|
```
|
||||||
|
|
||||||
|
Confirm the new user can successfully use `sudo` to elevate permission.
|
||||||
|
|
||||||
|
1. Switch to the created user account `su - <username>`. (.keybinding {ctrl+d} can be used to exit the user account and
|
||||||
|
go back to root)
|
||||||
|
2. Enter `sudo whoami`, check if sudo works. The output should be `root`
|
||||||
|
3. Exit the user account with .keybinding {ctrl+d} or `exit`.
|
||||||
|
|
||||||
|
For increased security, disable login as root with `passwd --lock root`.
|
||||||
|
|
||||||
|
## Configure Pacman and Yay
|
||||||
|
|
||||||
|
Switch to the user account you just created with `su - <username>`.
|
||||||
|
Run the following commands to install `yay`, a AUR package helper.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd ~
|
||||||
|
sudo pacman -S git base-devel go
|
||||||
|
git clone https://aur.archlinux.org/yay.git
|
||||||
|
cd yay
|
||||||
|
makepkg -si
|
||||||
|
yay -S yay
|
||||||
|
cd ~
|
||||||
|
rm -rf yay
|
||||||
|
exit
|
||||||
|
```
|
||||||
|
|
||||||
|
Change the configuration of pacman in `/etc/pacman.conf`. Enable the options you want to set, e.g. `Color`,
|
||||||
|
`VerbosePkgList`, `ParallelDownloads`.
|
||||||
|
|
||||||
|
Then install the package `pacman -S pacman-contrib` and enable the service `systemctl enable paccache.timer`.
|
||||||
|
|
||||||
|
## Enable TRIM
|
||||||
|
|
||||||
|
For SSDs only, enable periodic trim.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
systemctl enable fstrim.timer
|
||||||
|
```
|
||||||
|
|
||||||
|
> Warning: Enabling TRIM can leak some information about the encrypted system, e.g. presence of encrypted file systems,
|
||||||
|
> or even file system types. If this is a concern to you, or you want to achieve plausable deniability, do not enable
|
||||||
|
> TRIM on your system.
|
||||||
|
|
||||||
|
## Recurring Automatic Mirror Selection
|
||||||
|
|
||||||
|
Install reflector with `pacman -S reflector`
|
||||||
|
|
||||||
|
Edit the options in `/etc/xdg/reflector/reflector.conf`. Then enable the timer service `systemctl enable reflector`.
|
||||||
|
|
||||||
|
## Reboot the System
|
||||||
|
|
||||||
|
Reboot the system into the installed Arch Linux.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# exit chroot environment with
|
||||||
|
exit
|
||||||
|
|
||||||
|
# unmount all partitions
|
||||||
|
umount -R /mnt
|
||||||
|
|
||||||
|
# reboot
|
||||||
|
reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
Remove your installation media.
|
||||||
|
|
||||||
|
|
||||||
|
## Activate systemd-resolved Stub Resolver
|
||||||
|
|
||||||
|
After the system rebooted, make sure to set the following symlink!
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
## Connect to the network
|
||||||
|
|
||||||
|
Use `nmtui` to connect to a wireless network, if required.
|
||||||
|
|
||||||
|
## Create a New Keypair
|
||||||
|
|
||||||
|
Create a new ssh keyapair. Alternatively copy an existing one.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ssh-keygen -t ed25519 -C "$(whoami)@$(uname -n)-$(date -I)"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Update the System#
|
||||||
|
|
||||||
|
Run a full system upgrade with `pacman -Syu`.
|
||||||
|
|
||||||
|
[rfc-1178]: https://tools.ietf.org/html/rfc1178
|
||||||
|
[hostname-7]: https://man.archlinux.org/man/hostname.7
|
||||||
|
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
.docname {Graphical Environment}
|
||||||
|
.include {docs}
|
||||||
|
|
||||||
|
The steps necessary to install graphics drivers are very dependent on your device. This guide details the settings I use
|
||||||
|
for my own hardware.
|
||||||
|
|
||||||
|
For general instructions, consult the [Arch Linux Wiki: Graphics][arch-wiki-graphics].
|
||||||
|
|
||||||
|
## Intel Graphics i915 / xe / Arc
|
||||||
|
|
||||||
|
Since Intel provides and supports open source drivers, Intel graphics are essentially plug-and-play. This guide details
|
||||||
|
some customized and improved settings, based on my personal preferences.
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
Install (`sudo pacman -S ...`) the following packages
|
||||||
|
|
||||||
|
- `mesa`: open source OpenGL implementation for most modern drivers, including intel i915 3rd gen hardware
|
||||||
|
- `mesa-utils`: Utilities for `mesa`
|
||||||
|
- `vulkan-intal`: Vulkan support for intel hardware
|
||||||
|
- `vulkan-tools`: Vulkan utilities
|
||||||
|
- `intel-media-driver`: for VA-API support
|
||||||
|
- `libva-utils`: Utilities for VA-API
|
||||||
|
- `vdpauinfo`: Utilities for VDPAU
|
||||||
|
- `nvtop` Utility to show graphics card usage
|
||||||
|
|
||||||
|
Then reboot the computer.
|
||||||
|
|
||||||
|
### Enable GuC / HuC Firmware Loading
|
||||||
|
|
||||||
|
Depending on the hardware support, GuC and HuC should be en abled by default. You can check this by running the
|
||||||
|
following commands
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cat /sys/kernel/debug/dri/0/gt0/uc/guc_info
|
||||||
|
cat /sys/kernel/debug/dri/0/gt0/uc/huc_info
|
||||||
|
```
|
||||||
|
|
||||||
|
> Tip: `0` might need to be replaced by a different number in the commands above. The files will only exist if GuC /
|
||||||
|
> HuC are enabled during boot. A reboot might be required if you cannot see them, or GuC / HuC is disabled in the
|
||||||
|
> system.
|
||||||
|
|
||||||
|
If GuC / HuC is disabled, you can manually enable it. Create the file `/etc/modprobe.d/i915.conf`
|
||||||
|
|
||||||
|
```txt
|
||||||
|
option i915 enable_guc=2
|
||||||
|
```
|
||||||
|
|
||||||
|
Possible options:
|
||||||
|
|
||||||
|
- `1`: Enable GuC but not HuC
|
||||||
|
- `2`: Enable Huc, but not GuC
|
||||||
|
- `3`: Enable HuC and GuC
|
||||||
|
|
||||||
|
.example {Dell XPS 13 9370 (2018)}
|
||||||
|
Supported option is `option i915 enable_guc=2`
|
||||||
|
|
||||||
|
.example {DELL XPS 13 9350 (2024)}
|
||||||
|
The xe driver is still experimental. Once it becomes mainline, GuC/HuC will be enabled by default.
|
||||||
|
|
||||||
|
Then regenerate and sign the initramfs with `mkinictpio -P`
|
||||||
|
|
||||||
|
> Warning: Manually enabling GuC or HuC firmware loading taints the kernel even when the feature is not supported.
|
||||||
|
> Moreover, enabling Guc / HuC firmware loading can cause issues on some systems; disable it if you experience freezing
|
||||||
|
> (for example, after resuming from hibernation).
|
||||||
|
|
||||||
|
### Intel ARC
|
||||||
|
|
||||||
|
Intel ARC GPUs support hardware raytracing support through onboard TSUs. Current performance is mixed.
|
||||||
|
For intel ARC, `linux-firmware-intel` should be installed on the system. It likely is from the base install already.
|
||||||
|
|
||||||
|
## AMD Graphics
|
||||||
|
|
||||||
|
AMD releases their drivers as open source. There are also closed source drivers available for special usecases. This
|
||||||
|
guide will only focus on the open source drivers.
|
||||||
|
|
||||||
|
Install (`sudo pacman -S ...`) the following packages
|
||||||
|
|
||||||
|
- `mesa` modern OpenGL drivers for most hardware
|
||||||
|
- `mesa-utils` utility programs for mesa
|
||||||
|
- `vulkan-radeon` vulkan support
|
||||||
|
- `vulkan-tools` utility programs for vulkan
|
||||||
|
- `libva-mesa-driver` to support accelerated video decoding using VA-API
|
||||||
|
- `libva-utils` utility programs for VA-API
|
||||||
|
- `mesa-vdpau` support for VDPAU
|
||||||
|
- `vdpauinfo` utility programs for VDPAU
|
||||||
|
- `nvtop` to monitor temparature, clock speed, and usage of the graphics card
|
||||||
|
|
||||||
|
Then reboot the system.
|
||||||
|
|
||||||
|
|
||||||
|
## Reboot
|
||||||
|
|
||||||
|
Do not forget to reboot the system after changes to the graphics drivers have been made.
|
||||||
|
|
||||||
|
## Install Hyprland
|
||||||
|
|
||||||
|
To install Hyprland, install the following packages that will include some necessary utilities for the system
|
||||||
|
|
||||||
|
```sh
|
||||||
|
yay -S --needed \
|
||||||
|
hyprland hyprpaper hypridle hyprlock waybar wofi kitty nemo gvfs gvfs-mtp gvfs-smb \
|
||||||
|
xdg-desktop-portal xdg-desktop-portal-hyprland xdg-desktop-portal-gtk xdg-utils \
|
||||||
|
wl-clipboard grim slurp swaync network-manager-applet polkit polkit-gnome chezmoi \
|
||||||
|
wev btop qt5-wayland qt6-wayland qt5ct qt6ct gtk-engine-murrine \
|
||||||
|
colloid-catppuccin-gtk-theme papirus-icon-theme breeze-icons \
|
||||||
|
pipewire pipewire-audio pipewire-alsa pipewire-pulse pipewire-jack wireplumber \
|
||||||
|
pavucontrol alsa-utils \
|
||||||
|
ttf-bitstream-vera ttf-croscore ttf-dejavu ttf-droid gnu-free-fonts ttf-libreation \
|
||||||
|
ttf-libertinus otf-libertinus noto-fonts ttf-roboto ttf-ubuntu-font-family \
|
||||||
|
ttf-anonymous-pro ttf-cascadia-code ttf-fira-mono otf-fira-mono inter-font \
|
||||||
|
ttf-ms-fonts ttf-vista-fonts ttf-roboto-mono-nerd ttf-firacode-nerd \
|
||||||
|
otf-firamono-nerd otf-font-awesome \
|
||||||
|
noto-fonts-emoji noto-fonts-cjk noto-fonts-extra ttf-jetbrains-mono \
|
||||||
|
ttf-jetbrains-mono-nerd \
|
||||||
|
firefox librewolf-bin thunderbird \
|
||||||
|
git make gcc curl ripgrep fzf jq tar unzip inotify-tools socat brightnessctl \
|
||||||
|
xdg-user-dirs fastfetch figlet openssh tmux man-db man-pages usbutils pciutils \
|
||||||
|
uwsm libnewt
|
||||||
|
```
|
||||||
|
|
||||||
|
You can now start hyprland with `uwsm start hyprland.desktop`.
|
||||||
|
|
||||||
|
|
||||||
|
[arch-wiki-graphics]: https://wiki.archlinux.org/title/Category:Graphics
|
||||||
Reference in New Issue
Block a user