果報

二度寝して待つ

Realtekの「r8168」ドライバをソースコードからインストールする

自宅サーバ(Ubuntu 22.04)のカーネルを6.5.0-14-genericにバージョンアップしたところ、有線LANで接続できなくなりました。

原因を調べた結果、先日インストールしたRealtekのNIC「RTL8111/8168/8411」用のドライバ「r8168-dkms」が、最新カーネルに対応していないため、NICを認識できなくなったようです。

text.yusukesakai.com

ただ、Realtek社のサイトには、最新カーネルに対応したドライバのソースコードが公開されているため、以下のサイトを参考にビルド・インストールしてみました。

askubuntu.com

インストール手順

以下のリンクから、ドライバをダウンロードします。選択するのは「GBE Ethernet LINUX driver r8168 for kernel up to 6.8」で、バージョンは8.053.00となります。

www.realtek.com

ダウンロード後、ファイルを展開します。

$ tar xvf r8168-8.053.00.tar.bz2

展開されたディレクトリに移動します。

$ cd r8168-8.053.00/src

ドライバ用の新しいディレクトリをroot権限で作成し、すべてのファイルをコピーします。

$ sudo mkdir /usr/src/r8168-8.053.00
$ sudo cp -v * /usr/src/r8168-8.053.00/

ドライバ用の新しいファイルdkms.confを作成します。

$ sudo nano /usr/src/r8168-8.053.00/dkms.conf

次の内容をファイルに追加します。

PACKAGE_NAME="r8168"
PACKAGE_VERSION="8.053.00"
BUILT_MODULE_NAME[0]="$PACKAGE_NAME"
DEST_MODULE_LOCATION[0]="/updates/dkms"
AUTOINSTALL="YES"
REMAKE_INITRD="YES"

ファイルを保存後、次のコマンドを実行してドライバをビルド、インストールします。

$ sudo dkms add -m r8168 -v 8.053.00
$ sudo dkms build -m r8168 -v 8.053.00 -k 6.5.0-45-generic
$ sudo dkms install -m r8168 -v 8.053.00 -k 6.5.0-45-generic

なお、-kで指定するカーネルバージョンは以下のコマンドで確認して、適宜修正します。

$ uname -r

インストール後、dkms statusコマンドでチェックすると、インストールされているドライバが表示されます。

$ dkms status
r8168/8.053.00, 6.5.0-45-generic, x86_64: installed

もし、不要となった古いドライバが表示されていたら、以下のコマンドでアンインストールできます。

$ sudo dkms remove r8168/8.0XX.XX --all

サーバを再起動すると、正常に接続できるようになっているはずです。お疲れさまでした。

追記(2024/1/20)

aptリポジトリでも最新バージョンが有効になったようです。

packages.debian.org

2024/8/4現在、aptでインストールすると8.049.02という古いバージョンになるので、やはり手動でインストールしたほうがよさそう。

さらに追記(2024/8/4)

Realtekのリンク先が古いのを修正したり、ドライバの最新バージョンが8.052.01から8.053.00に上がってたので修正したり、aptリポジトリが古いことを追記したりしました。