
NixOS est une distribution Linux assez innovante qui se distingue par une approche différente de la gestion des paquets et de la configuration du système.
NixOS permet une gestion "déclarative" des configurations, à travers un ou plusieurs fichiers de configuration centraux.
Ça facilite la reproduction des environnements d'une machine à l'autre.
On va pouvoir aussi, entre deux modifications du système revenir rapidement à l'état précédent. On est un peu dans le même concept que les distribs atomique, mais avec en plus une configuration déclarative.
Pour résumer, c'est une distribution gérée avec un Ansible intégré pour ceux qui connaissent Ansible.
On trouverra des resources ici :
- Le manuel :
https://nixos.org/manual/nixos/stable
- Le wiki :
https://nixos.wiki/wiki/Main_Page
- La page de recherche des paquets et des options :
https://search.nixos.org/
Il y a 2 images disponibles en téléchargement sur le site de NixOS (
https://nixos.org/download) :
- GNOME
- KDE Plasma
Elles permettent de mettre en place une NixOS très rapidement après une installation graphique, via l'outil d'installation Calamarès.
Cela nous limite à une installation de ces 2 environnements de bureau phares.
Si on veut utiliser NixOS en mode "serveur" ou avec un autre environnement de bureau, on fera l'installation via l'image minimale.
Je vous renvoie vers ce tuto :
https://www.linuxtricks.fr/wiki/nixos-installer-nixos-facilement-depuis-l-image-minimale
Le fichier de configuration principal est
/etc/nixos/configuration.nix
Il contient ceci sur l'installation que j'ai faite avec l'image GNOME :
Les commentaires sont assez explicites.
Il y a une référence dans le fichier principal au fichier hardware-configuration.nix.
Ce fichier sera différent suivant les machines.
Il prend en compte le partitionnement, les pilotes matériels, le réseau par exemple.
Voici ce qu'il contient sur ma machine virtuelle sous Proxmox :
Les fichiers intégrés sont à placer dans
/etc/nixos.
On pourra intégrer d'autres fichiers de configuration dans le fichier configuration.nix. Par exemple, intégrer un fichier adrien.nix, on ajoutera la référence dans la section imports :
Ce fichier devra respecter la syntaxe d'un fichier de configuration NIX :
Après chaque modification de la configuration, il sera nécessaire d'appliquer la configuration.
Cela sera à faire quand on modifie un paramétrage ou qu'on ajoute / supprime des logiciels.
La commande à invoquer sera :
Dans un premier temps, on met à jour la liste des logiciels :
Pour appliquer la mise à jour :
On peut faire du 2 en 1 avec :
Et pour prendre en compte les modifications, on devra redémarrer:
L'upgrade du système se fait en suivant les notes de version de la nouvelle version.
Ici un exemple de mise à niveau de 24.05 à 24.11.
On prendra soin de vérifier s'il y a des changements à faire dans les fichiers de configuration avant.
On repère le channel sur lequel on est avec :
Ce qui renvoie :
Code TEXT :nixos https://nixos.org/channels/nixos-24.05
On bascule sur le nouveau channel via :
On applique la mise à niveau :
ça sera évidemment plus long qu'une mise à jour ou un ajout de logiciel, demandera plus d'espace libre et de ressources !
Et pour prendre en compte les modifications, on devra redémarrer:
A chaque modification de configuration, une nouvelle génération est créée.
Une génération, ça représente un état du système à un instant T. Une génération est immuable, c'est à dire qui ne peut pas avoir de modifications.
Je vous renvoie à cet article détaillé pour savoir comment faire un retour sur une précédente image (rollback) ainsi que de faire du ménage :
NixOS : Gestion des générations (rollback, suppression, ménage)
Quand on gèrera les configurations, on aura besoin de
https://search.nixos.org/
Sur le site on a 2 sections : Options et Packages.
Les
options dans NixOS sont des paramètres de configuration qui définissent le comportement du système ou des services. On y trouvera des configs pour :
- Activer des services
- Paramétrer des services
- Régler des éléments du système (zram, etc.)
- Installer des applications et régrer des paramétrages (vim, éditeur par défaut)
Les
packages dans NixOS sont des paquets qu'on va installer sur le système, sous forme de liste. On les listera dans un pavé de configuration avec 1 paquet par ligne comme ceci par exemple :
Code TEXT : environment.systemPackages = with pkgs; [
nmon
libreoffice-fresh
fastfetch
];
Attention, ce bloc est déjà défini dans configuration.nix, il ne doit pas être présent deux fois dans le même fichier !
Voici un exemple de configuration du système :
Code TEXT : # Pour les VMS :
services.qemuGuest.enable = true;
# Config systeme
zramSwap.enable = true;
boot.kernel.sysctl = { "vm.swappiness" = 5; } ;
networking.enableIPv6 = false;
- J'active le service qemuGuest car je suis dans une VM sous Proxmox
- J'active zram, avec sa configuration par défaut (qui semble être 50% de la RAM)
- Je définit la valeur vm.swapiness à 5 au niveau du système
- Je désactive l'IPv6
Voici un exemple de paquets qui nécessitent quelques options, installés sous la forme programs.XXX :
- htop a plusieurs options possibles de paramétrages, ici, je ne fais qu'installer le logiciel
- J'installe vim, avec tous les modules et je le défini comme éditeur par défaut (va modifier la variable EDITOR)
Voici un exemple pour installer des paquets.
On indiquera sue chaque nouvelle ligne (c'est plus propre) le nom des paquets à installer.
On le fera dans la section
environment.systemPackages :
On trouvera le nom des paquets dans :
https://search.nixos.org/packages
Ici, un exemple d'excusion de logiciels.
Dans le fichier principal, j'ai GNOME qui est installé (c'est un métagroupe) :
services.xserver.desktopManager.gnome.enable
Si on veut exclure dans ce paquet des paquets installés, on le fera ainsi :
Ici, un exemple de configuration de GNOME via dconf.
Dans cet exemple je modifie une valeur dconf :
C'est l'équivalent de :