可以使用此答案中的配置中的 /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模块。