メニューを開く

2019/06/08

ホームサーバー ~libcryptの古いバージョンへの依存~

ホームサーバーで、運用しているWordPressブログサイト、MataKitena BlogがFedora30へのアップグレードで、またまた起動できなくなったトラブル対応の続きです。今回も、またWebサーバーのapacheを起動させてみたら...何やらライブラリに存在しないものがあると、エラーメッセージを出力して異常終了していました。その解決策をここに残しておきます。

WordPressブログが起動できない原因は

今回も、WordPressブログがどうして起動できないのか調べて分かったことは、データベースであるMySQLは起動出来ているということ。そして、Webサーバーのapacheを起動させてみたら...何やらライブラリに存在しないものがあると、エラーメッセージを出力して異常終了しているようです。これで、原因がはっきりしました。libcrypt.so.1が存在しないので、Webサーバーが異常終了してしまいWordPressブログが起動出来ないのです。
出力されたエラーメッセージの一部
...error while loading shared libraries:libcrypt.so.1: cannot open shared object file: No such file or directory...

対応方法は...

今回の原因は、今使っているミドルウェアなどの中に、libcryptの古いバージョンに依存しているものが存在するためです。Fedora30には、このライブラリの更新されたバージョンが含まれていますが、とりあえずlibcryptの古いバージョンに依存したミドルウェアなどを実行させるために、パッケージをダウングレードさせることも可能ですが、他のミドルウェアなども不安定になってしまう可能性があるので、libcryptx-compatと呼ばれるパッケージをインストールすることにしました。
libcryptx-compatのインストール方法
sudo dnf install libxcrypt-compat 

2019/06/02

ホームサーバー 〜Fedora30 grubブートメニューが表示されない〜

Fedora29からFedora30へのアップグレード時、grubブートメニューが表示されずOSが起動出来なくなった件について対応が完了しましたので、記事に対処方法をまとめておきたいと思います。Fedora29へのアップグレード以降、トラブルが続いているホームサーバー、今回のアップグレードでも、またトラブルが発生しました。

トラブルの概要

Fedora29のアップデート完了後、Fedora30へのアップグレードを開始...ダウンロードが完了し、再起動後にインストールが始まるというメッセージを確認して、直ぐに再起動を実施しました。いつものgrubブートメニューが表示されて、アップグレードが完了と思っていたのですが。こんなメッセージと共に、grubプロンプトというものが表示されました。
    Minimal BASH-like line editing is supported. For the first word,
    TAB lists possible command completions. Anywhere else TAB lists
    possible device or file completions. ESC at any time exits.

grub>
この場合は、grubブートメニューを表示するためのGRUB2は正常に起動している状態で、モジュール や/ boot/grub/ディレクトリに格納されている他のモジュールをロードしたが、grub.cfgファイルが見つからなかったことを意味するそうです。他にも、grub rescueプロンプトというものを表示する場合もあるそうです。こちらの場合には、normal.mod が見つからなかったことを意味するそうで、どちらの場合も、ブートに関連するファイルが存在しないことを意味します。
参考までに、トラブル発生時、キーボードの認識がJISキーボードでなく、USキーボードになっていて思ったように文字入力ができない事象も発生していました。同じ事象の場合には、USキーボードの配列を参照しながら文字入力することで対処できます。

どんな対処方法があるの

大きくは、3通りほど存在するようです。1つは、OSのLiveDVDやLiveUSBから起動して環境を修復する方法。もう1つは、grubコマンドを使用して、応急処置を施しOSを起動。その後、恒久的な対処を実施する方法。そして最終手段、GRUB2のレスキューディスク(いくつか種類がありました。)を使って環境を修復する方法。今回は、この3通りのうち、grubコマンドを使用して、応急処置を施しOSを起動。その後、恒久対処を実施する方法でしか対処することができませんでしたので、こちらの方法を記事にしています。
他の2つの方法で対処することができなかったのは、USBブートがサポートされていない古いパソコンで、DVDRAMを搭載しているにも関わらず、CDは認識できるがDVDを認識できないという特殊な環境であるからです。

実際の対処は

インターネットで、たくさんの情報を参考にしましたがGRUBのバージョン、利用している環境(ディスク構成やUEFI、複数OSのマルチブートなど)で実行コマンドやパラメータを変える必要がありますので、本記事を参考にすることはできると思いますが、注意しながら、自分自身で判断して対処を実施して下さい。

まずは、lsコマンドでドライブの構成やパーティションなどを確認します。
最初は、ドライブの構成からです。
grub> ls
(hd0) (hd0,msdos2) (hd0,msdos1)

参考
hd0,1:sda1 hd1,0:sdb1
hd0,2:sda2 hd1,1:sdb2
gpt:Globally Unique Identifiers Partition Table
msdos:MS-DOS Master Boot Record
次に、パーティションの構成です。
最後にスラッシュをつけるのを忘れないように...
/bootパーティション。本来のgrub.cfgファイルの格納ディレクトリgrubとかgrub2を含んだパーティションを探します。
grub> ls (hd0,1)/
... grub2 ...
searchコマンドで検索する方法もあります。
バックアップを作成してりすると複数見つかる場合もあります...
grub> search --file /grub2/grub.cfg
hd0,msdos1
見つかりましたので、rootを設定します。
set root=(hd0,msdos1)
grub.cfgファイルを読み込みます。
自分で作成しておいたバックアップファイルを読み込ませたい場合には、バックアップファイルを指定することもできます。
configfile /grub2/grub.cfg
ドライブ上のGRUBからメニューが表示され、起動するOSを選択することで起動することができました...慌てないでください。まだ、恒久対処を実施していません。
恒久対処として、GRUBの修復を行います。
grub-installコマンドで指定するのは、パーティションでなく、ドライブのブートセクタなので注意してください。再起動したら、恒久対処の完了です。
# sudo update-grub
Generating grub configuration file ...
 ~
done
# grub-install /dev/sda
Installing for i386-pc platform...
 ~
Installation finished. No error reported.