Installation de Arch Linux
Aujourd'hui je dois réinstaller mon système suite quelques problèmes techniques. Je fais chacun de mes installations de Arch Linux avec quelques petites modifications pour explorer de nouvelles divers approches. Nous allons voir ensemble cette l'installation.
Spécifications
- Système de fichier: BTRFS au dessus de LUKS2 (chiffrement)
- Gestionnaire de boot: systemd-boot
- Type de démarrage: UEFI
Matériel
Comme je réalise régulièrement des installations de différents OS j'utilise un IODD ST400 sur lequel j'ajoute simplement mes fichiers ISO et me permettant de créer des lecteurs CD virtuels via USB.
En ce qui concerne la machine sur laquelle je fais faire cette installation il s'agit d'un Framework Laptop 16:
- AMD Ryzen™ 9 7940HS
- 64Go RAM DDR5
- 2x2To SSD
- Radeon™ RX 7700S
Cette installation sera donc pour les processeurs AMD, avec la configuration pour une carte graphique AMD et sur le premier SSD.
Connexion au Wifi
Afin de vous connecter au wifi nous allons utiliser la iwd
.
Dans un premier temps vous devez récupérer le nom de votre carte réseau, dans mon cas il s'agit de wlan0
:
# iwctl station list
Ensuite vous pouvez vous connecter à votre réseau:
# iwctl station <carte reseau> connect <SSID>
Stockage
Afin de pouvoir procéder à l'installation nous devons commencer par préparer le disque sur lequel mettre notre système.
Création des partitions
Vous pouvez identifier ce disque :
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 794.4M 1 loop /run/archiso/airootfs
sda 8:0 1 931.5G 0 disk
└─sda1 8:1 1 931.5G 0 part
sr0 11:0 1 1.1G 0 rom /run/archiso/bootmnt
nvme0n1 259:4 0 1.9T 0 disk
Ici mon disque est nvme0n1
.
Maintenant que le disque est identifié (assurez-vous qu'il s'agit du bon) nous allons supprimer la table de partition actuellement existente:
sgdisk --zap-all /dev/nvme0n1
Ensuite nous allons définir notre table de partition enn y incluant des labels. Ayant beaucoup de RAM et un disque SSD je ne vais pas mettre de SWAP sur mon disque. Il n'y aura donc que 2 partitions :
sgdisk --clear --new=1:0:+512MiB --typecode=1:ef00 --change-name=1:EFI --new=2:0:0 --typecode=2:8300 --change-name=2:cryptsystem /dev/nvme0n1
La première partition sera utilisée pour le boot EFI et la deuxième pour le système.
Nous pouvons vérifier la table de partition :
# fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors
Disk model: WD PC SN740 SDDPTQE-2T00
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 33857BEA-76EC-43B4-AAD5-4743FCF68B43
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 1050623 1048576 512M EFI System
/dev/nvme0n1p2 1050624 4000797326 3999746703 1.9T Linux filesystem
Ensuite procédons à la création de notre partition chiffrée :
cryptsetup luksFormat --type luks2 --align-payload=8192 -s 256 -c aes-xts-plain64 /dev/disk/by-partlabel/cryptsystem
Puis ouvrir le conteneur chiffré :
cryptsetup open /dev/disk/by-partlabel/cryptsystem system
Création des système de fichiers
Nous allons procéder au formatage des partitions, BTRFS pour le partition systèmè et vfat pour la partition EFI.
Système
mkfs.btrfs --label system /dev/mapper/system
Maintenant il faut définir un layout pour BTRFS afin de pouvoir gérer correctement la fonction de snapshots du système de fichier par la suite. Voici mon layout :
Sous volume | Point de montage |
---|---|
@ | / |
@home | /home |
@root | /root |
@snapshots | /.snapshots |
@opt | /opt |
@srv | /srv |
@tmp | /tmp |
@usr_local | /usr/local |
@var | /var |
@var_log | /var/log |
@var_cache | /var/cache |
@var_tmp | /var/tmp |
@libvirt | /var/lib/libvirt/images |
Pour procéder à la création des sous volumes nous allons monter la partition :
mount -t btrfs LABEL=system /mnt
Et procéder à la création de ces derniers:
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@root
btrfs subvolume create /mnt/@snapshots
btrfs subvolume create /mnt/@opt
btrfs subvolume create /mnt/@srv
btrfs subvolume create /mnt/@tmp
btrfs subvolume create /mnt/@usr_local
btrfs subvolume create /mnt/@var
btrfs subvolume create /mnt/@var_log
btrfs subvolume create /mnt/@var_cache
btrfs subvolume create /mnt/@var_tmp
btrfs subvolume create /mnt/@libvirt
Il faut ensuite monter les sous volumes:
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@ LABEL=system /mnt/
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@home LABEL=system /mnt/home
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@root LABEL=system /mnt/root
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@snapshots LABEL=system /mnt/.snapshots
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@opt LABEL=system /mnt/opt
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@srv LABEL=system /mnt/srv
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@tmp LABEL=system /mnt/tmp
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@usr_local LABEL=system /mnt/usr/local
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@var LABEL=system /mnt/var
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@var_log LABEL=system /mnt/var/log
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@var_cache LABEL=system /mnt/var/cache
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@var_tmp LABEL=system /mnt/var/tmp
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,nodatacow,subvol=@libvirt LABEL=system /mnt/var/lib/libvirt/images
L'option ssd
est à définir uniquement sur les disques SSD. Je désactive également la fonction de Copy-on-Write
avec l'option nodatacow
pour le répertoire des disques des VMs libvirt.
EFI
# Formatage de la partition
mkfs.fat -F32 -n EFI /dev/disk/by-partlabel/EFI
# Création du point de montage dans la partition racine
mkdir /mnt/efi
# Montage de la partition
mount LABEL=EFI /mnt/efi
Installation du système
Maintenant que l'architecture de notre système est créé nous allons pouvoir installer la base du système et le kernel.
J'utilise la version zen du kernel linux, pour la version standard, vous pouvez remplacer linnux-zen
par linux
. Si vous avez un processeur Intel et non AMD remplacer également amd-ucode
par intel-ucode
.
pacstrap /mnt base linux-zen linux-firmware amd-ucode iptables-nft nftables vim
Je procède à l'installation de nftables lors de cette étape pour être sûr que iptables ne soit pas installé comme dépendant d'un autre paquet.
Ensuite nous allons généré le fichier fstab
en utilisant les labels pour les partitions :
genfstab -L -p /mnt >> /mnt/etc/fstab
Il faut également définir un nom pour notre nouveau système, ici ce sera nowhere
.
echo "nowhere" > /etc/hostname
Il faut également définir le contenu du fichier /etc/hosts
, je vais ça en une seule commande mais vous pouvez également éditer le fichier manuellement :
cat <<EOF> /etc/hosts
127.0.0.1 localhost.localdomain localhost
127.0.1.1 nowhere.nowhere nowhere
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
EOF
Configuration du système
Configuration basique
Dans un premier temps nous devons entrer dans notre nouveau système:
arch-chroot /mnt
Puis définir la zone temporelle et définir l'heure matériel sur notre machine, pour moi il s'agit de Paris:
ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime
hwclock --systohc
Cette configuration sera faite pour le français mais vous pouvez adapter fr_FR
par la langue de votre choix.
sed -i '/fr_FR.UTF-8 UTF-8/s/^#//g' /etc/locale.gen
locale-gen
echo "LANG=fr_FR.UTF-8" > /etc/locale.conf
Installation des paquets supplémentaires
Nous allons ensuite ajouter des paquets supplémentaires utiles pour l'installation de notre système.
pacman -Syu networkmanager base-devel efibootmgr btrfs-progs gptfdisk neovim zsh sudo ttf-dejavu sbctl polkit git openssh wget
Préparation de notre système de boot
Pour cette installation j'ai décidé d'utiliser systemd-init
à la place de busybox-init
notamment pour son meilleur support de plymouth avec le chiffrement complet du disque.
Dans le fichier /etc/mkinitcpio.conf
nous allons modifier les variables MODULES
pour le support du GPU, BINARIES
pour corriger un problème d'affichage avec plymouth et HOOKS
pour correspondre à la configuration de notre système en ajoutant le hook BTRFS notamment.
MODULES=(amdgpu)
BINARIES=(setfont)
HOOKS=(base systemd plymouth autodetect microcode modconf kms keyboard sd-vconsole sd-encrypt block btrfs filesystems fsck)
Ensuite dans le fichier /etc/kernel/cmdline
nous allons définir les paramètres de démarrage de notre kernel, notamment pour lui indiquer sur quel partition démarré :
fbcon=nodefer rw rd.luks.allow-discards plymouth.use-simpledrm quiet bgrt_disable root=LABEL=system rootflags=subvol=@root,rw splash vt.global_cursor_default=0
plymouth.use-simpledrm
est spécifique à l'utilisation de plymouth avec un GPU AMD qui peut causer des problèmes d'affichage.
Puis comme notre système est chiffré il faut ajouter la configuration nécessaire pour le démarrage dans le fichier /etc/crypttab.initramfs
:
system /dev/disk/by-partlabel/cryptsystem none timeout=180
Pour le support du secure boot nous devons créer les clé de signatures :
sbctl create-keys
Et généré l'image efi du kernel :
sbctl bundle -k /boot/vmlinuz-linux-zen -f /boot/initramfs-linux-zen.img -s /efi/main.efi
Avec le kernel standard de linux la commande n'a pas besoin des chemins comme avec le kernel zen :
sbctl bundle -s /efi/main.efi
Ensuite nous ajoutons dans notre UEFI l'entrée pour le boot de notre système :
efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "Arch Linux" --loader 'main.efi' --unicode
Ici /dev/nvme0n1
est le disque sur lequel j'ai fait l'installation et 1 le numéro de partition EFI. C'est informations sont vérifiable avec fdisk -l
.
utilisateur
Nous allons pouvoir ajouter un utilisateur qui nous servira également pour l'installation de la version de developpement de plymouth
pour la gestion de l'écran de démarrage.
Dans un premier temps changeons le mot de passe de l'utilisateur root
:
passwd
Puis ajoutons notre utilisateur qui utilisera zsh
comme terminal, le nom de ce dernier sera nothing
dans mon cas. Nous allons également en profiter pour définir son mot de passe :
useradd -m -G wheel,storage,power,tty,systemd-journal --btrfs-subvolume-home -s /usr/bin/zsh nothing
passwd nothing
Libre à vous de modifier les groups auquel appartiendra votre utilisateur cependant dans le cas de mon utilisation quotitienne l'appartenance à ces groupes est nécessaire.
Pour la suite il est nécessaire de donner à notre utilisateur des droits sudo. Une solution commune est d'éditer le /etc/sudoers
avec la commande visudo
pour décommenter une des lignes donnant ces droits via le groupe wheel
.
Ici je vais simplement ajouter une ligne dédié à mon utilisateur :
echo "nothing ALL=(ALL:ALL) ALL" > /etc/sudoers.d/nothing
Nous allons maintenant prendre l'identité de cet utilisateur mais avec le shell bash pour éviter la configuration de zsh :
su -s /usr/bin/bash - nothing
Afin d'installer les paquets AUR d'Arch Linux j'utile yay
mais plusieurs autres solution sont possibles comme aura
, paru
ou l'installation des AUR directement via makepkg
.
cd /tmp
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
Nous pouvons ensuite installer plymouth
et si vous le souhaitez mkinitcpio-firmware
pour limiter les message d'avertissement de mkinitcpio
indiquant des firmwares manquants.
yay -Sy plymouth-git mkinitcpio-firmware
Nous allons ensuite définir le thème pour notre plymouth :
sudo plymouth-set-default-theme -R spinner
Si vous ne savez pas le quel choisir je vous recommande de laisser celui-ci pour le moment et de le changer après le redémarrage de votre système.
Nous allons regénéré l'image efi :
sudo sbctl generate-bundles -s
Finalisation
Sortez de votre utilisateur non root et du chroot puis redémarrez le système. Nous continuerons une fois le système démarré.
exit
exit
reboot
Si tout est bien configuré votre système devrait démarrer et vous demander votre mot de passe pour dévérouiller le disque.
Une fois le système redémarré et connecté avec notre utilisateur nous allons ajouté les clés secure boot dans l'EFI du système.
Si vous avez un dual-boot avec Windows il faudra rajouter l'argument -m
à cette commande.
sudo sbctl enroll-keys
Activons la synchronisation du temps:
sudo timedatectl set-ntp true
Il faut définir le type de clavier pour vconsole, dans mon il s'agit de us-acentos
, vous pouvez obtenir la liste avec la commande localectl list-keymaps
:
sudo localectl set-keymap us-acentos
Framework Laptop 16
Comme je suis sur un Framework Laptop 16 il y a quelques ajustements conseillés pour ce matériel dans la documentation.
Ici je ne traiterais que les configurations utiles avant la présence d'un environnement graphique.
Paramètres Wifi
Afin d'assurer le bon fonctionnement de la carte Wifi en utilisant les fréquence de notre zone géographique l'installation de la base de donnée des zones géographiques et sa configuration est nécessaire:
sudo pacman -S wireless-regdb
sudo sed -i '/WIRELESS_REGDOM="FR"/s/^#//g' /etc/conf.d/wireless-regdom
echo "country=FR" | sudo tee /etc/wpa_supplicant/wpa_supplicant.conf
L'application de cette configuration nécessitera un redémarrage.
Désactivation de la sortie de veille par clavier ou touchpad
Dans certains cas de transport l'écran peut appuyer sur le clavier et sorti l'ordiateur de veille ce qui peut poser problème. Pour que la sortie de veille ne se fasse qu'avec le bouton d'alimentation dans le fichier /etc/udev/rules.d/90-disable-keyboard-wake.rules
il faut ajouter le contenu:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="32ac", ATTRS{idProduct}=="0012", ATTR{power/wakeup}="disabled"
Et recharger les règles :
sudo udevadm control --reload
sudo udevadm trigger
Gestion des capteurs
La récupération des informations provenant des capteurs et souvent faite via lm_sensors
cependant la configuration pour les framework.
Nous allons donc ajouter la configuration nécessaire :
sudo pacman -S lm_sensors --needed
sudo curl https://raw.githubusercontent.com/FrameworkComputer/lm-sensors/refs/heads/framework/configs/Framework/Framework16-AMD.conf -o /etc/sensors.d/Framework16-AMD.conf
Personnalisations
La suite de l'installation concerne les personnalisations comme l'environnement de bureau.
Je ne détaillerais pas cette partie ici cependant vous trouverez mes dotfiles pour cette partie ici.
J'ai deux configurations avec Plasma6 ou Sway que je gère avec l'outil chezmoi.
J'espère que cette article vous a été utile, n'hésitez pas à laisser un commentaire.