为什么 /var/run/libvirt 不存在?

为什么 /var/run/libvirt 不存在?

我正在尝试使用一个名为SecGen创建一个具有随机黑客漏洞的虚拟机。我没有使用较新的回购协议因为我一直有一些不相关的问题,我不会在这里说明。一旦我运行ruby secgen.rb run,我遇到一个错误,指出:

Call to virConnectOpen failed: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory`

经过进一步调查,发现该文件/var/run/libvirt不存在,当我尝试运行systemctl start libvirtd(有或没有sudo)时,它会出现一个错误,指出由于主机已关闭而无法启动。

有几点需要注意:我已经安装了大多数libvirt可供使用的软件包apt-get(包括libvirt-clientslibvirt-daemon-system其中包含libvirtd命令和libvirt-dbus)。另外,我已经安装vagrant(也通过apt-get)和Virtualbox(通过apt-getWindows 10 的网站)。大多数其他文件确实存在于libvirt文件中。

如果这个问题看起来含糊不清,我深表歉意(作为一个很多libvirt-socket你们中的一些人喜欢提到我的问题),但是除了在文件中找不到的人之外,我找不到任何关于这个主题的东西libvirt,但我的问题有点不同,因为文件根本/var/run不存在。如果需要,我非常愿意提供任何必要的信息。我还想提一下,我正在使用带有 WSL 的 Ubuntu for Windows。

编辑:这是启动 libvirtd 时 systemctl 发生的错误:System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down

答案1

Debian 根据其策略要求软件包根据需要创建目录/run/var/run因为这些目录可能会在启动时被清除或创建。 (实际上,Ubuntu 通常也是这种情况。)这可以通过程序本身或启动它的脚本来完成。如果服务没有运行,该目录甚至可能还不存在。

在 WSL 中,init 系统不是 systemd。大多数发行版中的 systemd 都会启动大量服务并挂载大量文件系统,而这两者在大多数 WSL 环境中都没有用处。相反,WSL 使用自己的自定义 init 系统来执行一些操作,这意味着 WSL 系统可以更快地启动。

由于 systemd 附带的工具通常在 systemd 未运行时坚决拒绝运行,因此您无法使用它们。您可以调用service libvirtd start来尝试使用可能随程序包附带的初始化脚本。使用该service命令有几个优点:如果启用了 systemd,它会委托给 systemd;如果未启用,它会与 init 脚本一起使用,因此,通常可以在所有 Linux 系统上运行,无论它们使用的是 systemd 还是不同的 init 系统。可能不存在初始化脚本,在这种情况下,您必须自己处理启动它,您可以通过查看服务文件中的配置来完成此操作。

相关内容