.profileをいじったら起動しなくなった件と、復旧までの顛末

ゾンビアス [Blu-ray]
Dropboxを導入するための作業中のミスで、Xubuntuが起動できなくなってしまった。あくまで作業ミスで、Dropbox側のバグとかが原因というわけではない。原因と復旧までの手順について。

原因は.profileにDropboxデーモンを設定したこと

DropboxLinux向けにローカルのディレクトリをDropboxと同期させるためのツールを配布している。
コマンドラインからインストールする」の手順でインストールしたツールは、Dropboxデーモンを立ち上げている間、勝手に同期してくれるというものだった。一通り動作確認してから、ログイン時に立ち上がるようにしておこうと思って、「~/.profile」にデーモン起動用のコマンドを書き足した。

~/.dropbox-dist/dropboxd

ログインしなおしたところ、壁紙まで表示されたところで停止して、起動しなくなってしまった。
原因はとても単純で、これデーモンプロセスだから。たぶんバックグラウンドジョブして起動させる必要がある。端末でそのまま実行すればCtrl+Cで停止させるまでプロンプトに戻らなくなる。ログイン時に.profileが読み込まれるが、Dropboxデーモン実行の後に呼ばれるはずものが、すべて実行されなくなっている状態。やってしまいましたな。

他ユーザからのログインを試みる、がダメ

起動しなくなってすぐに原因は分かっていたので、他のユーザからログインできないか考えた。他のユーザで入れれば、「su」で問題のユーザになって、.profileを修正できるんじゃないかなと。しかし、他のユーザは一切作っていなかった。guestユーザがあったが、「su」コマンドは使えないらしい。

同じLANの他の端末からログインを試みる

他のパソコンでログインできればなんとかなるかも、と思ってPCを引っ張り出して試したが、そもそもリモート操作するためのtelnetSSHサーバも稼働させていなかったので、ダメだった。まあリモートでログインしたとしても、その時点で.profileは読み込まれrので、同じ状態に陥っていたかなと思う。

Dropboxはオンラインストレージなんだから、ネットから切り離せばなんとかなる?

Dropboxと同期するためのソフトウェアなので、ネットにつながっていなければあっさりエラー吐いて停止してくれるんじゃないかと期待して、LANを抜いてログインしてみた。が、結果はNG。まあ、ネット接続できないたびに落ちるデーモンプロセスじゃ、外出先で使う人には不便でしょうがないよね、当たり前だ。

シングルユーザモードでの解決を試みる

「パスワードを忘れたら、慌てず騒がずシングルユーザモード」という対処方法を覚えていたので、調べてみた。

UbuntuTips/Others/RecoveryMode - Ubuntu Japanese Wiki

起動時にShiftキーを押してGRUB2の選択画面を呼び出して、リカバリーモードを選択すれば良い。とのことだったが、タイミングがシビアなのかわからないが、なかなか表示されなくて焦った。リカバリーメニューからrootで、「パスワードなし」でログインすることができる。Ubuntuのrootユーザにはパスワードが設定されていないから。rootのパスワードを設定させるLinuxの場合はここでパスワードを求められるのかも。
とりあえず、rootでログインできるなら一安心。「/home/username/.profile」を開いて、問題になった行を削除して保存しようとしたが、できない。「:w!」としたり「:set noro」などいろいろ試したがダメ。画面をよくみてみると、「Read-Only」でマウントされているせいらしかった。

読み書きできるようにマウントしなおして解決

少し調べたら、読み書きできるようにマウントし直す方法が見つかった。
http://www.inkytea.com/junk-info/linux-%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%82%E3%82%8C%E3%81%93%E3%82%8C/linux-singleusermode%E3%81%A7%E3%81%AEroot%E3%81%B8%E3%81%AE%E4%BF%AE%E6%AD%A3/

以下のコマンドで「/」以下を全て読み書きできるようにマウントし直すことができた。

mount -o remount,rw /

このあと、問題の.profileを修正して無事に起動できるようになった。よかったよかった。これからは不用意なことしないように気を付けます。