Aller au contenu

Installation initiale

On met en place un réseau DNF par étapes, et on peut s’arrêter à chacune : un poste suffit pour démarrer.

  1. Un poste : la machine de l’administrateur (cette page).
  2. Une passerelle : créer une zone et y brancher d’autres postes.
  3. La coordination : relier les zones par VPN (tailnet).

Le premier poste s’installe seul, depuis l’ISO générique, sans autre machine : c’est la voie la plus simple.

  1. Obtenir l’image

    L’ISO générique jointe à chaque release du framework 🡕 (dnf-installer-vX.Y.Z-x86_64-linux.iso), gravée sur une clé USB.

  2. Démarrer la machine sur la clé, en filaire, Secure Boot désactivé.

  3. Répondre à l’assistant

    Il se lance tout seul sur la console, une fois le réseau en place. Ctrl-C donne l’invite de commande, d’où il se relance :

    Fenêtre de terminal
    darkone new

    Il demande la langue et le clavier, l’identité et le mot de passe de l’administrateur, le domaine du réseau, le nom de la machine, le disque s’il y en a plusieurs (pas en dessous de 20 Go : la clé de sauvegarde n’est jamais proposée), puis le chiffrement du disque et sa passphrase. Le reste se détecte : portable ou poste fixe, UEFI ou BIOS, fuseau horaire du pays. Disque en clair : une passphrase pour la sauvegarde des clés.

  4. Confirmer

    Le récapitulatif signale les choix définitifs (domaine, login). Le disque est ensuite effacé et le système installé, projet compris dans /etc/nixos.

  5. Sauvegarder les clés, sur une seconde clé USB

    Brancher une clé USB (FAT, exFAT, ext4…), la choisir : rien n’y est effacé. L’assistant y écrit dnf-backup-<domaine>.tar.age, puis demande de la débrancher et de la rebrancher pour la relire. Pas de sauvegarde relue, pas de fin d’installation.

  6. Redémarrer, clés USB retirées. Disque chiffré : la passphrase est demandée à chaque démarrage, avec le clavier choisi. La première session ouvre une page d’accueil dans le navigateur : étape 1 sur 4 franchie, la passerelle ensuite.

Un fichier de réponses tient lieu de questions ; une réponse absente est demandée, ou refusée avec --non-interactive.

reponses.yaml
version: 1
admin:
login: "alice"
name: "Alice Martin"
passwordHash: '$y$j9T$...' # mkpasswd -m yescrypt
network:
domain: "example.org"
host:
hostname: "poste"
disk:
encrypt: true
locale:
language: "fr_FR.UTF-8"
backup:
device: "/dev/disk/by-label/SECOURS" # clé USB de la sauvegarde
Fenêtre de terminal
darkone new --answers reponses.yaml --non-interactive --yes \
--luks-passphrase-file /run/user/1000/luks

La passphrase du disque n’entre jamais dans le fichier de réponses, qui circule : --luks-passphrase-file la lit dans un fichier, sinon elle est demandée. Elle chiffre aussi la sauvegarde ; disque en clair, c’est --backup-passphrase-file. En scripté, la clé USB est relue sans être débranchée.

dnf-backup-<domaine>.tar.age, chiffré par age, contient :

  • nix/ : la clé de déploiement (SSH) et la clé age d’admin qui en dérive ;
  • infra.key : la clé age d’infra ;
  • project.bundle : le projet, /etc/nixos, en git bundle.

Pour l’ouvrir, sur n’importe quel Linux doté d’age :

Fenêtre de terminal
age -d dnf-backup-example.org.tar.age | tar -x
git clone dnf-backup/project.bundle mon-reseau

Sur un nouveau poste d’administration, les clés reprennent leur place, au compte nix, en mode 600 : /home/nix/.ssh/id_ed25519, /home/nix/.config/sops/age/keys.txt et /etc/sops/age/infra.key. Le projet évolue : just backup-admin <périphérique> refait la sauvegarde (recettes).

--dry-run affiche le plan sans rien toucher, sur n’importe quelle machine.

Voie manuelle, depuis une machine d’administration qui est déjà un hôte DNF. Le projet part du modèle fourni par le framework : une structure prête et un etc/config.yaml commenté à remplir.

  1. Créer le dépôt

    Fenêtre de terminal
    nix flake new -t github:darkone-linux/darkone-nixos-framework mon-reseau
    cd mon-reseau && git init && git add -A

    Le projet épingle la dernière release du framework. Autre voie : le template GitHub dnf-boilerplate 🡕 (bouton « Use this template »), copie publiée du même modèle.

  2. Amorcer le framework

    Fenêtre de terminal
    nix run github:darkone-linux/darkone-nixos-framework#init
    nix develop github:darkone-linux/darkone-nixos-framework
  3. Initialiser les secrets

    Fenêtre de terminal
    just configure-admin-host

Tout se déclare dans etc/config.yaml (réseau, zones, utilisateurs, hôtes). Pour un premier poste, une zone, un utilisateur et un hôte suffisent : tout hôte appartient à une zone (ou porte une adresse publique ipv4).

Un éditeur doté de yaml-language-server (Zed, VS Code avec l’extension YAML…) complète et valide chaque clé, grâce à cette première ligne du fichier (déjà présente dans un projet créé par le modèle) :

# yaml-language-server: $schema=../dnf/config/config.schema.json
etc/config.yaml
zones:
main:
description: "Réseau principal"
ipPrefix: "10.0" # cette zone utilise 10.0.0.0/16
users:
alice:
uid: 1000
name: "Alice"
profile: "nix-admin"
groups: ["global"]
hosts:
- hostname: "poste"
name: "Poste de l'administrateur"
zone: "main:1.10" # IP fixe 10.0.1.10 ("main" seul = DHCP)
profile: "desktop"
users: ["alice"]
disko:
profile: "btrfs-1-disk"
devices:
main: "/dev/nvme0n1"

Puis régénérer, vérifier et commiter :

Fenêtre de terminal
just generate # produit var/generated/*.nix depuis etc/config.yaml
just check-flake # nix flake check
git add . && git commit -m "Premier hôte"

L’installation grave une image, démarre la machine dessus, puis applique le système complet.

  1. Obtenir l’image

    Fenêtre de terminal
    just build-iso

    Cette image porte votre clé de déploiement. Autre voie, sans construction : l’ISO générique jointe à chaque release du framework 🡕 (dnf-installer-vX.Y.Z-x86_64-linux.iso) ; la clé s’autorise alors au démarrage.

  2. Démarrer la machine

    Graver l’image sur une clé USB, brancher l’ordinateur au réseau en filaire, puis démarrer sur la clé. Avant l’invite de commande, l’écran affiche un message de bienvenue DNF, puis l’adresse IP et l’adresse MAC de l’interface reliée à Internet (servies par la passerelle locale ou votre routeur) : les noter.

    - IP: 10.0.0.50
    - MAC: aa:bb:cc:dd:ee:ff

    La commande dnf-netinfo les réaffiche.

    Avec l’ISO générique, l’écran le rappelle : définir un mot de passe (passwd), puis autoriser la clé depuis le poste d’admin.

    Fenêtre de terminal
    sudo -i -u nix ssh-copy-id nixos@10.0.0.50
  3. Fixer les adresses (dès qu’une zone existe)

    L’installation se termine par un redémarrage, et la suite doit retrouver la machine. Deux cas :

    • adresse MAC déjà déclarée : rien à faire, la passerelle sert la même adresse fixe à la clé USB et au système installé ;
    • adresse MAC inconnue : la relever, puis la déclarer.
    Fenêtre de terminal
    # just host-info <hôte> <ip-actuelle>
    just host-info poste 10.0.0.50

    Reporter la valeur dans etc/config.yaml, avec une adresse fixe, puis redéployer la passerelle de chaque zone concernée :

    etc/config.yaml
    - hostname: "poste"
    zone: "maison:2.1"
    mac: "aa:bb:cc:dd:ee:ff"
    Fenêtre de terminal
    # Redéployer la passerelle locale
    just clean
    git add . && git commit -m "host(poste): installation"
    just apply gw
  4. Installer le système

    Fenêtre de terminal
    # just full-install <hôte> <utilisateur> <ip>
    just full-install poste nixos 10.0.0.50
  5. Le système est installé et à jour.