Nix (gestionnaire de paquets)

Revision as of 12:12, 13 May 2026 by Nanucq (talk | contribs)

Nix est un gestionnaire de paquets et un système de compilation qui analyse des instructions de compilation reproductibles spécifiées dans le langage d'expression Nix, un langage fonctionnel pur avec évaluation paresseuse. Les expressions Nix sont des fonctions pures[1]qui prennent des dépendances en arguments et produisent une « dérivation » spécifiant un environnement de compilation reproductible pour le paquet. Nix stocke les résultats de la compilation à des adresses uniques spécifiées par un hachage de l'arborescence complète des dépendances, créant ainsi un magasin de paquets immuable (également appelé nix store) qui permet des mises à jour atomiques, des retours en arrière et l'installation simultanée de différentes versions d'un paquet, éliminant ainsi pratiquement l'enfer des dépendances.

Introduction to Nix

Tools and applications

⤧︎
Disambiguation: Cet article traite du gestionnaire de paquets Nix. À ne pas confondre avec l'écosystème Nix, le langage Nix ou la commande Nix.

Utilisation

Installation

Sous NixOS, Nix est installé automatiquement.

Sur d'autres distributions Linux ou sur macOS, vous pouvez installer Nix en suivant la section d'installation du manuel de Nix.

Commandes Nix

Les commandes Nix sont décrites dans le manuel de référence de Nix : commandes principales, utilitaires et commandes expérimentales. Avant la version 2.0 (publiée en février 2018), les commandes étaient différentes.

Configuration

Sous NixOS, Nix peut être configuré à l'aide de l'option nix.

Nix en mode autonome se configure via le fichier nix.conf (qui se trouve généralement dans /etc/nix/). Vous trouverez plus de détails sur les options disponibles dans le manuel de référence de Nix.

Vous pouvez également configurer Nix à l'aide de Home Manager, qui gère les environnements déclaratifs pour un seul utilisateur. Pour une configuration à l'échelle du système, vous pouvez utiliser System Manager sous Linux et nix-darwin sous macOS.

En interne

Nix store

↱︎
This section is a candidate for splitting off into a separate article. Le Nix store est suffisamment distinct sur le plan conceptuel pour mériter un article à part entière. For more information, consult the related discussion page.

Les paquets compilés par Nix sont placés dans le « Nix store » en lecture seule, qui se trouve généralement dans /nix/store. Chaque paquet se voit attribuer une adresse unique spécifiée par un hachage cryptographique suivi du nom et de la version du paquet, par exemple /nix/store/nawl092prjblbhvv16kxxbk6j9gkgcqm-git-2.14.1. Ces préfixes hachent toutes les entrées du processus de compilation, y compris les fichiers source, l'arborescence complète des dépendances, les options du compilateur, etc. Cela permet à Nix d'installer simultanément différentes versions d'un même paquet, et même différentes compilations d'une même version, par exemple des variantes compilées avec des compilateurs différents. Lors de l'ajout, de la suppression ou de la mise à jour d'un paquet, rien n'est supprimé du store; à la place, des liens symboliques vers ces paquets sont ajoutés, supprimés ou modifiés dans les « profils ».

Nettoyage du Nix store

Pour plus d'informations sur le nettoyage du Nix store, consultez Manuel NixOS : Chapitre - Nettoyage du Nix store.

Corruption du Nix store

Pour plus d'informations sur la réparation d'un Nix store endommagé, consultez Manuel NixOS : Chapitre - Corruption du Nix store.

Noms valides du Nix store

Main article: Valid Nix store path names

Profils

Afin de construire un environnement utilisateur ou système cohérent, Nix crée des liens symboliques entre les entrées du magasin Nix et des « profils ». Ceux-ci constituent l'interface par laquelle Nix permet les restaurations : le magasin étant immuable et les versions précédentes des profils étant conservées, revenir à un état antérieur revient simplement à modifier le lien symbolique vers un profil antérieur. Pour être plus précis, Nix crée des liens symboliques vers les binaires dans des entrées du magasin Nix représentant les environnements utilisateur. Ces environnements utilisateur sont ensuite liés symboliquement à des profils étiquetés stockés dans /nix/var/nix/profiles, qui sont à leur tour liés symboliquement au répertoire ~/.nix-profile de l'utilisateur.

Sandboxing

Lorsque les compilations en bac à sable sont activées, Nix configure un environnement isolé pour chaque processus de compilation. Cela permet d'éliminer les dépendances cachées supplémentaires définies par l'environnement de compilation afin d'améliorer la reproductibilité. Cela inclut l'accès au réseau pendant la compilation en dehors des fonctions fetch* et aux fichiers situés en dehors du Nix store. Selon le système d'exploitation, l'accès à d'autres ressources est également bloqué (par exemple, la communication interprocessus est isolée sous Linux).

Le sandboxing est activé par défaut sous Linux, et désactivé par défaut sous macOS. Dans les pull requests pour Nixpkgs, il est demandé aux contributeurs de tester les builds avec le sandboxing activé (voir Testé avec le sandboxing dans le modèle de pull request) car dans les builds officiels d'Hydra, le sandboxing est également utilisé.

To configure Nix for sandboxing, set sandbox = true in /etc/nix/nix.conf; to configure NixOS for sandboxing set nix.useSandbox = true; in configuration.nix. The nix.useSandbox option is true by default since NixOS 17.09.

Alternative Interpreters

There is an ongoing effort to reimplement Nix, from the ground up, in Rust.

There is also a community-led fork of Nix 2.18 named Lix, focused on correctness, usability, and growth. While it has also ported some components of Nix to Rust, it is not a ground-up rewrite like Tvix.

Earlier attempts can be found on riir-nix

Notes

  1. Les valeurs ne peuvent pas changer pendant le calcul. Les fonctions produisent toujours le même résultat si leur entrée ne change pas.