大韓民国観察記Neo

韓国の、どうでもいい、重箱の隅をつつくブログ。

Grub Customizer

システム:Fedora29
インストール方法:dnfdragora(端末からでもOK)

ブートプロセス
IBM PC-AT互換機(Macではない普通のパソコン)は、電源を入れると、BIOSは設定されたプライマリブートデバイス(大抵はsda1)を探し出し、ディスクの先頭512バイトに位置するマスターブートレコード(MBR)に記録された初期ブートストラッププログラムのアドレスを読み出し、そのアドレスにある初期ブートストラッププログラムをロードする。この後制御はこのコードに移る。

ただし、MBRは、2TBまでのHDDしか扱えないため、3TB超のHDDでは、GPTという別のブート方式が採用されている。
このGPTは、これまでのIBM PC-AT互換機とは全く異る昔のPC-9801のHDDとよく似たブート方式で、BIOSからブートするHDDを選択する方式になっている。
もちろん、そういうわけで、GPTに対応したBIOSを積んだパソコンからでないとGPT対応のHDDからは起動できない。
Fedora30でGrub2の仕様が大幅変更となったのはこのGPT対応のためだが、Grub CustomizerのGrub2対応は遅れているので、Fedora30以降では現状ではGrub Customizerは使えない。
ちなみに、Windowsも、Windows10からでないとGPT対応のHDDからは起動できない。

Fedora29までで、MBR対応のHDDからの起動なら、Grub Customizerは使える。
Windowsが単体でインストールされている場合は、Windowsブートマネージャーが読み出されるが、非常に使いづらいシステムなので、Linuxを使用する場合は、GRUBをインストールし、MBRにある初期ブートストラッププログラムのアドレスをWindowsブートマネージャーのアドレスからGRUBのアドレスに書き換えておく。

この面倒な処理は、通常、Linuxインストーラーで一括してやってくれる。
WindowsインストーラーではLinuxファイルシステムが認識できないので、LinuxをインストールしてからWindowsをインストールすると、Windowsインストーラーがハードディスクを破壊してしまうので、WindowsをインストールしてからLinuxをインストールする。

GRUBのカスタマイズ
テキストファイルの/boot/grub/grub.confを編集する。
なお、Fedora29は、初期ブートストラッププログラムをGRUB2に変更しているので、このやり方ではブートプロセスを変更できない。

GRUB2のカスタマイズ
起動メニューは、/boot以下のファイルを見て自動生成するようになっているので、直接/boot/grub/grub.cfgを編集するのはあきらめましょう。
自由にいじれるのは、全般的な設定を指定する /etc/default/grub と独自のエントリーを追加する /etc/grub.d/40_custom である。

/etc/default/grub の内容はこんな感じ
GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

これを端末で
# grub2-mkconfig -o /boot/grub2/grub.cfg
コマンドを実行し/boot/grub/grub.cfgを生成する。

ところが、Fedoraは糞ったれなことに、上記の操作でエラーが発生する。
いつまでたってもこのバグは改善されない。
そこで、ヘビーなFedoraユーザーは、強引に直接/boot/grub/grub.cfgを編集しちゃう。
そして/etc/default/grub と /etc/grub.d/40_customも矛盾がないように強引に編集しちゃう。
高機能だけどRAELの開発版(利用料はタダ)という位置付けだからしょうがない。
この問題を解決するのがGrub Customizer。
Grub Customizerから設定をいじれば、エラーは発生しない。

なぜGRUB2がこんなくそったれなシステムになったかについては、いろいろ大人の事情があるようだが、Linuxの高機能化に伴って、ディレクトリー構成を大幅に改変していることと関係があるらしい。

Windowsでは、互換性の名の元に、ぐちゃぐちゃなC:ドライブのフォルダーをそのまま放置しているが、このぐちゃぐちゃさのおかげでシステムが不安定になることがよくあって、Fedoraではそういうことがなくなるようにしようということらしい。


リスト設定

f:id:sirius-B:20191211004959j:plain
起動すると現在の GRUB メニューの状態が表示されます。
現在の GRUB 設定が左、これはそのまま GRUB メニューの一覧になります。
削除は右に一度移動されます。そこから戻す事が可能です。
そのため、一時的にメニューから外す事ができます。

f:id:sirius-B:20191211005045j:plain


一般

f:id:sirius-B:20191211005224j:plain
・デフォルト エントリー - 指定した OS が起動時選択された状態になる。
・メニュー表示 - 外した場合はデフォルトエントリーで起動しようとする。
・他のOSを探す - 外すと他 OS の自動検索を対象外にする。※
・Boot default entry after ~ - 自動起動するための秒数を指定する。
カーネル・パラメーター - 全項目に共通する起動オプションを指定する。
・高度な設定 - /etc/default/grub の各項目を具体的に設定できる。

※ 外す事で他パーティションの自動検出がなくなり、
  update-grub の処理速度が短縮される。
ただし、Windowsとのデュアルブートできなくなる。
  リスト項目への追加は設定に関係なく タイプ=Linux で追加可能。


外観

f:id:sirius-B:20191211005329j:plain
カスタム解像度 - 起動時の解像度を指定する。通常640x480がベター(安全第一)。
設定しなくても可。
Theme - GRUB のテーマを設定する。してもいいけど(Custom Setting)にしておけばOK
Custom Theme settings - 各種色とフォント・背景画像を指定する。
背景画像を使う時は、Nomal:Background、Highlighted:Backgroundともに透過にしておく。
背景画像のファイルが読み込まれないバグがある場合は /root/homeに置いておけば読み込めるらしい(rootでログインしてファイルをコピーしておく)。
高度な設定 - /etc/default/grub の各項目設定。一般と同じ。
背景画像を使う時は、GRUB_TERMINAL_OUTPUTの値をgfxtermに変更する必要がある(通常はconsole)