Prl-tools install no longer works for NixOS 24.05 and Parallels 20

This worked in September 2024 with NixOS 24.05 and Parallels 18 and 19, and every nixos-rebuild since.

I recently upgraded to Parallels 20, no issues, but I don’t think I attempted a nixos-rebuild since then.

I was initially trying to upgrade to NixOS 24.11, which failed, but now all attempts at nixos-rebuild on my NixOS 24.05 fail with this error set - the weird thing is that the nixos-rebuild attempt appears to be trying to build prl-tools v19.3.1 (not v20) against Linux kernel 6.12.3, which I don’t think was ever delivered by NixOS 24.05:

Note that I’m trying to target the nixpkgs I was using for NixOS 24.05 back in September…

$ sudo -E nixos-rebuild test -I nixpkgs=https://github.com/nixos/nixpkgs/archive/e65aa8301ba4.tar.gz  --flake ".#vm-aarch64-prl"
warning: Git tree '/home/gmarler/gitwork/nixos-config' is dirty
building the system configuration...
warning: Git tree '/home/gmarler/gitwork/nixos-config' is dirty
warning: In a derivation named 'neovim-unwrapped-0.9.5', 'structuredAttrs' disables the effect of the derivation attribute 'disallowedRequisites'; use 'outputChecks.<output>.disallowedRequisites' instead
error: builder for '/nix/store/cph2s350ximz5as12viznyi3a5hsx05f-prl-tools-19.3.1-54941.drv' failed with exit code 2;
       last 25 log lines:
       > /build/prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c: At top level:
       > /build/prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c:818:5: warning: no previous prototype for 'prlfs_readpage' [8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmissing-prototypes-Wmissing-prototypes8;;]
       >   818 | int prlfs_readpage(struct file *file, struct page *page) {
       >       |     ^~~~~~~~~~~~~~
       > /build/prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c:855:5: warning: no previous prototype for 'prlfs_writepage' [8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmissing-prototypes-Wmissing-prototypes8;;]
       >   855 | int prlfs_writepage(struct page *page, struct writeback_control *wbc) {
       >       |     ^~~~~~~~~~~~~~~
       > /build/prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c: In function 'prlfs_writepage':
       > /build/prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c:874:17: error: implicit declaration of function 'SetPageError'; did you mean 'SetPageDirty'? [8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wimplicit-function-declaration-Werror=implicit-function-declaration8;;]
       >   874 |                 SetPageError(page);
       >       |                 ^~~~~~~~~~~~
       >       |                 SetPageDirty
       > /build/prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c: At top level:
       > /build/prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c:929:27: error: initialization of 'int (*)(struct file *, struct address_space *, loff_t,  unsigned int,  unsigned int,  struct folio *, void *)' {aka 'int (*)(struct file *, struct address_space *, long long int,  unsigned int,  unsigned int,  struct folio *, void *)'} from incompatible pointer type 'int (*)(struct file *, struct address_space *, loff_t,  unsigned int,  unsigned int,  struct page *, void *)' {aka 'int (*)(struct file *, struct address_space *, long long int,  unsigned int,  unsigned int,  struct page *, void *)'} [8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wincompatible-pointer-types-Werror=incompatible-pointer-types8;;]
       >   929 |         .write_end      = prlfs_write_end,
       >       |                           ^~~~~~~~~~~~~~~
       > /build/prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c:929:27: note: (near initialization for 'prlfs_aops.write_end')
       > cc1: some warnings being treated as errors
       > make[4]: *** [/nix/store/xdyia5vsl7xhrv4m49hwvvdpgrahqx1z-linux-6.12.3-dev/lib/modules/6.12.3/source/scripts/Makefile.build:229: /build/prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.o] Error 1
       > make[3]: *** [/nix/store/xdyia5vsl7xhrv4m49hwvvdpgrahqx1z-linux-6.12.3-dev/lib/modules/6.12.3/source/Makefile:1936: /build/prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs] Error 2
       > make[2]: *** [/nix/store/xdyia5vsl7xhrv4m49hwvvdpgrahqx1z-linux-6.12.3-dev/lib/modules/6.12.3/source/Makefile:224: __sub-make] Error 2
       > make[2]: Leaving directory '/nix/store/xdyia5vsl7xhrv4m49hwvvdpgrahqx1z-linux-6.12.3-dev/lib/modules/6.12.3/build'
       > make[1]: *** [Makefile:36: all] Error 2
       > make[1]: Leaving directory '/build/prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs'
       > make: *** [Makefile.kmods:70: compile] Error 2
       For full logs, run 'nix log /nix/store/cph2s350ximz5as12viznyi3a5hsx05f-prl-tools-19.3.1-54941.drv'.
error: 1 dependencies of derivation '/nix/store/2bab6938z6kjg67ij4g3aifdfx8ydxdy-X-Restart-Triggers-systemd-udevd.drv' failed to build
error: 1 dependencies of derivation '/nix/store/rn1l39w41vig1dxryrwiyhq8jnn02y1h-hwdb.bin.drv' failed to build
error: 1 dependencies of derivation '/nix/store/g4ck3520w63f5ll73l6jkz3nrh91didh-linux-6.12.3-modules.drv' failed to build
error: 1 dependencies of derivation '/nix/store/vnignq4cy4591sdr9q7087y0vwb7n1dw-system-path.drv' failed to build
error: 1 dependencies of derivation '/nix/store/358kqiy25i0g9222zpgf65g33j9r05rx-unit-prlcc.service.drv' failed to build
error: 1 dependencies of derivation '/nix/store/h4c78v2dnpk7vjz4nxzlgzfwkg676fpj-unit-prlcp.service.drv' failed to build
error: 1 dependencies of derivation '/nix/store/4p3asfkrw2plszy7k8kxb0m039ni8y0j-unit-prldnd.service.drv' failed to build
error: 1 dependencies of derivation '/nix/store/9hb19q9w52xwy81yai98jr4py16wjf0n-unit-prlfsmountd.service.drv' failed to build
error: 1 dependencies of derivation '/nix/store/2q34aq8x430nd2qbi79vpw7a0r6hcyjp-unit-prlsga.service.drv' failed to build
error: 1 dependencies of derivation '/nix/store/c3kiiszd73hqfhj9jpn6shd1s0jsbins-unit-prlshprint.service.drv' failed to build
error: 1 dependencies of derivation '/nix/store/4m3875gwq84vgkx9v5134q5f1gs5h70q-unit-prlshprof.service.drv' failed to build
error: 1 dependencies of derivation '/nix/store/1pm4vj2sibw5b8c6fx0s444hc7zq8nvl-unit-prltoolsd.service.drv' failed to build
error: 1 dependencies of derivation '/nix/store/5ih3rj11ljixk7c8axg7bz8w4fv9cgr7-nixos-system-greenbirch-24.05.20241209.7109b68.drv' failed to build

I’m not sure I’m constraining my rebuild attempt enough, as neither the kernel seems correct, nor the prl-tools.

Am I missing something obvious?

-I is useless when using flakes, as is sudo -E. Flakes ignore envvars, by design.
Better adjust your flake inputs instead, or use --override-input.

Thanks for clarifying that bit about flakes - I suppose reverting the flake.lock file (which I had obliterated, but was saved in git and recoverable) is the only way to “go back in time” here, so to speak?

Because when I restored flake.lock, I can now at least rebuild what I had, prl-tools builds, and it’s against the right kernel.

The other option is --override-input or modifying the flake inputs, as mentioned, if you want to override an input for a single invocation or more-than-once, respectively.

Thanks for that tidbit too - I’ll have to look at the form --override-input args take.

--override-input <input-path> <flake-url> (which can be repeated to override multiple inputs)
https://nix.dev/manual/nix/2.24/command-ref/new-cli/nix3-build.html#opt-override-input