Alpine Linuxが安易なedgeレポジトリ参照と更新で起動不能に

公開

J4125ミニPCのVMware ESXi上に自宅用DNSサーバとして構築した、 Alpine Linux 仮想マシンが再起動後 grub がコケて 起動不能 の事態に。 edge レポジトリ参照にしていたことから grub が アップデート され、必要な手作業がなされぬまま再起動してしまったためで、リリースノートの解説に沿って復旧させます。

再起動後にgrubがコケるまで

以前、この仮想マシンを構築した当時は、Alpine Linux 3.17でした。

その後に導入したNetdataのパッケージを新しくするために、edgeレポジトリを有効にしました。

その後、数ヶ月してメンテナンスがてら、パッケージマネージャから何気なく更新(ここでgrubも更新される)、

その時再起動すれば良いものを数日放置して、手動再起動するとgrubメニュー出ずにBIOS画面へ飛ばされるように。

図2.ブートマネージャへ飛ばされる

図2.ブートマネージャへ飛ばされる

Alpine Linux 3.20リリースノートに全て書いてある

ヘッドレス仮想マシンで運用している自宅DNSサーバが起動不能になったことから、さあ大変。ルータにDNSを担ってもらいつつ、grub辺りで何があったのか調べてみると、Alpine Linux 3.20(アルファリリース)のリリースノートにその答えは明記されていました。

grubが大きく変わったことから、更新後再起動する前に必ずブートローダを再インストールしなさい、と言う注意書きとその手順(EFI項参照)、さらに今回のようにブートローダそのままで再起動してしまった場合の暫定復旧方法(Short-term work-around項参照)までしっかり提示されていました。

そこでまず、適当なISOから仮想マシンを起動、暫定対策の後にシステムを再起動した上で、新しいブートローダをインストール、という手順で進めます。

 

Alpine LinuxインストールISOから起動

仮想マシンを一旦シャットダウンさせ、Alpine LinuxのインストールISOがまだ残っていたので、仮想光学ドライブに登録して起動させます。

図3.仮想ドライブにインストーラISOをセット

図3.仮想ドライブにインストーラISOをセット

起動後、仮想ディスクのパーティション構成を確認、

ルート / とブート /boot/efi パーティションをマウントポイントへマウントし、 chroot でマウントしたシステムへ入ります。Apline Linuxのバージョンは確かに 3.20-alpha でした。

図4.マウントしたシステムへchroot

図4.マウントしたシステムへchroot



 

grub.cfgの巻き戻し

リリースノートの説明通り、 /boot/grub/ には古い grub.cfg が残されていたので、新旧入れ替え(新しいのもリネーム保存)。

図5.grub.cfgの新旧入れ替え

図5.grub.cfgの新旧入れ替え

これで chroot を抜け、仮想マシンを再起動すれば、ひとまず正常に起動するようになります。

 

再起動後のブートローダ再インストール

再起動後、SSHターミナルから入り直して、恒久対策へ進みます。

上述のリリースノートにある、

を元に、変数を以下のように書き換えて実行します。

  • $target        : x86_64-efi
  • $efi_directory : /boot/efi
  • $fwa           : x64

実行前後で efi ファイルが確かに変わりました

新旧入れ替えた grub.cfg を元に戻して、最後に再起動。

図6.正常に起動したAlpine Linux 3.20

図6.正常に起動したAlpine Linux 3.20

おわりに

以前、 edge レポジトリを有効にした際、安定版も有効なままにしていたので、この機にedgeのみ有効に訂正。

今後は、パッケージ更新ではgrub関連の更新があるか、実行前に確認するよう心がけたいと思います。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA