Ubuntu 24.04.3 で RTL8127を使用可能にした話
ローカルLLMを動かすのを目的に、Minisforum の MS-S1 MAXというPCを購入しました。
このPCは、CPUに AMD Ryzen AI Max+ 395 を積んでおり、比較的大きなLLMを動かせます。ちょうど AMD から ROCm 7.9.0 preview が発表され、Ryzen AI Max+ 395 がサポート対象になったので、ROCm 7.9.0 previewのシステム要件に合わせて Ubuntu での環境構築をしてみることにしました。
ROCm 7.9.0 preview で サポートされている Ubuntuのバージョンは Ubuntu 24.04.3 (HWE kernel: 6.14) ということなのですが、実は普通にUbuntu 24.04.3 を ISOからインストールすると、MS-S1 MAXに装備されている 10GbE の有線LANが使えません(無線LANは使えます)。有線LANに使われているRTL8127(r8127)というRealtek のチップは kernel 6.16では対応されるようなのですが、素の Ubuntu 24.04.3 で有線LANが使えないことには何とも不便なので、まずはRTL8127のドライバーを導入することにしました。
参考にさせて頂いたのはPC Watchの記事( https://pc.watch.impress.co.jp/docs/column/ubuntu/2046986.html ) ですが、私が試した限りでは、微妙に上手くいかないところが幾つかありましたので、手順を整理し直すとこんな感じです。
事前準備
$ sudo apt install dkms debhelper linux-headers-$(uname -r) build-essential gcc
- Realtekのドライバーのダウンロード
https://www.realtek.com/Download/List?cate_id=584
展開
$ sudo cp -r ~/Downloads/r8127-11.015.00/* /usr/src/r8127-11.015.00/
$ cd /usr/src/r8127-11.015.00/
DKMS設定の作成
$ sudo editor /usr/src/r8127-11.015.00/dkms.conf
- 編集内容
PACKAGE_NAME="r8127"
PACKAGE_VERSION="11.015.00"
CLEAN="make -C /lib/modules/$(uname -r)/build M=/usr/src/r8127-11.015.00/src clean"
MAKE[0]="make -C /lib/modules/$(uname -r)/build M=/usr/src/r8127-11.015.00/src modules"
BUILT_MODULE_NAME[0]="r8127"
BUILT_MODULE_LOCATION[0]="src/" # フルパスのほうが良いかも
DEST_MODULE_LOCATION[0]="/kernel/drivers/net/ethernet/realtek"
AUTOINSTALL="yes"
BUILD_EXCLUSIVE_KERNEL_MAX="6.15"
インストール
$ sudo dkms remove r8127/11.015.00 --all # やり直しの場合
$ sudo dkms add r8127/11.015.00
$ sudo dkms build r8127/11.015.00
$ sudo dkms install r8127/11.015.00
$ sudo modprobe r8127
追記
- Ubuntu 24.04.3 の素の状態で、ROCm 7.9.0 previewが なんとなくあれこれ動いてしまっていたので、AMDのHWEのインストールをしていませんでした。
- あとあと面倒にならないよう、いまのうちに入れておくことにしました。いま始めてこの記事をお読みになる方は、以下のほうがより適切です(たぶん)。
r8127 DKMSの登録解除
- 一旦 r8127 DKMSを外します。
$ sudo dkms remove r8127/11.015.00 --all
AMD HWEカーネルのインストール
$ sudo apt-get install linux-oem-24.04c
- HWEカーネルの新ストールで既に r8127がらみで問題が起きていたら、こちらで修復。
$ sudo apt --fix-broken install
dkms.confの修正
- 始めからこうしておくべきだったということだと思います。
$ sudo nano /usr/src/r8127-11.015.00/dkms.conf
PACKAGE_NAME="r8127"
PACKAGE_VERSION="11.015.00"
CLEAN="make -C /lib/modules/${kernelver}/build M=/usr/src/r8127-11.015.00/src clean"
MAKE[0]="make -C /lib/modules/${kernelver}/build M=/usr/src/r8127-11.015.00/src modules"
BUILT_MODULE_NAME[0]="r8127"
BUILT_MODULE_LOCATION[0]="src/"
DEST_MODULE_LOCATION[0]="/kernel/drivers/net/ethernet/realtek"
AUTOINSTALL="yes"
BUILD_EXCLUSIVE_KERNEL_MAX="6.15"
再構築
- あとは先程と同じプロセスをカーネルを指定して実行。
$ sudo dkms add r8127/11.015.00
$ sudo dkms build r8127/11.015.00 -k $(uname -r)
$ sudo dkms install r8127/11.015.00 -k $(uname -r)$ sudo dkms install r8127/11.015.00 -k $(uname -r)
$ sudo dkms build r8127/11.015.00 -k 6.14.0-1014-oem
$ sudo dkms install r8127/11.015.00 -k 6.14.0-1014-oem
$ sudo modprobe r8127
$ lsmod | grep r8127
- GRUBで 6.14.0-1014-oem を指定して動作確認。
さらに追記
あれこれカーネルを変更したりしているうちに、r8127が動作しなくなってしまいました。修復できましたが、幾つか複数の原因があった可能性がありますので、わかった限りで全て記載します。
1. BIOSの設定
- BIOSの advanced の項目で LAN1、LAN2の設定が auto になっていると、具合が悪い場合があるという情報があります(Strix Halo Homelab Discord)。これらを enabled にするのが良いとのことです。
2. DPKG
- カーネルのビルドエラーが未完了だった場合の対応です。
sudo dpkg --configure -a
3. r8169対策
- 後からインストールされたr8169 のドライバーが邪魔をしていました。
- r8169をブラックリストに追加
echo "blacklist r8169" | sudo tee /etc/modprobe.d/blacklist-r8169.conf
echo "install r8169 /bin/false" | sudo tee -a /etc/modprobe.d/blacklist-r8169.conf
- r8127のドライバーを優先的にロード
echo "alias pci:v000010ECd00008127sv*sd*bc*sc*i* r8127" | sudo tee /etc/modprobe.d/r8127.conf
- initramfsを更新
sudo update-initramfs -u
- リブートして、以下で使用されているドライバーを確認できます。
lspci -k | grep -A 3 Ethernet
4. ルーターのリブート
- ここまでやって、r8127のドライバーは動いているし、結線されているのに、認識しないのでおかしいと思ったら、なんとルーターをリブートしたら解決しました。
もひとつ追記
- MinisforumのDiscordによれば、 リブート後にRTL8127が認識されなくなる現象が起きることがあるようです( https://www.reddit.com/r/MINISFORUM/comments/1ovcph0/mss1_max_arrived_both_realtek_nics_missing_from/ )
- 現状、Linux側のドライバーに問題があるものと推測されており、対処法は以下のいずれかで良いようです。
- シャットダウン後、電源ケーブルを完全に抜いて10秒以上待ってから再接続する
- BIOSでWoL(Wake on LAN)を無効化し、ERP(省エネモード)を有効化する
Discussion