自宅サーバ(Ubuntu 22.04)のカーネルを6.5.0-14-generic
にバージョンアップしたところ、有線LANで接続できなくなりました。
原因を調べた結果、先日インストールしたRealtekのNIC「RTL8111/8168/8411」用のドライバ「r8168-dkms」が、最新カーネルに対応していないため、NICを認識できなくなったようです。
ただ、Realtek社のサイトには、最新カーネルに対応したドライバのソースコードが公開されているため、以下のサイトを参考にビルド・インストールしてみました。
インストール手順
以下のリンクから、ドライバをダウンロードします。選択するのは「GBE Ethernet LINUX driver r8168 for kernel up to 6.8」で、バージョンは8.053.00
となります。
ダウンロード後、ファイルを展開します。
$ 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リポジトリでも最新バージョンが有効になったようです。
2024/8/4現在、aptでインストールすると8.049.02
という古いバージョンになるので、やはり手動でインストールしたほうがよさそう。
さらに追記(2024/8/4)
Realtekのリンク先が古いのを修正したり、ドライバの最新バージョンが8.052.01
から8.053.00
に上がってたので修正したり、aptリポジトリが古いことを追記したりしました。