問題の概要
Desktop版のUbuntu16.04LTSをWindows10のVMware使っていた。
ある日突然画面にエラーが出てGUIが立ち上がらなくなった。
CLIモードでポチポチしてたら直った話。
環境
VMware VMware Workstation 12 Player ホストOS: Windows10 Pro ゲストOS: Ubuntu 16.04 Desktop LTS
突然の死
ある日何気なくUbuntuをrebootしてみたら、次のエラーメッセージが現れてUbuntuが突然死んだ。
failed to initialize policy for cpu
まぁ所詮VMなので、とりあえずプロセスを殺し、ホストOSから強制的にrebootさせてみた。そしたら無事にログイン画面が返ってきたが、ログインした先では紫色の画面で止まってしまってメニューバーとかは現れなかった。。
幸いUbuntuはCLIモード切り替えができるので、ここでCtrl + Alt + f6とか押してコンソールモードにしたら、ログインはできたため、ログを見ることにした。
ログがよくわからない
管理者権限になり、/var/logのそれらしきファイルをgrepしまくってみたが、よくわからない。もう少しログの勉強をしたいものである。
そこで別の方法で原因を特定してみることにした。
最近加えた変更
rebootする前に加えた変更を思い出してみた。 直近では、次のようなことをやっていた。
この記事を眺めながら、参考にしたサイトがUbuntu14.04だったからinitctlが出てきてなんか色々したなぁとか思い出す。もしかしてこいつじゃね?となり、initctlを加えたあたりの操作を逆に辿り、復旧を試みることにした。
initctl の復旧
先程の記事を参考にすると以前加えた操作はこうだ。
$ sudo dpkg-divert --local --rename --add /sbin/initctl $ sudo ln -s /bin/true /sbin/initctl
従って今回は
- シンボリックリンクを外す
- dpkg-divert でaddしてるっぽいので、逆に/sbin/initctlを削除する
という2本立てで対処することとした。
シンボリックリンクを外す
特別に章立てする必要はないと思うが、やり方をど忘れしたので、今回は調べてからやった(照)
$ sudo unlink /sbin/initctl
これでシンボリックリンクは解除される
add したやつの削除
シンボリックリンクを解除したからそもそも/sbin/initctlが存在しないのでそもそもやる必要があるかよくわからないが、一応削除してみた
dpkg-divert のヘルプを見てたら、add の下に remove があったので、add 下コマンドを倣って削除してみた
$ sudo dpkg-divert --local --rename --remove /sbin/initctl
エラーも出ずに何かが実行完了した。
そして再起動
前回は、ディレクトリアクセス時に自動でNFSをマウントしてくれるautofsを入れていたため、systemctl を用いてサービスの再起動をした。その後、rebootした。
$ sudo systemctl restart autofs $ sudo reboot
治った!!
まとめ
Ubuntu16.04 にinitctlを入れるとエラーする