From 7072056be606eaadee1d581a5fbde7a9357d1e8d Mon Sep 17 00:00:00 2001 From: sveith Date: Tue, 28 Jan 2025 02:28:41 +0100 Subject: [PATCH] octoprint: use octoprint from final package set as plugin build input (#370953) OctoPrint and its plugins are packaged in the form of multiple overlays, each adding one or more packages built with `buildPythonPackage`. In the NixOS module, the core `octoprint` package is then combined with zero or more of the plugin packages into one `python.withPackages` environment that is referenced by the systemd service unit. Since plugins have to use the OctoPrint modules at runtime, they receive the `octoprint` Python package as part of `propagatedBuildInputs`. However, the current implementation of the plugins overlay takes this dependency from the `super` package set, i.e., the stage preceding the plugins overlay. The use of `super` packages for dependencies is problematic here, as there may be other subsequent overlays that modify the `octoprint` package, and the `octoprint` that ends up in the final package set may not be the same that the plugin was built against. Things work out fine in the absence of any `octoprint` overrides, or if no plugins are used. Combining the two in a NixOS configuration, however, breaks the build with a collision of OctoPrint executables: error: builder for '/nix/store/7sjbm51s4j5p02s76ncrb6arzb5nwph7-python3-3.12.8-env.drv' failed with exit code 255; last 1 log lines: > error: collision between `/nix/store/rg9mixyc0qpdgn3ynrlwlp2qk9l5gh6a-python3.12-OctoPrint-1.10.3/bin/octoprint' and `/nix/store/ws68951jy8gx7q9n09xgpykkwhia82mb-Overridden-OctoPrint-1.10.2/bin/octoprint' For full logs, run 'nix-store -l /nix/store/7sjbm51s4j5p02s76ncrb6arzb5nwph7-python3-3.12.8-env.drv'. error: 1 dependencies of derivation '/nix/store/sgmn253inypq9hi722a9817w1ji8lkb8-unit-octoprint.service.drv' failed to build error: 1 dependencies of derivation '/nix/store/aydjfz8xf8s87hxc60vpnkzbclj5knj5-system-units.drv' failed to build error: 1 dependencies of derivation '/nix/store/97a3pr2v2b5yjw9g3za5rbc6blb2q808-etc.drv' failed to build The collision is between the overridden `octoprint` from the final package set and the non-overridden version that the plugins depend on (and end up propagating to their consumers). They all should be using one and the same `octoprint` package, which is the one from `self`, the final package set after applying all overrides. Modify the `buildPlugin` helper function accordingly. Fixes: https://github.com/NixOS/nixpkgs/issues/370946 --- pkgs/by-name/oc/octoprint/plugins.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/by-name/oc/octoprint/plugins.nix b/pkgs/by-name/oc/octoprint/plugins.nix index 2dd462d4a487..feae836d56bb 100644 --- a/pkgs/by-name/oc/octoprint/plugins.nix +++ b/pkgs/by-name/oc/octoprint/plugins.nix @@ -11,7 +11,7 @@ let buildPlugin = args: self.buildPythonPackage (args // { pname = "octoprint-plugin-${args.pname}"; inherit (args) version; - propagatedBuildInputs = (args.propagatedBuildInputs or [ ]) ++ [ super.octoprint ]; + propagatedBuildInputs = (args.propagatedBuildInputs or [ ]) ++ [ self.octoprint ]; # none of the following have tests doCheck = false; });