• [^] # Re: configuration

    Posté par . En réponse à la dépêche L’heure du test — épisode 1 — NixOS. Évalué à 4.

    Très bonne question ;)

    En général, ce qui est favorisé est que le service NixOS expose des options qui sont exprimables dans le langage de Nix pour avoir une configuration déclarative.

    Ce qui se passe derrière, c’est que le fichier de configuration « réel » est généré en fonction de ce qui a été déclaré dans le DSL nix. Il est tout à fait possible que des options ne soient pas accessibles via le DSL nix. En général, les mainteneurs exposent les principales configurations via des attributs nix, et pour le reste il y a souvent un attribut « fourre tout » qui va contenir un blob de texte qui va être inséré direct dans le fichier de conf généré.

    Pour openssh, ce paramètre magique est services.openssh.extraConfig.

    On peut donc facilement avoir une déclaration comme ça :

     services.openssh = {
     enable = true;
     ports = [ 44 ];
     extraConfig = ''
     Match User linuxfr
     ChrootDirectory /home/linuxfr
     AllowTCPForwarding no
     ForceCommand internal-sftp
     '';
     };
    

    Pour ce qui est de la localisation des fichiers de config, autant que faire ce peut, elles ne sont pas dans /etc. Les configurations sont un résultat d’après la config de l’utilisateur, et sont donc rangées avec tous les résultats, dans /nix/store. Dans la majorité des cas, les scripts de lancement des services (ici l’unit systemd) va lancer openssh en lui spécifiant où trouver le fichier de configuration :

    $ grep sshd_config /etc/systemd/system/sshd.service
    ExecStart=/nix/store/wk90g951ybhh67qmbzq6g2y867356rcq-openssh-7.4p1/bin/sshd -f /nix/store/k3sdz12hsak7amps64zxi6a29bkd556q-sshd_config

    Bien sur, sshd.service est également généré via nix, il est donc lui-même dans /nix/store :

    $ readlink -f /etc/systemd/system 
    /nix/store/66daxxs9f2gjfnmak193lb5i3lip8r1b-system-units

    C’est ce mécanisme qui fait qu’il est simple de passer d’une config / version à l’autre « juste » en mettant à jours un lien symbolique.