様々な事情がありMacBook Pro 2017 15-inchを購入することにしたので、いまのAir 2013 Lateから環境を移行すべく、MacBook ProにWindows (BootCamp) とGentooをインストールしたときの備忘録になります。
先に言っておきますが、Linuxをネイティブで (仮想マシンを使わず) 入れることが前もってわかっているならば、事情がない限りMacBook Pro (特に15-inch) は避けるべきでしょう。
キーボード・トラックパッド (解決法があるので下に書きます)、ビルトインの音声入出力1 2、サスペンドおよびハイバーネーション、15-inchに限って内蔵Wi-Fi 3 が使い物になりません。詳しくは GitHub: Dunedan/mbp-2016-linux のまとめを参照してください。
Windowsのインストール
macOS付属のBoot Camp アシスタントを使用して、Windowsをインストールするだけです。
嘘をつきました、WindowsをインストールするだけならばBoot Camp アシスタントを使えばきっと苦労しません。
念の為USBマウスとキーボードを用意しておいたほうがいいかもしれません。
わたしはLinuxをインストールすること前提で考えていたので、Boot Camp アシスタントを使う前に、macOS付属ディスクユーティリティでLinuxのパーティションを作成していました。
が、どうやらこの方法でインストールしようとするとBoot Camp アシスタントがエラーで失敗するようです。
macOSのパーティション構成に変更が加わっているのが原因のようですが、macOSのエラーメッセージは基本的にクソなので、詳しい理由はよくわかりません4。
Windowsのパーティションを大きめにとって、BootCampでインストールしてから、Windowsのパーティションを (Ubuntuなどで) 切り分けるほうが早いのかも。
ディスクユーティリティーでLinuxのパーティションを作ってから、Windowsをインストールする場合
必要なもの
- Windows 10のインストールメディア
- Windows 10のインストール専用USBスティックが手元にある場合はそれを使えばいいです。
- ない場合はisoを落としてきてUSBに「焼く」必要があります。isoファイルをそのままコピーしてはいけません
- MacBookのドライバーを入れるUSBメモリ (など、Wi-Fiを使わない場所にファイルが置ければ、おそらくどこでもいい)
- 2GB以上の空きが必要です
- インストールメディアと共通で構いません (インストール専用USBスティックの場合は書き込み可能なメディアを別に用意する必要があります)
- USB接続のマウスとキーボード
- 諦めない心
手順
Installing Windows 10 on a Mac without Bootcamp
- macOSのディスクユーティリティーでパーティションを切ります。Linuxのパーティションだけ作れば大丈夫です。5
- Boot Camp アシスタントを起動して、インストールを試みます。エラー落ちしますが、気にしないでください。
- /Library/Application Support/BootCamp/WindowsSupport.dmg を開いて、中身をドライバーのUSBメモリにコピーします。
- シャットダウンします。必要のないUSBは外してください。インストールメディアをUSBに接続します。キーボードとマウスも接続します。
- Alt (macOS的に言うとOption) キーを押しながら電源を入れ、EFI Bootを選びます。(複数出てくる場合がありますが、その場合はWindowsインストール画面が出てくる方を当ててください)
- 画面のとおりにWindows 10のインストールを進めます。インストール先はBOOTCAMPと名前のついているパーティションをフォーマット指定して次へで大丈夫なはずです。間違っても違うパーティションを選んだりしないでください。死にます。
- Windowsのインストールが完了したらドライバーUSBメモリの中の、setup.exeを起動してドライバーをインストールします。
日本語キーボードでかなと英数がキーとして認識されない場合は http://kuneoresearch.com/bootcamp-keyboard-driver-re-install/ を見るとどうにかなると思います。
Windowsシャットダウン→起動でTouchBarが使えなくなる場合は、高速スタートアップを無効にすると改善する場合があります。
無効にしてもTouchBarが使えないときがありますが、BootCamp Utilityのオプションから、キーボード→F1, F2,...のオプションに変更を加えて6適用を押すとTouchBarが復活します。一度復活すれば元に戻しても大丈夫です。
Linuxをインストールする
さて本題の(Gentoo) Linuxを入れる手順です。
前提
GitHub: Dunedan/mbp-2016-linuxのとおりですが、
- Linux 4.10より前のカーネルでは、追加のkernel boot parameter
intremap=nosid
が必要です。 - 内蔵スピーカー、内蔵マイク、ビルトインイヤホンジャックは動作しません。
- HDMIやサウンドカード内蔵USB1などは動作します。
- 2019年7月にout-of-treeではあるものの、kernel moduleが登場しました。GitHub: davidjo/snd_hda_macbookpro これを書いている人はまだ試していません
- バッテリーは長持ちしません。
Battery life is still suboptimal, because power saving modes for several devices, like display (panel self refresh), SSD or the Thunderbolt controllers, aren't working yet. You can expected a battery life of less than 4 hours.
- macOSに比べてバッテリーの消耗が4倍くらい激しい気がします (macOSを普段使わないので参考程度に)。
- TouchbarがないモデルではBluetoothの処理でバグがあり、パッチを当てる必要があります。
- Linux <4.11 + without AMDGPUモデルでは、SSDの処理でバグがあるのでパッチかワークアラウンドが必要です
- Linux >=4.18 <4.19.9 + AMDGPUで、内蔵ディスプレイを見失います。4.19.9/4.20-rc4にはパッチが入って正常に動く模様 (まだ試していない)。4.19系の該当コミット。詳しくはLinux kernel 4.18 breaks display on 14,3。
- Thunderboltの動作にはLinux 4.13以上が必要です。
- キーボード、トラックパッドの動作にはカーネル外のモジュールが必要です。タッチバーモデルにはfork版を使うといいと思いますが、Fnキーがモジュールに吸い込まるのか、Fnキーを押しても入力として扱われないことがあります。
- 15-inchモデルのWi-Fiは思うように動きません。ワークアラウンドはあるっぽいですが、5GHz帯が使えません。GNOMEで表示される電波強度も本来より小さく表示されるみたいです。
どうですか?嫌になりますね 楽しくなってきますね!
Ubuntu等でキーボード・トラックパッドを使用できるようにする
UbuntuなどではGitHub: roadrunner2/macbook12-spi-driverにあるとおり、dkmsを使いましょう (Gentooは後述します)。Archはmacbook12-spi-driver-dkmsでいいんじゃないでしょうか。
Gentoo Linuxをインストールしよう
基本的にはGentoo Linux amd64 ハンドブック: Gentoo をインストールするの通りにやればいいです。繰り返しますがUSB接続できるキーボードマウスは必要です。
UEFIが必要なので、Gentoo Minimal Installation CDは使用できません。UEFIモードで起動できるLinuxを使用する必要があります (Linux 4.11以上推奨)。Gentoo HybridISO (LiveDVD) はあまり更新されていなさそうなので、使わないほうがよさげな雰囲気があります。わたしはUbuntu 18.04 Desktop (Linux 4.15) をUSBに焼いて、Live環境を使用してインストールしました。
基本的にはハンドブックの通りに進めましょう。Linuxカーネルは、unstableでも最新に近いものを使いましょう
# emerge \>=sys-kernel/gentoo-sources-4.16 -av
AMDGPUのカーネルコンフィグ
MacBook Pro14,3固有のカーネルコンフィグは、以下の項目は必要になるのではないでしょうか。面倒でconfigはあまり詰めない方針なので、お好きに取捨選択してください。
Genkernelを使えばここらへんやってくれそうな気がしますが、使ったことがないので私にはわからんです。
Device Drivers -->
IOMMU Hardware Support -->
[*] AMD IOMMU support
<*> AMD IOMMU Version 2 driver
Graphics support -->
<*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) -->
[*] Enable legacy fbdev support for your modesetting driver
< > ATI Radeon
<M> AMD GPU
[ ] Enable amdgpu support for SI parts
[ ] Enable amdgpu support for CIK parts
ACP (Audio CoProcessor) Configuration -->
[*] Enable AMD Audio CoProcessor IP support (CONFIG_DRM_AMD_ACP)
Display Engine Configuration -->
[*] AMD DC - Enable new display engine
[*] DC support for Polaris and older ASICs
<M> HSA kernel driver for AMD GPU devices
AMD GPUのモジュールをbuilt-inにする場合はAMD GPU#Incorporating Firmwareのとおりkernelにfirmwareを組み込む必要があります。
MacBook Pro 14,3に搭載されているAMD GPUはPolaris 11 (Radeon Pro 555/560) なので、組み込むべきfirmwareは、
amdgpu/polaris11_ce.bin amdgpu/polaris11_k_smc.bin amdgpu/polaris11_mc.bin amdgpu/polaris11_me.bin amdgpu/polaris11_mec2.bin amdgpu/polaris11_mec.bin amdgpu/polaris11_pfp.bin amdgpu/polaris11_rlc.bin amdgpu/polaris11_sdma1.bin amdgpu/polaris11_sdma.bin amdgpu/polaris11_smc.bin amdgpu/polaris11_smc_sk.bin amdgpu/polaris11_uvd.bin amdgpu/polaris11_vce.bin
その他のカーネルコンフィグ
面倒でconfigはあまり詰めない方針&ここにある以外でも結構オプション入れてるので、取捨選択ry
Gentoo Wiki: Bluetooth
MBPに必要なBluetoothのモジュールのリスト
Device Drivers -->
NVME Support -->
[*] NVM Express block device
[*] SPI support -->
<M> PXA2xx SSP SPI master # required for macbook12-spi-driver
Characters devices -->
Serial drivers -->
<*> Support for Synopsys Designware 8250 quirks # Bluetoothに必要らしい https://github.com/Dunedan/mbp-2016-linux/issues/29#issuecomment-368332604
<*> Serial device bus # Bluetooth
[*] GPIO Support --> # Bluetoothに必要らしい
Multifunction device drivers -->
<M> Intel Low Power Subsystem support in PCI mode # required for macbook12-spi-driver
<*> Sound card support --->
<*> Advanced Linux Sound Architecture --->
[*] PCI sound devices --->
HD-Audio --->
<*> HD Audio PCI
[*] Support initialization patch loading for HD-audio
<*> whatever audio codec your soundcard needs # 内蔵のaudioはここで何選んでも今のところ使えない (ことになっている)
<*> Build HDMI/DisplayPort HD-audio codec support
(2048) Pre-allocated buffer size for HD-audio driver # recommended for pulseaudio
[*] USB sound devices -->
<*> USB Audio/MIDI driver # USBのサウンドカードを使う場合(?)
HID support -->
Intel ISH HID support -->
Intel Integrated Sensor Hub # いるのか?
USB support -->
<*> USB Type-C Support -->
<*> USB Type-C Port Controller Manager # いるのか?
Hardware Monitoring support -->
<*> Apple SMC # なくてもいい
<*> Intel Core/Core2/Atom temperature sensor # CPU温度
Network devices support -->
Wireless LAN -->
[*] Broadcom devices
<M> Broadcom FullMAC WLAN driver # linux-firmwareパッケージが必要、built-inにする場合はfirmwareの組み込みも必要、15-inchではfirmwareが不安定なので< >状態にすることを推奨
[*] PCIE bus interface support for FullMAC driver
<*> Industrial I/O support --> # 新しいapple-ibモジュールに必要
[*] Enable buffer support within IIO
[*] Enable triggered sampling support
Accelerometers --> # なんでもいいのですが、IIO_TRIGGERED_DRIVER (apple-ib-alsモジュールに必要) をyにできればいいです。
[*] Bosch BMA180/BMA250 3-Axis Accelerometer Driver # 上記参照
Networking support -->
<*> Bluetooth subsystem support --> # Bluetooth
[*] Bluetooth Classic (BR/EDR) features
<*> RFCOMM protocol support
[ ] RFCOMM TTY support
< > BNEP protocol support
[ ] Multicast filter support
[ ] Protocol filter support
<*> HIDP protocol support
[*] Bluetooth High Speed (HS) features
[*] Bluetooth Low Energy (LE) features
Bluetooth device drivers -->
<*> HCI UART driver
[*] Broadcom device support
-*- Wireless -->
<*> cfg80211 - wireless configuration API
[*] cfg80211 wireless extensions compatibility # 15-inchのworkaroundに必要
macbook12-spi-driverのインストール (Gentoo)
macbook12-spi-driver-9999.ebuildみたいなものを用意してemergeすると、KERNEL_DIR="/usr/src/linux-VERSION" emerge @module-rebuild
でモジュール再ビルドができるようになります。
# mkdir /usr/local/portage{,/profiles,/metadata}
# echo 'local' > /usr/local/portage/profiles/repo_name
# echo 'masters = gentoo' > /usr/local/portage/metadata/layout.conf
# mkdir -p /etc/portage/repos.conf
# echo $'[local]\nlocation = /usr/local/portage\nmasters = gentoo\nauto-sync = no' > /etc/portage/repos.conf/local.conf
# mkdir /usr/local/portage/sys-libs{,/macbook12-spi-driver}
# wget https://raw.githubusercontent.com/turenar/portage-overlay/26a6589f167a1719295c37d439afd249073e307f/sys-libs/macbook12-spi-driver/macbook12-spi-driver-9999.ebuild -O /usr/local/portage/sys-libs/macbook12-spi-driver/macbook12-spi-driver-9999.ebuild
# ebuild /usr/local/portage/sys-libs/macbook12-spi-driver/macbook12-spi-driver-9999.ebuild manifest
# emerge macbook12-spi-driver -av
/etc/kernel/postinst.d/以下に実行可能ファイルを置いておくと、カーネルのmake install
で実行してくれる仕組み7があるので、「カーネルアップデートしたらマウスとキーボードが使えなくなった」という事態を防ぐために、予防線を張っておくといいでしょう。
# !/bin/sh -e
make modules_install
KERNEL_DIR="/usr/src/linux-$1" emerge @module-rebuild
grub-mkconfig -o /boot/grub/grub.cfg
GRUBのインストール
ガイドブックのとおりやるだけ……だといいのですが、そうはいきません…………
基本的にはArchWikiのHFS+のパーティションにインストールする場合、EFIパーティションにインストールする場合のどちらかを参考にするといいでしょう。
ジャーナリングありのHFS+パーティションを作ってしまった人は残念ですが、ジャーナリングなしにするか一度WindowsなどのEFIパーティションにインストールしてからmacOSでコピーする必要があります。
そして、HFS+の場合はblessコマンドを実行するのを忘れないようにしましょう。EFIで必要になるのかは試してないのでわかりません.
たぶんここまでやれば、MacBookでも動くGentooが手に入る……はず。
15-inchにおけるWiFi (2.4GHz) のワークアラウンド
iwconfigのインストール
$ sudo emerge wireless-tools -av
$ sudo iwconfig wlp3s0 txpower 10dBm
再起動時に自動でやらせるなりお好みで
トラブルシューティング
GPartedでパーティションをいじったあと (?) にWindowsが起動しなくなる
Protective MBRではなくHybrid MBRになっているのが原因です。Ensuring that a Hybrid MBR is not usedに沿って対応しましょう。Linuxでやる場合はおそらく/dev/nvme0n1
をgdiskの引数として渡せば良いはず。
まとめ
つよくいきよう
-
サウンドカードが内蔵されたUSBオーディオジャックなどであれば、適切なカーネルモジュールが導入されていれば動くと思います。例えば http://amzn.asia/0PrSBfq (USB Type-Aなので変換が必要) http://amzn.asia/7NCMNpZ (USB Type-Cだが低音が出ない?ので音楽用途には使用できない)。サウンドカードが内蔵されていない、ただのUSB-Type Cとイヤホンジャックを変換するだけのケーブルを使用しても音声入出力は不可能です。 ↩ ↩2
-
https://github.com/leifliddy/snd_hda_macbookpro を導入すると内蔵サウンドカードを使えるようになるかもらしいです。なお当方未テスト。 ↩
-
https://bugzilla.kernel.org/show_bug.cgi?id=193121#c62 にある通り、適切なfirmwareを導入すればWi-Fiが使えるようになる可能性があります。ただ、うちのWi-Fiのパスワードの打ち間違いなのかわかりませんが、接続するところまでは行けてないです。 ↩
-
右のURLにも同じような情報があります。 http://fgimian.github.io/blog/2016/03/12/installing-windows-10-on-a-mac-without-bootcamp/ ↩
-
EFIシステムパーティションはBoot Camp アシスタントかWindowsのインストール時に作られるので気にしなくていい……のかな?わたしは2013 LateのときにHFS+をEFIシステムパーティションの代わりに使用したので、そのときと同じように512MB HFS+パーティションを作りました。HFS+はジャーナリングなしとして作成しないと、Linuxからは書き込みができなくなるので注意しましょう (やらかした)。 ↩
-
チェックが入っているならチェックを外す。チェックが入っていない状態ならチェックを入れましょう。 ↩
-
/sbin/installkernel.shからrun-partsコマンドにより実行されます。引数$1=カーネルバージョン、$2=/boot中のkernel imageファイルパス ↩