Installation de Void Linux : Full disk encryption, dualboot et UEFI

Posted on ven. 05 avril 2019 in tuto

Je viens de changer de laptop, et qui dit nouveau laptop, dit nouvelle installation de Linux !

Je reste fidèle à Void Linux que j'utilisais déjà sur mon précédent ordinateur, mais j'ai décidé de conserver le Windows en dual boot au cas où. Donc les caractéristiques de l'installation :

  • Dualboot Windows / Linux
  • Chiffrement du disque Linux
  • Utilisation de LVM pour les partitions Linux
  • Utilisation directe de l'UEFI pour démarrer : pour des raisons de rapidité de boot je me passe de grub et j'amorce directement le kernel à l'aide de efibootmr.

Cet article tient plus des notes que du tuto, mais je vais essayer de détailler un peu certains points.

C'est parti !

Préparation

  • Téléchargement de la dernière image de Void Linux depuis leur site
  • Vérification du hash de l'image téléchargée
  • Copie de l'image sur une clef USB avec dd
  • Depuis le Windows préinstallé :
    • Vérification du bon fonctionnement du matériel
    • Mise à jour du BIOS
    • Création d'une image de récupération USB pour le Windows (on sait jamais...)

Repartitionnement du disque

Le SSD (256Go) possédait une partition de 80Go pour le Windows, 125Go de partition "Data", et diverses partitions de recovery (une partition "OneKey" de 14Go et les partitions de Recovery classiques de Windows). J'ai choisi de virer la partition OneKey mais de conserver les partitions de recovery Windows, qui ne prennent pas tant de place. J'ai donc effectué les opérations suivantes :

  • Suppression de la partition OneKey
  • Suppression de la partition Data
  • Alignement des partitions Recovery de Windows à la fin du disque
  • Agrandissement de la partition Windows à 120Go
  • Agrandissement de la partition ESP (la partition de l'UEFI) à 300Mo pour pouvoir accueillir l'amorçage Windows et plusieurs kernels Linux (pendant les mises à jour).

J'ai réalisé ces opérations sur Windows pour éviter de le perturber : il n'aime pas quand quelqu'un d'autre touche à ses partitions. J'ai utilisé l'outil EaseUS Partition Master Free puisque le gestionnaire de partition de Windows n'autorise pas certaines modifications (déplacement de partitions, manipulation de partitions protégées...).

Début de l'installation

Une fois le partitionnement fait, on peut booter sur la clef USB avec le sélecteur d'amorçage UEFI (généralement en appuyant sur F12 lors du boot). Une fois l'image live de Void démarrée, on peut préparer l'installation :

  • Connexion en tant que root avec le mot de passe voidlinux
  • Paramétrer le clavier en AZERTY : loadkeys fr
  • Utiliser bash pour le confort (notamment la complétion) : bash
  • Mon laptop disposant d'un écran HiDPI, j'ai changé la police du TTY pour y voir quelque chose comme détaillé dans cet article.
  • Lister les partitions pour trouver leur nom : fdisk -l. Le disque NVME me donne donc les partitions suivantes :
    • Partition ESP = /dev/nvme0n1p1
    • Partition Linux = /dev/nvme0n1p4

Préparation du disque :

  • Création du conteneur chiffré Luks : cryptsetup luksFormat /dev/nvme0n1p4 (Attention, cela écrase complètement la partition, faites attention à ne pas vous planter...). Choisir une passphrase robuste et surtout s'en souvenir, il n'y a pas de moyen de récupérer une passphrase oubliée...
  • Ouvrir le conteneur Luks fraîchement créé : cryptsetup luksOpen /dev/nvme0n1p4 void (Vous pouvez choisir ce que vous voulez à la place du nom "void", pensez juste à adapter la suite en conséquence)
  • Création un VolumeGroup LVM : vgcreate void /dev/mapper/void
  • Création des volumes logiques : 8Go de swap (si vous voulez utiliser l'hibernation, mettez au moins autant de swap que votre machine à de RAM) et l'ensemble de l'espace restant pour la racine (attention à l'option sur les deux commandes, une avec un L majuscule, une avec un L minuscule). Je ne fais pas de partition séparée pour le home, c'est inutile vu mon usage :
lvcreate --name swap -L 8G void
lvcreate --name root -l 100%FREE void
  • Création des filesystems : (choisissez celui que vous voulez, j'ai mes habitudes avec ext4)
mkswap /dev/mapper/void-swap
mkfs.ext4 /dev/mapper/void-root

Monter l'arborescence finale et installer le système :

  • Activer le swap : swapon /dev/mapper/void-swap
  • Montage des partitions :
mount /dev/mapper/void-root /mnt
mkdir /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot
  • Monter les dossiers du système dans la nouvelle arborescence :
for dir in dev proc sys run; do 
    mkdir -p /mnt/$dir
    mount --rbind /$dir /mnt/$dir
done
  • Configuration du réseau : je suis raccordé en ethernet, la connexion est automatique.
  • Installation du système de base avec le miroir Allemand (le plus proche) : xbps-install -Sy -R http://alpha.de.repo.voidlinux.org/current -r /mnt base-system lvm2 cryptsetup vim bash efibootmgr.
    • Pour me simplifier la vie, j'installe bash et vim sur le système, que j'utiliserai dès l'étape suivante pour la configuration.
    • J'installe efibootmgr qui permet de gérer l'UEFI pour qu'il boote directement sur le kernel Linux (pas besoin de grub donc)
  • Chrooter dans notre système tout propre : chroot /mnt /bin/bash

Permissions, paramétrage des locales et du DNS :

  • Définir un mot de passe pour l'utilisateur root : passwd root
  • Définir le nom de la machine (mettez ce que vous voulez) : echo void > /etc/hostname
  • Réparer les permissions sur la racine du système (créée hors du chroot) : chown root:root / && chmod 755 /
  • Définir les locales :
echo "LANG=fr_FR.UTF-8" > /etc/locale.conf
echo "fr_FR.UTF-8 UTF-8" >> /etc/default/libc-locales
xbps-reconfigure -f glibc-locales
  • Paramétrer un serveur de résolution DNS (mettez ce que vous voulez) : echo 'nameserver 9.9.9.9' > /etc/resolv.conf

Configuration du système

  • Modification du fichier /etc/fstab :

tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0
/dev/void/root / ext4 defaults 0 0
/dev/void/swap swap swap defaults 0 0
/dev/nmve0n1p1 /boot vfat defaults 0 0

  • Modification des options d'efibootmgr : /etc/default/efibootmgr-kernel-hook :

MODIFY_EFI_ENTRIES=1
OPTIONS="root=/dev/mapper/void-root quiet splash loglevel=3 rd.udev.log-priority=3 vt.global_cursor_default=0 slub_debug=P page_poison=1 rd.auto=1 rd.vconsole.keymap=fr"
DISK="/dev/nvme0n1"

Cela permet notamment de définir un clavier AZERTY pour taper la passphrase du disque au boot (c'est plutôt pratique...)

  • Créer l'initramfs avec les nouveaux paramètres : xbps-reconfigure -f linux4.19
  • Vérifier que le stub UEFI s'est bien rajouté : efibootmgr

BootCurrent: 0000
Timeout: 0 seconds
BootOrder: 001,2001,2002,2003
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
Boot0002* Void Linux with kernel 4.19
[...]

  • [Facultatif] Modifier l'ordre de boot pour démarrer sur Void par défaut : efibootmgr -o 2,1,2001,2002,2003
  • Redémarrer le système : reboot
  • Serrer les fesses très fort

Au reboot, le initramfs vous demande le mot de passe du conteneur Luks et démarre le système !

Tadah

Pour redémarrer sous Windows, utiliser le menu de sélecteur d'amorçage (touche F12 habituellement)


Après l'installation

Une fois notre nouveau système démarré, suggestions d'opérations à réaliser :

  • Mise à jour système : xbps-install -Su
  • Installation d'un shell sympa : xbps-install zsh && chsh
  • Créer un utilisateur : useradd -m -s /bin/zsh -U -G wheel,users,audio,video,input <username>
  • Donner le droit d'utiliser sudo au groupe wheel : visudo
  • Installer un serveur X : xbps-install -S xorg-minimal xinit xterm xf86-video-intel xorg-fonts
  • Installer un gestionnaire de fenêtres ou de bureau. Pour moi c'est Awesome : xbps-install awesome
  • Paramétrer un clavier français dans le serveur X : mkdir /etc/X11/xorg.conf.d && vim /etc/X11/xorg.conf.d/10-keyboard.conf :

Section "InputClass"
Identifier "keyboard"
MatchIsKeyboard "on" # Limit these settings to keyboards
Option "XkbLayout" "fr"
EndSection

  • Installation de NoDM pour démarrer et connecter automatiquement l'interface graphique (on tape déjà la passphrase du disque au démarrage du système) :
xbps-install nodm
vim /etc/sv/nodm/conf

NODM_USER="${user}"
NODM_XSESSION="/home/${user}/.xinitrc"

ln -s /etc/sv/nodm /var/service
chmod +x ~user/.xinitrc

Et voilà !

Pour la suite, c'est à vous de voir ce que vous voulez faire de votre PC :)