在"add shared folder in virtualbox guest NixOS"中组合两个 nix 表达式



我已经在我的虚拟盒子里安装了NixOS。 我想在我的 NixOS 中添加一个共享文件夹。 我已经在我的虚拟盒子端设置了一个名为"设备>共享文件夹->设置中的代码"的共享文件夹。 我尝试插入来宾添加图像。它说:

无法装载介质/驱动器"C:\程序" Files\Oracle\VirtualBox\VBoxGuestAdditions.iso' (VERR_PDM_MEDIA_LOCKED(。

我强制将其挂载到设备>CDRom中

ls -l /dev/cdrommount -t iso9660 -o ro /dev/cdrom /cdrom. 来宾添加的文件可以在/cdrom中看到

virtualization.virtualbox.guest.enable = true在/etc/nixos/configuration.nix 中(我在某处读到过,仅这一行就足以在 nixos 中安装 Guest Addition。

然后我将配置设置为:

...
fileSystems = [
{
mountPoint = "/";
label = "nixos";
}
];
...
fileSystems."/virtualboxshare" = {
fsType = "vboxsf";
device = "Code";
option = [ "rw" ];
};

nixos-rebuild switch,它说:

错误:属性文件系统。/虚拟盒子共享"在...已定义 在。。。(文件系统 = ...

那么如何将这两个表达式组合在一起并使我的分片文件夹在 nixOS 中可见呢?

您在构成 nixos 配置或模块的 attrset 中定义了两次fileSystems。在第一个定义中,它是一个列表,而在第二个定义中,您将fileSystems定义为一个 attrset,方法是使用嵌套属性集速记符号。所以实际上,这个错误是由 Nix 语言而不是 NixOS 模块系统产生的。

此错误可以通过使用与/virtualboxshare相同的表示法定义所有文件系统来解决。


为了更好地感受嵌套的attrsets,使用nix repl可能会很有用:

$ nix repl
Welcome to Nix version 2.0. Type :? for help.
nix-repl> :p { a = {c = 2; }; a.b = 1; }
{ a = { b = 1; c = 2; }; }

(请注意,使用:p来评估所有内容,而不仅仅是最外层的吸引力(

最新更新