Duniter sur serveur Nixos

Je suis assez attiré par NixOS mais comme tous les trucs d’adminsys, je n’ai jamais le courage de m’y coller tout seul. Pour ansible, j’avais été aidé par @Moul, pour docker, j’avais été aidé par @Pini et @aya. Pour nixos, je voudrais bien une petite session de partage par les personnes qui y ont touché, comme @Nicolas80, @cgeek, @ManUtopiK et bien sûr @immae :smiley:

Intéressé également pour une session de partage :wink:
Personellement, je n’utilise probablement pas énormément des possibilités de NixOS; mais c’est mon OS principal sur mon pc personnel depuis 2 ans et demi - et je ne voudrais pas repasser à Windows :smiley:

NixOS est un système d’exploitation (enfin une “distribution”, comme ubuntu ou debian). Est-ce ce qui t’intéresse ?

Nix (qui permet entre autre de faire nixos) est un système de build (reproductible etc., tout ce dont tu as entendu parler). Ça peut être installé sur n’importe quelle distribution (ubuntu a même un paquet pour). Si tu veux pouvoir développer du packaging nix pour duniter tu n’as besoin que de ça, pas de nixos. Même si c’est pour déployer les machines duniter (donc déployer nixos sur un serveur) c’est suffisant.

On peut prévoir une session de partage oui, mais il faut d’abord décider de quoi on parle :slight_smile: (peut être commencer par “nix” du coup)

D’après ce que j’ai compris Nix est aussi un langage (Nix language basics — nix.dev documentation). Ce qui m’intéresse c’est un système déclaratif et reproductible, et ça m’intéresse moins en tant que nième “package manager” sur mon système en plus de pip, pacman, pnpm, gnome extension manager ou autre, mais dans ses applications à un système d’exploitation, de sorte que tout soit déployable facilement et mettable à jour sans crainte de tout casser et pas pouvoir revenir en arrière. Donc je dirais que ce qui m’intéresse, c’est Nix appliqué à NixOS. Mais je n’ai pas encore fait l’effort d’essayer, jusque là migration v2 parce que ce n’était pas prioritaire, et maintenant parce que je n’ai pas encore ménagé du temps pour ça. Mais l’enthousiasme communicatif et les qualités pédagogiques sont des vertus qui peuvent vite me donner envie d’y passer quelques nuits !

Salut Hugo !

Intéressé pour échanger sur nixOS aussi.
Avec l’IA, nix est un régal !
J’ai développé une solution avec nixos-anywhere pour installer des serveurs avec une quarantaine d’applications pré-configurées et tout boosté à l’IA. J’essaye de voir si je peux en faire un business en ce moment…
Pour duniter, on pourrait imaginer une config prête à l’emploi avec toute la suite pour installer un serveur avec un noeud duniter et l’indexer…
L’idée, tu achètes un vps, peu importe quelle hébergeur et distribution, et en une ligne de commande ça vient pếter le serveur pour installer nixos et toute la suite duniter !
Je ne sais pas trop ce que tu as en tête, mais pas de pb pour faire une visio sur le sujet.

J’ai fait exactement ce que tu dis chez moi : un serveur Nixos avec nginx (ssl) + duniter, avec Nixos-anywhere, Arion (pour faire du docker-compose en Nix) et l’IA comme guide !

Je cherche maintenant un VPS pas cher pour y déployer ma configuration Duniter Ǧ1 avec Nixos-anywhere.

Par contre il y a une phase manuelle de récupération des specs du disque dur pour faire un fichier JSON du matériel de destination.

As-tu un script qui fait cette phase automatiquement ?

Et effectivement, cette solution enterre Ansible !

Mais le sujet au départ ce sont les clients sur Nixos. @Nicolas80 a commencé à tester Tikka sur Nixos mais a des problèmes de dépendances système. L’idéal avec l’aide de l’IA serait de faire un package Nix pour Tikka, que j’ajouterai à la CI/CD.

Une fois le processus maîtrisé on pourrait l’appliquer aux autres clients. Qui seraient alors installables partout où Nix fonctionne !

En général tu ne pourras pas faire ça automatiquement. Sur l’infra de duniter par exemple on a un fichier (géré par disco) par serveur. Même pour un cas aussi simple que les bastions (kerr et scharzschild) qui sont chez deux fournisseurs différents (OVH et Scaleway je crois) c’est pas possible de faire un modèle unique, rien qu’à cause des nommages différents

Ahah ! Dingue ça que tu fasses pareil !

Pour les specs de disque, nixos-anywhere le fait tout seul en fait. J’ai testé sur ovh et contabo pour l’instant ça marche.

J’ai juste ça pour disko :

# Disk configuration for VPS (BIOS + ESP + ext4 root)
# No LVM for simplicity on VPS
{ lib, ... }:
{
  disko.devices = {
    disk.disk1 = {
      device = lib.mkDefault "/dev/sda";
      type = "disk";
      content = {
        type = "gpt";
        partitions = {
          boot = {
            name = "boot";
            size = "2M";
            type = "EF02";
          };
          esp = {
            name = "ESP";
            size = "300M";
            type = "EF00";
            content = {
              type = "filesystem";
              format = "vfat";
              mountpoint = "/boot";
            };
          };
          root = {
            name = "root";
            size = "100%";
            content = {
              type = "filesystem";
              format = "ext4";
              mountpoint = "/";
              mountOptions = [
                "defaults"
              ];
            };
          };
        };
      };
    };
  };
}

C’est pas évident mais ton exemple de config là se base quand même sur le fait que ton disque s’appelle /dev/sda, ce qui n’est pas du tout une généralité parmi les VM :wink:. Et que le système de boot supporte UEFI

Même il peut arriver de ne pas avoir le même setup dans un rescue (là d’où tu lances le nixos-anywhere) et dans un système normal (hetzner typiquement)

Edit: extrait de la config des bastions duniter, juste pour voir comment ça peut différer même sur deux serveurs ayant vocation à être identiques

Pfiou, tes machines sont des trous noirs pour moi :slight_smile:
Ce problème est plutôt pour des serveurs dédiés non ?
Tu déploies sur 2 machines avec runtime qui diverge aussi ?
Et je pensais que nixos-anywhere lisait lsblk ou un truc du genre via le rescue pour déployer.
Sinon, il n’y a pas moyen de passer par /dev/disk/by-id plutôt que /dev/sda ?

Contabo ?

Je ne connaissais pas Arion. J’ai testé compose2nix, mais finalement je suis parti sur du pur nixos quand je peux, sinon je passe par virtualisation.oci-containers.

Non kerr et schwarzschild (les deux exemples de mon screenshot) sont des VPS, loués à deux endroits différents. Mais les problèmes sont les mêmes partout :

  • Tu ne peux pas garantir que tu auras un /dev/foo commun à tous les serveurs sur lesquels tu vas déployer, or cette informaiton est “hardcodée” dans le fichier nix (et non pas calculée automatiquement). Donc tu peux avoir 99% de la config commune à tout ton parc, mais ce /dev/sda sera forcément variable entre des serveurs distincts.
  • Quand tu n’as pas de chance (le cas de kerr), tu n’as même pas la même valeur de /dev/sd* entre le mode rescue et le mode normal. Dans ce cas tu dois en plus fumbler parce que nixos-anywhere opère dans le mode rescue mais doit installer le système pour qu’il puisse rebooter en mode normal. C’est une galère.