Infrastructure NixOS de FedeRez
Quick start
- Avoir https://direnv.net/
- Avoir https://nixos.org/download (pas NixOS, Nix, le package manager seulement!)
- Une connexion Internet et ses clefs SSH sur
root@
- Un accès aux secrets de la machine que vous voulez redéployer, i.e. regardez dans
secrets/
pour voir si votre clef s'y trouve.
L'art du déploiement
Mettre à jour les paquets
$ npins update
Vos sources sont à jour, redéployez les systèmes de vos choix. Il n'est pas possible de séparer les sources ou de retenir un système sur une source pour le moment. C'est volontaire, si vous avez un tel besoin, venez le motiver.
Redéployer un système en particulier
$ colmena apply --on <hostname> --verbose # --verbose pour avoir les logs, si vous le mettez pas, c'est juste oneline.
Redéployer des systèmes thématiques
$ colmena apply --on @<thème> # <thème> peut être matrix par exemple pour déployer tous les serveurs concernant Matrix.
Construire la configuration sans l'envoyer
$ colmena build # Vous pouvez utiliser --on pour filtrer.
Construire la configuration et faire une activation de test
Rien ne sera effectivement appliqué, mais si vous appliquez pour de vrai, vous n'aurez rien à transféré, seulement le script d'activation sera lancé.
Pratique si vous voulez un peu voir ce qui va bouger lors de l'application.
$ colmena apply dry-activate
Appliquer une configuration pour le prochain reboot
Pratique si c'est un changement intrusif qui va redémarrer trop de services (que vous pourrez déterminer via une activation de test).
$ colmena apply boot
Appliquer une configuration sur le système courant sans la persister (disparaît au prochain reboot)
Pratique si vous redoutez de vous couper la branche, vous pouvez simplement rebooter la VM, soit par l'hyperviseur, soit par un script de santé automatique.
$ colmena apply test
colmena repl
Avancé: Vous pouvez utiliser colmena repl
pour avoir un REPL pour manipuler les nodes.*
et extraire de l'information utile des déploiements au moment de l'évaluation.
C'est comme ça que le script de provisionnement anywhere fonctionne: ./provision-anywhere $hostname
, il calcule la dérivation système puis propose une instantiation de nixos-anywhere adéquate avec le script de partitionnement disko.
Avancé: provisionner une nouvelle VM
Plusieurs étapes simples:
- Démarrez la VM avec une ISO de bootstrap, regardez
isoBootstrap
dansdefault.nix
pour un exemple, mettez votre clef au besoin, uploadez l'ISO et bootez dessus. - Configurez la VM avec la bonne configuration réseau.
- Confirmez que vous pouvez ssh vers la machine manuellement.
- Lancez
./provision-anywhere $hostname
, vous obtiendrez une proposition de commandenix run ...
à lancer, c'est la commande finale qui provisionnera votre VM, elle ne rebootera pas la VM pour que vous puissiez faire des inspections ou des provisionnements supplémentaires. - Une fois que vous êtes satisfait, rebootez la VM manuellement.
- Procédez au premier provisionnement via
colmena
si vous ne pouviez pas tout appliquer depuis le départ, e.g. secrets ou état à générer initialement.
Plusieurs remarques:
- Par défaut, nous utilisons ext4 + UEFI Boot sur un ESP. Si vous voulez un autre disk layout, possible, via disko, mais il faut l'écrire dans
disks/
et le configurer danshive.nix
pour que le script disko soit adéquat. Par ailleurs, nous faisons l'hypothèse que le nom du disque cible s'appelle/dev/sda
. - Il est possible de remplacer l'ISO de bootstrap par une ISO d'une distribution standard avec des propriétés similaires: possible de SSH dessus globalement. L'ISO NixOS qu'on propose en bootstrap est optimal car elle fait tourner un noyau récent et contient tous les outils les plus fous pour vos besoins de filesystem bizarres (e.g. bcachefs).