Aller au contenu

Réinstallation — RogueLeader

ParamètreValeur
Accès réseau local192.168.0.10 (alias rogueleader.home)
Disque/dev/sda (BIOS/GPT via disko)
Architecturex86_64, Intel KVM
SSHAccessible directement (clé publique uniquement, pas de Tailscale)
sopsClé age dérivée de /etc/ssh/ssh_host_ed25519_key
  • Accès physique ou console au serveur
  • Clé USB NixOS ISO prête
  • Connexion réseau local (DHCP)
  • Clé age de exampleHost disponible (pour re-chiffrer les secrets après install) Voir Sauvegarde & Restauration des Secrets
  • Sauvegarde Borg vérifiée : BORG_PASSPHRASE=... borg list ssh://backup@storage2.friloux.me/~/rogueleader.friloux.me

Disque unique /dev/sda, GPT :

PartitionTailleRôle
part11 MoGRUB BIOS boot
part24 Goswap
part3reste/ ext4

Contrairement à clochette, disko gère les fileSystems NixOS — pas besoin de mettre à jour des UUIDs manuellement après réinstallation.

Brancher la clé USB, démarrer sur l’ISO NixOS.

Vérifier la connexion réseau (DHCP LAN) :

Fenêtre de terminal
ip addr show
ping -c3 192.168.0.1
Fenêtre de terminal
git clone https://github.com/gfriloux/nixos /tmp/nixos
cd /tmp/nixos

Étape 3 — Partitionnement et Formatage avec disko

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

disko partitionne /dev/sda, formate en ext4 et monte tout sous /mnt.

Vérifier :

Fenêtre de terminal
df -h /mnt
mount | grep /mnt
Fenêtre de terminal
sudo nixos-install --flake /tmp/nixos#RogueLeader --no-root-passwd
Fenêtre de terminal
reboot

Retirer la clé USB. Le système démarre sur GRUB → NixOS.

SSH est accessible directement depuis le réseau local via la clé publique déclarée dans users.nix :

Fenêtre de terminal
# Depuis exampleHost
ssh guillaume@rogueleader.home

Étape 6 — Mise à Jour de la Clé Age dans sops

Section intitulée « Étape 6 — Mise à Jour de la Clé Age dans sops »

La nouvelle installation a généré une nouvelle clé SSH host → nouvelle clé age. Sans cette mise à jour, sops ne pourra pas déchiffrer les secrets depuis RogueLeader.

Depuis RogueLeader (connecté via SSH) :

Fenêtre de terminal
nix run nixpkgs#ssh-to-age -- -i /etc/ssh/ssh_host_ed25519_key.pub

Depuis exampleHost, mettre à jour .sops.yaml avec la nouvelle clé publique :

Fenêtre de terminal
cd ~/Apps/github/gfriloux/nixos
nano .sops.yaml
# Remplacer la valeur de &server_rogueleader par la nouvelle clé age

Re-chiffrer secrets/RogueLeader.yaml :

Fenêtre de terminal
sops updatekeys secrets/RogueLeader.yaml
# Confirmer avec 'y'
# Vérifier
sops -d secrets/RogueLeader.yaml

Committer et pousser :

Fenêtre de terminal
git add .sops.yaml secrets/RogueLeader.yaml
git commit -m "chore(secrets): rotate RogueLeader age key after reinstall"
git push

Étape 7 — Déploiement Complet depuis exampleHost

Section intitulée « Étape 7 — Déploiement Complet depuis exampleHost »
Fenêtre de terminal
just install_rogueleader --ask-sudo-password

Cette commande déploie la configuration complète avec les secrets désormais déchiffrables par la nouvelle clé SSH host.

Pour déployer Home Manager :

Fenêtre de terminal
just home_rogueleader

Étape 8 — Restauration des Données depuis Borg (si Nécessaire)

Section intitulée « Étape 8 — Restauration des Données depuis Borg (si Nécessaire) »
Fenêtre de terminal
# Depuis RogueLeader en root
sudo -i
# Lister les archives
BORG_PASSPHRASE=$(cat /run/secrets/services/borg/passphrase) \
BORG_RSH="ssh -i /run/secrets/services/borg/key/private" \
borg list ssh://backup@storage2.friloux.me/~/rogueleader.friloux.me
# Arrêter les containers
systemctl stop docker-papra docker-uptime-kuma docker-mealie docker-borg-ui \
docker-wow-cp-bookstack docker-wow-cp-mariadb docker-wow-cp-mysqldump
# Restaurer depuis /
cd /
BORG_PASSPHRASE=$(cat /run/secrets/services/borg/passphrase) \
BORG_RSH="ssh -i /run/secrets/services/borg/key/private" \
borg extract --progress \
ssh://backup@storage2.friloux.me/~/rogueleader.friloux.me::ARCHIVE_NAME
# Redémarrer les services
systemctl start docker-papra docker-uptime-kuma docker-mealie docker-borg-ui \
docker-wow-cp-bookstack docker-wow-cp-mariadb docker-wow-cp-mysqldump
Fenêtre de terminal
# Containers en cours d'exécution
docker ps --format "table {{.Names}}\t{{.Status}}"
# Secrets déchiffrés
ls /run/secrets/
# Backup Borg
systemctl status borgbackup-job-remote