我的目标是让 Ubuntu 在我启动和停止主机(Ubuntu 10.04)时优雅地启动和停止无头虚拟机 VM。
我正在使用Quadir Kareemullah's page提供的脚本。
这是脚本中的 LSB 注释标头(我从“Required-Start”中删除了 vboxnet 以减少依赖关系):
### BEGIN INIT INFO
# Provides: vboxsvc
# Required-Start: $local_fs $remote_fs vboxdrv
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Short-Description: VirtualBox Service
# Description: VirtualBox Service to startup and shutdown Virtual Machines
### END INIT INFO
正如 Quadir 所解释的,我在 /etc/init.d/ 中找到了“vboxsvc”并执行了:
$sudo update-rc.d vboxsvc
这为运行级别创建了链接。例如在运行级别 2 中:
$ls -l /etc/rc2.d/
...
lrwxrwxrwx 1 root root 17 2010-11-03 20:02 S20vboxdrv -> ../init.d/vboxdrv
lrwxrwxrwx 1 root root 25 2010-11-03 20:03 S20vboxweb-service -> ../init.d/vboxweb-service
lrwxrwxrwx 1 root root 17 2010-11-11 21:43 S21vboxsvc -> ../init.d/vboxsvc
...
如果我手动启动|停止服务:
$sudo /etc/init.d/vboxsvx start
它按预期工作。
如果我执行“service --status-all”,该服务不会出现在列表中,但是当我使用 sysv-rc-conf --list 时它会显示出来。
当我启动计算机时,它不会自动启动。另一方面,当我重新启动或关闭时,服务会自动停止。由于某种原因,当系统启动时,链接 /etc/rc2.d/S21vboxnet 没有被执行或正在发生其他事情。
我知道 Upstart 是现在在 Ubuntu 中做事的方式,但仍然支持 SysV init,对吧?
编辑:我想我已经接近解决问题了。我认为解决方案与加密我的家庭文件系统有关。当 init 进程正在执行相应的启动脚本并尝试执行“sudo -H -u myuser VBoxManage myVirtualMachine -type vrdp > /dev/null”时,它无法访问 myVirtualMachine 的数据(位于加密文件系统中)因为我还没有以 myuser 身份登录,因此我的主文件系统还没有挂载。
正如我认为整个问题是由我的主分区被加密引起的。
我最终遵循这个问题来删除加密。
我的建议是,除非您知道自己在做什么,否则不要在安装 Ubuntu 时加密您的主分区。如果这样做,请注意,除非您已登录,否则您的主目录下的所有内容都将被锁定给其他用户(包括 root)。
让一个新的系统用户运行 VirtualBox 比取消加密你的主文件夹不是更好吗?
这样你仍然有你的保护,虚拟机可以毫无问题地启动。