16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UEFIAdvent Calendar 2014

Day 7

Mac EFIの挙動とBoot可能なArch Linux SDの作成

Last updated at Posted at 2014-12-07

##はじめに
この記事はMacBook Pro 13inch Late2013を使って書かれました。他の機種ではうまくいかない可能性があります。

##Mac EFIとは
Macに搭載されているEFIはEFI 1.xでもなくUEFI 2.xでもなく、両方を混ぜあわせたものです。したがってWindowsマシンなどに搭載されているUEFIとは少々違います。

##通常のUEFIとの相違点
とりあえずLinuxをインストールするのに必要な知識は

  • 読み込めるファイルシステムはFAT32とHFS+
  • エントリ登録はefibootmgrを使わずblessというコマンドを使う
  • リムーバブルメディアは所定の場所・名前でファイルを置けばブートメニューに現れる
  • ブートエントリにカーネルパラメータを指定できない?

です。一つ一つ見て行きましょう。

####対応ファイルシステム
MacだけあってHFS+に対応しています。EFI自体は対応すべきファイルシステムについて特に言及していないそうなので拡張の範疇だと思われます。

####efibootmgrではなくbless
Windowsマシンではブートエントリ登録にefibootmgrを使用しますが、Macで使うとNVRAMのリセットが必要になる可能性があるそうです1。代わりにblessというコマンドを使います。
またblessはOSXのコマンドですがFedoraの開発者によって作られたmactel-bootというユーティリティを使えばLinuxからでもエントリ登録できるようです(今回は両方共使用しません。理由は後述)

####リムーバブルメディアなら所定の位置・名前ならばブートメニューに現れる

当たり前といえば当たり前ですが、USBメモリやSDカードの場合blessでエントリ登録しなくても、

{リムーバブルメディアのroot}/System/Library/CoreServices/boot.efi

というファイルが有ればブートメニューに現れます。その為今回のようにSDカードにインストールする場合はblessなどを考える必要がなくなります。

追記 リムーバブルメディアでなくとも可能なようです。下記のURLに私より詳しい解説があります…
MBPのApple EFIが自動的に認識するブートEFIファイルについて
####ブートエントリにカーネルに渡すパラメータを登録できない?
efibootmgrでは-uオプションでカーネルに渡すパラメータを記述できましたがblessでそれに当たるオプションはないと思われます(情報求む)

追記
--optionsがそれに該当するとのこと。
http://twitter.com/trickart4121/status/541831445950394370

これらを踏まえてインストールしてみましょう。

##必要なもの

  • Mac
  • Arch Linuxインストールディスク
  • SDカード
  • 根気

##手順

  1. インストールディスクを起動する
    電源をいれるときにoption(alt)キーを押すことでOSXではなくブートメニューが表示されます。

  2. gdiskやmkfsでSDカードにパーティションを作る
    /dev/sdbをSDカードとした時、

    /dev/sdb1 EFIパーティション FAT32(128MB~)
    /dev/sdb2 rootfs お好みのfs

    となるようにパーティションを作ります(swapとか/home分けるとかはお好みで)

  3. rootfsをマウントしてArchをインストールする
    Wikiのインストール手順を見て適当にやります。rootfsをマウントしてpacstrapを実行するところからブートローダーの前までやってください。(内蔵WiFiは使えないので有線LANアダプタが必要になります)
    fstabはUUIDで指定した方がいいかもしれません

  4. /boot/efi/を作成しEFIパーティションをマウントする

    # mkdir /mnt/boot/efi
    # mount /dev/sdb1 /mnt/boot/efi
    
  5. arch-chrootでchrootし、grubをpacmanでインストールする

    # arch-chroot /mnt /bin/bash
    # pacman -S grub
    
  6. boot.efiを置くディレクトリを生成する

    # mkdir -p /boot/efi/System/Library/CoreServices
    
  7. grub.cfgを生成し、grub-install ではなく grub-mkstandaloneを実行する
    (ちなみにgrub-installはインストールするファイルシステムをチェックしてFAT32でなかった場合インストールを中止してしまいます。今回はFAT32ですが)

    # grub-mkconfig -o /boot/grub/grub.cfg
    # grub-mkstandalone -o /boot/efi/System/Library/CoreServices/boot.efi -O x86_64-efi /boot/grub/grub.cfg
    
    

完成!optionキーを押しながら起動すればSDカードのアイコンが選べるようになるはずです。

##備考
勘の言い方はこう思ったことでしょう「GRUBいらなくね?」と。
確かにブートエントリにパラメータを仕込めなかったり、ブートローダーがなくてもカーネルコンフィグにて「CONFIG_CMDLINE」などを駆使すれば出来なくはないかもしれません。しかし、仮に出来たとしてもカーネル更新の度に自分でコンパイルやファイルの設置をしなければならないため現実的ではないでしょう。(Gentooユーザーはお帰りください)
それでも気になるという方は頑張ってください。
また手前味噌ではありますが、SDではなく内蔵SSDにインストールする方法について気になる方はこちらをご覧ください。
Arch Linux on MacBook Pro without rEFIt/rEFInd
また参考URL2つめは面白いので必見です。ハードリンクを使うためにEFIパーティションにHFS+を使い、grub-installのファイルシステムがFAT32かのチェックをスクリプトを直接編集してなくしたり(今はバイナリになっているので出来ませんが。)となかなかクレイジーです。

##参考
Unified Extensible Firmware Interface (日本語) - ArchWiki
glandium.org » Blog Archive » Debian EFI mode boot on a Macbook Pro, without rEFIt
MacBookPro11,x - ArchWiki
bless(8) Mac OS X Manual Page

##脚注

  1. Unified Extensible Firmware Interface (日本語) - ArchWiki
16
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?