2025-01-19

【LMDE】r8168-dkms ドライバーで敗北

もう迷走していますね。

始まりは Testing リポジトリとの決別

Debian 12 ベースの LMDE 6 を使い始めた時期は新しいバージョンの Mesa をインストールしたくて Testing リポジトリからいくつかのパッケージを積極的にインストールしていたのですが、時間が経つに連れて bookworm-backports リポジトリにも新しいバージョンのパッケージが配布されるようになってきました。

Testing リポジトリはもう使わないようにしようと考え出したのです。

ちょうど Linux Mint 22.1 がリリースされて LMDE にも新しい Cinnamon 6.4 が配布されるようになったので、LMDE 自体を再インストールして bookworm-backports だけでキレイに再構築してみることにしたのです。

 

r8168-dkms 8.051 を試してみた

ということで、bookworm-backports だけを使って LMDE を再構築したのですが、NIC ドライバーが r8169 のままなのです。r8169 ドライバーでもそんなに不便はないのですが、やはり r8168-dkms を使っていた時の通信速度は体感できるくらいに速かったので、また挑戦してみようと思ったのです。

Debian 12 のリポジトリで提供されている r8168-dkms は 8.051 でワタシの使っている Kernel 6.11 には対応していないらしいのですが、ちょうどいい機会なので試してみることにしました。

$ apt install r8168-dkms
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下のパッケージが新たにインストールされます:
  r8168-dkms
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 4 個。
106 kB のアーカイブを取得する必要があります。
この操作後に追加で 1,436 kB のディスク容量が消費されます。
取得:1 http://ftp.riken.jp/Linux/debian/debian bookworm/non-free amd64 r8168-dkms all 8.051.02-2 [106 kB]
106 kB を 0秒 で取得しました (1,234 kB/s)
以前に未選択のパッケージ r8168-dkms を選択しています。
(データベースを読み込んでいます ... 現在 544913 個のファイルとディレクトリがインストールされています
。)
.../r8168-dkms_8.051.02-2_all.deb を展開する準備をしています ...
r8168-dkms (8.051.02-2) を展開しています...
r8168-dkms (8.051.02-2) を設定しています ...
Loading new r8168-8.051.02 DKMS files...
Building for 6.11.10-zen3
Building initial module for 6.11.10-zen3
Error! Bad return status for module build on kernel: 6.11.10-zen3 (x86_64)
Consult /var/lib/dkms/r8168/8.051.02/build/make.log for more information.
dpkg: パッケージ r8168-dkms の処理中にエラーが発生しました (--configure):
 installed r8168-dkms package post-installation script subprocess returned error exit status 10
initramfs-tools (0.142+deb12u1) のトリガを処理しています ...
update-initramfs: Generating /boot/initrd.img-6.11.10-zen3

はい、ダメでした・・・。

make.log を見ろとのことなので見てみたのですが、いろんな箇所でコンパイルエラーが発生していました。ちょっと修正、くらいではなさそうでした。

$ dkms status
r8168/8.051.02: added

dkms status コマンド確認してみると、ドライバーの情報自体は登録されてしまっていました。


r8168-dkms 8.054 も試してみた

ここまでは若干予想できていたので、実は r8168-dkms 8.054 のソースを再構築前に退避してあったのでした。/usr/src/r8168-8.054.00 を丸ごとコピーしておいたのです。

これを再び /usr/src 配下にコピーしなおして、dkms コマンドを直接発行して登録しちゃう作戦です。

$ sudo dkms add -m r8168 -v 8.054.00
Creating symlink /var/lib/dkms/r8168/8.054.00/source -> /usr/src/r8168-8.054.00

お、dkms add は成功しました。いい感じです。

$ sudo dkms build -m r8168 -v 8.054.00 -k 6.11.10-zen3
Sign command: /lib/modules/6.11.10-zen3/build/scripts/sign-file
Signing key: /var/lib/dkms/mok.key
Public certificate (MOK): /var/lib/dkms/mok.pub

Building module:
Cleaning build area...
make -j12 KERNELRELEASE=6.11.10-zen3 -C /lib/modules/6.11.10-zen3/build M=/var/lib/dkms/r8168/8.054.00/build......(bad exit status: 2)
Error! Bad return status for module build on kernel: 6.11.10-zen3 (x86_64)
Consult /var/lib/dkms/r8168/8.054.00/build/make.log for more information.

続いて dkms build コマンドですが、なんと再びエラーです。

仕方がないので再び make.log を確認してみます。

$ cat /var/lib/dkms/r8168/8.054.00/build/make.log
DKMS make.log for r8168-8.054.00 for kernel 6.11.10-zen3 (x86_64)
2025年  1月 19日 日曜日 10:53:04 JST
make: ディレクトリ '/usr/src/linux-headers-6.11.10-zen3' に入ります
  CC [M]  /var/lib/dkms/r8168/8.054.00/build/r8168_n.o
  CC [M]  /var/lib/dkms/r8168/8.054.00/build/r8168_asf.o
  CC [M]  /var/lib/dkms/r8168/8.054.00/build/rtl_eeprom.o
  CC [M]  /var/lib/dkms/r8168/8.054.00/build/rtltool.o
  LD [M]  /var/lib/dkms/r8168/8.054.00/build/r8168.o
./tools/objtool/objtool: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by ./tools/objtool/objtool)
make[2]: *** [scripts/Makefile.build:448: /var/lib/dkms/r8168/8.054.00/build/r8168.o] エラー 1
make[2]: *** ファイル '/var/lib/dkms/r8168/8.054.00/build/r8168.o' を削除します
make[1]: *** [/usr/src/linux-headers-6.11.10-zen3/Makefile:1951: /var/lib/dkms/r8168/8.054.00/build] エラー 2
make: *** [Makefile:236: __sub-make] エラー 2
make: ディレクトリ '/usr/src/linux-headers-6.11.10-zen3' から出ます

ん、なんか 8.051 の時よりは簡単そうなエラー内容ですね。glibc のバージョンが古いだけのようです。libc6 というパッケージを bookworm-backports から新しいのを持ってくれば行けそうですね。

libc6 は 2.36 が限界でした・・・

なんと、libc6 は bookworm-backports に新しいバージョンが配布されていないようです。以前に Testing リポジトリから r8168-dkms をインストールした時は libc6 も持ってきていたんですね。

$ dkms status
r8168/8.051.02: added
r8168/8.054.00: added

dkms status コマンドで確認してみると、8.051 に加えて 8.054 まで登録されてしまっています。

 

そしてあきらめた

ということで、Linux Kernel 6.11 で r8168-dkms を使うには再び Testing リポジトリを有効化してあげないといけません。せっかく OS の再インストールまでして環境を再構築したのに、です。

もう一つは Linux Kernel 6.11 をあきらめて Linux Kernel 6.1 に戻る選択もありますが、NIC ドライバーを取るか Linux Kernel を取るかで、Linux Kernel を取ることにしました。

というわけで、bookworm-backports に Linux Kernel 6.11 を配信するなら r8168-dkms 8.054 も bookworm-backports に配信してくれよ、とグチりながらももう少し待ってみることにしました。