可以使用this answer中的配置从/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内核模块。
如何从nixos-unstable安装Virtualbox内核模块?为什么不进行上述工作?
答案 0 :(得分:1)
您的配置不起作用,因为virtualbox模块有自己对virtualbox包的引用。也许它应该像一些other modules那样暴露一个覆盖包的选项,但是现在它没有。提出拉动请求应该不难。
备选方案为to replace the offending module/modules,方法是停用使用disabledModules
,然后使用imports
导入替换。
无论哪种方式,您的里程可能会有所不同。第一个选项对我来说似乎是最干净的,但您可能想要检查发行版和不稳定版本中的nixos模块之间的差异。
答案 1 :(得分:0)
安装了原始内核模块,因为它是针对特定内核单独构建的。通常,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模块,注入不稳定的包。