Tutorial

Arch Linux installation

September 23, 202415 min read
Arch Linux
Photo by Arch Linux

Pourquoi cette documentation ?

Je trouve que la documentation officielle d'Arch est très bien mais oblige un changement de page trop fréquent et à suivre différents liens en fonction de comment l'on veut installer son système exactement.

[!IMPORTANT] > Cette documentation commence à partir du boot de l'image d'installation (cf. documentation officielle).

Clavier

Dans un premier temps il faut utiliser le bon mappage pour le clavier, ça sera plus pratique quand même.

root@archiso ~ $ ls /usr/share/kbd/keymaps/**/*.map.gz #<1>
root@archiso ~ $ loadkeys fr #<2>
  1. Liste des mappages disponibles
  2. Choix du clavier français standard

Connexion réseau

[!IMPORTANT] > Afin de pouvoir mener à bien l'installation une connexion à internet est nécessaire. Si vous avez besoin de vous connecter au wifi ou tout autre configuration réseau reportez-vous à la documentation officielle.

Connection Wifi

root@archiso ~ $ sudo pacman -Sy iwd
root@archiso ~ $ iwd
[iwd]# device list
[iwd]# device wlan0 set-property Powered on
[iwd]# adapter adapter set-property Powered on
[iwd]# station wlan0 scan
[iwd]# station wlan0 get-networks
[iwd]# station wlan0 connect SSID

SSH (optionnel)

Si vous préférez utiliser une connexion SSH pour effectuer l'installation voici la précédure à suivre:

root@archiso ~ $ passwd #<1>
New password:
Retype new password:
passwd: password updated successfully
root@archiso ~ $ systemctl start sshd #<2>
  1. Définition d'un mot de passe root
  2. Démarrage du serveur ssh

Il est maintenant possible de se connecter en ssh sur l'IP donnée avec la commande ip a afin de l'implifier la suite des opérations.

Préparation du disque

Comme nous sommes sur un système UEFI il faut une table de partition GUID.

NOTE: Dans mon cas le disque utilisé est le /dev/nvme0n1.

.Table de partition

root@archiso ~ $ parted /dev/nvme0n1
(parted) mklabel gpt

On va ensuite crée une partition pour le démarrage EFI et une autre qui sera utilisé plus tard pour le système et la swap.

.Création des partitions

(parted) mkpart "EFI system partition" fat32 1MiB 511MiB #<1>
(parted) set 1 esp on #<1>
(parted) mkpart "lvm" btrfs 511MiB 100% #<2>
  1. Partition EFI
  2. Partition principale (j'ai indiqué BTRFS comme système de fichiers mais cela n'a aucune importance)

Préparation des partitions

Dans un premier temps il faut chiffrer la partition principale

.Chiffrement la deuxième partition

root@archiso ~ $ cryptsetup luksFormat /dev/nvme0n1p2

WARNING!
####
This will overwrite data on /dev/nvme0n1p2 irrevocably.

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/nvme0n1p2:
Verify passphrase:
WARNING: Locking directory /run/cryptsetup is missing!
cryptsetup luksFormat /dev/nvme0n1p2  35.41s user 5.05s system 158% cpu 25.468 total

.Ouverture du conteneur chiffré

root@archiso ~ $ cryptsetup open /dev/nvme0n1p2 cryptlvm
Enter passphrase for /dev/nvme0n1p2:
cryptsetup open /dev/nvme0n1p2 cryptlvm  6.16s user 0.36s system 119% cpu 5.457 total

.Formattage de la partition EFI

root@archiso ~ $ mkfs.fat -F32 /dev/nvme0n1p1
mkfs.fat 4.1 (2017-01-24)

Ajout de LVM dans la partition chiffrée

.Création du volume physique sur le conteneur LUKS

root@archiso ~ $ pvcreate /dev/mapper/cryptlvm
  Physical volume "/dev/mapper/cryptlvm" successfully created.

.Création du groupe de volume

root@archiso ~ $ vgcreate secure /dev/mapper/cryptlvm
  Volume group "secure" successfully created

.Création des volumes logiques

root@archiso ~ $ lvcreate -L 4G secure -n swap #<1>
  Logical volume "swap" created.
root@archiso ~ $ lvcreate -l 100%FREE secure -n system #<2>
  Logical volume "system" created.
  1. Volume pour la swap, libre à vous de choisir la taille de cette partition
  2. Le reste de la place sert pour le système

Création du système de fichier et montage des partitions

BTRFS et sous volumes

.Création du BTRFS

root@archiso ~ $ mkfs.btrfs /dev/mapper/secure-system

.Création des sous volumes BTRFS

root@archiso ~ $ mount /dev/mapper/secure-system /mnt

root@archiso ~ $ btrfs subvolume create /mnt/@
Create subvolume '/mnt/@'

root@archiso ~ $ btrfs subvolume create /mnt/@home
Create subvolume '/mnt/@home'

root@archiso ~ $ btrfs subvolume create /mnt/@snapshots
Create subvolume '/mnt/@snapshots'

root@archiso ~ $ mkdir /mnt/@/var
root@archiso ~ $ btrfs subvolume create /mnt/@/var/log
Create subvolume '/mnt/@/var/log'

.Démontage de BTRFS

root@archiso ~ $ umount /mnt

Montage des partitions

.Montage du sous volume principal

root@archiso ~ $ mount -o subvol=@ /dev/mapper/secure-system /mnt

.Création des points de montage

root@archiso ~ $ mkdir -p /mnt/home /mnt/boot /mnt/var/log /mnt/.snapshots

.Montage des sous volumes

root@archiso ~ $ mount -o subvol=@home /dev/mapper/secure-system /mnt/home
root@archiso ~ $ mount -o subvol=@snapshots /dev/mapper/secure-system /mnt/.snapshots
root@archiso ~ $ mount -o subvol=@/var/log /dev/mapper/secure-system /mnt/var/log

.Montage de la partition de EFI

root@archiso ~ $ mount /dev/nvme0n1p1 /mnt/boot

Swap

Avant d'oublier il faut créer la swap et l'activer

.Création de la swap

root@archiso ~ $ mkswap /dev/mapper/secure-swap
Setting up swapspace version 1, size = 4 GiB (4221221376 bytes)
no label, UUID=5825294c-ea77-4bba-9712-bab152b2037f

.Activation de la swap

root@archiso ~ $ swapon /dev/mapper/secure-swap

Installation d'Arch

Choix des miroirs

Afin de récupérer les paquets pour l'installation il est nécessaire d'avoir des miroirs stables.

.Choix des miroirs

root@archiso ~ $ reflector --country France --country Germany --latest 10 --sort rate --save /etc/pacman.d/mirrorlist #<1>
  1. Avec cette commande nous prenons les 10 derniers miroirs de France et d'Allemagne qui se sont synchronisés en les triant par performance

Installation des paquets essentiels

La documentation offcielle recommande d'installer les paquets base, linux et linux-firmware et d'y ajouter des paquets spécifiques aux caractéristiques de l'installation plus d'autres paquets nécessaires comme un éditeur de fichier.

NOTE: Comme mon système de test est une VM je vais rajouter le paquet open-vm-tools qui ne sera pas indiqué dans #installation-du-systeme

[[installation-du-systeme, Installation du système]] .Installation du système

root@archiso ~ $ pacstrap /mnt base base-devel linux linux-firmware git vim ntp bluez-utils blueman networkmanager btrfs-progs dosfstools lvm2 man-db man-pages texinfo wget zsh os-prober openssh iwd

Configuration du système

Fstab

Nous commençons par la génération du fichier fstab qui permet d'informer le systèmes des partions et de leur point de montage associé.

.Génération du fichier fstab

root@archiso ~ $ genfstab -U /mnt >> /mnt/etc/fstab

Chroot

Il est maintenant temps de rentrer dans notre nouveau système.

.Chroot

root@archiso ~ $ arch-chroot /mnt

Zone temporelle

NOTE: Comme je me trouve en France je vais sélectionner Paris comme zone temporelle.

.Définition de la zone de temps

[root@archiso /]$ ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime

.Mise à jour de l'heure du système

[root@archiso /]$ hwclock --systohc

Localisation

Il faut maintenant éditer le fichier /etc/locale.gen et décommenter les locales dont nous avons besoin dans mon cas il s'agit de fr_FR.UTF-8 et en_US.UTF-8, ensuite il suffit de lancer la génération avec la commande suite.

.Génération des locales

[root@archiso /]$ locale-gen
Generating locales...
  en_US.UTF-8... done
  fr_FR.UTF-8... done
Generation complete.

Il faut ensuite choisir la langue du système, personnellement j'hésite à chaque fois parce qu'avoir mon système en anglais me rapproche de la configuration de la majeure partie des serveurs en production mais d'un autre côté j'aime bien avoir la date en français.

Une fois la décision prise il faut créer le fichier /etc/locale.conf.

./etc/locale.conf

LC_ALL=C.UTF-8
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_COLLATE=en_US.UTF-8

On va ensuite définir l'agencement du clavier de façon permanente, il suffit d'utiliser la même valeur qu'à l'étape du choix du mappage du Clavier

./etc/vconsole.conf

KEYMAP=us

Configuration réseau

CAUTION: Pour cet exemple le nom de la machine sera unicorn, libre à vous de remplacer ce mot par le nom d'hôte choisi.

.Définition du nom d'hôte

[root@archiso /]$ echo "unicorn" > /etc/hostname

./etc/hosts

::1         localhost
127.0.1.1   unicorn.localdomain unicorn

NOTE: Dans le cas d'une IP fixe 127.0.1.1 peut être remplacé par cette IP.

Pour avoir du réseau au redémarrage il peut être utile de lancer Network Manager au démarrage.

.Network Manager

[root@archiso /]$ systemctl enable NetworkManager

Configuration du chargeur de démarrage

Mise à jour du microcode

Si vous avez un CPU Intel :

[root@archiso /]$ pacman -S intel-ucode

Et pour le CPU AMD :

[root@archiso /]$ pacman -S amd-ucode

Installation du chargeur de démarrage

.Installation de systemd-boot

[root@archiso /]$ bootctl --esp-path=/boot install
Created "/boot/EFI".
Created "/boot/EFI/systemd".
Created "/boot/EFI/BOOT".
Created "/boot/loader".
Created "/boot/loader/entries".
Created "/boot/EFI/Linux".
Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/boot/EFI/systemd/systemd-bootx64.efi".
Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/boot/EFI/BOOT/BOOTX64.EFI".
Created "/boot/16da10d4ea33428f8cb121efde519236".
Random seed file /boot/loader/random-seed successfully written (512 bytes).
Not installing system token, since we are running in a virtualized environment.
Created EFI boot entry "Linux Boot Manager".

Création d'une entrée

Le fichier ci-dessous n'existe pas il faut donc le créé, il faut également modifier FS_UUID par l'UUID de votre partition LUKS.

WARNING: L'option discard réduit légèrement la sécurité du système mais permet d'allonger la durée de vie d'un SSD, à vous de choisir.

./boot/loader/entries/arch.conf

title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img     # SEULEMENT POUR LES CPU Intel !!
initrd /amd-ucode.img       # SEULEMENT POUR LES CPU AMD !!
initrd /initramfs-linux.img
options luks.uuid=FS_UUID root=/dev/mapper/secure-system rootflags=subvol=@ rd.luks.options=discard quiet splash
# `ls -l /dev/disk/by-uuid/ | grep nvme0n1p2` # = FS_UUID

Configuration du chargeur de démarrage

Il faut ensuite indiqué au chargeur de démarrage d'utiliser notre configuration.

./boot/loader/loader.conf

#console-mode keep
default arch    # Le nom du fichier précédent sans l'extension .conf
timeout 2
editor  0

Ramdisk

Il faut effectuer certaines modifications afin de permettre au système d'avoir les composant nécessaire pour démarrer sur une partition LVM chiffrée.

Il faut donc modifier la ligne des HOOKS dans le fichier /etc/mkinitcpio.conf.

./etc/mkinitcpio.conf

# ...
HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole plymouth block sd-encrypt lvm2 filesystems fsck)
# ...

.Génération de l'image

[root@archiso /]$ mkinitcpio -p linux

Mot de passe Root

Pour éviter de commettre la même erreur que moi et devoir remonter les partitions pour recommencer un chroot il faut définir un mot de passe root !

.Définition du mot de passe root

[root@archiso /]$ passwd

Redémarrage

Il est maintenant temps de redémarrer proprement, c'est-à-dire dans un premier temps sortir du chroot, démonter les partition et redémarrer.

.Reboot

[root@archiso /]$ exit
root@archiso ~ $ umount -R /mnt
root@archiso ~ $ reboot

[CAUTION] Il est courant dans les installations avec LUKS et Grub que le clavier soit en QWERTY mais avec ce type d'installation le mappage clavier utilisé pour le mot de passe LUKS est celui défini dans le fichier /etc/vconsole.conf.

Personnalisation du système

Il peut être pratique d'avoir une interface graphique, un utilisateur ainsi que d'autres choses sur ce nouveau système.

NOTE: Mes choix en matière de personnalisation du système mes choix peuvent être particuliers.

Utilisateur

Création d'un utilisateur

[root@unicorn ~]$ useradd -m -s /bin/zsh unicorn #<1>
[root@unicorn ~]$ passwd unicorn #<2>
New password:
Retype new password:
passwd: password updated successfully
  1. Création de l'utilisateur
  2. Changement du mot de passe

Nous avons maintenant un nouvel utilisateur appelé unicorn.

NOTE: J'utilise ZSH au lieu de BASH par préférence personnelle, pour utiliser BASH il suffit de ne pas ajouter -s /bin/zsh.

Sudo

Comme les bonnes pratiques veulent que l'ont n'utilise pas l'utilisateur root il faut donc que notre nouvel utilisateur puisse utiliser la commande sudo.

.Installation de sudo

[root@unicorn ~]$ pacman -S sudo

Il se peut que le paquet soit déjà installé pas besoin de le réinstaller.

Il faut maintenant donner des droits à notre utilisateur :

./etc/sudoers.d/unicorn

unicorn		ALL=(ALL:ALL)	ALL #<1>
  1. Cette ligne donne tous les droits à notre utilisateur

NOTE: Remplacez bien-sûr unicorn par le nom de votre utilisateur.

Interface graphique

Pour avoir une interface graphique complète, il faut installer plusieurs composants.

Serveur graphique

Dans un premier temps impossible d'afficher quoique ce soit sans un composant adéquat qui est le serveur graphique. J'ai choisi d'utiliser le plus courant Xorg.

Comme je ne cherche pas un système minimal je vais installer le groupe Xorg complet pour avoir toutes les dépendances utiles.

.Installation de Xorg

[root@unicorn ~]$ pacman -S xorg

Pilotes graphiques spécifiques

Des pilotes graphiques supplémentaires peuvent être nécessaire spécialement avec les cartes AMD et Nvidia.

Vous pouvez trouver des informations supplémentaires si dessous :

Gestionnaire de connexion

Les gestionnaires de connexion permet de choisir l'environnement graphique à utiliser et d'ouvrir une session.

Pour cette installation j'ai choisi SDDM c'est celui qui est utilisé avec l'environnement KDE.

.Installation de sddm

[root@unicorn ~]$ pacman -S sddm sddm-kdm

.Démarrage automatique de sddm

[root@unicorn ~]$ systemctl enable sddm

Un problème courant avec SDDM et que Xorg n'a que le clavier us chargé par défaut, il faut donc indiqué à Xorg quel clavier utiliser.

.Problème de clavier US

[root@unicorn ~]$ localectl set-x11-keymap fr

Donc au prochain démarrage SDDM sera lancé.

Le verrouillage du pavé numérique est désactivé par défaut, pour l'activer il faut éditer le fichier /usr/lib/sddm/sddm.conf.d/default.conf.

./usr/lib/sddm/sddm.conf.d/default.conf

[General]
...
Numlock=on

Environnement graphique

Ne nom de ce chapitre est un abus de language car justement je ne compte pas utiliser d'environnement de bureau mais un "gestionnaire de fenêtres par pavage" plus connu sous le nom de Tiling window manager.

IMPORTANT: Si vous ne connaissez pas i3-gaps ou n'avez pas l'habitude des Tiling window manager je vous conseille de regarder comme installer Gnome, KDE, LXDE ou Xfce.

.Installation de i3 et certaines dépendances

[root@unicorn ~]$ pacman -S i3-gaps i3status py3status conky nitrogen picom rofi rxvt-unicode gtk2-perl dunst pcmanfm arandr tmux #<1>
  1. L'installation de tmux n'est pas nécessaire mais comme je l'utilise régulièrement je l'installe le plus tôt possible.

En plus de i3 j'ai ajouté certaines dépendances comme un compositeur et un gestionnaire de fond d'écran, les configurations associées ainsi que les dépendances supplémentaires seront dans les dotfiles.

Personnalisation du terminal

Maintenant nous allons rendre notre terminal un peu plus pratique.

Mais avant tout il faut faire une petit redémarrage afin de vérifier que tout ce lance correctement (libre à vous de lancer i3 ou SDDM manuellement à la place).

.Redémarrage

[root@unicorn ~]$ reboot

Il est maintenant possible de se connecter.

Dans un premier temps il faut se connecter à l'utilisateur nouvellement créé et d'ouvrir le terminal rxvt, pour i3 le raccourci par défaut devrait être Win/Alt + Entrée cela dépend de la touche choisie.

NOTE: Le terminal ne pas être très joli (du moins à mon goût) mais ce problème peut-être résolu par le fichier .Xresources des dotfiles.

Ensuite ZSH va demander ce que vous voulez faire, je vous conseille d'appuyer sur la touche q afin de ne pas effectuer de configuration qui sera de toute façon écrasée par la suite.

Oh My Zsh

Je recommande l'utilisation de Oh My Zsh pour la personnalisation de zsh, son installation est particulièrement simple.

.Oh My Zsh

unicorn% sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Police

Par contre pour le thème que j'utilise il faut changer la police utilisée, j'ai choisi MesloLGS de NerdFont mais tout autre police de NerdFont fonctionnera aussi.

.Gestion des fichiers zip

➜  ~ sudo pacman -S zip unzip wget

.Installation de la police

➜  ~ wget https://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/Meslo.zip -O ~/meslo.zip
➜  ~ unzip meslo.zip -d ~/meslo && rm -f meslo.zip
➜  ~ find ~/meslo/ -iname "*Windows*" -exec rm {} \; #<1>
➜  ~ sudo mv meslo /usr/share/fonts
➜  ~ fc-cache -v #<2>
  1. Suppression des polices pour windows
  2. Mise à jour du cache des polices

Dotfiles

Dans ce dépôt il y a un sous module git avec mes dotfiles.

NOTE: Ce sous module utilisant le lien ssh du dépôt associé si vous n'êtes pas membre du projet sur gitlab vous ne pourrez pas utiliser le sous module. Dans ce cas vous pouvant cloner le dépôt dotfiles à part.

La commande suivante permet de récupérer le sous module depuis le dépôt Arch Install.

.dotfiles depuis Arch Install

$ git submodule update --remote --init

Sinon voici le lien du dépôt dotfiles.

.Clonage du dépôt

➜  ~ git clone https://gitlab.com/antoine33520/dotfiles.git

TIP: Pour l'utilisation de ces configurations lisez la documentation ;-)

AUR

Les AUR sont les paquets mis à disposition par la communauté et qui ne peuvent pas être installés via pacman, si vous voulez y avoir accès il faut donc un gestionnaire de paquet adéquat.

J'ai choisi d'installer yay pour remplir cette fonction.

[CAUTION] L'utilitaire yay ne doit jamais être utilisé avec les droits root.

.Installation de yay

➜  ~ git clone https://aur.archlinux.org/yay.git
➜  ~ cd yay
➜  yay git:(master) makepkg -si

TIP: yay permet également d'installer les paquets fournis par les dépôts officiels comme le fait pacman.

NOTE: Les arguments pour yay sont les mêmes qu'avec pacman.

Son

Ça peut être utile d'avoir du son sur sa machine.

Les 2 serveurs de son les plus utilisés sont Alsa et Pulseaudio, j'ai choisi le deuxième par préférence et pour avoir mon equalizer.

.Installation de Pulseaudio

➜  ~ sudo pacman -S pulseaudio pulseaudio-equalizer pulseaudio-bluetooth pulseaudio-jack pulseaudio-equalizer-ladspa pulseaudio-zeroconf pulseaudio-alsa #<1>

En fonction de ce que vous voulez faire tous les paquets ne sont pas nécessaire.

Conclusion

Il me semble que j'ai terminé pour ce qui est des installations.

Je vais quand même remettre le lien vers mes dotfiles pour donner des idées de configurations.

From : https://infradoc.antoinethys.com/systeme/archlinux/install-luks-btrfs-efi

archlinux