Ubuntu日本語フォーラム
ログインしていません。
先日、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.
とりあえず動くのでたぶん大丈夫。(そう言い聞かせて実行しながら)
オフライン
上のスクリプト、
$HOME/.config/autostart
を作成するコードが抜けてました。
既にgnome-session-managerでオートランを作ったことのあった環境で実験してたので、
初期状態ではディレクトリそのものが存在しないことを失念していました。
あのスクリプトを参考にする場合、
mkdir $HOME/.config/autostart
を追加して下さい。
あと、skype
入れるのにPartnerリポジトリを有効化しないといけないので、
それも後で考えます。
オフライン