jessie と EFI/UEFI と VirtualBox と…

さて、先のエントリーをアップしたことを Twitter に流した時に

というようなことを合わせて書いていたんですが、その後何度か "EFI を有効"にした状態の仮想マシンに対して、 jessie のインストールを試行してみた限りでは、特段問題も起きておらず、GRUB ブートローダも正常にインストールでき、jessie 自体の起動も問題ないようです。
VertualBox 自体も、Mac 版の 4.3.6 、Windows 版の 5.0.0 beta2 それぞれで jessie をインストールしてチェックしてみましたけど、大丈夫でした。

ダメだった時は、ブートローダのインストールの直前に、何故かインストールメティアが認識されなくなるという事象も起きていたので、インストールそのものも挙動がおかしくなっていた、というのもあったりするので何が悪かったのかは、既に闇の中…。

" EFI を有効" にした仮想マシンと、そうではない場合の差分は?

EFI なマシンに jessie インストールした際のパーティショニングの確認画面

ということで、" EFI を有効"にしていない仮想マシンと" EFI を有効"にした仮想マシン、それぞれに jessie をインストールした時の手順の差分ですが、具体的には

  • ディスクのパーティション設定時に、EFI System Partition を作成するか、しないか
  • ブートローダのインストール先の選択の有無

の二点ぐらいでしょうか。(あとは、 d-i 起動時のメニュー画面での、UEFI の記述の有無ぐらい。)

EFI System Partition ( ESP )に関しては、インストールガイドの第 6 章に記述されているように、EFI でのブートローダを格納する領域として、FAT32 形式のパーティションを作成する必要がある、と…。

If you have booted in EFI mode then within the guided partitioning setup there will be an additional partition, formatted as a FAT32 bootable filesystem, for the EFI boot loader. This partition is known as an EFI System Partition (ESP). There is also an additional menu item in the formatting menu to manually set up a partition as an ESP.

[From 6.3. それぞれのコンポーネントの使用法]

d-i では対応しているので、ガイドに従ってパーティションを作成するときには、 ESP を確保するようになっているのですけど、手動でパーティションを設定する時には忘れないようにしないと、ハマる要因になりそうです。


ちなみに、実際に OS からは以下の様な感じで、認識されています。d-i 任せだと、500MB超のパーティションを作成しますけど、実運用的には 200MB 程度確保できていれば、動作などで問題なることはないようです。

root@mb202:~# df -khT
ファイルシス   タイプ   サイズ  使用  残り 使用% マウント位置
/dev/sda2      ext4       6.8G  3.5G  3.0G   55% /
udev           devtmpfs    10M     0   10M    0% /dev
tmpfs          tmpfs      150M  4.8M  145M    4% /run
tmpfs          tmpfs      373M   76K  373M    1% /dev/shm
tmpfs          tmpfs      5.0M  4.0K  5.0M    1% /run/lock
tmpfs          tmpfs      373M     0  373M    0% /sys/fs/cgroup
/dev/sda1      vfat       511M  256K  511M    1% /boot/efi
tmpfs          tmpfs       75M  4.0K   75M    1% /run/user/115
tmpfs          tmpfs       75M   20K   75M    1% /run/user/0
tmpfs          tmpfs       75M     0   75M    0% /run/user/1000

あと、マイクロソフトの Technet ライブラリにも、 EFI 対応の PC 等に Windows インストールする際の注意事項をまとめたドキュメントもがあるので、それと合わせて読むと理解し易いのではないかと思います。

新しいインストールでは、Windows セットアップにより既定で拡張ファームウェア インターフェイス システム パーティション (EFI システム パーティション、または ESP)、Microsoft® 予約パーティション (MSR)、プライマリ Windows パーティションが作成されます。

[From UEFI ベースの推奨ディスク パーティション構成]

したがって、EFI な環境の場合は、GRUB ブートローダのインストールの際に出てくるインストール先の選択画面

ブートローダのインストール先を選択します。
"/dev/sda" を選択して "続ける" を押下すると、ブートローダのインストール後に、インストーラの後処理が走ります。

[From Debian 8.0 をインストールしてみる:基本編 - Soukaku's HENA-CHOKO Blog]

が出てきません。

でも、一筋縄でいかない、VirtualBox での " EFI 有効" な仮想マシン

さて、インストールは出来て、インストールの最終ステップで再起動を行えば、ちゃんと正しく jessie は起動してくるのですけど、一度シャットダウンして仮想マシンの電源 OFF 状態にして、再び電源 ON すると、 UEFI の Shell 画面で止まってしまう。

起動しても UEFI のShell に落ちてしまう

インストール出来ていないわけでなくて、ブートローダの部分だけが変な状態になっているので、それを回避して起動させることは出来るし、その手順をまとめている記事もあったりする。

現状VirtualBoxではブートオプションが保存されず、仮想マシンをオフにするとブートオプションの設定が初期化されます。

例えばUbuntuをUEFIでインストールすると、以下のようにブートオプションに「ubuntu」が追加されます。

[From Ubuntu VirtualBox その22 - UEFIでUbuntuをインストールした後、UEFIの設定が保存されない時は - Ubuntu kledgeb]

引用した記事の後半にも、 Ubuntu での例ではあれど、いちいち手順を踏んで起動させなくてもいいように設定する手順があるので、コレを参考にして jessie でも設定できるかと試してはいるのだけど…。
#Ubuntu 15.04 server で、試してみたところ、記事通りの挙動をすることは確認しました。

で、jessie (Debian) と Ubuntu 、何が違うのか…。

件の記事を読んていて気になったのは、"/boot/efi/EFI/hogehoge" 配下のファイルの内容。
jessie では、一つしかないのに

root@mb202:~# cat /etc/debian_version
8.0
root@mb202:~# ls -l /boot/efi/EFI/debian/
合計 120
-rwx------ 1 root root 119808  5月  1 21:17 grubx64.efi

Ubuntu のほうは、 jessie よりも 3 つファイルが多い。

root@mb194:~# cat /etc/debian_version
jessie/sid
root@mb194:~# ls -l /boot/efi/EFI/ubuntu/
合計 3424
-rwx------ 1 root root 1264848  5月  2 15:17 MokManager.efi
-rwx------ 1 root root     126  5月  2 15:17 grub.cfg
-rwx------ 1 root root  958328  5月  2 15:17 grubx64.efi
-rwx------ 1 root root 1276984  5月  2 15:17 shimx64.efi

このファイルの差は何から来るのだろうと、インストールされているパッケージをチェックして見たところ、どうもそこに違いがあることが判明。

まず、 grub-efi 関連でインストール済みのものをチェック。
上が jessie で、下が Ubuntu 。

root@mb202:~# aptitude search grub-efi | grep -E ^i
i   grub-efi-amd64                  - GRand Unified Bootloader, version 2 (EFI-A
i A grub-efi-amd64-bin              - GRand Unified Bootloader, version 2 (EFI-A
root@mb194:~# aptitude search grub-efi | grep -E ^i
i A grub-efi-amd64                  - GRand Unified Bootloader, version 2 (EFI-A
i A grub-efi-amd64-bin              - GRand Unified Bootloader, version 2 (EFI-A
i   grub-efi-amd64-signed           - GRand Unified Bootloader, version 2 (EFI-A

Ubuntu のほうでは grub-efi-amd64-signed というパッケージもインストール済みに。ちなみに、Debian アーカイブには存在しないもの。
こいつのパッケージの内容を確認してみると、

root@mb194:~# dpkg -L grub-efi-amd64-signed
/.
/usr
/usr/lib
/usr/lib/grub
/usr/lib/grub/x86_64-efi-signed
/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
/usr/lib/grub/x86_64-efi-signed/version
/usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
/usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
/usr/share
/usr/share/doc
/usr/share/doc/grub-efi-amd64-signed
/usr/share/doc/grub-efi-amd64-signed/changelog.Debian.gz
/usr/share/doc/grub-efi-amd64-signed/copyright

どうやら、ビンゴ、だった模様。

さて、このようにパッケージに差異があるのは、Secure Boot という Kernel イメージやブートローダに対して X.509 証明書を用いた署名を行い、その署名検証を行うことで、セキュリティを担保しようという仕組み、だそうです。

In brief, Secure Boot works by placing the root of trust in firmware. While other implementations are possible, in practice the chain of trust is achieved via x509 certificates. A root CA is embedded in firmware such that it can then validate the signed bootloader, the signed bootloader can then validate the signed kernel or signed 2nd stage boot loader, and so on.

[From SecurityTeam/SecureBoot - Ubuntu Wiki]

Ubuntu では、既に GRUB だけでなく Kernel イメージも署名済みとなっているのが提供されていますね。

rroot@mb194:~# aptitude search signed | grep -E ^i
i   grub-efi-amd64-signed           - GRand Unified Bootloader, version 2 (EFI-A
i   linux-signed-generic            - Complete Signed Generic Linux kernel and h
i A linux-signed-image-3.19.0-15-ge - Signed kernel image generic
i A linux-signed-image-generic      - Signed Generic Linux kernel image
i   shim-signed                     - Secure Boot chain-loading bootloader (Micr

こういう取り組みは、本家である Debian プロジェクトでも取り込んでくれないかなぁ、とか思ったりしますが…。

#結局、 jessie が、 VirtualBox の EFI 有効な仮想マシンで正しく起動しない件は、解消できずにいたり。

トラックバック(1)

さて、うまいくかない、と思っていた VirtualBox 上の EFI 有効な仮想マシンでの jessie の起動の件ですが、 #結局、 jessie が... 続きを読む

コメントする