坑爹的 socket /com/ubuntu/upstart: 拒绝连接
想通过后台方式启动openbts,故执行sudo start openbts ,结果显示无法连接到 Upstart: Failed to connect to socket /com/ubuntu/upstart: 拒绝连接。google一下发现原来ubntun已经不再支持upstart的启动管理方式了。看介绍
Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度。systemd 和 ubuntu 的 upstart 是竞争对手,预计会取代 UpStart,实际上在作者写作本文时,已经有消息称 Ubuntu 也将采用 systemd 作为其标准的系统初始化系统。
那就搜怎么解决吧,搜到了一个 https://my.oschina.net/zuoan001/blog/338060
好吧,习惯性的看都没看照着它的命令来执行了,悲剧即将发生了
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl
因为也没用过dpkg-divert这个命令,所以管它呢,别人都解决问题了,肯定没问题,这种不动脑子的想法害死人呀。
看解释
dpkg-divert命令
dpkg-divert命令是Debian Linux中创建并管理一个转向(diversion)列表,其使得安装文件的默认位置失效的工具。
语法:
dpkg-divert(选项)(参数)
选项 –add:添加一个转移文件;
–remove:删除一个转移文件;
–list:列出匹配的转移;
–truename:对应转移文件真实文件名;
–quidet:安静模式。
参数 文件:指定转移文件名。
实例: 指定软件包wibble安装时,写入/usr/bin/example.foo,而不是/usr/bin/example:
dpkg-divert –package wibble –divert /usr/bin/example.foo –rename /usr/bin/example
指定软件包wibble安装时,删除对/usr/bin/example的转移修改: dpkg-divert –package wibble –rename –remove /usr/bin/example
删除对/usr/bin/example的转移修改: dpkg-divert –rename –remove /usr/bin/example
添加一个软件包安装时,写入/usr/bin/example.foo,而不是/usr/bin/example的修改:
dpkg-divert –divert /usr/bin/example.foo –rename /usr/bin/example可选参数
–admindir directory
Set the dpkg data directory to directory (default: /var/lib/dpkg).
–divert divert-to
divert-to is the location where the versions of file, as provided by other >packages, will be diverted.
–local
Specifies that all packages’ versions of this file are diverted. This means, that there are no exceptions, and whatever package is installed, the file is diverted. This can be used by an admin to install a locally modified version.
–package package
package is the name of a package whose copy of file will not be diverted. >i.e. file will be diverted for all packages except package.
–quiet
Quiet mode, i.e. no verbose output.
–rename
Actually move the file aside (or back). dpkg-divert will abort operation in >case the destination file already exists.
–test
Test mode, i.e. don’t actually perform any changes, just demonstrate.
–help
Show the usage message and exit.
–version
Show the version and exit.
Notes
When adding, default is –local and –divert .distrib. When removing, –package or –local and –divert must match if specified.
可以看到它是一个路径位置转向工具,就是吧系统正常访问的路径转向到自己设定的备用路径上。
而第一条指令让/sbin/initctl重转向到/sbin/initctl.distrib ,好了明白了吧,第二条指令是熟悉的ln指令,创建一个link,将/sbin/initctl link到 /bin/true 就是废了原来initctl的功能,但又让本地用户local可以正常使用initctl功能,多么可怕呀。
果然,重启之后,initctl就不执行了,那么我的桌面就启动不了,所以输完密码,桌面没有正常启动。那我就啥都干不了了,系统处于假死状态。Oh ,My god!!!掉坑里了,得爬出来呀。
问题出了,得要解决呀,那看来只有常用的招数,跟windows那边的PE启动差不多,还是用以前安装ubntun时的安装U盘,从U盘启动引导进入一个基本的ubntun系统,能操作文件就行。
首先定位自己的安装盘\dev\sda4,然后进去看看,来到\sbin\目录,果然看到了initctrl link文件,还有initctrl.distrib .右键属性,看他具体挂载到了哪个路径,然后打开一个终端,进入到此sbin路径。
执行:
sudo rm -rf initctl //删除掉link文件
sudo cp initctl.distrib initctl //复制一份回去,恢复之前的文件。
重启,拔掉U盘。
再看看,登录-》看到了桌面,正常了,一切如初,这就修好了,从坑里爬了出来,好像还有什么没有收尾吧,对了 dpkg-divert –list 看下
/sbin/initctl 的转换链表还在。那就删掉它吧。
执行命令
dpkg-divert –local –remove /sbin/initctl
正在删除 本地转移 /sbin/initctl 到 /sbin/initctl.distrib
好了,问题解决了,回复之前的状态了,再也不掉坑里了。
那该怎么用 sudo start 呢,不是说了吗,改成了Systemmd了吗,
那就这样启动呗
systemctl start xxxxx
systemctl stop xxxxx
systemctl status xxxxx
想要在启动时启动
systemctl enable xxxx
这样就行了,当然你想退回去,应该也可以,装个upstart吧