首页 文章

在“在virtualbox guest NixOS中添加共享文件夹”中合并两个nix表达式

提问于
浏览
1

我在我的虚拟机中安装了NixOS . 我想在我的NixOS中添加一个共享文件夹 . 我在我的虚拟机端设置了一个名为Code in Device-> SharedFolder-> Setting的共享文件夹 . 我试图插入Guest Addition图像 . 它说:

无法安装媒体/驱动器'C:\ Program Files \ Oracle \ VirtualBox \ VBoxGuestAdditions.iso'(VERR_PDM_MEDIA_LOCKED) .

我强制将它安装在Device-> 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 ,它说:

错误:属性fileSystems . “/ virtualboxshare”at ...已在...定义...(fileSystems = ...)

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

1 回答

  • 2

    您正在构成nixos配置或模块的attrset中定义 fileSystems 两次 . 在第一个定义中,'s a list, whereas in the second, you'通过使用嵌套属性集速记符号将 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 评估所有内容而不仅仅是最外面的attrset)

相关问题