CentOSでRealTekRTL8111bにr8168ドライバを適用する方法

2年ぐらい前のネタだが今でも解決してないので、時期を外しても何ともないぜ。

RealTekのRTL8111bという2年程前(LGA775世代)から広く使われているNICがあります。こいつのドライバはr8168が正しいのですが、CentOS5系で自動認識させるとr8169がロードされてしまうという問題があります。

r8169でも動いたりするのですが、ifconfigなどで見るとdroppedが増えていたりして危険なことがあります。一時的には動いても、ある日突然転送エラーを吐き始めて、ついには疎通しなくなったりすることも経験しています。数ヶ月の安定運用の後いきなり止まったりすることもあるので、油断出来ません。

この問題の詳細については、CentOS Wikiから参照出来ます。CentOS5.2から発生した問題のようですが、CentOS5.5でも相変わらずなのが困りもの。

NICの型番とドライバの確認

RTL8111bが使われているかは、例えば以下のようにして確認できます。

$ /sbin/lspci |grep -i realtek
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)

こういうのが引っかかってきたらドライバを確認します。

$ /sbin/lsmod|grep r81

これでr8169が出てきたら気をつけた方がいいかもしれません。

■r8169の導入

ドライバを入れる方法はいろいろありますが、ELRepoからkmod-r8168を入れるのが便利です。

1. ELRepoを有効に
$ sudo rpm -Uvh http://elrepo.org/elrepo-release-0.1-1.el5.elrepo.noarch.rpm
2. ELRepoから上記のkmod-r8168をインストール。
$ sudo yum --enablerepo=elrepo install kmod-r8168

中身を少し見てみましょう。

$ rpm -ql kmod-r8168
/etc/depmod.d/r8168.conf
/etc/modprobe.d/blacklist-r8169.conf
/lib/modules/2.6.18-128.el5
/lib/modules/2.6.18-128.el5/extra
/lib/modules/2.6.18-128.el5/extra/r8168
/lib/modules/2.6.18-128.el5/extra/r8168/r8168.ko
/usr/share/doc/r8168-8.019.00_NAPI
/usr/share/doc/r8168-8.019.00_NAPI/GPL-v2.0.txt
/usr/share/doc/r8168-8.019.00_NAPI/README

$ cat /etc/depmod.d/r8168.conf
override r8168 * weak-updates/r8168

これで/lib/modules/2.6.XX-XXX.X.X.el5/weak-updates/r8168にsymlinkを貼って読ませるようです。kernelをアップデートしてもドライバを引き回せて非常に安心感があります。r8169をブラックリスト登録してくれるのも気が利いてますね。

3. /etc/modprobe.confのeth0(適宜読み替えのこと)の設定を以下に。
alias eth0 r8168
4. モジュールの入れ替え

1コマンドずつ入力していると、rmmodした時点でネットワークが切断されてコンソールが必要になってしまいます。

一発実行してしまえばネットワーク越しに入れ替えが出来るのでお勧め。

$ sudo /sbin/rmmod r8169 && sudo /sbin/depmod -a && sudo /sbin/modprobe r8168 && sudo /sbin/service network restart

これで作業は完了です。最初のように、

$ /sbin/lsmod|grep r81

として、r8168がロードされていることを確認しましょぅ。