with import <nixpkgs> {};
let
drv = haskellPackages.callCabal2nix "myapp" ./. {};
in if lib.inNixShell then drv.env else drvUse https://github.com/nh2/static-haskell-nix project and https://cachix.org/ (read static-haskell-nix and cachix README).
git clone git@github.com:nh2/static-haskell-nix.git
and edit survey/default.nix file by adding your project. An example with myapp (that I added for example after xmonad ) :
myapp =
addStaticLinkerFlagsWithPkgconfig
(self.callCabal2nix "myapp" /home/alex/src/myapp {})
[ openssl_static ]
"--libs openssl";and, i build static bin with this cmd :
NIX_PATH=nixpkgs=https://github.com/NixOS/nixpkgs/archive/88ae8f7d.tar.gz nix-build survey/default.nix -A haskellPackages.myapp --out-link distwith import <nixpkgs> {};
let
myapp = haskellPackages.callCabal2nix "myapp" ./. {};
in
dockerTools.buildImage {
name = "myapp";
tag = "latest";
created = "now";
contents = [ myapp ];
config = {
EntryPoint = ["myapp"];
Cmd = ["myapp"];
};
}nix-build docker.nix -o docker-imgcat docker-img | docker loaddocker run -it --rm myappnix-build release.nix -A docker-img -o nuxeoaudit.img
cat nuxeoaudit.img | docker load
nix-build release.nix -A src-tgz
ls result/tarballs
build static bin and generate tgz
NIX_PATH=nixpkgs=https://github.com/NixOS/nixpkgs/archive/88ae8f7d.tar.gz nix-build release.nix -A bin-tgz
build debian package
NIX_PATH=nixpkgs=https://github.com/NixOS/nixpkgs/archive/88ae8f7d.tar.gz nix-build release.nix -A deb --out-link deb
# test pkg with debian docker instance
docker run -it --rm -v $(pwd)/deb:/app -w /app debian
dpkg -i debs/nuxeo-audit_0pre-1_amd64.deb
release.nix :
with import <nixpkgs> {};
let
# cachix use static-haskell-nix
static-pkgs = import (fetchTarball https://github.com/NixOS/nixpkgs/archive/88ae8f7d.tar.gz) {};
nuxeo-audit = haskellPackages.callCabal2nix "nuxeo-audit" ./. {};
vmDebian = pkgs.vmTools.diskImageFuns.debian8x86_64 {};
in rec {
docker-img = dockerTools.buildImage {
name = "nuxeo-audit";
tag = "latest";
created = "now";
contents = [ nuxeo-audit ];
config = {
EntryPoint = ["nuxeo-audit"];
Cmd = ["nuxeo-audit"];
};
};
static-bin = pkgsMusl.callPackage ((fetchTarball https://github.com/apeyroux/static-haskell-nix/archive/apeyroux.tar.gz) + "/survey") {normalPkgs=static-pkgs; };
src-tar = releaseTools.sourceTarball {
buildInputs = [ cabal-install ];
distPhase = ''
cabal sdist
mkdir -p $out/tarballs/
cp dist/${nuxeo-audit.name}.tar.gz $out/tarballs/
'';
src = ./.;
};
# NIX_PATH=nixpkgs=https://github.com/NixOS/nixpkgs/archive/88ae8f7d.tar.gz nix-build release.nix -A bin-tar
bin-tar = releaseTools.binaryTarball {
doCheck = false;
showBuildStats = false;
buildPhase = "";
installPhase = ''
releaseName=${nuxeo-audit.name}
${coreutils}/bin/install --target-directory "$TMPDIR/inst/bin" -D ${static-bin.haskellPackages.nuxeo-audit}/bin/nuxeo-audit
'';
src = ./.;
};
# NIX_PATH=nixpkgs=https://github.com/NixOS/nixpkgs/archive/88ae8f7d.tar.gz nix-build release.nix -A deb --out-link deb
deb = releaseTools.debBuild {
diskImage = vmDebian;
name = nuxeo-audit.name;
debMaintainer = "Alexandre Peyroux";
meta.description = nuxeo-audit.name;
doCheck = false;
doInstallCheck = false;
showBuildStats = false;
preInstall = ''
cat <<EOT >> Makefile
install:
cp ${static-bin.haskellPackages.nuxeo-audit}/bin/nuxeo-audit /usr/local/bin
EOT
'';
src = src-tar;
};
}