在configuration.nix中安装nixos-unstable的虚拟盒模块



可以使用此答案中的配置中的 /etc/nixos/configuration.nix中的nixos-unstable安装软件包。

这是从nixos-unstable安装htop软件包的示例:

{ config, pkgs, ... }:
let
  unstableTarball =
    fetchTarball
      https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz;
in
{
  ...
  nixpkgs.config = {
    packageOverrides = pkgs: {
      unstable = import unstableTarball {
        config = config.nixpkgs.config;
      };
    };
  };
  environment.systemPackages = with pkgs; [
    ...
    unstable.htop
  ];
  ...
};

我也希望能够从nixos-unstable安装VirtualBox软件包(和相关的内核模块(。

天真地将virtualbox软件包添加到environment.systemPackages中,无法正常工作。与VirtualBox的不稳定版本匹配的VirtualBox模块无法安装。这是我的/etc/nixos/configuration.nix的片段:

  nixpkgs.config.virtualbox.enableExtensionPack = true;
  virtualisation.virtualbox.host.enable = true;
  environment.systemPackages = with pkgs; [
    ...
    unstable.virtualbox
  ];

以上将正确安装nixos-unstable的virtualbox软件包,但不是 virtualbox内核模块。

如何也可以从尼克斯 - unstable安装虚拟盒内核模块?为什么上述不起作用?

您的配置不起作用,因为VirtualBox模块具有自己对VirtualBox软件包的引用。也许它应该像其他一些模块一样揭示覆盖程序包的选项,但现在事实并非如此。提出拉动请求并不难。

替代方法是通过使用disabledModules禁用替换有问题的模块/模块,然后用imports导入替换。

无论哪种方式,您的里程可能会有所不同。对我来说,第一个选项似乎是最干净的选择,但是您可能需要检查版本中的Nixos模块和不稳定版本的差异。

安装了原始内核模块,因为它是针对特定内核的。通常,VirtualBox-host模块将内核模块和用户程序保持在同步中。

当您要覆盖用户程序时,您还需要覆盖内核模块。这将等于这样:

!! 未经测试的代码 !!

  ...
  boot.kernelPackages = pkgs.linuxPackages.extend (self: super: {
    virtualbox = super.virtualbox.override {
      inherit (self) kernel;
    };
    virtualboxGuestAdditions = super.virtualboxGuestAdditions.override {
      inherit (self) kernel;
    };
  });
  ## also, the user program override should be introduced 
  ## directly at packageOverrides
  nixpkgs.config.packageOverrides = pkgs: rec {
    unstable = import
      (fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz) {
        config = config.nixpkgs.config;
      };
    virtualbox = unstable.virtualbox;
  };
  ...

类似的东西应该允许您使用不稳定的软件包运行常规的VirtualBox-host模块。

最新更新