From b96dfbe92cea16585cca709c4cb5efd6e5023714 Mon Sep 17 00:00:00 2001 From: Vincent Lafeychine Date: Sun, 28 Sep 2025 16:57:45 +0200 Subject: [PATCH] doc: Improve --- README.md | 65 +++++++++++++++++++------------------- devshells/README.md | 4 +-- devshells/default.nix | 2 +- flake.nix | 2 ++ hosts/vm/jitsi/default.nix | 2 ++ profiles/common/README.md | 4 +-- profiles/common/ssh.nix | 3 +- profiles/vm/README.md | 4 +-- secrets/README.md | 30 +++++++++--------- 9 files changed, 61 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index b27437e..22b8aa8 100644 --- a/README.md +++ b/README.md @@ -1,70 +1,71 @@ # NixOS Ce repo contient la configuration NixOS des différentes machines présentes dans -l'infrastructure de Aurore et se décompose en plusieurs parties : +l'infrastructure d'Aurore et se décompose en plusieurs parties : - [disks](./disks) : contient la configuration [disko](https://github.com/nix-community/disko) des machines. -- [devshells](./devshells) : contient des shells nix pour faciliter l'édition - des configurations nixos. +- [devshells](./devshells) : contient des shells nix pour obtenir des + environnements avec l'ensemble des dépendances nécessaires. - [hosts](./hosts) : contient la configuration spécifique à chaque machine, typiquement la configuration réseau, - [profiles](./profiles) : contient la configuration des différents modules - utilisé, + utilisés. - [secrets](./secrets) : contient l'ensemble des secrets chiffrés avec [agenix](https://github.com/ryantm/agenix). ## Gestion des secrets -Dans NixOS, l'ensemble des fichiers est écrit dans `/nix/store` et qui est -visible par tous les programmes (et tout les utilisateur⋅ices). De plus, -l'ensemble des fichiers de configurations se trouvent sur un repo git publique. -Pour ces deux raisons, il est préférable de chiffrer les secrets à l'aide de -[agenix](https://github.com/ryantm/agenix). Pour plus de détaille dans -[secrets](./secrets) +Dans Nix, l'ensemble des fichiers est écrit dans `/nix/store`, ce qui est +accessible et donc visible par tous les programmes (et tous les utilisateur⋅ices). +De plus, l'ensemble des fichiers de configurations se trouvent sur un repo git +publique. Pour ces deux raisons, il est préférable de chiffrer les secrets à +l'aide de [agenix](https://github.com/ryantm/agenix). Plus de détails sont +disponibles dans [secrets](./secrets). ## Installation d'une machine -Si la configuration est déjà écrite, il faut alors suivre les étapes suivantes : +Si la configuration est déjà présente dans ce projet, il vous suffit de suivre +les étapes suivantes : -1. S'assurer que la machine a accès à internet et possède un serveur DNS, -1. Importer les fichiers de configurations, -1. Si nécessaire, il faut de générer le fichier `hardware-configuration.nix` +1. Assurez-vous que la machine a accès à Internet et possède un serveur DNS, +1. Importez les fichiers de configuration, +1. Si nécessaire, il faut générer le fichier `hardware-configuration.nix` à l'aide de la commande `nixos-generate-config --no-filesystems --root .` - puis de l'ajouter dans la configuration, -1. Vérifier que la configuration `disko` utilisée est compatible, la - commande `lsblk` devrait être suffisant pour cela, -1. Partitionner les disques : l'usage de `disko` simplifie cette étape. En + puis l'ajouter dans la configuration, +1. Vérifiez que la configuration `disko` utilisée est compatible, la + commande `lsblk` devrait être suffisante pour cela, +1. Partitionnez les disques : l'usage de `disko` simplifie cette étape. En effet, il suffit d'exécuter la commande : - `nix run github:nix-community/disko --extra-experimental-features "nix-command flakes" -- --mode disko --flake #` - `disko` s'occupe automatiquement du montage des partitions créer, -1. Créer le répertoire `/mnt/etc/nixos` et ajouter les fichiers de + `nix run github:nix-community/disko --extra-experimental-features "nix-command flakes" -- --mode disko --flake #`, + et `disko` s'occupe automatiquement du montage des partitions créées, +1. Créez le répertoire `/mnt/etc/nixos` et ajoutez les fichiers de configuration dans ce répertoire, -1. Installer NixOS : `nixos-install --flake #`, +1. Installez NixOS : `nixos-install --flake #`, 1. Si tout s'est bien passé, un mot de passe vous sera demandé pour le mot - de passe root. Entrer celui-ci puis `poweroff` ou `reboot`. -1. Penser à push la configuration ainsi écrite. + de passe root, entrez-le, puis redémarrez la machine avec `reboot`. +1. Pensez à push la configuration ainsi écrite. Remarque : -> S'il n'y a pas suffisamment de place mémoire sur le disque d'installation -> lors du partitionnement des disques avec disko, il est possible d'étendre le -> nix-store en utilisant la RAM à l'aide de la commande : +> S'il n'y a pas suffisamment de place mémoire sur le disque d'installation lors +> du partitionnement des disques avec `disko`, il est possible d'étendre le +> `/nix/store` en utilisant la RAM de la machine à l'aide de la commande : > `mount -o remount,size=3G,noatime /nix/.rw-store` -> Cependant, cela peut être risquer s'il n'y a pas suffisamment de RAM. +> Cependant, vérifiez au préalable d'avoir suffisamment de RAM. Remarque : -> Si l'installation nécéssite le déchiffrement de secrets, l'installation -> pourrait échouée. Veuillez alors suivre la procédure décrite dans +> Si l'installation nécessite le déchiffrement de secrets, l'installation +> pourrait échouer. Veuillez alors suivre la procédure décrite dans > [secrets](./secrets). ## Formattage La flake contient un formatter ([treefmt](https://github.com/numtide/treefmt-nix)) qui s'exécute automatiquement lors d'un `nix flake check`. Si le repo n'est pas -formatter, une erreur sera alors retournée en suggérant des modifications. Pour -appliquer les modifications suggérées, il est alors possible d"exécuter la +formatté, une erreur sera alors retournée en suggérant des modifications. Pour +appliquer les modifications suggérées, il est alors possible d'exécuter la commande : ```bash diff --git a/devshells/README.md b/devshells/README.md index e2da87f..b9460d3 100644 --- a/devshells/README.md +++ b/devshells/README.md @@ -1,9 +1,9 @@ # Devshells -Un `devshells` permet de créer un environnement contenant des outils pour +Un `devshell` permet de créer un environnement contenant des outils pour faciliter le développement de projet. -Pour activer un `devshells` il suffit d'exécuter la commande : +Pour activer un `devshell` il suffit d'exécuter la commande : ```bash $ nix develop diff --git a/devshells/default.nix b/devshells/default.nix index fd77960..9037022 100644 --- a/devshells/default.nix +++ b/devshells/default.nix @@ -1,7 +1,7 @@ { pkgs, agenix }: pkgs.mkShell { - name = "nix"; + name = "aurore"; packages = [ agenix.packages.x86_64-linux.default diff --git a/flake.nix b/flake.nix index ec914e2..2fcb8db 100644 --- a/flake.nix +++ b/flake.nix @@ -53,6 +53,7 @@ ++ defaultConfig; in { + # VL: Peut-être avoir de l'auto-discovery: On a beaucoup trop de machines jitsi = nixosSystem { specialArgs = inputs; modules = [ @@ -62,6 +63,7 @@ }; }; }; + perSystem = { config, pkgs, system, ... }: { devShells = { diff --git a/hosts/vm/jitsi/default.nix b/hosts/vm/jitsi/default.nix index 5da3a55..b1081f8 100644 --- a/hosts/vm/jitsi/default.nix +++ b/hosts/vm/jitsi/default.nix @@ -10,12 +10,14 @@ systemd.network = { enable = true; + links = { "10-pub" = { matchConfig.MACAddress = "ae:ae:ae:74:db:e1"; linkConfig.Name = "pub"; }; }; + networks = { "10-pub" = { domains = [ diff --git a/profiles/common/README.md b/profiles/common/README.md index ac6fe31..65d2a0d 100644 --- a/profiles/common/README.md +++ b/profiles/common/README.md @@ -1,4 +1,4 @@ # Common -Ce répertoire contient l'ensemble des fichiers de configurations qui sont -communs à toutes les machines (physiques et virtuelles). +Ce répertoire contient l'ensemble des fichiers de configuration qui sont communs +à toutes les machines (physiques et virtuelles). diff --git a/profiles/common/ssh.nix b/profiles/common/ssh.nix index 8bb1a2c..49b1233 100644 --- a/profiles/common/ssh.nix +++ b/profiles/common/ssh.nix @@ -10,6 +10,7 @@ mode = "400"; }; }; + services.openssh = { enable = true; @@ -71,8 +72,8 @@ "-l INFO" ]; }; + users.users.root.openssh.authorizedKeys.keys = [ "cert-authority,no-touch-required,principals=\"any,newcomer,${config.networking.fqdn}\" ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBIpT7d7WeR88bs53KkNkZNOzkPJ7CQ5Ui6Wl9LXzAjjIdH+hKJieBMHrKew7+kzxGYaTqXWF1fQWsACG6aniy7VZpsdgTaNw7qr9frGfmo950V7IlU6w1HRc5c+3oVBWpg==" ]; - } diff --git a/profiles/vm/README.md b/profiles/vm/README.md index dc6f335..21967f8 100644 --- a/profiles/vm/README.md +++ b/profiles/vm/README.md @@ -1,4 +1,4 @@ # VM -Ce répertoire contient l'ensemble des fichiers de configurations qui sont -communs aux à toutes les VM. +Ce répertoire contient l'ensemble des fichiers de configuration qui sont communs +aux à toutes les VM. diff --git a/secrets/README.md b/secrets/README.md index 6f6d330..284e7a2 100644 --- a/secrets/README.md +++ b/secrets/README.md @@ -1,11 +1,11 @@ # Agenix Agenix est un outil permettant d'inclure des secrets dans une configuration -NixOS et notamment de ne pas les copier les secrets dans `/nix/store` qui est -visible par tout le monde (dit "world readable"), c'est-à-dire par tout les -processus et tout les utilisateur⋅ices. +NixOS et notamment de ne pas les copier les secrets dans `/nix/store`, qui est +visible par tout le monde (dit "_world readable_"), c'est-à-dire par tous les +processus et tous les utilisateur⋅ices. -Pour plus d'information sur agenix, veuillez vous réferer à la [documentation +Pour plus d'informations sur agenix, veuillez vous référer à la [documentation officielle](https://github.com/ryantm/agenix) ## Pré-requis @@ -36,7 +36,7 @@ sera nécessaire par la suite. Remarque : -> Pour des raisons de préférence personnelle, il peut être préféré de ne pas +> Pour des raisons de préférence personnelle, il peut être préférable de ne pas > mettre le nom par défaut (`@`). Il convient alors d'utiliser > la commande suivante : @@ -47,32 +47,32 @@ $ ssh-keygen -t ed25519 -C @ #### Machines Pour une machine, les clés ssh sont automatiquement générées lors de -l'installation, et la clé publique se trouvent (généralement) dans +l'installation, et la clé publique se trouve (généralement) dans `/etc/ssh/ssh_host_ed25519_key.pub`. ### Ajout des clés et rechiffrement -Une fois les clés générés, il faut alors les ajouter dans le fichier `secrets` -qui se trouve à la racine du projet. +Une fois les clés générées, il faut alors les ajouter dans le fichier `secrets` +qui se trouve à la racine de ce projet. :warning: ATTENTION :warning: -> Seule la clé publique doit être ajouté et elle est identifiable au fait que +> Seule la clé publique doit être ajoutée, et elle est identifiable au fait que > le fichier se termine par `.pub`. -Une fois ajouter, il faut alors que quelqu'un ayant les secrets chiffrés pour +Une fois ajoutée, il faut alors que quelqu'un ayant les secrets chiffrés pour sa clé ssh rechiffre les secrets pour votre clé. Cela se fait avec les commandes : ```bash $ nix develop -$ agenir -r # -r ou --rekey +$ agenix -r # -r ou --rekey ``` Remarque : -> Ces commandes fonctionnent également lors du retrait de clé ou lors de -> changement. +> Ces commandes doivent également être effectuées lorsqu'une clé est changée ou +> supprimée. ### Créer et éditer un fichier @@ -85,8 +85,8 @@ $ agenix -e .age -i Pour créer un nouveau fichier, il faut préalablement l'ajouter dans `secrets.nix`. Il est alors important d'ajouter les clés pour lesquelles le -fichier doit être chiffré. Il est préférable de respecter _leitmotiv_ le -suivant : seul les machines et personnes ayant besoin du secret doivent avoir +fichier doit être chiffré. Il est préférable de respecter le _leitmotiv_ +suivant : seuls les machines et personnes ayant besoin du secret doivent avoir accès audit secret. Une fois cela effectué, la commande pour créer le fichier est la même que celle