72 lines
3.3 KiB
Markdown
72 lines
3.3 KiB
Markdown
# NixOS
|
|
|
|
Ce repo contient la configuration NixOS des différentes machines présentes dans
|
|
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 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és.
|
|
- [secrets](./secrets) : contient l'ensemble des secrets chiffrés avec
|
|
[agenix](https://github.com/ryantm/agenix).
|
|
|
|
|
|
## Gestion des 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à 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 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>`,
|
|
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. 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, 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 de la machine à l'aide de la commande :
|
|
> `mount -o remount,size=3G,noatime /nix/.rw-store`
|
|
> Cependant, vérifiez au préalable d'avoir suffisamment de RAM.
|
|
|
|
Remarque :
|
|
> 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
|
|
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
|
|
```
|