お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2014-05-19 00:08:05

YutaOgasawara
メンバ
From: 日本
登録日: 2009-12-09

MacBookAir5,2へトリプルブート環境を構築した際のあれこれ

先日、MacBookAir(以下MBA)へ表題のとおりOSX10.9/Win8/Ubuntu14.04トリプルブート環境を構築したので、他の方の役に立てばと思い顛末を投稿します。

・パーティションテーブルの作成、パーティション分け
パーティションテーブルはもちろんGUIDパーティションテーブル(GPT)なのですが、

・MBAのEFIファームではWin8のEFIアプリケーションを呼べない(rEFItみないなEFIシェルを利用した場合は別。2013モデルのMBAでは素のままでイケるらしい?)
・どうもUbuntuがインストール時にハイブリッドMBR(互換用に先頭から4つ目までのパーティションテーブルがディスクの先頭セクタに書き込まれる)を書いてしまうらしい
・ハイブリッドMBRが存在するディスクには、たとえGPTでもWin8をEFIモードでインストールできない(Win8のインストーラがエラーを表示し先に進めない)

などの理由から、
「Win8だけはMBRモード(BIOSモード・レガシーモードとか、なんか呼び名がいっぱいあります)でインストールする」
という変則インストールを行いました。

パーティション分けについても、上記のとおり、
Win8は自分がMBRなディスクにインストールされていると認識するので、先頭から4つ目までのパーティションにインストールしなければなりません。
うちでは以下のようなパーティション構成にしました。

1.EFISYS(FAT32/200MiB):EFIシステムパーティション。EFIアプリケーションがインストールされます。(Ubuntu上ではGRUBのインストール先となり、/boot/efiにマウントされます。)

2.linux-swap(8GiB):swapパーティション。このあたりを参考に、うちのMBAのRAM量と同じ8GiBに設定しました。

3.Share(HFS+/100GiB):Dropbox置き場。Ubuntuからの書き込みをサポートするためにジャーナリングを無効化してあります。また、Win8からはBoot Campの機能によりリードオンリーでマウントされます。

4.Windows(NTFS/50GiB):Win8のインストール先。
※以上がHybrid MBRに書かれ、Win8から見えるパーティションですが、EFISYSはシステム的に非表示になり、linux-swapは解釈できないので、実際はShareだけが見えます。

5.Linux(Ext4/20GiB):Ubuntuのインストール先。

6.Macintosh(HFS+/残り全て):OSXのインストール先。このパーティションはOSXをインストールするためジャーナリングが有効です。
※OSXインストール時に一部がリカバリ領域として切り出され、2つのパーティションへ分かれます。

上記の操作を、うちではUbuntuのLive USBを作成し、それに入ってるGpartedを使って行いました。(HFS+なパーティションを作成するためにhfsprogsが必要)


・インストール
インストール作業は、USBフラッシュメモリ3本にそれぞれのOSのインストーラを焼いて行いました。

・OSX10.9は内蔵のツールでフラッシュメモリ上にインストーラを作成できるので、それを利用しました。このあたりを参照してください。
・UbuntuのLive USBは、別の既にあるUbuntu環境で「ブータブルUSBの作成」を使い作成しました。
※OSX上で作成する手順がubuntu.com内に記載されているのですが、この手順だとLive USB内蔵のエラーチェックでエラーが検出されるので、利用していません。(エラーがあるよとしか表示されず何が悪いのか謎)
・Win8のインストーラは、OSX上でhdiutilを使いDVDから抽出したディスクイメージをBoot Campアシスタントに食わせて、ドライバパッケージが同梱されたUSBインストーラを作成しそれを利用しました。

インストール作業について、Win8は指示にしたがっていれば滞りなく完了するのですが、(ただ、インストール完了後Win8を起動するには、optionを押しながら起動し、Windowsを選ばねばなりません。)
OSXをUSBインストーラで入れようとすると、途中、インストーラが自分でMBAをリブートさせるのにその後インストール処理をレジュームできないというアレな問題があり、
グレー画面で止まった場合、電源ボタン長押しでハードオフさせ、optionを押しながら起動してブートメニューからUSBインストーラを明示的に叩くという作業が必要になります。
Ubuntuを入れる際はさらに一手間必要です。以下に手順を示します。(ほぼここのコピー)

1.Live USBでLiveセッションを起動します。(直接インストールを選んではいけません。後述する作業でLive環境が必要になります)

2.インターネットへ接続します。(インストーラ上でもネットワークへ接続するよう促されるので、そこでも可。どちらにせよ後で必須になります。)
※Thunderbolt Ethernet Adaptorを利用する場合、接続した状態で起動してください。プラグアンドプレイ出来ないので起動後に接続しても認識しません。

3.Ubiquity(インストーラ)を起動します。

4.インストール形式で「その他」を選び、ブートローダのインストール先に「/dev/sda1(EFISYS)」を選択します。

5.インストール完了後、再起動を促されますが「試用を継続する」を選びLiveセッションへ戻ってください。

6.efibootmgrをインストールします

コード:

sudo apt-get install efibootmgr

7.efibootmgrを使い、MBAのEFIファームにubuntuを起動させるエントリを書き込みます。

コード:

まずは現在の状態を調べます。おそらく以下のような結果が返ってくると思います。
sudo efibootmgr
BootCurrent: 0000
Timeout: 5 seconds
BootOrder: 0000,0080
Boot0000* Windows Boot Manager
Boot0001* ubuntu
Boot0080* Mac OS X
Boot0082* 
BootD1A6* AST

BootOrderに列挙されたOSが記載順のプライオリティで起動されます。(最前列に記載されたOSがBootCurrentにデフォルトとして挿入されます。)
そこで、Ubuntuをブートオーダーに追加し、さらに起動順をUbuntu→OSX→Win8にします。
sudo efibootmgr -o 0001,0080,0000
BootCurrent: 0000
Timeout: 5 seconds
BootOrder: 0001,0080,0000
Boot0000* Windows Boot Manager
Boot0001* ubuntu
Boot0080* Mac OS X
Boot0082* 
BootD1A6* AST
※BootCurrentが変わっていませんが、再起動すれば0001になります。

作業はこれで終了です。再起動してください。

すると、デフォルトの起動OSがUbuntuになっているので、何もしなくてもGRUBが呼ばれてUbuntuが起動します。
※GRUBのメニューにOSXがエントリされていますが、これを選んでもOSXは起動出来ません。
※Win8はMBRモードでインストールされているので、EFIアプリケーションであるGRUBでは扱えません。
この状態では、OSX/Win8を起動するにはoptionを押しながら起動する必要があります。(option起動で表示されるブートセレクタ上にはUbuntuは表示されない。)


・インストール後の作業(GRUB編)

以上で「トリプルブートする」という目的は達せられたのですが、うちでは主にOSXを利用し、UbuntuとWin8は遊びで入れているようなものなのでデフォルトでUbuntuが起動してしまうのは不便です。
そこで、GRUBに自動作成される「OSXを呼べないOSXのエントリ」を削除するとともに、実際にOSXをブートできるエントリを追加し、さらに前回起動したOSを記憶して自動で選択するようにします。

以下のファイルを編集します。
/etc/default/grub
/etc/grub.d/40_custom

コード:

sudo gedit /etc/default/grub

以下の行を編集します。
GRUB_DEFAULT=0 > GRUB_DEFAULT=saved(デフォルトの起動OSを、前回起動したものにセットします。任意のエントリに固定することも出来ます。初期値0は最上位エントリのUbuntuです。)
GRUB_TIMEOUT=10 > GRUB_TIMEOUT=3(選択されたOSが自動起動されるまでの時間を短くしました。0以下に設定するとこちらが操作するまで何も起きなくなります。)
GRUB_CMDLINE_LINUX="" > GRUB_CMDLINE_LINUX="libata.force=noncq"(デフォルトだとSSDがフリーズすることがあるらしいので、それを防止する呪文らしいです。)

以下の行を追加します
GRUB_SAVEDEFAULT=true(「前回起動したOS」を記憶するトグルです。GRUB_DEFAULT=savedとセットで設定して初めて動作します。)
GRUB_DISABLE_OS_PROBER=true(「他のOSを自動検出してGRUBに追加する」機能を無効化するトグルです。自動追加されたOSXは起動出来ないのでそもそもエントリされないようにします。)

保存して閉じます。

sudo gedit /etc/grub.d/40_custom

末尾に以下のコードを追加します。
menuentry "Mac OS X" {
    exit
}

保存して閉じます。
これで、GRUBメニューの最後に「選択するとGRUBが終了する」Mac OS Xという名前カスタムメニューが追加されます。
これを選択してGRUBを殺すと、前述したefibootmgrのオーダー順でUbuntuの次にあたるOSXが呼ばれて起動します。

変更を反映します。
sudo update-grub

以上で、一度OSXをGRUBで呼べば、以後は自動でそうなるようになりました。


・インストール後の作業(キーボード編)
次はキーボードです。
まず問題なのは、MBAの内蔵キーボードにある特殊キーに対する機能の割り付けが、UbuntuとOSXで大きく異なることです。

・OSXでは、commandキーはコピー・ペーストの際などCtrl的な役割だが、Ubuntu上ではcommandに対してSuperが割り当てられている。
・OSXでは、controlキーはSpotlightの起動などSuper的な役割だが、Ubuntu上ではcontrolに対してCtrlが割り当てられている。
※うちのMBAにはUSキーボードが内蔵されているので、右AltがAltGrになるというアレもあるのですが、個人的に別に不便でないのでそこはスルーです。

これを解決するために、今回はxmodmapを利用しました。
※Windows上でもAppleのドライバが(Apple純正なのに!)Ubuntuと同じように割り付けるのでKeySwapというツールを利用し以下と同じように設定しています。

コード:

gedit ~/.xmodmap

以下を記述します。
keycode    37 = Super_L NoSymbol Super_L
keycode   105 = Super_R NoSymbol Super_R
keycode   133 = Control_L NoSymbol Control_L
keycode   134 = Control_R NoSymbol Control_R
clear Control
clear    Mod4
add   Control = Control_L Control_R
add      Mod4 = Super_L

保存して閉じ、設定を反映します。
xmodmap ~/.xmodmap

commandとcontrolに割り付けられた機能が入れ替わりました。
しかし、これでは再起動すると設定が無効になってしまうので、「自動起動するアプリケーション」に以下のコードを追加します。
xmodmap /home/[username]/.xmodmap
※.xmodmapの場所を絶対パスで指定しないと動きません。

もう一つ、Appleのキーボードはファンクションキーにいわゆるメディアキーのような機能が割り付けられていて、通常のファンクションキーとして使う場合はfnキーと同時押ししなければなりません。
ですが、私は文字入力の際にファンクションキーを使って半角カナとか英数とかに直接変換する操作をよく使うので、これでは不便です。
OSXではシステム環境設定で、WindowsでもBoot Campコントロールパネルで設定すれば完了するのですが、
Ubuntuでは設定ファイルを書かなければなりません。(またここの受け売り)

コード:

以下のコードを実行します。
echo options hid_apple fnmode=2 | sudo tee -a /etc/modprobe.d/hid_apple.conf

設定を反映します。
sudo update-initramfs -u -k all

再起動すればメディアキーとファンクションキーの動作が入れ替わります。
fnmodeを0にするとメディアキーが無効に、1にするとデフォルトの動作になります。


・インストール後の作業(wifi編)
どうもサスペンドから復帰するとwifiアダプタを見失うなぁと思っていたら、ワークアラウンドがあったので紹介します。
Broadcomのドライバに起因するようなので、現状はこれしか方法がないようです。(さらにここの受け売り)

コード:

以下のファイルを作成します。
sudo gedit /etc/pm/sleep.d/99_[任意の文字列]

以下の内容を記述します
#!/bin/sh
case "$1" in
        resume|thaw)
                service network-manager stop
                rm /var/lib/NetworkManager/NetworkManager.state
                service network-manager start
                ;;
esac

保存して閉じ、パーミッションを変更します。
sudo chmod 755 /etc/pm/sleep.d/99_[任意の文字列]

これで、サスペンドから復帰するとそれをトリガにしてネットワークマネージャが再起動し、見失ったwifiアダプタがまた動くようになりました。


・インストール後の作業(面倒だし自動化してしまえ編)
面倒くさいのでシェルスクリプト書いて自動化しました。
ついでにppaの追加とかいらないパッケージの削除とか色々突っ込みました。

コード:

#!/bin/sh

# create xmodmap
cat << EOF | tee $HOME/.xmodmap
keycode    37 = Super_L NoSymbol Super_L
keycode   105 = Super_R NoSymbol Super_R
keycode   133 = Control_L NoSymbol Control_L
keycode   134 = Control_R NoSymbol Control_R
clear Control
clear    Mod4
add   Control = Control_L Control_R
add      Mod4 = Super_L
EOF

# add entry to autostart
cat << EOF | tee $HOME/.config/autostart/xmodmap.desktop
[Desktop Entry]
Type=Application
Exec=xmodmap $HOME/.xmodmap
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=xmodmap
Comment=
EOF

# wifi missing fix
cat << EOF | sudo tee /etc/pm/sleep.d/99_restart-network
#!/bin/sh

case "\$1" in
    resume|thaw)
        service network-manager stop
        rm /var/lib/NetworkManager/NetworkManager.state
        service network-manager start
        ;;
esac
EOF

# fn key mode set
echo options hid_apple fnmode=2 | sudo tee /etc/modprobe.d/hid_apple.conf

# edit grub settings
sudo sed -i -e "
/GRUB_DEFAULT=/s/=.*/=saved/
/GRUB_TIMEOUT=/s/=.*/=3/
/GRUB_CMDLINE_LINUX=/s/=.*/=\"libata.force=noncq\"/
" /etc/default/grub

# add custom entry to grub settings
cat << EOF | sudo tee -a /etc/default/grub

# user custom entry
GRUB_SAVEDEFAULT=true
GRUB_DISABLE_OS_PROBER=true
EOF

# add fallback boot menu
cat << EOF | sudo tee -a /etc/grub.d/40_custom

menuentry "Mac OS X" {
    exit
}
EOF

# apply all settings
xmodmap $HOME/.xmodmap
sudo chmod 755 /etc/pm/sleep.d/99_restart-network
sudo update-initramfs -u -k all
sudo update-grub

# remove webapps
sudo apt-get purge unity-webapps-common xul-ext-unity xul-ext-websites-integration
sudo apt-get autoremove

# add favorite ppa
sudo add-apt-repository ppa:japaneseteam/ppa
sudo add-apt-repository ppa:conscioususer/polly-daily
sudo apt-get update
sudo apt-get upgrade

# install favorite apps
sudo apt-get install ibus-mozc skype easytag asunder lame polly android-tools-adb android-tools-fastboot

# skype indicator and theme problems fix
sudo apt-get install gtk2-engines-murrine:i386 gtk2-engines-pixbuf:i386 sni-qt:i386

echo all done! please reboot now.

とりあえず動くのでたぶん大丈夫。(そう言い聞かせて実行しながら)

オフライン

 

#2 2014-05-21 12:13:14

YutaOgasawara
メンバ
From: 日本
登録日: 2009-12-09

Re: MacBookAir5,2へトリプルブート環境を構築した際のあれこれ

上のスクリプト、
$HOME/.config/autostart
を作成するコードが抜けてました。
既にgnome-session-managerでオートランを作ったことのあった環境で実験してたので、
初期状態ではディレクトリそのものが存在しないことを失念していました。

あのスクリプトを参考にする場合、

コード:

mkdir $HOME/.config/autostart

を追加して下さい。

あと、skype
入れるのにPartnerリポジトリを有効化しないといけないので、
それも後で考えます。

オフライン

 

Board footer

Powered by FluxBB