wiz.code

反省会 ~デスクトップ環境の回復~

始末書

Windows10の仮想マシン「Hyper-V」でCentOSをインストールしました。

Apacheをインストールし、PHPやASP.NETが動くようにセットアップしました。

FTPサーバーも動きました。

次にメールサーバーを立てようと思いました。

XMailを選択しました。

パッケージがなかったので、ソースからビルドしようとしました。

libsslやlibcryptoが見つからず、makeに失敗しました。

ライブラリを入手するためOpenSSLをインストールすることにしました。

OpenSSLのソースからMakefileでインストーラを作りました。

テストで失敗したので、既存のOpenSSLと競合しているのかもしれないと、OpenSSLをyumコマンドでremoveしました。

デスクトップ環境が消えました…。

いまここ。

公開サーバーだったら一大事です。 先に断っておきますが、本番のサーバーでは調べもせずにコマンドを打つようなことはしませんのでご安心を。 ちゃんと仮想環境などテストしてから実施します。

デスクトップ環境が動かないときは

ピンチはチャンス。

幸か不幸か、このような事態はなかなか体験できるものではないので、よい機会と受け止めて、この状況からデスクトップ環境を復活させる手順を学習します。 現在、CentOSはGUIが完全に起動不能。 CUIならログインできるという状況。

まず、デスクトップ環境を回復する方法を調べます。

「デスクトップ環境をまるごとアンインストールしてインストールし直す」という方法がありますね。 「デスクトップ環境まるごと」とは、GNOMEだけでなく、X Windows Systemごと、という意味。 これでいきましょう。

CentOS 7にシングルモードでログイン

CentOSのブートメニュー

まず、シングルユーザーモードでのログインが必要になります。 始めの手順として、ブートスクリーンのカウントダウン中にキーボード[e]を押すようです。

カーネルパラメータ

出てきたのは、カーネルパラメータと呼ばれるもので、OSを起動するための設定値の集まりですね。 こういう場所に手を加えるのは緊張します。

シングルモードで起動するには、linux、linux16、linuxefiのいずれかで始まる行の末尾に「 systemd.unit=rescue.target」を追加するようです。 追加する文字の先頭にはスペースが入ります。(直前のパラメータとくっつかないように)

シングルユーザーモードのパラメータ

キーボードでカーソルを下へ送っていくと、最後の方に「linuxefi」から始まる行がありました。 ここにパラメータを追加します。 キーボードレイアウトの関係で、[=]が"_"になってしまいますが、右隣の[^]を打ったら"="が打てました。

記入が終わったら[CTRL]+[X]で起動します。

シングルユーザーモードで起動

どうやら成功したようです。 rootパスワードを入力してログイン試行。

シングルユーザーモードでログイン

ログインできました。 ちなみに、rootパスワードが分からなくなってしまった場合は似たような手順で回復する方法があるようです。

ネットワーク接続

シングルモードではネットワークにつながっていない状態なので、まずネットワークを接続します。

Networkサービスを起動
# systemctl start network.service

ん? 起動しない。 サービスの状態確認。

Networkサービスの状態
# systemctl status network.service

マルチバイトの文字が化けてるけど、原因がいまいちわからないな…。 さすがに、こういう状況になると情報量が一気に減るけど、
"/etc/sysconfig/network-scripts/ifcgf-eth0"というファイルを確認する手順を見つけた。 viで見てみよう。

MACアドレスとHWADDRが一致しない
# vi /etc/sysconfig/network-scripts/ifcgf-eth0

ネットワークの設定が書かれている。 Hyper-Vで動かしていたらMACアドレスをHWADDRに記入しろ、という指示があったので、Hyper-Vの設定と照らし合わせてみたら、MACアドレスが動的設定になってた。 ナゼ動的?

HWADDRを書き換えて保存

ひとまず、HWADDRを書き換えて保存。

CentOSのブートメニュー

再度、ネットワークサービスを開始させてみると、やっぱりダメ。

NetworkManagerというサービスが、DHPCクライアントを動かそうとしているから停止させよ、という指示を発見。 まずは状態を確認。

# systemctl status NetworkManager
  NetworkManager.service - Network Manager
   Loaded: loaded (/user/lib/systemd/...
   Active: inactive (dead)

これは停止(inactive)だな…。

かれこれ1時間。 いろいろと試していますが、ダメ。

MACアドレスを固定に変更

やっぱり気になるのは、Hyper-VのNICアドレスが動的になっている点かな。 一旦、シャットダウンして、これを固定に変更します。

さて、もう一度起動。 さっきと同じようにシングルユーザーモードにしてから、rootログイン。

状況変わらず…。

NetworkManagerを起動

もしかして、NetworkManagerは起動しておかないといけないんじゃないか?

おっ。 ネットワークつながった?

デスクトップ環境を再インストール

X Window Systemをアンインストール

じゃぁ、X Window Systemを丸ごとアンインストール。

# yum groupremove "X Window System" "Desktop"

あら? 名前が違う?

調べたら、CentOS 7 から"GNOME Desktop" に変わったっぽい。

# yum groupremove "GNOME Desktop"

こっちにしてもアンインストールができた様子がない…。 だったら、逆にインストールしてみたらどうか。

GNOME Desktopをインストール
# yum groupinstall "GNOME Desktop"

一応、インストールの確認までは進んだ。

GNOME Desktopインストール完了

インストール完了かな。 では、再起動してみます。

# reboot now
デスクトップ環境復活か!?

も…戻ってきた~っ。 戦士たちが黄泉の国からもd

ライセンスの同意からやりなおし。

ライセンスの同意

同意して完了。

設定の完了

ネットワークもつながってるし、設定はこれでOK。 いや~、なんとか復活してくれた~。

喜ぶのはまだ早かった…

フリーズ?

かれこれ、数分画面が変化なし。 これ、フリーズってる? Hyper-Vのステータスも、CPU稼働率0%のままだし…。 ここで再起動はちょっといやな感じだけど…、仕方ないか…。

CUIは生きてる

[CTRL]+[ALT]+[F6]押したら、CUIのログイン画面になった。 とりあえず、一旦ログインしてリブートしてみよう。

GUIを起動したら

GUIの起動がうまくいかなかったから、もう一度CUIでログインして「startx」コマンドでGUIを起動してみた……ら……、見慣れない画面が…。

Homeのディレクトリ名を変更するか?と聞いてきた。 実は英語表記の方がコマンド打つにも都合がいい。 Update Namesでお願いします。

……………。

ううぅ…やっぱり、GUIが起動しない…。

押してダメなら…

"GNOME Desktop"のインストールがうまくいかなかった可能性があるので、一旦アンインストール。 ここで、"yum update"を行い、パッケージを全更新。 結構時間かかった。 さらに、原因となった"openssl"も、もう一度しっかりアンインストールした。

GNOME Desktopのインストール(2回目)

改めて"GNOME Desktop"のグループインストールを指示したところ、OpenSSLがインストールパッケージに含まれていることを確認。

1回目に"GNOME Desktop"を再インストールしたときは、OpenSSLのパッケージは含まれていなかったけど、今回は完了報告にもしっかり含まれている。

今度こそGNOMEインストール完了

インストール完了。 そして再起動。

ライセンス認証

ライセンス認証の画面まではきた。 でも、まだ安心はできない。

ログイン画面

おや…? ログイン画面が…。

ログイン成功

ログインできた…。

復活!

やた~! デスクトップ環境復活!!

もうしません! OpenSSLを消すなんてことはもうしませんっ!!

この章のまとめ

  • デスクトップ環境の回復にはシングルモードでのログインが必要。
  • シングルモードでログインするには、起動時にカーネルパラメータを変更する。
  • Hyper-Vのネットワーク設定で、動的MACアドレスを使うと仮想マシンのネットワークが安定しない。
  • ネットワークサービスを起動するには、ネットワークマネージャを動かしておかないといけない。
  • yumコマンド:group***でパッケージグループをまとめてインストール・アンインストールできる。
  • rebootコマンド:再起動を指示する。nowパラメータを指定すると、すぐに再起動する。
  • startxコマンド:CUIからGUIを起動する。