doc: Improve #1

Merged
v-lafeychine merged 1 commit from lafeychine/docs-improve into main 2025-09-28 17:44:04 +02:00
9 changed files with 61 additions and 55 deletions
Showing only changes of commit b96dfbe92c - Show all commits

View file

@ -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 <path>#<nom>`
`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 <path>#<nom>`,
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 <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
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

View file

@ -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

View file

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

View file

@ -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 = {

View file

@ -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 = [

View file

@ -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).

View file

@ -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=="
];
}

View file

@ -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.

View file

@ -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 (`<username>@<host>`). Il convient alors d'utiliser
> la commande suivante :
@ -47,32 +47,32 @@ $ ssh-keygen -t ed25519 -C <quelque>@<chose>
#### 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 <chemin/du/fichier>.age -i <chemin/de/la/clé>
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