Ubuntu on mac mini 2018 でWi-Fiを有効化

mac mini 2018(2020)に外付けSSDでUbuntu 20.04LTSをインストールしたが、
Wi-Fiが動かなかったので有効化する方法がないか調べてみた。
※mac miniの外付けディスクへのUbuntuのインストールは主に以下を参照。T2の解除、USBメモリを使う以外の手順は違う方法でやったけど。
https://blog.asial.co.jp/2019/02/05/Mac_mini(2018)にLinuxをインストールして動かす

# 環境

- mac mini 2018(2020)
- Ubuntu 20.04LTS
- 有線LANは有効
- 無線LANデバイスはBCM4364
  
```
$ lspci -vvnn | grep -A 9 Network
03:00.0 Network controller [0280]: Broadcom Inc. and subsidiaries BCM4364 802.11ac Wireless Network Adapter [14e4:4464] (rev 03)
	Subsystem: Apple Inc. BCM4364 802.11ac Wireless Network Adapter [106b:07bf]
```

# 最小手順

色々試した中で必要と思われるもの。

### kernelビルド・インストール

以下を参考に最新をビルド・インストール。
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0526?page=2


### Wi-Fiドライバーインストール

```bash
wget https://packages.aunali1.com/apple/wifi-fw/18G2022/C-4364__s-B2/lanai.trx
wget https://packages.aunali1.com/apple/wifi-fw/18G2022/C-4364__s-B2/lanai.clmb
wget https://packages.aunali1.com/apple/wifi-fw/18G2022/C-4364__s-B2/P-lanai-X3_M-HRPN_V-u__m-7.5.txt
sed -i '/btc_params82=0x400/d' P-lanai-X3_M-HRPN_V-u__m-7.5.txt
sudo cp lanai.trx /lib/firmware/brcm/brcmfmac4364-pcie.bin
sudo cp lanai.clmb /lib/firmware/brcm/brcmfmac4364-pcie.clm_blob
sudo cp P-lanai-X3_M-HRPN_V-u__m-7.5.txt /lib/firmware/brcm/brcmfmac4364-pcie.Apple\ Inc.-Macmini8\,1.txt
```

### Wi-Fiドライバー読み込み

```
sudo modprobe -r brcmfmac
sudo modprobe brcmfmac
```

### systemd-resolvedの127.0.0.53のnameserverを無効化

```
$ sudo rm -f /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
```

### Wi-Fi接続

- 画面右上の設定からWi-Fiの設定画面を開く
- 自動でスキャンしたSSIDが一覧に出てくるので接続可能なSSIDを選択
- パスワードを入力して接続

ここまででインターネット接続できるようになっていれば成功。
再起動時は毎回ドライバ読み込みが必要。
(自動で読み込ませようとしたが読み込みできても接続がうまくいかず安定しないため手動で実施が必要。)

```
sudo modprobe -r brcmfmac
sudo modprobe brcmfmac
```

# 詳細解説(メモ)

### kernelビルド・インストール

BCM4364チップを認識させるパッチがあたっている必要がありそう。
以下を参考に最新をビルド・インストールする。
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0526?page=2

### mac os上で使用されているWi-Fiドライバーを確認するコマンド。

```bash
ioreg -l | grep C-4364
```
※ファイルは/usr/share/firmware/wifi/配下にある。
ここのファイルを単純にコピーしてubuntuで読み込ませるとcrashして正常に読み込まれなかったため、実ファイルは後述のサイトのものを使用。
ただ、P-lanai-X3_M-HRPN_V-u__m-7.5.txtだけ差分を反映した。


### 使用したWi-Fiドライバー

https://packages.aunali1.com/apple/wifi-fw/18G2022/C-4364__s-B2/
lanai.trx
lanai.clmb
P-lanai-X3_M-HRPN_V-u__m-7.5.txt

### Wi-Fi driverを認識したかどうかの確認

```
sudo modprobe brcmfmac
のあと、
dmesg
[13515.162531] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[13515.162687] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[13515.165073] usbcore: registered new interface driver brcmfmac
[13515.273336] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac4364-pcie for chip BCM4364/3
[13515.847981] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac4364-pcie for chip BCM4364/3
[13515.867440] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4364/3 wl0: Oct 23 2019 08:32:36 version 9.137.11.0.32.6.36 FWID 01-671ec60c
[13515.915963] brcmfmac 0000:03:00.0 wlp3s0: renamed from wlan0
[13526.663939] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready
```

### 接続

画面右上のメニューからWi-Fiの設定を選び、接続可能なSSIDを選択、パスワードを入力して接続。
これで無線LANルーターからIPアドレスが割り当てられれば無線接続はOK。
ただ、これだけでは自分が試したときはDNSがうまく機能せず、インターネットできず。
※IPアドレスの直打ちでのサイト閲覧や、ルーターの設定ページなどは見えたため、Wi-Fiドライバーの設定は問題ないと判断。DNSの問題と想定。

DNSの問題はsystemd-resolvedの127.0.0.53が悪さしてそうだったので無効化。

```
$ sudo rm -f /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
```

```
$ ip a
5: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 3c:22:fb:1e:4d:de brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.9/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp3s0

$ iwconfig
wlp3s0    IEEE 802.11  ESSID:"elecom5g-ssid"  
          Mode:Managed  Frequency:5.24 GHz  Access Point: XX:XX:XX:XX:XX:XX   
          Bit Rate=1.3 Gb/s   Tx-Power=31 dBm   

$ ip route
default via 192.168.1.1 dev wlp3s0 proto dhcp metric 600 
169.254.0.0/16 dev wlp3s0 scope link metric 1000 
192.168.1.0/24 dev wlp3s0 proto kernel scope link src 192.168.1.9 metric 600 

$ dig www.google.com
;; ANSWER SECTION:
www.google.com.		264	IN	A	172.217.175.100
```

やっとネット接続できた。

# 他に試したこと(たぶん不要)

- 最新kernelソース取得、ビルド、インストール
  (CONFIG_MODULE_SIG=n、CONFIG_MODULE_SIG_ALL=n もセット)
- `sudo apt install firmware-b43-installer`
- `wget http://lwfinger.com/b43-firmware/broadcom-wl-5.100.138.tar.bz2
`
- `sudo b43-fwcutter -w /lib/firmware broadcom-wl-5.100.138/linux/wl_apsta.o 
`
- `sudo apt install bcmwl-kernel-source`

# 途中で目にした略語、用語的なものなど

- mac mini 8.1 = mac mini 2018
- MBP = MacBookPro
- lanai = 謎。mac mini 2018向けWi-Fiドライバーのコードネーム？

Bluetoothはたぶん最初から動いていた。
あとからMagic keyboardをペアリングして動いたが、LinuxではWindows向けキーボードのほうが使いやすい。

# 参考サイト

・使用したwifi driver情報
https://github.com/mikeeq/mbp-fedora-kernel/blob/v5.6-f32/README.md
https://packages.aunali1.com/apple/wifi-fw/18G2022/C-4364__s-B2/
https://github.com/mikeeq/mbp-fedora-kernel/issues/3

・wifi driverインストール後、dns解決できない問題の対策
http://next49.hatenadiary.jp/entry/20190418/1555568222

・wifi driverが動かないときに当初カーネル問題かと思ってカーネルビルドしてみたときに参考。
https://stackoverflow.com/questions/24975377/kvm-module-verification-failed-signature-and-or-required-key-missing-taintin
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0526?page=2