MacBook Pro (May 2019)にUbuntuを入れる その1 Index 目次
The Appeal of Macbook 魅力 以前までは10年以上前に使っていたMacBook Air(11”, Mid 2011)を使っていた。 お金もなかったので中古で購入。OSもMac OS Xと呼ばれていた時代。 バージョンはMountain Lionまで入れたかな? そうそう当時はネコ科動物の名前を当てていた。懐かしい。 さすがにもうバッテリもヘタってたり、MagSafeのアダプタが使いづらかったり WiFiが802.11nまでしか対応してなかったり、容量も不安になってきたので。
今回新しくMacBook Pro (13”, 2019)を中古で手に入れた。 現在はAppleシリコン製CPUが主流となっているが、Intel CPU搭載のシリーズ後継機種。 キーボードの上部にタッチバーと、指紋センサーを兼ねている電源ボタンがある。 このタッチバーが曲者で、シチュエーションに応じていろんなボタンを便利に表示させるもので、これが本当に厄介。 コーダやSIerにとってFunctionキーやESCキーが打鍵感の皆無なタッチパネルになっていることはつらい。 特に致命的はESCキーで、VimmerやEmacsenにとって死活問題。 コマンドモードに戻るのに慣れない Ctrl + [ を押したり、M-xを押すのに Alt + x を押したりと不便。 指にフィードバックがないのでブラインドタッチも慣れが必要だし、あと普通にバッテリ浪費している、本当に無用の長物。 現に今のモデルには非搭載。黒歴史と言っていい。
それ以外は特に不満はない。Thunderbolt 3ポートが4つもついているし、Ratinaディスプレイだし、キーピッチも好み。 ということで、この端末を手に入れた。
ただmacOSを動かすには若干非力なので、DebianかUbuntuを入れるって話。 それでも中古なので、バッテリがかなり心配。 新しいのに換装したほうが良いのかもしれない。やり方知らないで無責任に書いてるけど。
あ、あと、SecureBootをOFFにするので、そういうの気になる人とかビジネス用途の人は止めた方がよい。
Twists and Turns はまりまくりまくりすてぃ 簡単に行くもんだと高を括ってた。ところがさすがAppleのノート、一癖あるのがわかってくる。 今回何度もスクラップ&ビルドを繰り返してみてようやく分かった。 なので、2度と繰り返さないようにここに備忘として残す。
ハマったポイントは大まかに4つ
キーボード・トラックパッドの認識
タッチバーの認識
無線LANデバイスの認識
カメラの認識
そしてまだ完璧には構築はできておらず、課題が残っている。 ま、それを踏まえて、さてやっていこう。
大きく工程としては3つ
USBブート
Ubuntuインストール
Macbook用調整
Gave up Debian デビアン失敗 Ubuntu構築を紹介する前に、いろいろ失敗したのでちょっと紹介。 元よりDebianが好きだったので、まずはDebianを入れてみた。 USBBootディスクも持っていたので、すぐにでも始められたから。
結果からいうとうまく行かなかった。 今思うとカーネルとドライバさえ入れられれば、Debianでも動いたんじゃないか説。 ただ、本記事ははそこまで突っ込んでいないのであしからず。 トライしてみたことは、bookwormを入れて、apple-bce、apple_ibridgeをいれて、純正WiFiファームウェアからWiFiインタフェースを有効にできなくて頓挫した。(のちに失敗した理由が分かった)
てことで、Ubuntuを入れることに。 あまりUbuntuに詳しくないので、調べて22.04 Jammyというのが目に入ったのでそれにする。
Installation 構築 必要なものを全部書いていく。
The Necessities
Macbook Pro
USBメモリ 64GB
USB TypeA(メス) <-> TypeC(オス)変換アダプタ
USB接続マウス
USB接続キーボード
USB接続イーサネットアダプタ
インターネット環境
楽に構築したい場合は最低限これらが必要になる。
Creating Boot Disk 家にUbuntuのLive USBディスクはないので、それを作るところから。 用意するものはこれ。
Desktop版のISOイメージをダウンロードして、Rufusで焼けば良い。 はい、終わり。 つぎー。
Installing Ubuntu あ、そうだ。大事なこと書くの忘れてた。 私はプレインストールされていたmacOSには未練がないので、全ディスクをUbuntuに用意することに。Dual bootしても面白いけどね。 ただ、他にもMacは保有しているので今回は専用機とする。 というわけで、さらばmacOS。こんにちはUbuntuちゃん。
さて、USB Bootするには設定を変える必要がある。 ここらへんのMacbookからはセキュリティ目的のT2セキュリティチップというのが搭載されているので、その設定を変更して上げる必要がある。 x86マシンでいうところのBIOSやらUEFIを守るあれね。
Configuring Boot Security Settings 電源が落ちている状態から、右上の電源ボタンを押す。 すぐに、Command⌘ + k を押し続ける。 するとmacOS復旧用の画面が表示される、 ここで起動セキュリティユーティリティを起動して、「安全な起動」を「セキュリティなし」に、「許可する起動メディア」を「外部メディアまたはリムーバブルメディアからの起動を許可」に設定する。 詳しくはApple T2 セキュリティチップを搭載した Mac の起動セキュリティユーティリティについて - Apple サポート (日本) に書いてある。
Booting from USB さてやっとUSBブートできる。 Macbook ProにUSB接続イーサネットとUSBメモリ、USBキーボード、USBマウスを挿して(ここ大事)、電源が落ちている状態で、 MacbookのキーボードのOption⌥ を押しながら起動すると、起動メディアを選択する画面が出てくるので、EFIって表示されているオレンジ色(?)のディスクを選択して、「↑」ボタンをクリックする。
USBからの起動がうまく行くと起動メニューが表示される。ここから先はしばらくUSBキーボードとUSBマウスしか動かないので注意。 Try Ubuntuを選んでデスクトップが表示されるまで待つ。 んで、ここからはUbuntuのインストールウィザードになるのだが、ここは割愛。 ポイントは、サードパーティ製ドライバ用リポジトリもAPTに追加しておくこと、SSDのディスク全体をUbuntuで使うように設定すること。 インストールが終わったら、USBメモリを抜いて再起動。
Booting Ubuntu うぶんつすたーてぃん
再起動が終わったタイミングで、Ubuntuのきれいなデスクトップが見えているはずだが、このままでは
WiFiが使えない
キーボードが使えない
トラックパッドが使えない
タッチバーが使えない
カメラが使えない
Bluetoothは使えそう
指紋認証使えない
A の左隣がCtrlじゃない(個人的な好み)
こんな状態。険しい道のりにみえるが、意外に簡単に解決する。(それもそのはず、何度も失敗しているから) では、ひとつずつやっつけていく。
Up-to-dating まずは何はともあれ最新化。
$ apt-get update $ apt-get -y upgrade $ apt-get -y install git curl gnupg make python3 libinput-tools python3-gi python-gobject meson gettext dmg2img
カーネルやその他のソフトが最新化される。 git 、cURL、GnuPG、makeなどはこのあとに必要なのでここで入れておく。 はい、これで一回目の再起動。
Enabling keyboard, trackpad and touchbar using linux-t2-lts t2linux/T2-Debian-and-Ubuntu-Kernel: Ubuntu Kernel for T2 Macs. を参考にカーネルを差し替える。 README.mdを見ればわかるがさらっと紹介。 一番最初のCODENAMEの設定は、導入バージョンが22.04なのでjammyを設定。
$ CODENAME=jammy $ curl -s --compressed "https://adityagarg8.github.io/t2-ubuntu-repo/KEY.gpg" |\ gpg --dearmor |\ sudo tee /etc/apt/trusted.gpg.d/t2-ubuntu-repo.gpg >/dev/null$ sudo curl -s --compressed -o /etc/apt/sources.list.d/t2.list "https://adityagarg8.github.io/t2-ubuntu-repo/t2.list" $ echo "deb [signed-by=/etc/apt/trusted.gpg.d/t2-ubuntu-repo.gpg] https://github.com/AdityaGarg8/t2-ubuntu-repo/releases/download/${CODENAME} ./" |\ sudo tee -a /etc/apt/sources.list.d/t2.list$ sudo apt update $ sudo apt install linux-t2-lts
これでまた、新しいカーネルが追加されることに。 その新しいカーネル(6.6.46-1-t2-jammy)はapple-bceとapple-ibrigdeというドライバが自動的に導入されるので、キーボードとトラックパッドとタッチバーが使えるようになるはず。 再起動後に晴れてUSBキーボードとUSBマウスを抜いてもよい。 ただ、このままだとgrubは今のカーネルをブートするはずなので、それをgrub.cfgを修正する必要があるが、ここでは詳しいことは割愛。 ここでは、新カーネルの起動順序の変更を行ったこととして、2回目の再起動。
Improvement of Trackpad ただこのままではトラックパッドの動作が非常に怪しい。 なんというか反応が鈍いような。そこで次にトラックパッドを少し直していく。 トラックパッドを調整していく。 使用者(私)をinputグループに追加する。
$ sudo gpasswd -a $USER input
ここで一度今のログインセッションを抜けて再度ログインするか、再起動しておく。
$ mkdir work && cd work $ git clone https://github.com/bulletmark/libinput-gestures.git $ cd libinput-gestures $ sudo make install $ sudo ./libinput-gestures-setup install
んでサービス起動。
libinput-gestures-setup start libinput-gestures-setup autostart
これでデフォルトの設定ファイルでサービスが起動しているはず。 設定ファイルは /etc/libinput-gestures.conf に保存されている。 仕組みとしてはトラックパッドのジェスチャーを受け取って、xdotoolに渡している。 んで、個人用に設定ファイルを残したい場合は、~/.config/libinput-gestures.conf 最後に設定用のツールを導入する。
$ git clone https://gitlab.com/cunidev/gestures $ cd gestures $ meson build --prefix=/usr $ ninja -C build $ sudo ninja -C build install $ cp /etc/libinput-gestures.conf ~/.config/ $ cd ..
インストールが完了すると、アプリ一覧にGesturesが追加されるので、
このツールを使うとマルチタッチのいろんなジェスチャをカスタマイズできる。
Enabling Wifi Network Interface 一番はまったのがここ。 うまくいったときは思わず叫んでしまった。 ただここでは淡々と解説する。(なぜなら何度も失敗しているので)
これからやることを軽く説明する。
macOSの純正ファームウェアを適切に 取得する。(ここ間違えると何時までも有効にならない沼へ)
起動しているカーネルが参照しているファームウェアディレクトリにファームウェアファイルを適切な ファイル名で保存する。(ここ間違えると何時までも有効にならない沼へ)
そう、ファームウェアを取得できればこちらの勝ちってこと。
Downloading Recovery OS OSX-KVM/fetch-macOS-v2.py · GitHub にて、Pythonスクリプトを取得する。 このスクリプトを使って、RecoveryOS(ここではVentura)のディスクイメージをダウンロードする。 んで、そのままの勢いでディスクイメージをマウントする。
$ python3 fetch-macOS-v2.py 1. High Sierra (10.13) 2. Mojave (10.14) 3. Catalina (10.15) 4. Big Sur (11.7) 5. Monterey (12.6) 6. Ventura (13) - RECOMMENDED 7. Sonoma (14) Choose a product to download (1-7): 6 $ ls BaseSystem.chunklist BaseSystem.dmg gestures libinput-gestures $ dmg2img -i BaseSystem.dmg BaseSystem.img $ ls BaseSystem.chunklist BaseSystem.dmg BaseSystem.img gestures libinput-gestures $ sudo losetup --find --show ./BaseSystem.img /dev/loop14 $ sudo partprobe /dev/loop14 (ここでUbuntuがloopデバイスを認識して、Dockにドライブアイコンが表示されるので、ドライブをダブルタップ) $ mount |grep $USER /dev/loop14p1 on /media/$USER /macOS Base System type hfsplus (rw,nosuid,nodev,relatime,umask =22,uid=1000,gid=1000,nls=utf8,uhelper=udisk2) $
Obtaining Firmware Files さてリカバリディスクから何を取得するかは、ブートシーケンスでカーネルが教えてくれているはず。 確認してみる。
$ sudo grep -i -E "(error|failed)" /var/log/syslog Aug 18 21:32:45 ubuntu kernel: [ 7.925150] brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4364b2-pcie.apple,maui-HRPN-u-7.5-X3.bin failed with error -2 Aug 18 21:32:45 ubuntu kernel: [ 7.925351] brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4364b2-pcie.apple,maui-HRPN-u-7.5.bin failed with error -2 Aug 18 21:32:45 ubuntu kernel: [ 7.925384] brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4364b2-pcie.apple,maui-HRPN-u.bin failed with error -2 Aug 18 21:32:45 ubuntu kernel: [ 7.925415] brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4364b2-pcie.apple,maui-HRPN.bin failed with error -2 Aug 18 21:32:45 ubuntu kernel: [ 7.925445] brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4364b2-pcie.apple,maui-X3.bin failed with error -2 Aug 18 21:32:45 ubuntu kernel: [ 7.925473] brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4364b2-pcie.apple,maui.bin failed with error -2 Aug 18 21:32:45 ubuntu kernel: [ 7.925499] brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4364b2-pcie.bin failed with error -2 Aug 18 21:32:45 ubuntu kernel: [ 7.925502] brcmfmac 0000:01:00.0: brcmf_pcie_setup: Dongle setup failed $
ロード出来ていないファームウェアの製品名とコードネームから、取得すべきファイル名を推測する。 ここではbrcmfmac4364b2-pcie.apple,maui-HRPN-u-7.5-X3 というのが分かる。 キーワードとしては、brcmfmac、4364、maui、HRPN、-u、X3あたり。 この情報を基にリカバリディスク内で探してみる。
$ cd /media/$USER /macOS\ Base\ System $ find . -print 2>/dev/null |grep 4364 |grep maui |grep X3 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X3.clmb ./usr/share/firmware/wifi/C-4364__s-B2/maui-X3.trx ./usr/share/firmware/wifi/C-4364__s-B2/maui-X3.txcb ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X3_M-HRPN_V-m__m-7.5.txt ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X3_M-HRPN_V-m__m-7.7.txt ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X3_M-HRPN_V-u__m-7.5.txt $
いくつか見つかる。 ファイルの種類には以下のものがあることがわかる。
trxファイル (Firmware)
txcbファイル (TxCap)
clmbファイル (Regulatory)
txtファイル (NVRAM)
これらファイルを適切に取得する。 シンボリックリンクになっているものがあるので、念の為実ファイルをコピーすることにする。
$ find . -print 2>/dev/null |grep "C-4364__s-B2" |grep maui |while read i;do ls -l $i ;done lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-ID.clmb -> maui.clmb lrwxr-xr-x 1 $USER $USER 8 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-ID.trx -> maui.trx lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-ID.txcb -> maui.txcb lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X0.clmb -> maui.clmb lrwxr-xr-x 1 $USER $USER 8 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X0.trx -> maui.trx lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X0.txcb -> maui.txcb lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X2.clmb -> maui.clmb lrwxr-xr-x 1 $USER $USER 8 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X2.trx -> maui.trx lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X2.txcb -> maui.txcb lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X3.clmb -> maui.clmb lrwxr-xr-x 1 $USER $USER 8 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X3.trx -> maui.trx lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X3.txcb -> maui.txcb -rw-r--r-- 1 $USER $USER 33226 1月 6 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui.clmb lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui.trx -> ekans.trx -rw-r--r-- 1 $USER $USER 721 1月 6 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui.txcb lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-ID_M-HRPN_V-m__m-7.5.txt -> P-maui_M-HRPN_V-m__m-7.5.txt lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-ID_M-HRPN_V-m__m-7.7.txt -> P-maui_M-HRPN_V-m__m-7.7.txt lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-ID_M-HRPN_V-u__m-7.5.txt -> P-maui_M-HRPN_V-u__m-7.5.txt lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X0_M-HRPN_V-m__m-7.5.txt -> P-maui_M-HRPN_V-m__m-7.5.txt lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X0_M-HRPN_V-m__m-7.7.txt -> P-maui_M-HRPN_V-m__m-7.7.txt lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X0_M-HRPN_V-u__m-7.5.txt -> P-maui_M-HRPN_V-u__m-7.5.txt lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X2_M-HRPN_V-m__m-7.5.txt -> P-maui_M-HRPN_V-m__m-7.5.txt lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X2_M-HRPN_V-m__m-7.7.txt -> P-maui_M-HRPN_V-m__m-7.7.txt lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X2_M-HRPN_V-u__m-7.5.txt -> P-maui_M-HRPN_V-u__m-7.5.txt lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X3_M-HRPN_V-m__m-7.5.txt -> P-maui_M-HRPN_V-m__m-7.5.txt lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X3_M-HRPN_V-m__m-7.7.txt -> P-maui_M-HRPN_V-m__m-7.7.txt lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X3_M-HRPN_V-u__m-7.5.txt -> P-maui_M-HRPN_V-u__m-7.5.txt -rw-r--r-- 1 $USER $USER 12560 8月 6 2021 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui_M-HRPN_V-m__m-7.5.txt -rw-r--r-- 1 $USER $USER 12964 8月 6 2021 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui_M-HRPN_V-m__m-7.7.txt -rw-r--r-- 1 $USER $USER 12905 8月 6 2021 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui_M-HRPN_V-u__m-7.5.txt $
見るとシンボリックリンクが貼られている。 先程のキーワードを基に以下のファイルとした。
P-maui_M-HRPN_V-u__m-7.5.txt
maui.clmb
ekans.trx
maui.txcb
この4ファイルを以下のファイル名で保存する。なぜこのファイル名かというと、何度も失敗してはログファイルを確認して分かったから。
P-maui_M-HRPN_V-u__m-7.5.txt -> brcmfmac4364b2-pcie.txt
maui.clmb -> brcmfmac4364b2-pcie.clm_blob
ekans.trx -> brcmfmac4364b2-pcie.apple,maui-HRPN-u-7.5-X3.bin
maui.txcb -> brcmfmac4364b2-pcie.txcap_blob
こんな感じね。
$ sudo cp ./usr/share/firmware/wifi/C-4364__s-B2/P-maui_M-HRPN_V-u__m-7.5.txt /lib/firmware/brcm/ $ sudo cp ./usr/share/firmware/wifi/C-4364__s-B2/maui.clmb /lib/firmware/brcm/ $ sudo cp ./usr/share/firmware/wifi/C-4364__s-B2/ekans.trx /lib/firmware/brcm/ $ sudo cp ./usr/share/firmware/wifi/C-4364__s-B2/maui.txcb /lib/firmware/brcm/ $ cd /lib/firmware/brcm $ sudo ln -s P-maui_M-HRPN_V-u__m-7.5.txt brcmfmac4364b2-pcie.txt $ sudo ln -s maui.clmb brcmfmac4364b2-pcie.clm_blob $ sudo ln -s ekans.trx brcmfmac4364b2-pcie.apple,maui-HRPN-u-7.5-X3.bin $ sudo ln -s maui.txcb brcmfmac4364b2-pcie.txcap_blob
これで再起動。
画面右上に電波のマークが表示されていれば、WiFiインタフェースが有効になっているはず。 USB接続のイーサネットアダプタは外して良くなる。
Give a Rest 今回はここまで 長くなったのでここでやめておく。 かなり疲れた。 次は、カメラや指紋認証にトライしてみる。
コメント: