Suite aux différents journaux sur la création de paquets, voici quelques astuces pour Nix/Nixos.
Introduction
Comment créer un paquet nix pour gérer une dépendance dans un projet.
Comment gérer des paquets nix via un dépôt git.
Créer un paquet localement
On développe un projet et on a besoin d'une bibliothèque (par exemple, myhellolib).
- écrire un fichier empaquetant la dépendance
test_myhellolib1/myhellolib.nix
:
{ stdenv, fetchurl, cmake }:
stdenv.mkDerivation rec {
name = "myhellolib";
version = "0.1";
src = fetchurl {
url = "https://github.com/nokomprendo/${name}/archive/v${version}.tar.gz";
sha256 = "1msg5dy3flqiaqz8vmjdrsgc21c1anpqpc1827c5vsvzc70n8ig8";
};
buildInputs = [ cmake ];
}
- écrire un fichier empaquetant le projet principal
test_myhellolib1/default.nix
:
with import <nixpkgs> {};
let
_myhellolib = import ./myhellolib.nix { inherit stdenv fetchurl cmake; };
in
stdenv.mkDerivation {
name = "test_myhellolib1";
src = ./.;
buildInputs = [ _myhellolib ];
buildPhase = "g++ -o test_myhellolib1 test_myhellolib.cpp -l myhellolib";
installPhase = ''
mkdir -p $out/bin
cp test_myhellolib $out/bin/
'';
}
- compiler le projet :
nix-build
Créer un paquet via un dépôt nixpkgs
On veut mettre nos paquets de dépendances dans un dépot fork de nixpkgs
(par exemple, pour éviter de dupliquer les paquets dans plusieurs projets ou pour soumettre les paquets à la communauté nixpkgs).
- créer une nouvelle branche du dépôt fork :
cd /path/to/my/nixpkgs/
git checkout -b myhellolib
- créer un dossier pour le paquet :
mkdir pkgs/development/libraries/myhellolib
écrire/copier le paquet dans ce dossier et dans un fichier
default.nix
ajouter le paquet dans le fichier
pkgs/top-level/all-packages.nix
:
myhellolib = callPackage ../pkgs/development/libraries/myhellolib { };
- éventuellement, tester la compilation ou installer le paquet :
nix-build -A myhellolib
nix-env -f . -iA myhellolib
- compiler les projets en utilisant le dépôt fork :
cd test_myhellolib2
nix-build -I nixpkgs=/path/to/my/nixpkgs/
- pour soumettre le paquet à la communauté nixpkgs, committer/pusher la branche et créer un Pull Request.
Tester un paquet d'un Pull Request
On veut tester un paquet proposé par quelqu'un dans un Pull Request.
- si ce n'est pas déjà fait, ajouter le dépôt principal dans les dépôts remote :
cd /path/to/my/nixpkgs/
git remote add upstream https://github.com/nixos/nixpkgs
- passer dans la branche du Pull Request :
git fetch upstream pull/<id>/head:<branch>
git checkout <branch>
- tester dans un projet, en utilisant le dépôt du Pull Request :
cd helloeigen
nix-build -I nixpkgs=/path/to/my/nixpkgs/
./result/bin/helloeigen
Conclusion
nix permet facilement de :
- créer des paquets localement
- regrouper des paquets dans un dépôt
- soumettre des paquets à la communauté
- tester des paquets soumis
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.