doc: Improve
This commit is contained in:
parent
962d900c01
commit
b96dfbe92c
9 changed files with 61 additions and 55 deletions
65
README.md
65
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 <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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{ pkgs, agenix }:
|
||||
|
||||
pkgs.mkShell {
|
||||
name = "nix";
|
||||
name = "aurore";
|
||||
|
||||
packages = [
|
||||
agenix.packages.x86_64-linux.default
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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=="
|
||||
];
|
||||
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue