Translations:Handbook:X86/Blocks/Bootloader/2/ja

From Gentoo Wiki
Jump to:navigation Jump to:search

この64ビットファームウェアの法則にはいくつかのごくわずかな例外があります。というのは、ごく一部の初期の Apple Mac と、Intel Atom を搭載した Dell のタブレット PC のいくつかは32ビットファームウェアをサポートしています。読者のほとんどは、32ビット UEFI ファームウェアに実際に出会うことはないでしょう。そのため32ビット UEFI ファームウェアは ハンドブックでは扱いません。


ブートローダを選ぶ

これまでLinuxカーネルを設定すると共に、システムツールをインストールし、設定ファイルを修正してきました。そして今、最も重要なLinuxインストールの最後の一片をインストールします。それがブートローダーです。

ブートローダーは、ブート中にLinuxカーネルを起動することに責任を負っています。ブートローダーがないと、システムは電源ボタンが押されたときに、どう事を進めればいいのかわからなくなってしまいます。

に対して私たちは、DOS/レガシー BIOS ベースのシステムについては GRUB または LILO を設定する方法を、UEFI システムについては GRUB または efibootmgr を設定する方法を文書化しています。

このセクションでは、ブートローダーパッケージの "emerge" と、ブートローダーのシステムへの "インストール" という表現を使っています。ここでいう "emerge" とは Portage を使ってソフトウェアパッケージがシステムで利用できるようにすることです。そして "インストール" はブートローダーが必要なファイルをコピーしたりディスク上の特定の領域に変更を加えることで、ブートローダーを有効化し次回起動時に使用可能な状態にすることを指します。

デフォルト: GRUB

デフォルトでは、大半の Gentoo システムが GRUB Legacy の後継である GRUB (sys-boot/grub パッケージで利用できます) を使用しています。GRUB は追加の設定なしに従来の BIOS ("pc") システムで使うことができ、それ以外のプラットフォームでもビルド前のわずかな設定で済みます。詳しくは、GRUB ページの前提条件節をご覧ください。

Emerge

MBR パーティションテーブルのみをサポートする従来の BIOS システムを使う場合、GRUBをインストールするのに追加の設定は必要ありません:

root #emerge --ask --verbose sys-boot/grub

UEFI ユーザーの方へ: 上記のコマンドを実行すると、現在有効な GRUB_PLATFORMS 値が表示されます。UEFI 対応のシステムでは GRUB_PLATFORMS="" が有効になっていることを確認してください (これがデフォルトです) 。もし有効になっていなければ、GRUB パッケージを EFI の機能付きでビルドするために、 GRUB を emerge する前に /etc/portage/make.confGRUB_PLATFORMS="" を追加しなければなりません。

root #echo 'GRUB_PLATFORMS=""' >> /etc/portage/make.conf
root #emerge --ask sys-boot/grub

なんらかの経緯で GRUB_PLATFORMS="" を有効にしていない状態で GRUB が emerge されてしまった場合は、この行を make.conf に追加して、 emerge--update --newuse オプションを渡せば、 world パッケージセット の依存関係を再計算することができます:

root #emerge --ask --update --newuse --verbose sys-boot/grub

これで GRUB ソフトウェアがシステムにマージされましたが、二次ブートローダとしてのインストールはまだ完了していません。

インストール

つぎに、 grub-install コマンドを使って、必要な GRUB ファイルを /boot/grub/ ディレクトリにインストールします。もし(システムがブートする)一番目のディスクにインストールするなら、 /dev/sda ですので、以下のどちらかのコマンドでインストールすることができます:

DOS/レガシー BIOS システム

DOS/レガシー BIOS システムでは:

root #grub-install /dev/sda

UEFI システム

Important
grub-install を実行する前に EFI システムパーティションがマウントされているか必ず確認してください。 grub-install が GRUB EFI ファイル () を間違ったディレクトリにインストールしてしまい、しかも間違ったディレクトリが使われた形跡をまったく残さないということが起こりえます。

UEFI システムでは:

root #grub-install --efi-directory=
Installing for x86_64-efi platform.
Installation finished. No error reported.

インストールに成功したら、出力は上のコマンドの出力と一致するはずです。出力が完全に一致していない場合は、GRUB をデバッグするへと進み、そうでない場合は設定の手順へと進んでください。

追加可能: セキュアブート

To successfully boot with secure boot enabled the signing certificate must either be accepted by the UEFI firmware, or shim must be used as a pre-loader. Shim is pre-signed with the third-party Microsoft Certificate, accepted by default by most UEFI motherboards.

How to configure the UEFI firmware to accept custom keys depends on the firmware vendor, which is beyond the scope of the handbook. Below is shown how to setup shim instead. Here it is assumed that the user has already followed the instructions in the previous sections to generate a signing key and to configure portage to use it. If this is not the case please return first to the Kernel installation section.

The package sys-boot/grub installs a prebuilt and signed stand-alone EFI executable if the secureboot USE flag is enabled. Install the required packages and copy the stand-alone grub, Shim, and the MokManager to the same directory on the EFI System Partition. For example:

root #emerge sys-boot/grub sys-boot/shim sys-boot/mokutil sys-boot/efibootmgr
root #cp /usr/share/shim/BOOTX64.EFI /EFI/Gentoo/shimx64.efi
root #cp /usr/share/shim/mmx64.efi /EFI/Gentoo/mmx64.efi
root #cp /usr/lib/grub/grub-x86_64.efi.signed /EFI/Gentoo/grubx64.efi

Shims MOKlist は DER 形式の鍵を要求します。ここの例で生成された OpenSSL 鍵は PEM 形式なので、まず変換する必要があります:

root #openssl x509 -in /path/to/kernel_key.pem -inform PEM -out /path/to/kernel_key.der -outform DER
Note
ここで使用されるパスは、生成された鍵に属する証明書を含む pem ファイルへのパスでなくてはなりません。この例では鍵と証明書は同じ pem ファイル内にあります。

そして、変換された証明書を Shims MOKlist にインポートしてください:

root #mokutil --import /path/to/kernel_key.der
Note
When the currently booted kernel already trusts the certificate being imported, the message "Already in kernel trusted keyring." will be returned here. If this happens, re-run the above command with the argument --ignore-keyring added.

最後に、UEFI ファームウェアに Shim を登録します。次のコマンドでは、boot-diskboot-partition-id はそれぞれ、EFI システムパーティションのディスクとパーティションの識別子で置き換えてください:

root #efibootmgr --create --disk /dev/boot-disk --part boot-partition-id --loader '\EFI\GRUB\shimx64.efi' --label 'shim' --unicode

Note that this prebuilt and signed stand-alone version of grub reads the grub.cfg from a different location then usual. Instead of the default /boot/grub/grub.cfg the config file should be in the same directory that the grub EFI executable is in, e.g. /EFI/Gentoo/grub.cfg. When sys-kernel/installkernel is used to install the kernel and update the grub configuration then the GRUB_CFG environment variable may be used to override the usual location of the grub config file.

For example:

root #grub-mkconfig -o /EFI/Gentoo/grub.cfg

Or, via installkernel:

FILE /etc/env.d/99grub
GRUB_CFG=/EFI/Gentoo/grub.cfg
root #env-update
Note
The import process will not be completed until the system is rebooted. After completing all steps in the handbook, restart the system and Shim will load, it will find the import request registered by mokutil. The MokManager application will start and ask for the password that was set when creating the import request. Follow the on-screen instructions to complete the import of the certificate, then reboot the system into the UEFI menu and enable the Secure Boot setting.
GRUB をデバッグする

GRUB をデバッグするとき、新しい live イメージ環境へと再起動することなくインストール済みのシステムをブート可能にできるかもしれない簡単な解決策がいくつか存在します。

出力の中のどこかに "EFI variables are not supported on this system" が表示されている場合は、おそらく live イメージが EFI モードでブートされておらず、現在レガシー BIOS ブートモードにある可能性が高いです。解決方法としては、以下で言及されている removable オプションを使う GRUB の手順を試してください。これは /EFI/BOOT/BOOTX64.EFI にある実行可能 EFI ファイルを上書きします。EFI モードで再起動できれば、マザーボードファームウェアはこのデフォルトブートエントリを実行し、GRUB を実行できるかもしれません。

grub-install が "Could not prepare Boot variable: Read-only file system" というエラーを返し、live 環境が正しく UEFI モードでブートされている場合は、efivars という特別なマウントを読み書き可能な状態で再マウントしたうえで先述の grub-install コマンドを再実行できるはずです:

root #mount -o remount,rw,nosuid,nodev,noexec --types efivarfs efivarfs /sys/firmware/efi/efivars

これは特殊な EFI ファイルシステムをデフォルトではマウントしない、特定の非公式 Gentoo 環境によって引き起こされます。上のコマンドが実行できない場合は、公式 live イメージ環境を EFI モードで使用して再起動してください。

一部のマザーボードメーカの貧弱な UEFI 実装では、EFI システムパーティション (ESP) 内の .EFI ファイルの置き場所として /EFI/BOOT ディレクトリしかサポートしていないようです。GRUB のインストーラは、インストールコマンドに --removable オプションを付けることで、自動でこの場所に .EFI ファイルを作成することができます。ESP がマウントされていることを確認してから、以下のコマンドを実行してください; (以前に定義した通り) にマウントされているとして、以下を実行してください:

root #grub-install --target= --efi-directory= --removable

このコマンドは UEFI 仕様で定義されている'デフォルトの'ディレクトリを作成し、デフォルトの名前 を持つファイルを作成します。

設定

次に、/etc/default/grub ファイルと /etc/grub.d スクリプトで指定されたユーザ固有の設定をもとに、GRUB 設定ファイルを生成します。GRUB はどのカーネルを起動するか(/boot/ 内で利用可能な最上位のもの)、どれがルートファイルシステムかを自動で検出してくれるので、ほとんどの場合、ユーザによる設定の必要はありません。カーネルパラメータは /etc/default/grubGRUB_CMDLINE_LINUX 変数で指定することができます。

最終的な GRUB の設定ファイルを生成するには、 grub-mkconfig コマンドを実行します:

root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-
Found initrd image: /boot/initramfs-genkernel--
done

このコマンドの出力を見て、ブートに必要な Linux イメージが見つかったという報告が少なくともひとつあることを確認してください。もし initramfs を使っているか genkernel でカーネルをビルドしている場合は、正しい initrd イメージが認識されていることも確認してください。もし確認できなかった場合、/boot/ にそれらのファイルが存在するかどうか ls コマンドで確かめてください。必要なファイルが存在していなければ、カーネルの設定とインストールをやり直さなければなりません。

Tip
接続されたドライブからほかのOSを検出するために、os-prober ユーティリティを使うこともできます。Windows 7、8.1、10、あるいはほかの Linux ディストリビューションが検出できるようになります。このようなデュアルブート環境を作るには、sys-boot/os-prober パッケージをインストールしてから grub-mkconfig コマンドを再実行するとよいでしょう。検出がうまくいかない時は、Gentoo コミュニティに助けを求める前に GRUB 記事をよく読み直してみてください。

代替案 4: systemd-boot

別の選択肢として systemd-boot もあり、これは OpenRC と systemd のマシンの両方で動作します。これは薄いチェーンローダであり、セキュアブートと合わせてうまく動作します。

Emerge

systemd-boot をインストールするには:

root #bootctl install
root #emerge --ask sys-apps/systemd

Or

root #emerge --ask sys-apps/systemd-utils

Installation

Now, install the systemd-boot loader to the EFI System Partition:

root #bootctl install
Important
bootctl install を実行する前に、EFI システムパーティションがマウントされていることを確認してください。

このブートローダを使用するときは、リブートする前に、以下を使用してブート可能なエントリが存在することを確認してください:

root #bootctl list
Warning
The kernel command line for new systemd-boot entries is read from /etc/kernel/cmdline or /usr/lib/kernel/cmdline. If neither file is present, then the kernel command line of the currently booted kernel is re-used (/proc/cmdline). On new installs it might therefore happen that the kernel command line of the live CD is accidentally used to boot the new kernel. The kernel command line for registered entries can be checked with:
root #bootctl list
If this does not show the desired kernel command line then create /etc/kernel/cmdline containing the correct kernel command line and re-install the kernel.

新しいエントリが存在しない場合は、sys-kernel/installkernel パッケージが systemd-boot USE フラグを有効化した状態でインストールされていることを確認して、カーネルインストールを再実行してください。

ディストリビューションカーネルについては:

root #emerge --ask --config sys-kernel/gentoo-kernel

手動で設定およびコンパイルされたカーネルについては:

root #make install
Important
systemd-boot 向けにカーネルをインストールする場合、root= カーネルコマンドライン引数はデフォルトでは追加されません。initramfs を使用する systemd システム上で、ブート時にルートパーティションを自動的に見つけるためには、ユーザは代わりに systemd-gpt-auto-generator に頼ることができます。そうしない場合ユーザは、/etc/kernel/cmdline 内で、使用すべき他のカーネルコマンドライン引数と並んで root= を設定することで、手動でルートパーティションの場所を指定するべきです。その後、上記の通りにカーネルを再インストールしてください。

追加可能: セキュアブート

secureboot USE フラグが有効化されている場合、systemd-boot EFI 実行可能形式は自動的に署名されるでしょう。bootctl install は自動的に署名されたバージョンをインストールするでしょう。

セキュアブートを有効化して正常にブートするためには、UEFI ファームウェアによって使用された証明書が受け入れられるか、shim をプリローダとして使用しなくてはなりません。shim はサードパーティの Microsoft の証明書によって署名済みで、ほとんどの UEFI マザーボードによってデフォルトで受け入れられます。

カスタム鍵を受け入れるように UEFI ファームウェアを設定する方法はファームウェアの製造元によって異なり、このハンドブックの対象外です。代わりに、systemd-boot を自動的に更新して shim とともに構成するための postinst フックが systemd-boot wiki ページで提供されています。しかし、初回は以下の手順に従って、これを手動で行うべきです:

root #emerge --ask sys-boot/shim sys-boot/mokutil sys-boot/efibootmgr
root #cp /usr/share/shim/BOOTX64.EFI /EFI/BOOT/BOOTX64.EFI
root #cp /usr/share/shim/mmx64.efi /EFI/BOOT/mmx64.efi
root #cp /EFI/systemd/systemd-bootx64.efi /EFI/BOOT/grubx64.efi

Shims MOKlist は DER 形式の鍵を要求します。ここの例で生成された OpenSSL 鍵は PEM 形式なので、まず変換する必要があります:

root #openssl x509 -in /path/to/kernel_key.pem -inform PEM -out /path/to/kernel_key.der -outform DER
Note
ここで使用されるパスは、生成された鍵に属する証明書を含む pem ファイルへのパスでなくてはなりません。この例では鍵と証明書は同じ pem ファイル内にあります。

そして、変換された証明書を Shims MOKlist にインポートしてください:

root #mokutil --import /path/to/kernel_key.der
Note
When the currently booted kernel already trusts the certificate being imported, the message "Already in kernel trusted keyring." will be returned here. If this happens, re-run the above command with the argument --ignore-keyring added.

最後に、UEFI ファームウェアに Shim を登録します。次のコマンドでは、boot-diskboot-partition-id はそれぞれ、EFI システムパーティションのディスクとパーティションの識別子で置き換えてください:

root #efibootmgr --create --disk /dev/boot-disk --part boot-partition-id --loader '\EFI\BOOT\BOOTX64.EFI' --label 'shim' --unicode
Note
The import process will not be completed until the system is rebooted. After completing all steps in the handbook, restart the system and Shim will load, it will find the import request registered by mokutil. The MokManager application will start and ask for the password that was set when creating the import request. Follow the on-screen instructions to complete the import of the certificate, then reboot the system into the UEFI menu and enable the Secure Boot setting.

代替案 2: efibootmgr

UEFI ベースのファームウェアを搭載したコンピュータシステムは、カーネルをブートするために二次ブートローダ (GRUB 等) を厳密には必要としません。二次ブートローダはブートプロセス中の UEFI ファームウェアの機能を拡張するために存在しています。GRUB を使用する (以前の節を参照してください) ほうが、ブート時のカーネルパラメータを簡単に変更するためのより柔軟なアプローチを提供しているので、典型的にはより簡単で、より堅牢です。

システムのブートについて最小限かつ厳格なアプローチをとるシステム管理者は、二次ブートローダを使用せずに、EFI スタブとして Linux カーネルをブートすることができます。

sys-boot/efibootmgr アプリケーションは、システムの一次ブートローダである UEFI ファームウェアと通信するためのツールです。通常このツールは、ファームウェアのブート可能エントリの一覧にブートエントリを追加または削除するために使われます。また、既にブート可能エントリとして追加されている Linux カーネルを追加のオプションとともに実行できるように、ファームウェア設定を更新することもできます。これらの通信は EFI 変数と呼ばれる特別なデータ構造を通して行われます (したがって、EFI 変数のカーネルサポートが必要です)。

続けるEFI スタブカーネルの記事を必ず確認してださい。カーネルを UEFI ファームウェアから直接ブートできるようにするには、特有のオプションを有効化しなければなりません。このサポートを組み込むために、カーネルの再コンパイルが必要になる場合があります。

追加の情報を得るために efibootmgr の記事を見てみるのも良い考えです。

Note
繰り返しますが、efibootmgr は UEFI システムのブートにおいて必須ではありません; 単に UEFI ファームウェアに EFI スタブカーネルのためのエントリを追加するためだけに必要なものです。EFI スタブのサポート付きで適切にビルドされた Linux カーネルは、それ自体直接ブートさせることができます。追加のカーネルコマンドラインオプションも Linux カーネルの中に組み込むことができます (CONFIG_CMDLINE というカーネルの設定オプションがあります)。同様に、initramfs のサポートもカーネルの中に'組み込む'ことができます。これらの決定はカーネルのコンパイルに先立って行わなくてはならず、結果としてブートの構成はより静的なものとなります。

efibootmgr ソフトウェアをインストールしてください:

FILE /etc/portage/package.accept_keywords/installkernel
sys-kernel/installkernel
sys-boot/uefi-mkconfig
app-emulation/virt-firmware
FILE /etc/portage/package.use/installkernel
sys-kernel/installkernel efistub

Then reinstall installkernel, create the directory and reinstall the kernel:

root #emerge --ask sys-kernel/installkernel
root #mkdir -p

For distribution kernels:

root #emerge --ask --config sys-kernel/gentoo-kernel{,-bin}

For manually managed kernels:

root #make install

を作成して、カーネルをその中に という名前でコピーしてください:

root #mkdir -p
root #cp /boot/vmlinuz-* /

Install the efibootmgr package:

root #emerge --ask sys-boot/efibootmgr

新しくコンパイルされた EFI スタブカーネルに対応する "gentoo" という名称のブートエントリを、UEFI ファームウェア内に作成してください:

root #efibootmgr --create --disk /dev/sda --part 1 --label "gentoo" --loader "\"
Note
UEFI の定義には、ディレクトリパスの区切りにはバックスラッシュ (\) を用いなければなりません。

初期 RAM ファイルシステム (initramfs) を用いるときには、適切なブートオプションを加えてください:

root #efibootmgr --create --disk /dev/sda --part 1 --label "gentoo" --loader "\" --unicode "initrd=\efi\initramfs-genkernel--"
Tip
Additional kernel command line options may be parsed by the firmware to the kernel by specifying them along with the initrd=... option as shown above.

これらの変更が完了したら、システムを再起動後から、"gentoo" という名称のブートエントリーが利用可能になります。

Unified カーネルイメージ

installkernel が unified カーネルイメージをビルドしてインストールするように構成されているなら、unified カーネルイメージはすでに EFI システムパーティション上の EFI/Linux ディレクトリにインストールされているはずです。もしそうなっていない場合は、ディレクトリが存在することを確認してから、ハンドブックで既に説明した通りにカーネルインストールを再度実行してください。

インストールされた unified カーネルイメージのためのブートエントリを直接追加するには:

root #efibootmgr --create --disk /dev/sda --part 1 --label "gentoo" --loader /EFI/Linux/gentoo-x.y.z.efi


Other Alternatives

For other options that are not covered in the Handbook, see the full list of available bootloaders.