wiki:Developers/inagaki

Version 9 (modified by shaolin, 3 years ago) (diff)

--

停滞なう。

MacBook Pro 上での Vine Linux 環境構築

MacBook Pro (Retina, 13-inch, Late 2013) に Vine Linux 6.2 をインストール→Seed 化した際の備忘録。

先頭パーティションに Mac OS X を維持しつつ、他のパーティションに Vine Linux 環境を構築します。昨今のスペックのPCであれば、仮想環境上にLinux環境を構築しても実用には耐え得ると思うのですが、MacBook Pro に搭載された Haswell でのベンチマークが必要かつ、他に実機がないという状況が生じたので(笑)トライに至りました。

Vine Linux 6.2 であれば MacBook Pro であってもインストール自体はつつがなく進行するのですが、Mac 標準の起動ボリューム選択や rEFInd では、インストールパーティションの先頭セクタに書き込まれた GRUB ブートローダの認識(読み込み?)に失敗して起動できません(先頭パーティションにインストールした場合は起動できるようですが、未挑戦なのでここでは割愛)。そこで、MacBook Pro の EFI パーティションに GRUB2 の EFI バイナリをインストールし、そこからインストールパーティションのカーネルイメージを直接読み込むことでこの問題を回避します。

通常 BIOS/UEFI → インストールパーティションの GRUB → インストールパーティションの vmlinuz 読み込み → 起動
本方式 UEFI → EFI パーティションの GRUB2 → インストールパーティションの vmlinuz 読み込み → 起動

起動に最低限必要なことを備忘録として残しますが、このとおりやっても上手くいかないかもしれないし、ちょっとした操作でパーティション吹っ飛ばすこともあるかもしれないので、大切なデータはバックアップを取ったうえで at your own risk でお試しください。

なお、外付けHDDへのインストールは試していません(だって MacBook やもん)

必要なもの

MacBook
そら必要ですわな。
Vine Linux インストールCD/DVD/USBメモリ
そら必要ですわな。私は Vine Linux 6.2.1 (x86_64) を USBメモリに書き込んだものを使いました。
 rEFInd
マルチブート環境を構築するためのブートマネージャ。
 GNU GRUB
rEFInd から呼び出され、Vine Linux のカーネルを読み込みます。バージョンは 2.0 を使用しました。
Linuxマシン
GRUB2 の EFI バイナリのビルドに必要です。手元に MacBook しかない場合は・・・VirtualBox 等の仮想環境を構築して Linux 環境を用意してください(非仮想環境を目指しているのに仮想環境を用いるという倒錯感を味わえるのでは!)。

パーティションを切る

Vine Linux をインストールするための領域を適宜確保してください。OS X 標準のディスクユーティリティで十分。私はインストールパーティションとスワップパーティションを作りました。

 rEFInd のインストール

OS X の EFI パーティションにインストールします。rEFInd のインストール方法については、既にインターネット上に数多の解説があるので詳細は割愛はしますが、binary zip 版(本稿執筆時点のバージョンは 0.8.3)をダウンロード、解凍して

 $ sudo ./install.sh

で /EFI ディレクトリ以下にインストールされるでしょう。

Vine Linux のインストール

用意したパーティションに Vine Linux をインストールします。私の MacBook ではグラフィカルインストーラで問題なくインストールができました。ファイルシステムは ext3 を利用しました(ext4は試してません)。Vine Linux のインストーラは、インストールパーティションの先頭セクタに GRUB(バージョン1)をインストールしますが、これは使用しません(上述したとおり、使用できません)。

インストールが終わって再起動すると、rEFInd からインストールした Vine Linux のパーティションが選択できるようになります。が、選択しても起動できません。もう少し我慢してください。

GRUB2 の EFI パーティションへのインストール・設定

Linux マシン上で、 grub-2.00 のソースコードをダウンロードして展開、ビルドします。configure オプションは以下のような感じで。

 $ ./configure --with-platform=efi —target=x86_64 --program-prefix="”
 $ make

VineSeed/x86_64 でのビルドには patch がいくつか必要でした (shaolin)

  •  grub-core/script/yylex.l: Ignore unused-function and sign-compare
  •  Re: GRUB 2.00 make fails
  • freetype2 header fix
    diff -uNr grub-2.00.orig/util/grub-mkfont.c grub-2.00/util/grub-mkfont.c
    --- grub-2.00.orig/util/grub-mkfont.c   2012-03-10 21:17:57.000000000 +0900
    +++ grub-2.00/util/grub-mkfont.c        2014-08-10 12:00:00.000000000 +0900
    @@ -39,7 +39,7 @@
     #include FT_FREETYPE_H
     #include FT_TRUETYPE_TAGS_H
     #include FT_TRUETYPE_TABLES_H
    -#include <freetype/ftsynth.h>
    +#include <ftsynth.h>
    
     #undef __FTERRORS_H__
     #define FT_ERROR_START_LIST   const char *ft_errmsgs[] = {
    

make 完了後に grub.efi(EFI バイナリ)を作成します。モジュールをどこまで組みこむかはお任せですが、 参考にしたサイトの受け売りです(笑)。 -p “” を忘れずに。

 $ cd grub-core
 $ ../grub-mkimage -O x86_64-efi -d . -o grub.efi -p "" part_gpt part_msdos ntfs ntfscomp hfsplus fat ext2 normal chain boot configfile linux multiboot

OS X の /EFI フォルダ以下に grub, grub/x86_64-efi フォルダを作成し、できあがった grub.efi を /EFI/grub へ、Linux マシンの grub-core フォルダ内にある組み込まなかったモジュール関連ファイル(*.mod, *.lst) は grub.efi のシェルで組み込めるように OS X の /EFI/grub/x86_64-efi へそれぞれコピーします。この段階での /EFI 以下のファイル配置は以下のようなイメージです。

/EFI
├── grub
│       ├── grub.efi
│       └── x86_64-efi
│                  ├── *.mod
│                  └── *.lst
├── refind(rEFInd)
└── tools

ここで再起動すると、rEFInd から grub.efi が選択できるようになるはずです。ただ、この時点では grub.cfg がないのでシェルに落ちます。

grub.cfg は 参考にしたサイト等の情報から以下のような感じで作ってみました。root や swap の値は適宜読み替えてください。三つ目は GRUB から OS X を起動するためのものです。

set debug=video
insmod efi_gop

menuentry "Vine Linux" {
	  search --file --no-floppy --set=root /boot/vmlinuz
	  fakebios
	  linux /boot/vmlinuz ro root=/dev/sda4 swap=/dev/sda5 video=efifb
   	  initrd /boot/initrd.img
}

menuentry "Vine Linux (Previous kernel)" {
	  search --file --no-floppy --set=root /boot/vmlinuz.old
	  fakebios
	  linux /boot/vmlinuz.old ro root=/dev/sda4 swap=/dev/sda5 video=efifb
   	  initrd /boot/initrd.old.img
}

menuentry "OS X (Mavericks)" {
	  search --file --no-floppy --set=root /usr/standalone/i386/boot.efi
	  chainloader (${root})/usr/standalone/i386/boot.efi
}

無線ドライバのインストール

Late 2013 については、 Broadcom のサイトからダウンロードしたドライバで無線LANが動作しました。ここは MacBook のモデルで違いがあるかもしれません。

ここまでいけば VineSeed に移行できる・・・はず。

参考にしたサイト

 https://help.ubuntu.com/community/UEFIBooting