Aller au contenu
English
Compte : non connecté, synchronisation possible Mon apprentissage
Selectionner le thème
English

Nix : maîtriser le gestionnaire de paquets reproductible

  • 20 min

Par mis à jour le

Améliorer cette page

Nix Logo

Nix est un gestionnaire de paquets qui fonctionne sur n'importe quelle distribution Linux et macOS. Contrairement à APT, DNF ou Pacman, chaque paquet est isolé dans /nix/store/ avec ses dépendances exactes, deux versions de Python ou d'OpenSSL coexistent sans conflit. Chaque modification crée un instantané réversible, et un fichier déclaratif suffit à reproduire un environnement identique sur n'importe quelle machine. Cette section couvre 12 guides progressifs, du premier contact avec l'écosystème jusqu'aux flakes et aux cas pratiques DevOps.

Les douze guides se suivent dans l'ordre du tableau, du premier contact avec l'écosystème jusqu'aux flakes et aux usages d'équipe. La colonne Niveau indique le bagage attendu : les quatre premiers guides ne supposent aucune connaissance de Nix, les trois derniers supposent d'avoir écrit ses premières expressions Nix.

#GuideCe que vous y apprenezNiveau
1Comprendre l'écosystème NixPositionnement de Nix, ses trois facettes (gestionnaire, langage, philosophie), comparaison avec apt, Docker et asdfDébutant
2Installer Nix sur LinuxSingle-user ou multi-user, Determinate Installer, activation des commandes modernes et des flakesDébutant
3Store, profils et générationsComment Nix stocke, isole et versionne chaque paquet ; rollback et garbage collectionDébutant
4Commandes modernes : shell, profile, search, runnix search, nix shell, nix run, nix profile : le parcours principal pour gérer ses paquetsDébutant / Intermédiaire
5Commandes classiques : nix-env, nix-shell, nix-buildnix-env, nix-shell, nix-build, nix-channel : comprendre l'existant et le code ancienIntermédiaire
6Bases du langage NixTypes, fonctions, attrsets, let-in, with, inherit : de quoi lire et écrire du NixIntermédiaire
7Écrire une première configuration NixOSconfiguration.nix, paquets, services, utilisateurs, nixos-rebuild switch, première modularisationIntermédiaire
8Environnements de développement reproductiblesmkShell, Python withPackages, Node.js, Rust, shellHook, direnvIntermédiaire
9Import, factorisation et pinningModulariser ses fichiers Nix, figer nixpkgs avec fetchTarball, structure multi-fichiersIntermédiaire / Avancé
10Comprendre et utiliser les flakesflake.nix, inputs, outputs, flake.lock, nix develop, nix build, migration depuis shell.nixAvancé
11Cas pratiques DevOpsdevShell d'équipe, pipelines GitHub Actions et GitLab CI, nix flake check, mise à jour de flake.lockAvancé
12NixOS : installer et évaluer un premier système en VM KVMDe Nix à NixOS : système déclaratif, flakes, disko et première configuration en VM KVMAvancé

Gérer des paquets avec les outils traditionnels pose des problèmes que chaque administrateur et développeur finit par rencontrer. Nix les résout structurellement :

Problème courantAvec apt / dnfAvec Nix
Deux projets exigent des versions différentes de PythonConflit, une seule version systèmeCoexistence native dans /nix/store/
Une mise à jour casse un service en productionRollback impossible ou risquéRetour à la génération précédente en une commande
« Ça marche sur ma machine »Versions dépendent de l'historique d'installationMême fichier déclaratif = même résultat partout
Tester un outil sans polluer le systèmeInstallation manuelle + nettoyagenix shell nixpkgs#outil, rien ne reste après
Reproduire un environnement de CI identique au poste de devScripts d'installation fragilesflake.lock verrouille chaque dépendance

Le concept clé : Nix calcule un hash cryptographique à partir de tout ce qui entre dans la construction d'un paquet (sources, dépendances, compilateur, options), avant même de construire. Les mêmes entrées donnent donc le même chemin dans le store sur toutes les machines, ce qui permet au cache binaire de servir le paquet déjà construit. Le résultat identique à l'octet près est l'objectif visé et le cas le plus fréquent, pas une garantie absolue : un build qui embarque une date ou un ordre aléatoire peut encore varier.

Ces guides sont conçus pour :

  • Les administrateurs système qui veulent des environnements reproductibles, un rollback fiable et une gestion propre de plusieurs versions d'un même outil.
  • Les DevOps et SRE qui cherchent à standardiser les environnements de développement, fiabiliser les pipelines CI/CD et distribuer un outillage cohérent à toute l'équipe.
  • Les développeurs qui passent du temps à configurer Python, Node.js ou Rust sur chaque machine au lieu de coder.

Prérequis : être à l'aise avec la ligne de commande Linux et des bases d'administration système (variables d'environnement, PATH, gestion des paquets). Aucune connaissance préalable de Nix n'est nécessaire, le premier guide part de zéro.

Parcours A, Découverte : suivez les guides 1 à 4 dans l'ordre. Vous comprendrez l'écosystème, saurez installer Nix, naviguer dans le store et utiliser les commandes modernes au quotidien. Comptez environ 2 heures.

Parcours B, Configuration système et environnements : après le parcours A, enchaînez avec les guides 6 (langage), 7 (configuration NixOS) et 8 (environnements de développement). Vous saurez déclarer un système NixOS complet et créer des shell.nix reproductibles pour vos projets. Comptez 3 à 4 heures supplémentaires.

Parcours C, Flakes et production : ajoutez les guides 9 (factorisation), 10 (flakes) et 11 (cas pratiques DevOps) pour modulariser votre configuration, verrouiller les dépendances avec flake.lock et intégrer Nix dans votre CI/CD. Ce parcours suppose une bonne compréhension des guides précédents.

Nix introduit un vocabulaire spécifique qu'il est utile de connaître avant de plonger dans les guides :

ConceptRôle
Store (/nix/store/)Répertoire où chaque paquet est stocké avec ses dépendances, identifié par un hash unique. Rien n'est modifié en place, chaque version coexiste.
ProfilEnsemble de liens symboliques pointant vers les paquets actifs. Votre PATH pointe vers le profil, pas directement vers le store.
GénérationInstantané de votre profil à un moment donné. Chaque installation ou suppression crée une nouvelle génération. Le rollback restaure une génération précédente.
NixpkgsLe dépôt principal de paquets Nix, plus de 100 000 paquets, le plus grand dépôt de paquets au monde.
DérivationLa « recette de construction » d'un paquet : sources, dépendances, étapes de build, le tout hashé pour garantir la reproductibilité.
FlakeUnité de composition avec inputs verrouillés (flake.lock). Remplace les channels pour une reproductibilité garantie entre machines.
ChannelMéthode classique (pré-flakes) pour pointer vers une branche de nixpkgs. Encore utilisé mais progressivement remplacé par les flakes.

Les six pièges ci-dessous reviennent chez presque tous les débutants. Aucun ne casse la machine, mais chacun fait perdre du temps : un store qui grossit sans fin, un profil devenu illisible, un flake qui refuse un fichier pourtant présent. La dernière colonne renvoie au guide qui traite le correctif en détail.

PiègeImpactCorrectif
Mélanger nix-env et nix profileProfils corrompus, paquets invisiblesChoisir un seul mode, de préférence nix profile (guide 4)
Ne jamais lancer le garbage collector/nix/store/ grossit indéfiniment (50 Go+ facilement)Planifier nix profile wipe-history puis nix store gc (guide 3)
Oublier git add avec les flakesnix develop ne voit pas les fichiers non suivisToujours git add avant nix build ou nix develop (guide 10)
Utiliser <nixpkgs> sans figer la versionRésultats différents selon la machine et le channelPinner avec fetchTarball (guide 9) ou passer aux flakes (guide 10)
Copier un shell.nix sans comprendre le langageImpossible de diagnostiquer ou d'adapterApprendre les bases du langage Nix (guide 6)
Ignorer nix flake check en CIErreurs de structure non détectéesAjouter nix flake check dans le pipeline (guide 10)
  • Nix isole chaque paquet dans /nix/store/ avec un hash unique, pas de « dependency hell ».
  • Les profils et générations permettent un rollback instantané après toute modification.
  • Les commandes modernes (nix shell, nix develop, nix build) remplacent progressivement les classiques (nix-env, nix-shell).
  • Le langage Nix est fonctionnel et déclaratif, vous décrivez l'état souhaité, Nix calcule comment y arriver.
  • Les flakes verrouillent les dépendances avec flake.lock pour une reproductibilité garantie entre machines.
  • Nixpkgs contient plus de 100 000 paquets, le plus grand dépôt de paquets au monde.

Ce projet vous est utile ?

Les guides, formations, quiz et labs restent gratuits. Si vous les utilisez régulièrement, vous pouvez contribuer à leur maintenance et à leur développement.

Devenir membre de soutien (nouvel onglet) Soutenir une fois (nouvel onglet) En savoir plus

Suivez aussi le projet sur LinkedIn