Ubuntu 的 upstart 启动

来源:互联网 发布:程序员就业环境 编辑:程序博客网 时间:2024/05/29 23:43

在系统从 ubuntu 9.04 升至 9.10 后,本人系统的控制台就一直不能使,而且 vbox 在每次系统重启后都要执行 `sudo /etc/init.d/vboxdrv setup `重新编译一次内核。由于其它方面没感不便,对这两小问题也就忍了。

     最近想装 NV 的官方驱动,安装要求关闭 X ,就不得不面对这个问题了。

     首先想到的是问题出在启动过程中出现的问题,ubuntu 使用 upstart 来引导系统,upstart 启动过程可参考 Upstart: Ubuntu 的基于事件的启动进程 有比较详细的描述。在系统终端中输入命令 "runlevel" 返回结果 unknown ,正确的应该返回 “N 2” ,ubuntu 默认的runlevel 是 2。在对 /etc/event.d/ 中文件和 /etc/rc2.d 以及 /etc/rcS.d 目录下的文件进行检查后发现,runlevel 在 /etc/event.d/rc-default 的文件中 进行了设置,也就是 telint 2 这句。

    此时在系统终端中输入命令  `telint 2` 会发现 终端1 中出现了 "login:" 提示符。从 /etc/event.d/rc2 中得知,在系统终端中输入命令  `sudo /etc/init.d/rc 2` 后出现了一堆说初始化信息,其中包括 vbox 的,对了还 cups 的,每次要用打印机都要手动启动 cups 服务。做到这里开始怀疑是 upstart 没有正常执行这些脚本。在上面两个脚本中加入了 log 输出,发现根本没执行。

    于是开始怀疑 upstart 出了问题,于是升级 upstart 从 9.10 默认的 upstart_0.6.3-11 升级到 upstart_0.6.5-3 (可从 http://archive.ubuntu.com/ubuntu/pool/main/u/upstart/ 下载,可能会需要一个 dbus 文件钪自己网上下载),安装以后问题照旧。于是又回来怀疑是配置文件的问题。从一国外论坛上看到说 下载

upstart_0.3.9-8_i386.deb, upstart-compat-sysv_0.3.9-8_i386.deb,upstart-logd_0.3.9-8_i386.deb,system-services_0.3.9-8_i386.deb 四个文件,然后使用命令 `dpkg -x xx.deb dir` 将这些文件解压到一个目录中,再将目录下的子目录 etc/event.d/ 里的配置文件全部复制到系统 '/etc/event.d/' 目录中,重启后问题依旧。

    但是从 http://archive.ubuntu.com/ubuntu/pool/main/u/upstart/  中可以看到 upstart 版本 0.6.* 都只有一个文件而 0.3* 版本有四个文件,于是开始怀疑,0.6以后的版本有重大修改,可能不再使用 /etc/event.d/ ,本人是谨慎形的,不敢直接在本机上删除 /etc/event.d/ 目录来试验。于是乘吃午饭时间下了一个 9.10 的iso 在 vbox 装上,发现全新安装的 9.10 中并无 /etc/event.d/ 目录,证明此前猜测正确。

     /etc/ 目录是启动配置文件存在的目录是不容怀疑的,剩下的就怀疑 /etc/init/ 目录下的文件了,经 md5 比较发现 host 系统与 vbox 中的 9.10 的 /etc/init/rc-sysinit.conf 存在差异,查看 rc-sysinit.conf 文件发现开头存在  “env DEFAULT_RUNLEVEL=2” 的配置说明,而且在最后有

“telinit "${DEFAULT_RUNLEVEL}" ” 的 commond 所以怀疑是此文件中存在问题。将 vbox 中 9.10  的 “env DEFAULT_RUNLEVEL=2”  改为 “env DEFAULT_RUNLEVEL=3” 后 reboot ,执行 runlevel 得到返回值 “N 3”。现在可以确定是 host 中这个脚本没正确执行,于是从 vbox 的 9.10 中复制了 rc-sysinit.conf 到 host 中,重启 host 一切正常。

    结论 upstart 0.6* 以后的版本只有一个文件了,取消了 /etc/event.d/ 将相应功能移到了 /etc/init/ 中。

 

    两份 rc-sysinit.conf 比较

host 上错误的 rc-sysinit.conf

 

 

正确的 rc-sysinit.conf

 

两份文件唯一的区别是 第9行,正常的文件中的是 start on filesystem,有问题的文件中是 start on filesystem and net-device-up IFACE=lo 。所以怀疑这句话使 upstart 根本就没启动。

网上搜了一下,只有一条说是 bug 的,还是翻墙出去的,真无语。

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击