URL: https://linuxfr.org/news/nixos-14-12-la-distribution-linux-sans-effet-de-bord Title: NixOS 14.12, la distribution Linux sans effet de bord Authors: galbolle Benoît Sibaud, Nÿco, BAud, palm123, Stéphane Aulery, Nils Ratusznik, esdeem, Nicolas Boulay et olivierweb Date: 2014年09月03日T10:43:41+02:00 License: CC By-SA Tags: nixos, nix et firefox Score: 52 Le projet [NixOS](http://www.nixos.org) a sorti le 30 décembre 2014 une version de sa distribution Linux, la 14.12 ou « Caterpillar » de son petit nom. Cette distribution, « The Purely Functional Linux Distribution », est fondée sur le système de paquets [Nix](http://www.nixos.org/nix) et la collection de paquets [Nixpkgs](http://www.nixos.org/nixpkgs). Nix et Nixpkgs sont utilisables avec d'autres systèmes : Linux, OS X, voire FreeBSD. ![Logo nixos](http://nixos.org/logo/nixos-lores.png) Nix permet de gérer son système « sans effets de bord », ce qui permet notamment : des mises à jours réversibles, l'installation de paquets sans droits _root_, le déploiement distribué, les mélanges de paquets sources et binaires. ---- [Site officiel](http://nixos.org) [Dépêche sur NixOS 14.04](http://linuxfr.org/news/nix-1-7-nixpkgs-et-nixos-14-04-guix-0-6) [NixCon 2015 Berlin en novembre ](http://conf.nixos.org/) ---- # L'écosystème Nix Nix permet d'utiliser des paquets binaires, ainsi que des paquets sources, comme sous Gentoo ou Arch. Comme presque tous les systèmes de gestion de paquets, il permet la gestion des dépendances entre paquets. Ses principes de fonctionnement originaux lui permettent d'implémenter de façon sûre des fonctionnalités souvent peu stables ou absentes des autres gestionnaires de paquets. Il s'agit de la poursuite par la communauté du travail commencé par Eelco Dolstra dans sa thèse à la [Technische Universiteit de Delft](http://www.tudelft.nl/en/). Nixos est une distribution Linux utilisant nix comme système de paquets. Elle permet des mises à jour du système réversibles : si une nouvelle version d'un paquet, du système ou de sa configuration pose problème, on peut revenir à une version précédente en une commande. Elle utilise également le langage nix pour la configuration du système, ce qui permet d'intégrer la configuration entre les différents services, mais aussi d'automatiser le redémarrage des services en fonction des changements de configuration. L'écosystème nix va au-delà d'une simple distribution : [nixops](http://nixos.org/nixops) permet d'orchestrer des réseaux de machines (physiques ou virtuelles), de façon plus simple et plus fiable que les systèmes classiques tel que _salt_ ou _puppet_. [hydra](http://nixos.org/hydra) est un système de construction continue : il s'agit d'un programme qui construit en permanence un ensemble de paquets dont on vient lui soumettre de nouvelles versions. Les paquets à construire sont spécifiés dans le langage nix. # Développer avec nix, ou pourquoi je ne peux plus m'en passer ## Sus au `HACKING.txt` La plupart des projets libres contiennent un fichier `HACKING.txt` qui indique comment créer un environnement adapté pour le développement du projet. Il faut installer la bonne version du compilateur (parfois avec le patch idoine), les bonnes bibliothèques (elles-même compilées avec les bonnes options par le bon compilateur), puis configurer le projet en fonction de l'environnement (remplacer `Makefile.win95` par `Makefile.posix` suivant le système que l'on utilise). En plus de ce fichier, il y a généralement une part de savoir implicite comme, par exemple, « évidemment, si tu utilise `nginx` au lieu de `apache` comme serveur web derrière un reverse proxy, il faut utiliser le correctif posté le 30/02/2003 sur le forum bulgare par BabaYaga17 et l'adapter de manière triviale à ton cas ». `nix` permet de regrouper ces savoirs dans un fichier `default.nix`, qui indique dans quel environnement un projet est développé. Ce fichier est le même qui sera par la suite utilisé pour créer le paquet à installer. La commande `nix-shell` permet de se placer dans l'environnement dans lequel le paquet sera construit, qui constitue donc un environnement de développement adapté. Par exemple `nix-shell` donne la bonne version de Python et des dépendances. On peut également utiliser `nix-shell` pour lancer un shell où certains paquets sont localement installés. Une fois sortis du shell, il n'y a plus trace du paquet dans l'environnement «principal» ```shell $ nix-shell -p rustc these paths will be fetched (64.72 MiB download, 230.03 MiB unpacked): /nix/store/fhy54j59x9mcxn9rjgi6j7w2q6xr769n-rustc-0.12.0 /nix/store/q4kb35wfj35893z8qddlil98yc1akkgc-stdenv fetching path `/nix/store/fhy54j59x9mcxn9rjgi6j7w2q6xr769n-rustc-0.12.0'... fetching path `/nix/store/q4kb35wfj35893z8qddlil98yc1akkgc-stdenv'... [...] $ ``` On garde néanmoins une version du paquet «en cache» dans le /store/ nix. Ainsi, si l'on appelle à nouveau nix-shell avec le même argument, ou si l'on construit un paquet dépendant de celui qui est en cache, on n'aura pas à télécharger celui-ci à nouveau, ni à le reconstruire. ## Le résultat : un méta-make Là où le confort offert par `nix-build` et `nix-shell` apparaît, c'est lorsqu'on a besoin de modifier une bibliothèque dont dépend notre projet (ou tout outil utile à sa construction ou à son déploiement). Si tel est le cas, il suffit de modifier le `default.nix` pour indiquer de prendre la version locale de cette bibliothèque, comme indiqué ci-dessous. ``` todo exemple override {src = /home/meredith/projet;} ``` ou ``` todo exemple override {src = fetchgit {url = /home/meredith/projet; [...];} ``` À partir de ce moment-là, `nix-build` agit comme un _meta-make_ : toute modification dans le répertoire indiqué (dans l'exemple 1) ou tout _commit_ dans le dépôt git (de l'exemple 2) provoque une recompilation de la bibliothèque, de ses dépendances inverses et du projet lui-même. On fait ainsi entre les projets ce que `make` fait pour les différents fichiers à l'intérieur d'un projet. # Nouveautés dans l'écosystème nix La communauté nix continue de s'élargir : depuis la version précédente en avril 2014, de nouveaux contributeurs et contributrices l'ont rejoint et ont apporté leurs contributions sur l'un des dépôts. L'activité sur le canal irc://irc.freenode.net/nixos témoigne d'un gain de popularité avec une affluence de nouveaux utilisateurs. De même, le domaine http://www.haskell.org utilisera bientôt nixops pour orchestrer ses machines. ### Du logiciel tout frais Nixpkgs (et donc nixos) contient des versions récentes de la plupart des logiciels courants. En particulier, un système nixos 14.12 disposera de : - Linux 3.14 (la version 4.0 est aussi disponible dans les mises à jour) - Firefox 39 (via les mises à jour) - Gnome 3.12 - KDE 4.14 - systemd 217 - etc. # Outils autour de Nix Les outils autour de nix continuent de s'améliorer, en particulier ceux qui permettent d'utiliser le gestionnaire de paquets depuis la ligne de commande. Deux nouvelles surcouches autour de `nix-env` et `nix-build` font leur apparition pour les utilisateurs finaux : `nox` pour la recherche de paquets (et leur installation) et `nix-build-view` pour l'affichage de la construction des paquets. Pour les contributeurs de nixpkgs, `nox-review` et `nox-pr` facilitent la vie. ## nox nox est une surcouche de `nix-env`. Cette application permet de rechercher des paquets et de les installer. La commande `nox ` affiche une liste des paquets correspondants au motif et propose d'en sélectionner un ou plusieurs à installer. ![nox en action - choix des paquets à installer](https://raw.githubusercontent.com/madjar/nox/master/screen.png) Une commande `nox --update` devrait bientôt arriver et fournir une alternative plus conviviale à `nix-env -u` pour les mises à jour des profils utilisateurs, en permettant en particulier de voir pourquoi un paquet donné sera mis à jour. nox est aussi nettement plus rapide que `nix-env`, car il garde un cache de l'ensemble des paquets disponibles. ## nix-build-view en couleur Voir l'[outil nix-build-view utilisant les ncurses pour un affichage coloré](http://blog.lastlog.de/posts/nix-build-view_using_ncurses/). ## upcast [upcast](https://github.com/zalora/upcast) est une réécriture de nixops. Il s'agit, comme nixops, d'un outil permettant d'orchestrer un ensemble de machines (physiques ou virtuelles) par nix. On peut ainsi décrire dans un seul fichier toutes les machines et leurs relations. Par exemple, on peut définir que le serveur web de la machine A utilisera la machine B comme base de données. # Dans les entrailles de Nix Luca Bruno alias Lethalman a posté sur [son blog une série intitulée « _nix pills_ »](http://lethalman.blogspot.fr/) qui détaille, en anglais, le fonctionnement de nix. La série comporte 18 posts, depuis [une présentation générale de nix](http://lethalman.blogspot.fr/2014/07/nix-pill-1-why-you-should-give-it-try.html), jusqu'au [Pourquoi vous devriez l'essayer](http://lethalman.blogspot.fr/2015_01_01_archive.html).

AltStyle によって変換されたページ (->オリジナル) /