fedoraをアップグレードしたらwifiに繋がらなくなったので34まで一気にアップグレードした

とっくにサポートが切れているfedora31を32にアップグレードしてみたところ、カーネルのバージョンも上がってまたもやwifiに繋がらなくなってしまいました。解決していこうと思います。

ソースコードをビルドして繋ぐ

私の MacBook Air に付いてる無線lanのハードウェアデバイスは以下です。

[root@localhost ~]# lshw -class network
  *-network                 
       description: Wireless interface
       product: BCM4360 802.11ac Wireless Network Adapter
       vendor: Broadcom Inc. and subsidiaries
今入っているwifiのドライバをビルドしてみて、何で失敗しているのかを確認します。
[root@localhost ~]# akmods
Checking kmods exist for 5.10.22-100.fc32.x86_64           [  OK  ]
Building and installing wl-kmod                            [失敗]
Building rpms failed; see /var/cache/akmods/wl/6.30.223.271-32-for-5.10.22-100.fc32.x86_64.failed.log for details

Hint: Some kmods were ignored or failed to build or install.
You can try to rebuild and install them by by calling
'/usr/sbin/akmods --force' as root.
エラーの詳細はログを見るように書いてあるので、ログを開いて確認します。
[root@localhost ~]#vim /var/cache/akmods/wl/6.30.223.271-32-for-5.10.22-100.fc32.x86_64.failed.log
...
2021/03/17 21:56:24 akmodsbuild: /tmp/akmodsbuild.6w8AdatF/BUILD/wl-kmod-6.30.223.271/_kmod_build_5.10.22-100.fc32.x86_64/src/wl/sys/wl_linux.c:1662:6: error: implicit declaration of function 'segment_eq' [-Werror=implicit-function-declaration]
2021/03/17 21:56:24 akmodsbuild: 1662 |  if (segment_eq(get_fs(), KERNEL_DS))
2021/03/17 21:56:24 akmodsbuild: |      ^~~~~~~~~~
2021/03/17 21:56:24 akmodsbuild: /tmp/akmodsbuild.6w8AdatF/BUILD/wl-kmod-6.30.223.271/_kmod_build_5.10.22-100.fc32.x86_64/src/wl/sys/wl_linux.c:1662:17: error: implicit declaration of function 'get_fs'; did you mean 'sget_fc'? [-Werror=implicit-function-declaration]
...

以下のサイトによると、新しいカーネルで削除されたマクロが使われているため、そのままだとエラーとなってビルドできないようです。

📕FS#68030 - [broadcom-wl-dkms] Doesn’t compile with kernel >= 5.9

前回はこちらのgithubのソースコードにお世話になっていて、上記問題への対応もされているのでgit pullしてからreadmeに書いてある手順通りにインストールしました。readmeのCompile and installでManuallyのほうの手順を実行すると、無事に繋がります。

fedora30のソフトウェアアップデートをしたらwifiに繋がらなくなった

カーネルのバージョンが上がって、使われないメソッドが出てきたのが原因のようです。

dnf install でドライバをインストールして繋ぐ

ずっとこちらのgithubのソースコードに頼っているので、今日はもうちょっと別の解決方法を考えてみます。

個人じゃなくて公式のようなところから取ってこれないかな。お世話になっているgithubのreadmeの最後のほうを見ていると、参考になりそうなリンクがあったので、その中のrpmfusionのリンクを見てみました。ここならdnfのリポジトリを登録してあるから取ってこれそう。
最初に参照したバグの報告のサイト📕FS#68030 - [broadcom-wl-dkms] Doesn’t compile with kernel >= 5.9でも、rpmfusionにドライバがアップされてるらしいことが書いてありました。fc34と書いてあるので、この問題へ対応されたドライバをdnf installしたい場合は、fedora34にしないと駄目そうなのかな🤔

現行バージョンで確認したいので、一度ドライバを削除して、dnf installでドライバを入れてみます。

ドライバは一旦消しちゃう(消し方がこれでいいのかはわからないので参考にしないでほしい
modprobe -r wl
rm -f /lib/modules/5.10.22-100.fc32.x86_64/kernel/drivers/net/wireless/wl.ko 

これでwifiが使えなくなりました。

一応ドライバが残ってないか一通り確認。(実行結果は省略)
[root@localhost ~]# lsmod | grep wl
[root@localhost ~]# rpm -qa | grep wl
[root@localhost ~]dnf list installed |grep wl
dnf installでドライバをインストールします。
[root@localhost ~]# dnf install akmod-wl
ドライバをビルドしてみると、はじめと同じエラーが出ていました。
今回の修正が入ってない。
[root@localhost ~]# akmods
fedora33、fedora34へと順番にアップグレードしてから同じようにドライバをインストールします。

[root@localhost ~]# dnf install akmod-wl
Copr repo for wpa_supplicant owned by dcaratti  158  B/s | 341  B     00:02    
Errors during downloading metadata for repository 'copr:copr.fedorainfracloud.org:dcaratti:wpa_supplicant':
  - Status code: 404 for https://copr-be.cloud.fedoraproject.org/results/dcaratti/wpa_supplicant/fedora-34-x86_64/repodata/repomd.xml (IP: 52.44.175.77)
Error: repo 'copr:copr.fedorainfracloud.org:dcaratti:wpa_supplicant' のメタデータのダウンロードに失敗しました : Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
Fedora 34 openh264 (From Cisco) - x86_64        1.2 kB/s | 2.5 kB     00:02    
Fedora Modular 34 - x86_64                      2.3 MB/s | 4.8 MB     00:02    
Fedora Modular 34 - x86_64 - Updates            202  B/s | 257  B     00:01    
Fedora Modular 34 - x86_64 - Test Updates       773 kB/s | 1.6 MB     00:02    
Fedora 34 - x86_64 - Test Updates               3.9 MB/s |  14 MB     00:03    
Fedora 34 - x86_64 - Updates                    392  B/s | 257  B     00:00    
Fedora 34 - x86_64                              840 kB/s |  73 MB     01:28    
RPM Fusion for Fedora 34 - Free - Test Updates  3.7 kB/s |  32 kB     00:08    
RPM Fusion for Fedora 34 - Free                 175 kB/s | 941 kB     00:05    
RPM Fusion for Fedora 34 - Nonfree - Test Updat 700  B/s | 3.6 kB     00:05    
RPM Fusion for Fedora 34 - Nonfree               70 kB/s | 243 kB     00:03    
リポジトリーを無視します: copr:copr.fedorainfracloud.org:dcaratti:wpa_supplicant
依存関係が解決しました。
================================================================================
 パッケージ     Arch      バージョン                 リポジトリー         サイズ
================================================================================
インストール:
 akmod-wl       x86_64    6.30.223.271-37.fc34       rpmfusion-nonfree    5.5 M
依存関係のインストール:
 broadcom-wl    noarch    6.30.223.271-16.fc34       rpmfusion-nonfree     24 k

トランザクションの概要
================================================================================
インストール  2 パッケージ

ダウンロードサイズの合計: 5.5 M
インストール後のサイズ: 5.5 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/2): broadcom-wl-6.30.223.271-16.fc34.noarch.  20 kB/s |  24 kB     00:01    
(2/2): akmod-wl-6.30.223.271-37.fc34.x86_64.rpm 234 kB/s | 5.5 MB     00:23    
--------------------------------------------------------------------------------
合計                                            224 kB/s | 5.5 MB     00:25     
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1 
  インストール中   : broadcom-wl-6.30.223.271-16.fc34.noarch                1/2 
  インストール中   : akmod-wl-6.30.223.271-37.fc34.x86_64                   2/2 
  scriptletの実行中: akmod-wl-6.30.223.271-37.fc34.x86_64                   2/2 
  検証             : akmod-wl-6.30.223.271-37.fc34.x86_64                   1/2 
  検証             : broadcom-wl-6.30.223.271-16.fc34.noarch                2/2 

インストール済み:
  akmod-wl-6.30.223.271-37.fc34.x86_64  broadcom-wl-6.30.223.271-16.fc34.noarch 

完了しました!

再起動すると繋がりました🤗

使ったコマンド

コマンド 説明
lsmod | grep wl ロードされてるか
dmesg|grep wl 起動時のメッセージ
dnf list installed |grep wl akmod-wlをインストールしてないか
modprobe -r 依存関係を考慮して削除

参考

📕kmod-wl - Metapackage which tracks in wl kernel module for newest kernel

📕Linuxにおける無線LANのソフト構成 cfg80211ついて