hmichael@tronyxworld.be:~$

Installation de Archlinux en UEFI avec LUKS et LVM

Depuis 2018 j’étais sous Fedora sur ma station principale.

Venant de Archlinux j’avais switch pour m’habituer plus rapidement à l’écosystème RedHat qu’utilisait mon ancien employeur et être en phase avec le parc. Fedora m’a satisfait durant ces deux dernières années mais très régulièrement la distribution sur laquelle j’avais passé presque 10 ans me manquait.

Chaqu’un son choix bien entendu, mais pour ma part je n’aime pas “collectionner” les différentes distributions sur mes machines, j’aime l’harmonie.

Lorsque j’ai démarré comme sysadmin en septembre chez mon nouvel employeur on m’a fournit un très beau ThinkPad T590 avec carte blanche sur le système que j’installais dessus.

Seul obligation, nos partitions doivent être chiffrées. J’ai donc profité de cette occasion pour réinstaller ma station principale en même temps que le laptop.

Je me suis dit que cela ferait un chouette article de blog expliquant comment installer Arch en UEFI avec LUKS sur du LVM de manière simple pour toutes personnes souhaitant se lancer sur cette magnifique distribution.

Configuration initiale

La totalité de mon installation se passe en étant connecté via câble et non par wifi, si vous souhaitez effectuer l’installation via le wifi c’est par ici pour la configuration.

Une fois l’ISO démarré on va configuré notre clavier pour la session en cours, l’heure et aligner notre disque dur.

  • Lister les keymaps : localectl list-keymaps
  • Appliquer le keymap :
    • Belgique : loadkeys be-latin1
    • France : loadkeys fr
  • Vérifier que l’on reçoit bien une IP : ip -br -c a
  • Fixer l’heure et la date :
    • Belgique : timedatectl set-timezone Europe/Brussels
    • France : timedatectl set-timezone Europe/Paris
  • Vérifier alignement du disque :
    • On liste les disques : lsblk
    • On aligne les bloques sur le disque qui va reçevoir l’installation : blockdev --getalignoff /dev/sda

Création de la table de partition

On utilise gdisk pour créer une partition GPT via gdisk /dev/sda :

  • Option “o” : Pour créer la table GPT.
  • Option “w” : Ecrire la table et quitter le programme.

On va maintenant découper notre disque en 2 partitions, une pour la partition /boot et l’autre qui va réceptionner notre volume LVM.

Je lance cgdisk /dev/sda et je partitionne comme ci dessous :

Disque Point de montage Taille Système de fichier Type partition
/dev/sda1 /boot 512Mio fat32 EF00
/dev/sda2 none Tout   8300

On passe à la création des LVM :

#Initialisation du volume physique
pvcreate /dev/sda2

#Création du volume groupe sur le vg
vgcreate archlvm /dev/sda2

# Créations des volumes logique
lvcreate -L 30G -n root archlvm
lvcreate -L 2G -n swap archlvm
lvcreate -L 1G -n tmp archlvm
lvcreate -l 100%FREE -n home archlvm

On peut lancer un pvscan, vgscan et lvscan pour vérifier la présence de ce qui vient d’être créé.

On passe au chiffrement de notre lv root :

# Création du volume root chiffré
# Veuillez bien retenir la passphrase elle vous servira pour déchiffrer votre partition au boot
cryptsetup luksFormat -c aes-xts-plain64 -s 512 /dev/archlvm/root

# On déchiffre et rend disponible notre lv root
cryptsetup open /dev/archlvm/root root

# Création du filesystem & montage
mkfs.xfs /dev/mapper/root
mount /dev/mapper/root /mnt

# Création & montage de la partition boot
mkfs.fat -F32 /dev/sda1
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

Installation des bases

Avant de se lancer dans l’installation des bases on va s’assurer d’avoir des mirrors de téléchargement le plus rapide possible.

On automatise cette sélection en utilisant la commande rankmirrors rendue disponible via le paquet pacman-contrib.

# Installation du paquet
pacman -Sy pacman-contrib

# Sauvegarde du mirrorlist d'origine
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrolist.backup

# Sélection des 3 mirrors les plus rapide et injection dans le mirrorlist principale
rankmirrors -n 3 /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist

On installe maintenant les paquets de base pour notre système :

pacstrap /mnt base base-devel lvm2 cryptsetup xfsprogs linux-lts linux-lts-headers linux-firmware zip unzip p7zip mlocate vim alsa-utils syslog-ng mtools dosfstools lsb-release ntfs-3g exfat-utils bash-completion zsh zsh-completions git grub efibootmgr

Si vous êtes en dual boot il faut ajouter le paquet os-prober à la ligne précédente.

Génération du fstab :

genfstab -Up /mnt >> /mnt/etc/fstab

On chroot pour rentrer dans la racine de notre installation :

arch-chroot /mnt

On défini le nom de la machine :

echo hyperion > /etc/hostname

On ajoute notre machine dans le fichier /etc/hosts :

echo '127.0.1.1 hyperion.local hyperion' >> /etc/hosts

On définit notre fuseau horaire :

ln -sf /usr/share/zoneinfo/Europe/Brussels /etc/localtime

On édite le fichier /etc/locale.gen pour décommenter en_US.UTF-8, et puis en fonction de votre pays =>

  • Belgique : fr_BE.UTF-8
  • France : fr_FR.UTF-8

Ensuite on génère nos locales :

locale-gen

On définit la langue de notre système en fonction de votre préférence :

# En anglais
echo LANG="en_US.UTF-8" > /etc/locale.conf

# Français Belgique
echo LANG="fr_BE.UTF-8" > /etc/locale.conf

# Français France
echo LANG="fr_FR.UTF-8" > /etc/locale.conf

On édite /etc/vconsole.conf pour spécifier la disposition de notre clavier :

# Belge
echo KEYMAP=be-latin1 > /etc/vconsole.conf
echo FONT=eurlatgr >> /etc/vconsole.conf

# Français
echo KEYMAP=fr-latin9 > /etc/vconsole.conf
echo FONT=eurlatgr >> /etc/vconsole.conf

On installe et active le réseau pour le prochain démarrage :

pacman -Sy networkmanager
systemctl enable NetworkManager

On édite le fichier /etc/pacman.conf :

# On active la couleur dans les Misc Options en supprimant les # devant
Color
UseSyslog

# On supprime les # devant les lignes suivantes pour activer les libs 32b
[multilib]
Include = /etc/pacman.d/mirrorlist

On active le forwardtosyslog en éditant /etc/systemd/journald.conf :

# On modifie ForwardToSyslog comme ci dessous
ForwardToSyslog=yes

On va éditer le fichier /etc/mkinitcpio.conf pour activer la prise en charge du lvm2 et du chiffrement en ajoutant des arguments à la ligne HOOKS=() :

# Arguments à ajouter entre les ()
keyboard keymap lvm2 encrypt udev

Et on génère l’image du noyau :

mkinitcpio -p linux-lts

On vérifie que efivarfs est bien monté et cas échéant on les monte :

# Vérification
mount | grep efivar

# Si rien n'est retourné par la commande du dessus on monte manuellement la partition
mount -t efivarfs efivarfs /sys/firmware/efi/efivars

Pour déchiffrer la partition root au démarrage il faut configurer grub avant de l’installer :

# Suppression de la ligne vide
sed -i '/GRUB_CMDLINE_LINUX=/d' /etc/default/grub

# Prise en charge des partitions chiffrés par grub
sed -i 's/#GRUB_ENABLE_CRYPTODISK=y/GRUB_ENABLE_CRYPTODISK=y/' /etc/default/grub

# Ajout de notre root avec son UUID
echo GRUB_CMDLINE_LINUX=\"cryptdevice=UUID=$(blkid -s UUID -o value /dev/mapper/archlvm-root):root root=/dev/mapper/root\" >> /etc/default/grub

# Installation de grub
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck

# Generation du grub.cfg
grub-mkconfig -o /boot/grub/grub.cfg

Configuration du /home

Maintenant on va finaliser les bases de notre installation en ajoutant le chiffrement pour notre partition /home.

# Génération du fichier de clé
mkdir -m 700 /etc/luks-keys
dd if=/dev/random of=/etc/luks-keys/home bs=1 count=256 status=progress

# Chiffrement du home via la clé crée
cryptsetup luksFormat -v -s 512 /dev/archlvm/home /etc/luks-keys/home

# Ajout du home chiffré à notre mapper
cryptsetup -d /etc/luks-keys/home open /dev/archlvm/home home

# Formatage
mkfs.xfs /dev/mapper/home

# Montage de la partition
mount /dev/mapper/home /home

Configuration de fstab et crypttab

Fstab et crypttab sont nécessaire pour déchiffrer les partitions et monter les systèmes de fichiers lors du démarrage.

La swap sera sera rechiffré à chaque redémarrage de la machine.

Voici le contenu à renseigner dans chaque fichier :

# /etc/crypttab
home /dev/mapper/archlvm-home  /etc/luks-keys/home
swap /dev/mapper/archlvm-swap  /dev/urandom  swap,cipher=aes-xts-plain64,size=256
tmp  /dev/mapper/archlvm-tmp   /dev/urandom  tmp,cipher=aes-xts-plain64,size=256

# /etc/fstab
/dev/mapper/tmp   /tmp   tmpfs  defaults  0  0
/dev/mapper/swap  none   swap   sw  0  0
/dev/mapper/home  /home  xfs    defaults  0  2

Pour finaliser notre base on définit le mot de passe du root, on sort du chroot et on redémarre :

# On donne un password au compte root
passwd root

# On quitte le chroot
exit

# On démonte l'ensemble des partitions avant de redémarrer
umount -R /mnt && reboot

Post installation

Il est temps désormais de créer notre utilisateur, installer nos drivers, le serveur d’affichage etc… avant d’installer notre environnement de bureau favoris.

Création de l’utilisateur :

# Création de l'utilisateur michael avec son shell par défaut en zsh
useradd -mG wheel -s /usr/bin/zsh -c "H. Michael" hmichael

# On fixe le password de cet utilisateur
passwd hmichael

On permet à notre utilisateur d’utiliser sudo en éditant le fichier /etc/sudoers via vim et en retirant le # devant %wheel ALL=(ALL) ALL.

On enregistre ensuite en forçant via :w! et puis on quitte :q.

On active la synchro de l’heure par le réseau, le deamon cron et le syslog-ng :

# Installation des packages
pacman -S cronie ntp

# Activation des services au démarrage :
systemctl enable cronie
systemctl enable ntpd
systemctl enable syslog-ng@default

# Sur un PC portable ajoutez également TLP pour une meilleure gestion de la batterie
pacman -S tlp && systemctl enable tlp

On va maintenant installer les drivers pour notre carte graphique ainsi que xorg.

En fonction de votre matériel cela peut différer, voici une petite aide :

  • Nvidia (Proprio): pacman -S xorg-{server,xinit,apps} xdg-user-dirs nvidia nvidia-utils lib32-nvidia-utils nvidia-settings opencl-nvidia
  • Nvidia LTS (Proprio) : pacman -S xorg-{server,xinit,apps} xdg-user-dirs nvidia-lts nvidia-utils lib32-nvidia-utils nvidia-settings opencl-nvidia
  • Nvidia (Libre) : pacman -S xorg-{server,xinit,apps} xdg-user-dirs xf86-video-nouveau mesa lib32-mesa
  • Intel : pacman -S xorg-{server,xinit,apps} xdg-user-dirs xf86-video-intel mesa lib32-mesa
  • AMD : pacman -S xorg-{server,xinit,apps} xdg-user-dirs xf86-video-amdgpu
  • ATI: pacman -S xorg-{server,xinit,apps} xdg-user-dirs xf86-video-ati mesa lib32-mesa
  • VirtualBox : pacman -S xorg-{server,xinit,apps} xdg-user-dirs xf86-video-mesa

Si vous souhaitez plus d’informations je vous conseille de parcourir cet excellent article sur les drivers présent dans le wiki archlinux.

Pour avoir le pavé tactile d’activé sur un laptop il faut également installer xf86-input-libinput.

Installation du microcode de votre CPU :

# Intel CPU
pacman -Sy intel-ucode

# AMD CPU
pacman -Sy amd-ucode

Installation des codecs audio/video :

pacman -S gst-libav gst-plugins-{base,good,bad,ugly}

Installation des fonts :

pacman -S xorg-fonts-type1 freetype2 font-bh-ttf gsfonts sdl_ttf ttf-{dejavu,bitstream-vera,liberation} noto-fonts-{cjk,emoji,extra}

Si vous le souhaitez on va maintenant installer yay pour nous permettre d’installer des paquets en provenance des repos AUR.

Pour cela il faut le faire depuis un simple utilisateur, soit vous vous déconnectez du root et vous vous reconnecter soit vous switcher depuis le root vers cet utilisateur, la solution que j’utilise pour ma part :

# Switch vers l'utilisateur
su - hmichael

# Installation de yay
git clone https://aur.archlinux.org/yay
cd yay
makepkg -sri

Maintenant que yay est installé si vous en avez le besoinvous pouvez installer les fonts de microsoft depuis AUR : yay -S ttf-ms-fonts.

Désormais toutes les bases sont présentes, il ne reste plus qu’à installer l’environnement de bureau de notre choix.

Environnement de bureau

Je ne vais pas couvrir l’installation complète de chaque environnement de bureau disponible ce serait trop long et plus on utilise un environnement plus on a de tweak/fix/amélioration à proposer.

Je vais seulement vous donner les bases pour avoir un bureau fonctionnel que vous pourrez par la suite améliorer et configurer à votre convenance.

i3wm

Ce n’est pas un environnement de bureau mais un gestionnaire de fenêtre nous sommes d’accord. C’est celui que j’utilise sur toutes mes machines.

Attention, l’essayer c’est l’adopter !

# i3 et ses modules
pacman -S i3-gaps i3lock i3blocks i3status rofi

# Installation de lightdm
pacman -S lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings

# Packages supplémentaire
pacman -S picom thunar terminator chromium lxappearance network-manager-applet volumeicon

# On s'assure d'avoir le bon mappage clavier fr ou be
sudo localectl set-x11-keymap be

# On lance notre greeter
systemctl start lightdm

# Si tout se passe bien et qu'on peut s'identifier on active le service de manière définitive
systemctl enable lightdm

Pour ceux qui souhaiteraient avoir des idées de configurations de i3 je vous renvoie vers mon dotfiles où je stock les configurations de la station et celle du laptop.

Et en complément d’informations la lecture de la section i3 sur le wiki.

KDE Plasma

Plasma est un environnement de bureau offrant une personnalisation très poussée tout en restant légé.

# Installation de Plasma
sudo pacman -S plasma kde-applications packagekit-qt5 chromium

# On s'assure d'avoir le bon mappage clavier fr ou be
sudo localectl set-x11-keymap be

# On lance notre greeter sddm
sudo systemctl start sddm

# Si tout se passe bien on l'active de manière définitive
sudo systemctl enable sddm

Pour allez plus loin faites un tour dans la section KDE du wiki.

Cinnamon

L’environnement par défaut de Linux Mint qui a séduit bon nombre de personnes.

# Installation de Cinnamon
sudo pacman -S cinnamon cinnamon-translation chromium terminator gedit gnome-calculator gnome-extra

# Installation de lightdm
pacman -S lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings

# On s'assure d'avoir le bon mappage clavier fr ou be
sudo localectl set-x11-keymap be

# On lance le greeter
sudo systemctl start lightdm

# Si tout est ok on l'active de manière permanente
sudo systemctl enable lightdm

Pour allez plus loin faites un tour dans la section cinnamon du wiki.

Problèmes

Voici quelques soucis rencontrés et leur résolution :

Clavier en qwerty

Il se peut que votre clavier soit bien en azerty durant la configuration mais une fois la session chargé le clavier soit en qwerty US.

Si cela arrive faites ctrl+alt+F2 pour passer en TTY et créez le fichier /etc/X11/xorg.conf.d/00-keyboard.conf en y ajoutant ceci :

# /etc/X11/xorg.conf.d/00-keyboard.conf
# Modifiez le be pour fr si vous souhaitez l'azerty français
Section "InputClass"
        Identifier "Keyboard Layout"
        MatchIsKeyboard "on"
        Option "XkbLayout" "be"
        Option "XkbLayout" "latin9"
EndSection

Une fois la modification faite, faite un reboot pour que cela prenne effet.

Pavé tactile

Autre petit soucis constaté, le touchpad du laptop n’a plus le clic via le “double tap” ni de clic droit, voici comment corriger ce soucis en créant le fichier /etc/X11/xorg.conf.d/30-touchpad.conf :

# /etc/X11/xorg.conf.d/30-touchpad.conf
Section "InputClass"
        Identifier "touchpad"
        Driver "libinput"
        MatchIsTouchpad "on"
        Option "tapping" "on"
        Option "AccelProfile" "adaptive"
        Option "TappingButtonMap" "lrm"
EndSection

Idem qu’au dessus un petit reboot pour que cela soit pris en compte.

SSH Agent

C’est un soucis récurrent que j’entends autour de moi “Je dois tout le temps retaper mon mot de passe pour mes clé SSH/GPG”.

Ce problème est chronophage dès lors qu’on se connecte sur des serveurs au travers du ssh ou que l’on travaille avec des repo git cloné via SSH, etc…

Chaque fois le password sera demandé.

Pour ma part j’ai trouvé une manière de faire très simple pour ne plus être ennuyé et avoir le keyring lancé à l’ouverture de ma session :

# Installation de gnome-keyring
pacman -S gnome-keyring

# Création du fichier ~/.zshenv et on copie ceci
if [ -n "$DESKTOP_SESSION" ];then
    eval $(gnome-keyring-daemon --start)
    export SSH_AUTH_SOCK
fi

Si vous n’utilisez pas ZSH mais bash vous pouvez placer cette section dans votre fichier ~/.bash_profile pour obtenir le même effet.

Conclusion

Cet article devrait vous permettre de rapidement installer archlinux.

Je ne peux que vous suggérez pour aller plus loin de mettre en favori le wiki de archlinux qui est une mine d’or d’informations et ce quel que soit votre distribution favorite.

Je vous dit à la prochaine et merci de m’avoir lu !