diff --git a/README.md b/README.md index b27437e..19e2560 100644 --- a/README.md +++ b/README.md @@ -1,72 +1,72 @@ # 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 : - -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` +Si la configuration est déjà présente dans ce projet, il vous suffit de suivre +les étapes suivantes : +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 $ nix fmt ``` diff --git a/devshells/README.md b/devshells/README.md index e2da87f..2b7f47e 100644 --- a/devshells/README.md +++ b/devshells/README.md @@ -1,10 +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..1083258 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..ea92abc 100644 --- a/secrets/README.md +++ b/secrets/README.md @@ -1,18 +1,20 @@ # 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 La présente documentation présuppose que l'ordinateur exécutant les commandes possède NixOS ou le gestionnaire de paquet [nix](nixos.org/download/). + ## Fonctionnement ### Génération des clés de (dé)chiffrement @@ -25,7 +27,6 @@ indiquer à agenix. Pour un⋅e utilisateur⋅ice, il convient de générer une clé ssh (ed25519) avec la commande : - ```bash $ ssh-keygen -t ed25519 ``` @@ -35,11 +36,9 @@ l'emplacement le cas échéant). Rappelez-vous bien de la localisation car elle 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 : - ```bash $ ssh-keygen -t ed25519 -C @ ``` @@ -47,32 +46,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 doivent également être effectuées lorsqu'une clé est changée ou +> supprimée. -> Ces commandes fonctionnent également lors du retrait de clé ou lors de -> changement. ### Créer et éditer un fichier @@ -85,14 +84,15 @@ $ 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 pour les éditer (excepté le `-i` puisque qu'il n'y a pas besoin de déchiffrer le secrets). + ### Utiliser agenix dans une configuration Pour utiliser agenix dans une configuration, il faut commencer par écrire le