我正在尝试使用一个名为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-clients
,libvirt-daemon-system
其中包含libvirtd
命令和libvirt-dbus
)。另外,我已经安装vagrant
(也通过apt-get
)和Virtualbox
(通过apt-get
Windows 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 系统。可能不存在初始化脚本,在这种情况下,您必须自己处理启动它,您可以通过查看服务文件中的配置来完成此操作。