Macbook Pro 2018でArch Linuxを動かすことに成功!!!

Macbook Pro 2018でArch Linuxを動かすことに成功!!!

大変だった。

Macbook Proの中にインストールもできるけど、今回はUSBにインストールした。

方法

やる際は自己責任でお願いします。。。。

仮想マシン準備編

  1. arch linux の iso をダウンロード
  2. VirtualBoxをインストール
  3. VirtualBox extension pack をインストール
  4. VirtualBoxで64bit仮想マシンを作成
  5. USBメモリをMacbook Proに挿す
  6. VirtualBoxの仮想マシン設定で、ポート -> USBにいき、USB 3.0コントローラを有効にする。さらに、USBデバイスフィルターに先ほど刺したUSBメモリを登録。システム -> EFIを有効化をオンにする。
  7. 仮想マシンを起動。arch linux の iso を設定する。

パーティション編(arch-chrootまで編)

  1. 起動したら、/etc/pacman.confに以下を追加(nanoなどで編集)

    [mbp]
    Server = https://packages.aunali1.com/archlinux/$repo/$arch
    SigLevel = TrustAll
    

    以降は、https://wiki.archlinux.org/index.php/Installation_guideに従って設定する。キーボード・タイムゾーン・言語・パスワードの設定は省く。

  2. fdisk /dev/sdbでUSBのパーティションを設定する。GUID Partition Tableで初期化し、まず最初に300MiB ~ 500MiBくらいのパーティション(/dev/sdb1)を作成し、次に余った領域でパーティション(/dev/sdb2)を作成する。最初のパーティションのtypeはEFI Systemに設定する。

  3. mkfs.fat -F 32 /dev/sdb1

  4. mkfs.ext4 /dev/sdb2

  5. mount /dev/sdb2 /mnt

  6. mkdir /mnt/efi

  7. mount /dev/sdb1 /mnt/efi

  8. pacstrap /mnt base linux-mbp linux-firmware linux-mbp-headers

  9. genfstab -U /mnt >> /mnt/etc/fstab

  10. arch-chroot /mnt

ブートローダー編

  1. mkinitcpio -p linux-mbp
  2. pacman -S grub efibootmgr
  3. grub-install --target=x86_64-efi --efi-directory=efi --bootloader-id=GRUB
  4. /efi/GRUB/grubx64.efi/efi/boot/bootx64.efiにコピー
  5. grub-mkconfig -o /boot/grub/grub.cfg /efi/boot/grub.cfgと/efi/GRUB/grub.cfgにも生成した方がいいかも。
  6. pacman -S networkmanager iwd
  7. systemctl enable NetworkManager.service
  8. exit
  9. rebootで再起動。再起動後、USBメモリからブートするはず。

ドライバ祭り編

  1. pacman -S git make nano gcc
  2. git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver
  3. cd macbook12-spi-driver
  4. make
  5. mv apple-ibridge.ko apple-ib-tb.ko apple-ib-als.ko /lib/modules/*/
  6. cd ../
  7. git clone https://github.com/MCMrARM/mbp2018-bridge-drv.git
  8. cd mbp2018-bridge-drv
  9. make
  10. mv bce.ko /lib/modules/*/
  11. cd ../
  12. depmod
  13. /etc/modules-load.d/mbp.confを編集し、以下を追加。
    bce
    apple-ib-tb
    apple-ib-als
    
  14. rebootで再起動。
  15. 再起動後、lsmodを実行し、上の3つがリストに入っているか確認する。

Wi-fi編

  1. Mac OS側でioreg -l | grep C-4364を実行。出てくる.trx, .clmb, .txtファイルのパスをメモ。

  2. Max OSの/usr/share/firmware/wifi下にそれらのファイルがあるので、3つを圧縮してどこかにコピー。(ここでは~/wifiとする。)

    1. .trxファイルをbrcmfmac4364-pcie.bin
    2. .clmbファイルをbrcmfmac4364-pcie.clm_blob
    3. .txtファイルをbrcmfmac4364-pcie.Apple Inc.-[機種ID].txt

    にリネーム。[機種ID]は「このMacについて -> システムレポート」で出てくるMacBookPro15,1などを入れる。

  3. 先ほどの3ファイルをtarで圧縮。(ここでは~/wifi/wifi.tarとする。)

  4. browser-sync start -s ~/wifi などで~/wifi下のファイルをLinuxと共有できるようにする。

  5. Linuxに戻り、curl -O http://[サーバのIPアドレス:ポート]/wifi.tar; tar xvf wifi.tarでtarを解凍。

  6. 3ファイルを/lib/firmware/brcm/に移動。

  7. /etc/NetworkManager/NetworkManager.confに以下を追加。

    [device]
    wifi.backend=iwd
    
  8. shutdown now

感動の起動

  1. MacBook Proを終了し、Optionを押しながら起動。
  2. (多分) キーボードや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にインストールできたので報告。やり方はこんなかんじ。

  1. SSDのパーティションをMacのディスクユーティリティで編集し、100GBの領域を作り、ExFATなどでフォーマット。
  2. 最初の方法で作ったUSBでArchを起動。pacman -S arch-install-scriptsでpacstrapを入れる。
  3. fdisk /dev/nvme0n1で先ほど作ったパーティションを確認。OSXのパーティションを間違って選ばないように注意!(このときは/dev/nvme0n1p3だった。)
  4. mkfs.ext4 /dev/nvme0n1p3で先ほどのパーティションをext4でフォーマットする。
  5. mount /dev/nvme0n1p3 /mnt
  6. mkdir /mnt/boot
  7. mount /dev/nvme0n1p1 /mnt/boot
  8. pacstrap /mnt base linux-mbp linux-firmware linux-mbp-headers
  9. genfstab -U /mnt >> /mnt/etc/fstab
  10. arch-chroot /mnt
  11. pacman -S networkmanager iwd
  12. systemctl enable NetworkManager.service
  13. 「ドライバ祭り編」「Wi-fi編」と同様にドライバをインストールし、Wi-fiのファームウェアをコピー。
  14. pacman -S grub efibootmgr
  15. grub-install --target=x86_64-efi --efi-directory=efi --bootloader-id=GRUB --no-bootsector --no-nvram(注意!--no-bootsector --no-nvramをつけないとカーネルパニック?する。)
  16. grub-mkconfig -o /boot/grub/grub.cfg
  17. mkinitcpio -p linux-mbp
  18. exit
  19. 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マウスなどはそういうことをしなくても自動的につながった。