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-mbppacman -S grub efibootmgrgrub-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 iwdsystemctl enable NetworkManager.serviceexitrebootで再起動。再起動後、USBメモリからブートするはず。
ドライバ祭り編
pacman -S git make nano gccgit clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-drivercd macbook12-spi-drivermakemv apple-ibridge.ko apple-ib-tb.ko apple-ib-als.ko /lib/modules/*/cd ../git clone https://github.com/MCMrARM/mbp2018-bridge-drv.gitcd mbp2018-bridge-drvmakemv bce.ko /lib/modules/*/cd ../depmod/etc/modules-load.d/mbp.confを編集し、以下を追加。bce apple-ib-tb apple-ib-alsrebootで再起動。- 再起動後、
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 /mntmkdir /mnt/bootmount /dev/nvme0n1p1 /mnt/bootpacstrap /mnt base linux-mbp linux-firmware linux-mbp-headersgenfstab -U /mnt >> /mnt/etc/fstabarch-chroot /mntpacman -S networkmanager iwdsystemctl enable NetworkManager.service- 「ドライバ祭り編」「Wi-fi編」と同様にドライバをインストールし、Wi-fiのファームウェアをコピー。
pacman -S grub efibootmgrgrub-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.cfgmkinitcpio -p linux-mbpexitrebootで再起動。
あとは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マウスなどはそういうことをしなくても自動的につながった。