2014年7月15日火曜日

LinuxでもrEFIndしたい!

以前UEFIについてpostした時はGRUBで説明しました.
しかし,そもそもが複数ブートローダーをインストールでき,しかもブートメニューそのものをもつUEFIにとって,GRUBのような旧来のマルチブートの巨大な仕組みは必要でしょうか.

それと,MacユーザーがrEFInt/rEFIndつかってるのかっこいい

ということでrEFIndをLinuxでもつかおう!




これ読んで♡ ArchWiki - rEFInd

これだけだとあまりなのでざっくり説明を以下にします

まずダウンロード SourceForge
または各種パッケージからインストールしてください.
ArchLinuxならpacman -S refind-efi


次に,ダウンロードしたものを解凍してそのフォルダに移動するか,
パッケージをインストールしたならそのまま,
# refind-install
としてください .
/boot/efi/EFI/refind/*にrEFIndがインストールされます.

おっと,/dev/sda1をEFIシステムパーティションとしてFAT32にフォーマットするなどして,/boot/efiにマウントするのは忘れずに.


ここで,refind-installに失敗するなら,普通にコピーしたほうが確実かつてっとりばやいです.
# mkdir -p /boot/efi/EFI/refind
# cp /usr/share/refind/refind_x64.efi /boot/efi/EFI/refind/refind_x64.efi
# cp /usr/share/refind/refind.conf-sample /boot/efi/EFI/refind/refind.conf
# cp -r /usr/share/refind/{icons,fonts,drivers_x64} /boot/efi/EFI/refind/
これだけです. わざわざrefind-installのオプション調べるならこうしてしまったほうがラクかもしれません.
ここのコピーコマンドのコピー元は各自自分の環境に合せましょう.
この記事中では/usr/share/refindにrefindが置いてあるものとします.

そしたらコピーした/boot/efi/EFI/refind/refind.confの編集です.

これはほぼArchLinuxでパッケージからインストールされたテンプレートそのままです.

ポイントは,resolutionの設定をresolution 0にして,ネイティブの最大のサイズにしたところとか. 別にこうしなくて1024 768とかでも良いですが,1366x768をフレームバッファで表示できるのにあえて1024x768でとかにすると妙に表示が崩れます.

それとscan_all_linux_kernelsをオンにしておきましょう.

また,menuentryのところは全てデフォルトのですが,scanに任せるからmenuentry要らないかとおもってコメントアウトしたらなぜかscanがLinux kernelみつけてくれなかったので,とりあえずデフォルトのままにしときましょう.
ブートオプションとかべつにここの設定は読まれないです.たぶん.

confのコメントが詳しいのでたぶん困ることはほぼないです.

そして,/boot/にあるLinuxカーネルと同じフォルダに,
# cp /usr/share/refind/refind_linux.conf-sample /boot/refind_linux.conf
としてブートオプションのためのコンフィグファイルを置きます.
このファイルにはカーネルコマンドラインを記述します.
EFI STUBカーネルな起動と同様なわけですが,実際Linuxカーネルは
CONFIG_EFI_STUBをオンにしておく必要アリ.

このコンフィグもコピー元のテンプレートを元に適当に書くだけでオッケー.

私の場合はこのようにしており,カーネル引数のオプション多いですが,普通はこんなに長いオプションにする必要はないです.
root=PARTUUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxx
rootfstype=<fstype>
rw
systemd.unit=graphical.target
この4つは最低限必要だとおもいます.
(PARTUUID以下のxxxx……はlsblkやblkidコマンドでPARTUUIDを調べ,書き換えてください. rootfstype=のところも<fstype>は実際自分がカーネルを置いてるディレクトリのあるディスクの,ファイルシステムを記述しましょう.)

一番下に書いたsystemd.unit=graphical.targetはSys Initでいうランレベル5のSystemD Init版です.
Sys Initを使用しているのならただ5とランレベルだけを書くだけでいけた気がしますね.


そして最後に仕上げです.

# efibootmgr -c -d /dev/sdX -p Y -l /EFI/refind/refind_x64.efi -L "rEFInd"
efibootmgrコマンドでUEFIのメニューエントリにrEFIndを追加しておきましょう.
これで簡単に起動できますね.
(このコマンドの,Xを,ハードディスクのデバイス名(普通a.2つめのハードディスクとかにインストールしたければb)に置き換えて,また,Yをパーティション番号(普通1)に置き換える,としてからコマンドを打ってください)

以上であとはもうrEFIndから起動できるはず.

おまけ
おまけというより余談.EFIシステムパーティションの直下にshellx64.efiというUEFIなバイナリアプリケーションを置くと,UEFIシェルとしてrEFIndに表示されます.

また,rEFIndの優れた点を上げると,デフォルトでGUIチックでわかりやすいUIであること,また,BtrFS,ext2,ext4,Reiserfs4,HFSなどのファイルシステムのドライバをもっており自動でスキャンしてくれること等とても優れている.

ということでつかってみましょう!