Compare commits

...

1 commit

Author SHA1 Message Date
b96dfbe92c
doc: Improve 2025-09-28 17:02:38 +02:00
9 changed files with 61 additions and 55 deletions

View file

@ -1,70 +1,71 @@
# NixOS # NixOS
Ce repo contient la configuration NixOS des différentes machines présentes dans 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) - [disks](./disks) : contient la configuration [disko](https://github.com/nix-community/disko)
des machines. des machines.
- [devshells](./devshells) : contient des shells nix pour faciliter l'édition - [devshells](./devshells) : contient des shells nix pour obtenir des
des configurations nixos. environnements avec l'ensemble des dépendances nécessaires.
- [hosts](./hosts) : contient la configuration spécifique à chaque machine, - [hosts](./hosts) : contient la configuration spécifique à chaque machine,
typiquement la configuration réseau, typiquement la configuration réseau,
- [profiles](./profiles) : contient la configuration des différents modules - [profiles](./profiles) : contient la configuration des différents modules
utilisé, utilisés.
- [secrets](./secrets) : contient l'ensemble des secrets chiffrés avec - [secrets](./secrets) : contient l'ensemble des secrets chiffrés avec
[agenix](https://github.com/ryantm/agenix). [agenix](https://github.com/ryantm/agenix).
## Gestion des secrets ## Gestion des secrets
Dans NixOS, l'ensemble des fichiers est écrit dans `/nix/store` et qui est Dans Nix, l'ensemble des fichiers est écrit dans `/nix/store`, ce qui est
visible par tous les programmes (et tout les utilisateur⋅ices). De plus, accessible et donc visible par tous les programmes (et tous les utilisateur⋅ices).
l'ensemble des fichiers de configurations se trouvent sur un repo git publique. De plus, l'ensemble des fichiers de configurations se trouvent sur un repo git
Pour ces deux raisons, il est préférable de chiffrer les secrets à l'aide de publique. Pour ces deux raisons, il est préférable de chiffrer les secrets à
[agenix](https://github.com/ryantm/agenix). Pour plus de détaille dans l'aide de [agenix](https://github.com/ryantm/agenix). Plus de détails sont
[secrets](./secrets) disponibles dans [secrets](./secrets).
## Installation d'une machine ## 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. Assurez-vous que la machine a accès à Internet et possède un serveur DNS,
1. Importer les fichiers de configurations, 1. Importez les fichiers de configuration,
1. Si nécessaire, il faut de générer le fichier `hardware-configuration.nix` 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 .` à l'aide de la commande `nixos-generate-config --no-filesystems --root .`
puis de l'ajouter dans la configuration, puis l'ajouter dans la configuration,
1. Vérifier que la configuration `disko` utilisée est compatible, la 1. Vérifiez que la configuration `disko` utilisée est compatible, la
commande `lsblk` devrait être suffisant pour cela, commande `lsblk` devrait être suffisante pour cela,
1. Partitionner les disques : l'usage de `disko` simplifie cette étape. En 1. Partitionnez les disques : l'usage de `disko` simplifie cette étape. En
effet, il suffit d'exécuter la commande : effet, il suffit d'exécuter la commande :
`nix run github:nix-community/disko --extra-experimental-features "nix-command flakes" -- --mode disko --flake <path>#<nom>` `nix run github:nix-community/disko --extra-experimental-features "nix-command flakes" -- --mode disko --flake <path>#<nom>`,
`disko` s'occupe automatiquement du montage des partitions créer, et `disko` s'occupe automatiquement du montage des partitions créées,
1. Créer le répertoire `/mnt/etc/nixos` et ajouter les fichiers de 1. Créez le répertoire `/mnt/etc/nixos` et ajoutez les fichiers de
configuration dans ce répertoire, configuration dans ce répertoire,
1. Installer NixOS : `nixos-install --flake <path>#<nom>`, 1. Installez NixOS : `nixos-install --flake <path>#<nom>`,
1. Si tout s'est bien passé, un mot de passe vous sera demandé pour le mot 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`. de passe root, entrez-le, puis redémarrez la machine avec `reboot`.
1. Penser à push la configuration ainsi écrite. 1. Pensez à push la configuration ainsi écrite.
Remarque : Remarque :
> S'il n'y a pas suffisamment de place mémoire sur le disque d'installation > S'il n'y a pas suffisamment de place mémoire sur le disque d'installation lors
> lors du partitionnement des disques avec disko, il est possible d'étendre le > du partitionnement des disques avec `disko`, il est possible d'étendre le
> nix-store en utilisant la RAM à l'aide de la commande : > `/nix/store` en utilisant la RAM de la machine à l'aide de la commande :
> `mount -o remount,size=3G,noatime /nix/.rw-store` > `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 : Remarque :
> Si l'installation nécéssite le déchiffrement de secrets, l'installation > Si l'installation nécessite le déchiffrement de secrets, l'installation
> pourrait échouée. Veuillez alors suivre la procédure décrite dans > pourrait échouer. Veuillez alors suivre la procédure décrite dans
> [secrets](./secrets). > [secrets](./secrets).
## Formattage ## Formattage
La flake contient un formatter ([treefmt](https://github.com/numtide/treefmt-nix)) 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 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 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 appliquer les modifications suggérées, il est alors possible d'exécuter la
commande : commande :
```bash ```bash

View file

@ -1,9 +1,9 @@
# Devshells # 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. 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 ```bash
$ nix develop $ nix develop

View file

@ -1,7 +1,7 @@
{ pkgs, agenix }: { pkgs, agenix }:
pkgs.mkShell { pkgs.mkShell {
name = "nix"; name = "aurore";
packages = [ packages = [
agenix.packages.x86_64-linux.default agenix.packages.x86_64-linux.default

View file

@ -53,6 +53,7 @@
++ defaultConfig; ++ defaultConfig;
in in
{ {
# VL: Peut-être avoir de l'auto-discovery: On a beaucoup trop de machines
jitsi = nixosSystem { jitsi = nixosSystem {
specialArgs = inputs; specialArgs = inputs;
modules = [ modules = [
@ -62,6 +63,7 @@
}; };
}; };
}; };
perSystem = { config, pkgs, system, ... }: perSystem = { config, pkgs, system, ... }:
{ {
devShells = { devShells = {

View file

@ -10,12 +10,14 @@
systemd.network = { systemd.network = {
enable = true; enable = true;
links = { links = {
"10-pub" = { "10-pub" = {
matchConfig.MACAddress = "ae:ae:ae:74:db:e1"; matchConfig.MACAddress = "ae:ae:ae:74:db:e1";
linkConfig.Name = "pub"; linkConfig.Name = "pub";
}; };
}; };
networks = { networks = {
"10-pub" = { "10-pub" = {
domains = [ domains = [

View file

@ -1,4 +1,4 @@
# Common # Common
Ce répertoire contient l'ensemble des fichiers de configurations qui sont Ce répertoire contient l'ensemble des fichiers de configuration qui sont communs
communs à toutes les machines (physiques et virtuelles). à toutes les machines (physiques et virtuelles).

View file

@ -10,6 +10,7 @@
mode = "400"; mode = "400";
}; };
}; };
services.openssh = { services.openssh = {
enable = true; enable = true;
@ -71,8 +72,8 @@
"-l INFO" "-l INFO"
]; ];
}; };
users.users.root.openssh.authorizedKeys.keys = [ users.users.root.openssh.authorizedKeys.keys = [
"cert-authority,no-touch-required,principals=\"any,newcomer,${config.networking.fqdn}\" ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBIpT7d7WeR88bs53KkNkZNOzkPJ7CQ5Ui6Wl9LXzAjjIdH+hKJieBMHrKew7+kzxGYaTqXWF1fQWsACG6aniy7VZpsdgTaNw7qr9frGfmo950V7IlU6w1HRc5c+3oVBWpg==" "cert-authority,no-touch-required,principals=\"any,newcomer,${config.networking.fqdn}\" ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBIpT7d7WeR88bs53KkNkZNOzkPJ7CQ5Ui6Wl9LXzAjjIdH+hKJieBMHrKew7+kzxGYaTqXWF1fQWsACG6aniy7VZpsdgTaNw7qr9frGfmo950V7IlU6w1HRc5c+3oVBWpg=="
]; ];
} }

View file

@ -1,4 +1,4 @@
# VM # VM
Ce répertoire contient l'ensemble des fichiers de configurations qui sont Ce répertoire contient l'ensemble des fichiers de configuration qui sont communs
communs aux à toutes les VM. aux à toutes les VM.

View file

@ -1,11 +1,11 @@
# Agenix # Agenix
Agenix est un outil permettant d'inclure des secrets dans une configuration 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 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 visible par tout le monde (dit "_world readable_"), c'est-à-dire par tous les
processus et tout les utilisateur⋅ices. 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) officielle](https://github.com/ryantm/agenix)
## Pré-requis ## Pré-requis
@ -36,7 +36,7 @@ sera nécessaire par la suite.
Remarque : 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 (`<username>@<host>`). Il convient alors d'utiliser > mettre le nom par défaut (`<username>@<host>`). Il convient alors d'utiliser
> la commande suivante : > la commande suivante :
@ -47,32 +47,32 @@ $ ssh-keygen -t ed25519 -C <quelque>@<chose>
#### Machines #### Machines
Pour une machine, les clés ssh sont automatiquement générées lors de 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`. `/etc/ssh/ssh_host_ed25519_key.pub`.
### Ajout des clés et rechiffrement ### Ajout des clés et rechiffrement
Une fois les clés générés, il faut alors les ajouter dans le fichier `secrets` Une fois les clés générées, il faut alors les ajouter dans le fichier `secrets`
qui se trouve à la racine du projet. qui se trouve à la racine de ce projet.
:warning: ATTENTION :warning: :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`. > 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 sa clé ssh rechiffre les secrets pour votre clé. Cela se fait avec les
commandes : commandes :
```bash ```bash
$ nix develop $ nix develop
$ agenir -r # -r ou --rekey $ agenix -r # -r ou --rekey
``` ```
Remarque : Remarque :
> Ces commandes fonctionnent également lors du retrait de clé ou lors de > Ces commandes doivent également être effectuées lorsqu'une clé est changée ou
> changement. > supprimée.
### Créer et éditer un fichier ### Créer et éditer un fichier
@ -85,8 +85,8 @@ $ agenix -e <chemin/du/fichier>.age -i <chemin/de/la/clé>
Pour créer un nouveau fichier, il faut préalablement l'ajouter dans 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 `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 fichier doit être chiffré. Il est préférable de respecter le _leitmotiv_
suivant : seul les machines et personnes ayant besoin du secret doivent avoir suivant : seuls les machines et personnes ayant besoin du secret doivent avoir
accès audit secret. accès audit secret.
Une fois cela effectué, la commande pour créer le fichier est la même que celle Une fois cela effectué, la commande pour créer le fichier est la même que celle