Aller au contenu

Réinstallation — exampleHost

ComposantDétail
Disques système2× Samsung SSD 980 PRO 1 To NVMe (miroir ZFS)
ID disque 0nvme-Samsung_SSD_980_PRO_1TB_S5GXNL0W810368E
ID disque 1nvme-Samsung_SSD_980_PRO_1TB_S5GXNL0W810454N
Disque données/dev/disk/by-id/wwn-0x5000c500c78528e7-part1/data2 (ext4, nofail)
GPUAMD (pilote amdgpu)
hostId ZFS21ed29b1

Avant de lancer quoi que ce soit, vérifier :

  • La clé age de exampleHost est disponible (sauvegarde Bitwarden, USB chiffrée, papier…) Voir Sauvegarde & Restauration des Secrets
  • L’ISO NixOS est téléchargée et gravée/flashée Utiliser une version récente : https://nixos.org/download/
  • Le dépôt git nixos est accessible (GitHub ou copie locale sur USB)
  • Une connexion réseau est disponible (filaire recommandé pour l’install)
  • Si /data2 contient des données importantes : en faire une sauvegarde avant

disko crée sur chaque NVMe :

PartitionTailleRôle
part11 GoESP (vfat)
part24 Gobpool (ZFS, mode grub2)
part3920 Gorpool (ZFS)
part44 Goswap (chiffrement aléatoire)
part51 MoGRUB BIOS boot

Datasets ZFS :

DatasetPoint de Montage
bpool/nixos/root/boot
rpool/nixos/root/
rpool/nixos/home/home
rpool/nixos/var/lib/var/lib
rpool/nixos/var/log/var/log

Flasher l’ISO sur une clé USB :

Fenêtre de terminal
# Depuis un autre Linux (remplacer /dev/sdX par le bon périphérique)
sudo dd if=nixos-minimal-*.iso of=/dev/sdX bs=4M conv=fsync status=progress

Booter sur la clé USB. Sélectionner l’entrée NixOS dans le menu UEFI.

Si connexion filaire : elle est souvent automatique (DHCP).

Si Wi-Fi nécessaire :

Fenêtre de terminal
sudo systemctl start wpa_supplicant
wpa_cli
> add_network 0
> set_network 0 ssid "MonSSID"
> set_network 0 psk "MonMotDePasse"
> enable_network 0
> quit

Vérifier la connexion :

Fenêtre de terminal
ping -c3 github.com
Fenêtre de terminal
# Cloner le dépôt dans /tmp
git clone https://github.com/gfriloux/nixos /tmp/nixos
cd /tmp/nixos

Étape 4 — Partitionnement et Formatage avec disko

Section intitulée « Étape 4 — Partitionnement et Formatage avec disko »
Fenêtre de terminal
sudo nix run github:nix-community/disko/latest -- \
--mode destroy,format,mount \
--flake /tmp/nixos#exampleHost

disko va :

  1. Effacer et repartitionner les deux Samsung NVMe
  2. Créer les pools ZFS bpool et rpool en miroir
  3. Créer les datasets ZFS
  4. Formater les partitions ESP (vfat) et swap
  5. Monter tout sous /mnt

Vérifier que /mnt est correctement monté :

Fenêtre de terminal
mount | grep /mnt
# Doit afficher rpool/nixos/root, bpool/nixos/root, rpool/nixos/home, etc.
df -h /mnt /mnt/boot /mnt/home /mnt/var/lib /mnt/var/log

La clé age doit être présente avant l’activation NixOS pour que sops-nix puisse déchiffrer le mot de passe de l’utilisateur (neededForUsers = true).

Fenêtre de terminal
sudo mkdir -p /mnt/etc/sops/age

Coller le contenu de la clé privée sauvegardée :

Fenêtre de terminal
sudo nano /mnt/etc/sops/age/keys.txt

Format attendu :

# created: 2024-01-01T00:00:00+01:00
# public key: age1xr32hdvanup0zk63v8hrcv2u2c09wplz6fd42w47mkjrd49j39xqaqqckq
AGE-SECRET-KEY-1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Corriger les permissions :

Fenêtre de terminal
sudo chmod 640 /mnt/etc/sops/age/keys.txt
sudo chown root:root /mnt/etc/sops/age/keys.txt
# (les permissions du groupe seront corrigées par tmpfiles au premier démarrage)

Vérifier que la clé publique correspond :

Fenêtre de terminal
nix run nixpkgs#age -- -y /mnt/etc/sops/age/keys.txt
# Doit afficher : age1xr32hdvanup0zk63v8hrcv2u2c09wplz6fd42w47mkjrd49j39xqaqqckq

Si la clé publique ne correspond pas, arrêter et vérifier la sauvegarde avant de continuer.

Fenêtre de terminal
sudo nixos-install --flake /tmp/nixos#exampleHost --no-root-passwd

L’option --no-root-passwd évite de définir un mot de passe root interactif (le mot de passe de kuri est géré par sops).

L’installation prend plusieurs minutes (téléchargement des paquets). Si une erreur sops apparaît, c’est probablement la clé age — revenir à l’étape 5.

En cas d’erreur réseau en cours de téléchargement, relancer la même commande : nixos-install reprend là où il s’est arrêté.

Fenêtre de terminal
sudo reboot

Retirer la clé USB au redémarrage. Le système doit booter sur GRUB → NixOS.

Si GRUB n’apparaît pas : vérifier l’ordre de boot dans le BIOS/UEFI. Chercher une entrée “UEFI OS” ou le nom des Samsung NVMe.

Au premier démarrage, les éléments suivants se lancent automatiquement :

  • sddm (écran de connexion Plasma 6)
  • Tailscale (démon, pas encore connecté)
  • pipewire, NetworkManager, Docker

Se connecter avec l’utilisateur kuri et le mot de passe issu de sops.

Tailscale tourne mais n’est pas encore authentifié.

Fenêtre de terminal
sudo tailscale up

Un lien d’authentification s’affiche. L’ouvrir dans un navigateur, se connecter au compte Tailscale, approuver la machine.

Vérifier la connectivité :

Fenêtre de terminal
tailscale status
# exampleHost doit apparaître avec une adresse 100.x.x.x
# Tester l'accès à clochette
tailscale ping clochette

Étape 9 — Premier Déploiement depuis le Dépôt

Section intitulée « Étape 9 — Premier Déploiement depuis le Dépôt »

Une fois Tailscale actif et le dépôt cloné sur la machine :

Fenêtre de terminal
cd ~/Apps/github/gfriloux/nixos # ou l'emplacement habituel du dépôt
just install

Cette commande (nh os switch .) applique la configuration complète et active Home Manager. Elle est à relancer chaque fois que la config change.

Fenêtre de terminal
# ZFS pools en bonne santé
zpool status
# Doit afficher ONLINE pour bpool et rpool, aucun error/degraded
# Secrets déchiffrés correctement
ls /run/secrets/
# Doit lister les secrets système (ex: users/kuri/hashed-password)
ls /run/user/1000/secrets/
# Doit lister les secrets Home Manager (rbw_server, workspace...)
# Docker opérationnel
docker info | grep "Storage Driver"
# Doit afficher : Storage Driver: zfs
# Tailscale
tailscale status
# GPU AMD
glxinfo | grep "OpenGL renderer"
# Doit afficher un renderer AMD (ex: AMD Radeon RX...)

Si l’un ou les deux Samsung NVMe sont remplacés par de nouveaux modèles, les IDs dans systems/x86_64-linux/exampleHost/disko.nix et boot.nix ne correspondront plus.

Avant de réinstaller, mettre à jour les IDs :

Fenêtre de terminal
# Depuis l'ISO, identifier les nouveaux disques
ls -la /dev/disk/by-id/ | grep nvme

Modifier disko.nix et boot.nix avec les nouveaux IDs, committer, puis reprendre à l’étape 4.