Macbook Pro 2018でArch Linuxを動かすことに成功!!!
大変だった。
Macbook Proの中にインストールもできるけど、今回はUSBにインストールした。
方法
やる際は自己責任でお願いします。。。。
仮想マシン準備編
- arch linux の iso をダウンロード
- VirtualBoxをインストール
- VirtualBox extension pack をインストール
- VirtualBoxで64bit仮想マシンを作成
- USBメモリをMacbook Proに挿す
- VirtualBoxの仮想マシン設定で、ポート -> USBにいき、USB 3.0コントローラを有効にする。さらに、USBデバイスフィルターに先ほど刺したUSBメモリを登録。システム -> EFIを有効化をオンにする。
- 仮想マシンを起動。arch linux の iso を設定する。
パーティション編(arch-chrootまで編)
-
起動したら、/etc/pacman.confに以下を追加(nanoなどで編集)
[mbp] Server = https://packages.aunali1.com/archlinux/$repo/$arch SigLevel = TrustAll
以降は、https://wiki.archlinux.org/index.php/Installation_guideに従って設定する。キーボード・タイムゾーン・言語・パスワードの設定は省く。
-
fdisk /dev/sdb
でUSBのパーティションを設定する。GUID Partition Tableで初期化し、まず最初に300MiB ~ 500MiBくらいのパーティション(/dev/sdb1
)を作成し、次に余った領域でパーティション(/dev/sdb2
)を作成する。最初のパーティションのtypeはEFI Systemに設定する。 -
mkfs.fat -F 32 /dev/sdb1
-
mkfs.ext4 /dev/sdb2
-
mount /dev/sdb2 /mnt
-
mkdir /mnt/efi
-
mount /dev/sdb1 /mnt/efi
-
pacstrap /mnt base linux-mbp linux-firmware linux-mbp-headers
-
genfstab -U /mnt >> /mnt/etc/fstab
-
arch-chroot /mnt
ブートローダー編
mkinitcpio -p linux-mbp
pacman -S grub efibootmgr
grub-install --target=x86_64-efi --efi-directory=efi --bootloader-id=GRUB
/efi/GRUB/grubx64.efi
を/efi/boot/bootx64.efi
にコピーgrub-mkconfig -o /boot/grub/grub.cfg
/efi/boot/grub.cfgと/efi/GRUB/grub.cfgにも生成した方がいいかも。pacman -S networkmanager iwd
systemctl enable NetworkManager.service
exit
reboot
で再起動。再起動後、USBメモリからブートするはず。
ドライバ祭り編
pacman -S git make nano gcc
git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver
cd macbook12-spi-driver
make
mv apple-ibridge.ko apple-ib-tb.ko apple-ib-als.ko /lib/modules/*/
cd ../
git clone https://github.com/MCMrARM/mbp2018-bridge-drv.git
cd mbp2018-bridge-drv
make
mv bce.ko /lib/modules/*/
cd ../
depmod
/etc/modules-load.d/mbp.conf
を編集し、以下を追加。bce apple-ib-tb apple-ib-als
reboot
で再起動。- 再起動後、
lsmod
を実行し、上の3つがリストに入っているか確認する。
Wi-fi編
-
Mac OS側で
ioreg -l | grep C-4364
を実行。出てくる.trx
,.clmb
,.txt
ファイルのパスをメモ。 -
Max OSの
/usr/share/firmware/wifi
下にそれらのファイルがあるので、3つを圧縮してどこかにコピー。(ここでは~/wifi
とする。) -
.trx
ファイルをbrcmfmac4364-pcie.bin
.clmb
ファイルをbrcmfmac4364-pcie.clm_blob
.txt
ファイルをbrcmfmac4364-pcie.Apple Inc.-[機種ID].txt
にリネーム。
[機種ID]
は「このMacについて -> システムレポート」で出てくるMacBookPro15,1
などを入れる。 -
先ほどの3ファイルをtarで圧縮。(ここでは
~/wifi/wifi.tar
とする。) -
browser-sync start -s ~/wifi
などで~/wifi
下のファイルをLinuxと共有できるようにする。 -
Linuxに戻り、
curl -O http://[サーバのIPアドレス:ポート]/wifi.tar; tar xvf wifi.tar
でtarを解凍。 -
3ファイルを
/lib/firmware/brcm/
に移動。 -
/etc/NetworkManager/NetworkManager.conf
に以下を追加。[device] wifi.backend=iwd
-
shutdown now
感動の起動
- MacBook Proを終了し、Optionを押しながら起動。
- (多分) キーボードやTouch Barがちゃんと動いているはず。。。
参考
以下のリンクを参考にした。
https://gist.github.com/TRPB/437f663b545d23cc8a2073253c774be3
https://ichelm.hatenadiary.org/entries/2014/12/09
http://www.silex.jp/blog/wireless/2015/08/linux.html
追記
今回は3つのドライバ・カーネルパッチを導入した。主な機能は、
- linux-mbp : SSDとの通信
- macbook12-spi-driver : キーボード・Touch Barとの通信
- mbp2018-bridge-drv : T2チップとの通信
かな?
それぞれ機能がかぶさっている感じがするので、もしかすると全部を導入しなくてもいいかも。研究よろしく。
VirtualBoxでbootable USBを作るのをはやらせたい。wifi関係とかUSBキーボード用意するとかめんどくさいことをしなくて済む!!!
追記2
MacbookPro本体のSSDにインストールできたので報告。やり方はこんなかんじ。
- SSDのパーティションをMacのディスクユーティリティで編集し、100GBの領域を作り、ExFATなどでフォーマット。
- 最初の方法で作ったUSBでArchを起動。
pacman -S arch-install-scripts
でpacstrapを入れる。 fdisk /dev/nvme0n1
で先ほど作ったパーティションを確認。OSXのパーティションを間違って選ばないように注意!(このときは/dev/nvme0n1p3
だった。)mkfs.ext4 /dev/nvme0n1p3
で先ほどのパーティションをext4でフォーマットする。mount /dev/nvme0n1p3 /mnt
mkdir /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot
pacstrap /mnt base linux-mbp linux-firmware linux-mbp-headers
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt
pacman -S networkmanager iwd
systemctl enable NetworkManager.service
- 「ドライバ祭り編」「Wi-fi編」と同様にドライバをインストールし、Wi-fiのファームウェアをコピー。
pacman -S grub efibootmgr
grub-install --target=x86_64-efi --efi-directory=efi --bootloader-id=GRUB --no-bootsector --no-nvram
(注意!--no-bootsector --no-nvram
をつけないとカーネルパニック?する。)grub-mkconfig -o /boot/grub/grub.cfg
mkinitcpio -p linux-mbp
exit
reboot
で再起動。
あとはrefind https://www.rodsbooks.com/refind/installing.html を入れるなどしてgrubを起動できるようにすればOK!
直接sudo diskutil mount /dev/disk0s1
-> sudo bless --mount /Volumes/EFI --setBoot --file /Volumes/EFI/efi/GRUB/grubx64.efi --shortform
でarchのefiをblessする方法もある。
追記3
Arch起動後にUSBで外付けドライブを接続した時に、なぜか認識されない(/dev/sd*
がnot foundになる)場合がある。そういう時は、なぜかlspci
コマンドを走らせると認識されるようになる!謎。起動する前から接続していた場合は大丈夫だった。USBマウスなどはそういうことをしなくても自動的につながった。