NixOS

Un article de Wikipédia, l'encyclopédie libre.

NixOS
Logo

Famille Gnu/Linux
Type de noyau Monolithique modulaire (Linux kernel)
État du projet En développement
Dépôt github.com/NixOS/nixpkgsVoir et modifier les données sur Wikidata
Plates-formes i686, x86-64, ARMv7, AArch64
Entreprise /
Fondateur
Eelco Dolstra
Licence Licence MITVoir et modifier les données sur Wikidata
Écrit en nix, c++[1]
Dernière version stable 20.09 (Nightingale) ()
Méthode de mise à jour nixos-rebuild
Environnement de bureau Plasma, GNOME, Xfce et d'autre
Gestionnaire de paquets Nix
Site web nixos.org

NixOS est une distribution Linux basé sur le gestionnaire de paquet Nix (en). Il utilise une configuration déclarative et permet des mises à jours fiables du système[2]. Deux branches principales sont proposées : une version stable et une version instable, avec les derniers ajouts. Bien que NixOS ait commencé comme un projet de recherche[3] il s'agit d'un système d'exploitation entièrement fonctionnel et utilisable[réf. nécessaire]. NixOS dispose d'outils dédiés aux DevOps et aux tâches de déploiement[4],[5].

Histoire[modifier | modifier le code]

NixOS a commencé comme un projet de recherche par Eelco Dolstra en 2003[3].

La fondation NixOS a été fondé en 2015 et vise à soutenir des projets comme NixOS qui mettent en œuvre le modèle de déploiement purement fonctionnel[6].

Fonctionnalité[modifier | modifier le code]

Modèle de configuration déclarative du système[modifier | modifier le code]

Dans NixOS, l'ensemble du système d'exploitation - le noyau, les applications, les composants système, les fichiers de configuration, etc. - est construit par le gestionnaire de paquets Nix à partir d'une description dans un langage de construction fonctionnel. Cela signifie que la création d'une nouvelle configuration ne peut pas remplacer les configurations précédentes. [7]

Un système NixOS est configuré en écrivant une spécification des fonctionnalités, que l'utilisateur souhaite sur sa machine, dans un fichier de configuration globale. Par exemple, voici une configuration minimale d'une machine exécutant un démon SSH[8]:

{
 boot.loader.grub.device = "/dev/sda";
 fileSystems."/".device = "/dev/sda1";
 services.sshd.enable = true;
}

Après avoir modifié le fichier de configuration, le système peut être mis à jour à l'aide de la commande nixos-rebuild switch. Cette commande fait tout ce qui est nécessaire pour appliquer la nouvelle configuration, y compris le téléchargement et la compilation des paquets et la génération des fichiers de configuration.

Mises à jour fiables[modifier | modifier le code]

Étant donné que les fichiers Nix sont purs et déclaratifs, leur évaluation produira toujours le même résultat, quels que soient les paquets ou fichiers de configuration présents sur le système. Ainsi, la mise à jour d'un système est aussi fiable que sa réinstallation.

Mises à jours atomiques[modifier | modifier le code]

NixOS a une approche transactionnelle de la gestion des configurations, permettant de faire des mises à jours atomiques. Cela signifie que si la mise à jour vers une nouvelle configuration est interrompue - par exemple si l'alimentation est coupée - le système sera toujours dans un état cohérent: il démarrera soit dans l'ancienne soit dans la nouvelle configuration. Dans d'autres systèmes, une machine peut se retrouver dans un état incohérent et peut même ne plus démarrer[9].

Rollbacks[modifier | modifier le code]

Si après une mise à jour du système, la nouvelle configuration n'est pas souhaitée, elle peut être annulée à l'aide d'une commande spéciale ( nixos-rebuild switch --rollback ). Toutes les configurations du système s'affichent automatiquement dans le menu de démarrage. Si la nouvelle configuration plante ou ne démarre pas correctement, une ancienne version peut être sélectionnée. Les restaurations sont des opérations légères qui n'impliquent pas la restauration de fichiers à partir de copies.

Configurations système reproductibles[modifier | modifier le code]

Le modèle de configuration déclarative de NixOS facilite la reproduction d'une configuration système sur une autre machine. La copie du fichier de configuration sur la machine cible et l'exécution de la commande de mise à jour du système génèrent la même configuration système (noyau, applications, services système, etc.), sauf pour les parties du système non gérées par le gestionnaire de packages telles que les donnés utilisateur.

Modèle basé sur la source, avec des binaires[modifier | modifier le code]

Le langage Nix utilisé par NixOS spécifie comment construire des paquets à partir des sources. Cela facilite l'adaptation du système aux besoins des utilisateurs. Cependant, la construction à partir de la source étant un processus lent, le gestionnaire de paquet télécharge automatiquement les fichiers binaires pré-compilé à partir d'un serveur de cache lorsqu'ils sont disponibles. Cela donne la flexibilité d'un modèle de gestion de paquets basé sur la source avec l'efficacité d'un modèle binaire[10].

Cohérence[modifier | modifier le code]

Le gestionnaire de packages Nix garantit que le système en cours d'exécution est cohérent avec les spécifications logiques du système, ce qui signifie qu'il va reconstruire tous les paquets qui ont besoin d'être reconstruits. Par exemple, si le noyau est modifié, le gestionnaire de paquets s'assurera que les modules externes du noyau seront reconstruits. De même, lorsqu'une bibliothèque est mise à jour, elle garantit que tous les paquets système utilisent la nouvelle version, même les paquets qui y sont liés statiquement.

Gestion de paquets multi-utilisateurs[modifier | modifier le code]

Il n'est pas nécessaire de disposer de privilèges spéciaux pour installer des logiciels dans NixOS. En plus du profil à l'échelle du système, chaque utilisateur dispose d'un profil dédié dans lequel il peut installer des paquets. Nix permet également à plusieurs versions d'un paquet de coexister, de sorte que différents utilisateurs peuvent avoir différentes versions du même paquet installées dans leurs profils respectifs. Si deux utilisateurs installent la même version d'un paquet, une seule copie sera créée ou téléchargée, et le modèle de sécurité de Nix garantit que cela est sécurisé.

Mise en œuvre[modifier | modifier le code]

NixOS est basé sur le gestionnaire de packages Nix qui stocke tous les paquets de manière isolée, dans le magasin de paquets.

Les paquets installés sont identifiés par un hachage cryptographique de toutes les entrées utilisées pour leur construction. La modification des instructions de construction d'un package modifie son hachage et cela entraînera l'installation d'un paquet différent dans le magasin de paquets. Ce système est également utilisé pour gérer les fichiers de configuration en veillant à ce que les configurations plus récentes n'écrasent pas les anciennes.

Cela implique que NixOS ne respecte pas la norme de hiérarchie du système de fichiers . Les seules exceptions sont un lien symbolique /bin/sh vers une version de bash dans le magasin Nix (par exemple: /nix/store/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-bash-4.3.43/bin/bash ); et bien que NixOS ait un répertoire /etc pour conserver les fichiers de configuration à l'échelle du système, la plupart des fichiers de ce répertoire sont des liens symboliques vers des fichiers stockées dans /nix/store tels que /nix/store/s2sjbl85xnrc18rl4fhn56irkxqxyk4p-sshd_config . Ne pas utiliser de répertoires globaux tels que /bin fait partie de ce qui permet à plusieurs versions d'un paquet de coexister.

Références[modifier | modifier le code]

  1. « NixOS/nix », sur GitHub (consulté le 5 juin 2020).
  2. « DistroWatch.com: NixOS », Distrowatch.com (consulté le 19 septembre 2015)
  3. a et b (en) Eelco Dolstra, « Integrating Software Construction and Software Deployment », Lecture Notes in Computer Science, vol. 2649,‎ , p. 102–117 (lire en ligne)
  4. « NixOps - The NixOS Cloud Deployment Tool », Nixos.org (consulté le 19 septembre 2015)
  5. « Disnix », Nixos.org (consulté le 19 septembre 2015)
  6. « Stichting NixOS Foundation », Nixos.org (consulté le 19 septembre 2015)
  7. (en) Eelco Dolstra et Armijn Hemel, « Purely Functional System Configuration Management », HOTOS'07: Proceedings of the 11th USENIX workshop on Hot topics in operating systems,‎ , p. 1-6 (lire en ligne)
  8. « About NixOS », Nixos.org (consulté le 19 septembre 2015)
  9. (en) Sander van der Burg, Eelco Dolstra et Merijn de Jonge, « Atomic Upgrading of Distributed Systems », Conference: Proceedings of the 1st ACM Workshop on Hot Topics in Software Upgrades, HotSWUp 2008,‎ (DOI 10.1145/1490283.1490294, lire en ligne)
  10. (en) Eelco Dolstra, « Secure Sharing Between Untrusted Users in a Transparent Source/Binary Deployment Model », Conference: 20th IEEE/ACM International Conference on Automated Software Engineering (ASE 2005),‎ (DOI 0.1145/1101908.1101933, lire en ligne)


Articles connexes[modifier | modifier le code]

Annexes[modifier | modifier le code]

  • Nix (en) - Le gestionnaire de packages sur lequel NixOS est basé
  • Guix System - Distribution GNU/Linux basé sur Guix, un autre gestionnaire de packages fonctionnel

Liens externes[modifier | modifier le code]