Package to install vimbax camera driver

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