Hello,
I created a nix package wrapper for vmbpy as vmbpy.nix
:
{
buildPythonPackage,
fetchurl,
}:
buildPythonPackage rec {
pname = "vmbpy";
version = "1.0.4";
format = "wheel";
src = fetchurl {
url = "https://github.com/alliedvision/VmbPy/releases/download/${version}/vmbpy-${version}-py3-none-any.whl";
sha256 = "sha256-q6706in0JvW9FKisfZs5MNJHHAcvj97bP0mVOIaptiE=";
};
}
vmbpy
requires a proprietary driver, vimba-x, to be installed on the system, so I also created vimbax.nix
:
{ stdenv
, sudo
, fetchurl
,
}:
stdenv.mkDerivation rec {
pname = "vimba-x";
version = "2023-4";
src = fetchurl {
url = "https://downloads.alliedvision.com/VimbaX/VimbaX_Setup-${version}-Linux64.tar.gz";
sha256 = "sha256-9EWLcu09fhZ+LEAmGAeAJU+tdmfppGtj+adMqk5YGHE=";
};
unpackPhase = ''
mkdir -p $out
tar -xzf $src -C $out
'';
installPhase = ''
cd $out/VimbaX_${version}/cti
${sudo}/bin/sudo -E ./VimbaGigETL_Install.sh
'';
phases = [ "unpackPhase" "installPhase" ];
}
Unfortunately, running `nix-build -E ‘with import {}; with pkgs.python3Packages; callPackage ./vimbax.nix {}’ gives me:
this derivation will be built:
/nix/store/v42bycikfgwmfny23bky612h398l7mbb-vimba-x-2023-4.drv
building '/nix/store/v42bycikfgwmfny23bky612h398l7mbb-vimba-x-2023-4.drv'...
Running phase: unpackPhase
Running phase: installPhase
sudo: The "no new privileges" flag is set, which prevents sudo from running as root.
sudo: If sudo is running in a container, you may need to adjust the container configuration to disable the flag.
error: builder for '/nix/store/v42bycikfgwmfny23bky612h398l7mbb-vimba-x-2023-4.drv' failed with exit code 1
Apparently, I cannot use sudo
inside the installPhase
of my derivation.
Any ideas, how to do this properly?
I looked into their install script and it does nothing more than exporting an environment variable via /etc/profile.d/
, which nix can also do for us in vimbax.nix
:
{ stdenv
, fetchurl
}:
stdenv.mkDerivation rec {
pname = "vimba-x";
version = "2023-4";
src = fetchurl {
url = "https://downloads.alliedvision.com/VimbaX/VimbaX_Setup-${version}-Linux64.tar.gz";
sha256 = "sha256-9EWLcu09fhZ+LEAmGAeAJU+tdmfppGtj+adMqk5YGHE=";
};
unpackPhase = ''
mkdir -p $out
tar -xzf $src -C $out
'';
installPhase = ''
mkdir -p $out/etc/profile.d
echo "export GENICAM_GENTL64_PATH=\$GENICAM_GENTL64_PATH:$out/cti/VimbaGigETL.cti" > $out/etc/profile.d/vimbax.sh
'';
phases = [ "unpackPhase" "installPhase" ];
}
vmbpy.nix
then becomes
{ python3Packages
, fetchurl
, vimbax
,
}:
python3Packages.buildPythonPackage rec {
pname = "vmbpy";
version = "1.0.4";
format = "wheel";
src = fetchurl {
url = "https://github.com/alliedvision/VmbPy/releases/download/${version}/vmbpy-${version}-py3-none-any.whl";
sha256 = "sha256-q6706in0JvW9FKisfZs5MNJHHAcvj97bP0mVOIaptiE=";
};
propagatedBuildInputs = [ vimbax ];
}
and
flake.nix
:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs";
};
outputs = { self, nixpkgs }:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
vimbax = pkgs.callPackage ./pkgs/vimbax.nix { };
vmbpy = pkgs.callPackage ./pkgs/vmbpy.nix {
inherit vimbax;
};
in
rec {
packages.${system} = {
vmbpy = vmbpy;
default = vmbpy;
};
python = pkgs.python3.withPackages (ps: [
vmbpy
]);
devShells.${system}.default = pkgs.mkShellNoCC {
buildInputs = [
python
];
};
};
}
However, when I do nix shell
, python
never finds vmbpy
. Checking the python paths, we find that pkgs.python3.withPackages
fails to register the path of vmbpy
:
python -c "import sys; print('\n'.join(sys.path))"
/nix/store/7hnr99nxrd2aw6lghybqdmkckq60j6l9-python3-3.11.9/lib/python311.zip
/nix/store/7hnr99nxrd2aw6lghybqdmkckq60j6l9-python3-3.11.9/lib/python3.11
/nix/store/7hnr99nxrd2aw6lghybqdmkckq60j6l9-python3-3.11.9/lib/python3.11/lib-dynload
/nix/store/7hnr99nxrd2aw6lghybqdmkckq60j6l9-python3-3.11.9/lib/python3.11/site-packages
/nix/store/zh23s15r4aqxq4lkf9p9zl41l3wgh8kk-python3-3.11.9-env/lib/python3.11/site-packages
Any ideas what goes wrong?
Update 1:
I investigated further and found that /nix/store/zh23s15r4aqxq4lkf9p9zl41l3wgh8kk-python3-3.11.9-env/lib/python3.11/site-packages
contains the user’s python packages but it misses vmbpy
, which is installed in /nix/store/5v92hh2pa549v66rn351w9bw346adqfm-python3.11-vmbpy-1.0.4