realtek 社製の NIC を搭載している PC に Linux をインストールする際の Tips です。
サーバ用に作られたマザーボードでは intel 製の NIC が標準ですが、俗称で蟹チップ( realtek 社のマークが蟹に似てる)と呼ばれるネットワーク用IC(NIC)は、低価格帯のマザーボードによく搭載されています。この蟹チップ搭載の PC に Linux をインストールすると、何故か NIC の型番を誤認識し、デフォルトでインストールされたドライバが色々と問題を起こすことが知られています。
※しかも、Debian の場合最新の Stretch でも誤認識が起こります。

この問題を解決するには2つの方法あります。

1.realtek 社の Web サイトからドライバをダウンロードし、手動でインストール
2.Debianリポジトリから realtek 用の firmware をインストール(こちらがお勧め)

 

 1.realtek 社の Web サイトからドライバをダウンロードし、手動でインストール

1-1.ドライバをダウンロードします。
http://www.realtek.com.tw/downloads/ を開き、画面右下の『ショートカットリンク集』から、Realtek PCIe GBE Family Controller Series Drivers をクリックします。
次に、Unix(Linux)に LINUX driver for kernel up to 4.7 という項目があるので、それをダウンロードします。
※2018/04/30現在で、最新バージョンは8.045です。また、このドライバは Linux カーネルの 3 系でも使えます。

1-2.ダウンロードしたファイルを、インストールしたいLinuxマシンの  /usr/src へ scp 等でコピーしておきます。

1-3.ドライバをインストールする準備をします。

aptitude install linux-headers-686-pae make     ←32ビット版
aptitude install linux-headers-amd64 make       ←64ビット版

※ドライバを Make するのに Linux ヘッダーが必要なのですが、ここで重要なのは現在インストールされているカーネルに対応したLinuxヘッダーファイルを直接インストールしないことです。

例えば、現在インストールされている Linuxカーネルが 3.16.0-5-686-pae だとすると、必要な Linuxヘッダーファイルは linux-headers-3.16.0-5-686-pae になるので、この Linuxヘッダーファイルをインストールしたくなります。

しかし、ここではあえて linux-headers-686-pae というメタパッケージをインストールすることをお勧めします。理由として、カーネルのアップグレードが発生した時に、当然カーネルヘッダーもアップグレードする必要があるのですが、カーネルヘッダーを個別にインストールした場合には、Linuxカーネルのアップグレードに合わせてカーネルヘッダーが自動でアップグレードされない場合があるからです。

たとえば、Debian8(Jessie)の状態で linux-headers-3.16.0-5-686-pae を直接指定してインストールしたとします。

ls /usr/src すると、linux-headers-3.16.0-5-686-pae と、linux-headers-3.16.0-5-common が見えます。しかし、ここから Debian9(Stretch) へシステム全体をアップグレードしても、新しいカーネル用のヘッダーファイルはインストールされません。

次に Debian8(Jessie) の状態で linux-headers-686-pae というメタパッケージを指定してインストールしたとします。

ls /usr/src すると、linux-headers-3.16.0-5-686-pae と、linux-headers-3.16.0-5-common が見えるので、一見何も変わっていないように見えますが、Debian9(Stretch) へアップグレードすると、ヘッダーファイルも新しい Linuxカーネルにあわせてインストールされていることがわかります。

drwxr-xr-x 4 root root 4.0K Apr 29 23:16 linux-headers-3.16.0-5-686-pae
drwxr-xr-x 4 root root 4.0K Apr 29 23:16 linux-headers-3.16.0-5-common
drwxr-xr-x 4 root root 4.0K Apr 29 23:52 linux-headers-4.9.0-6-686-pae
drwxr-xr-x 4 root root 4.0K Apr 29 23:52 linux-headers-4.9.0-6-common

1-4.ドライバをMakeします。/usr/src に置いた、ドライバを解凍します。

tar xvfj 0010-r8168-8.045.08.tar.bz2

解凍すると、r8168-8.045.08 というフォルダができるので、cd r8168-8.045.08 で移動します。
./autorun.sh でドライバをインストールします。
※この時に、インストールされている Linuxカーネルと Linuxヘッダーファイルのバージョンが違うと、Make が失敗してドライバのインストールが出来ません。もし、リモートから ssh等で接続して作業していると、接続が切れてしまい、リモートから復旧する手段はなくなります。仮想環境であればホスト機の管理コンソールから該当 PC へログインして再起動、実機であれば現場へ行きコンソールログインしてシステム再起動をしなければなりません。

正常に Make が実行されていても、特にリモートで接続している場合、何も画面に表示されず一見接続が切れているように見えますが、しばらくするとプロンプトが復活するので、じーっと待っててください(体感的には結構長い)。

1-5.ドライバのインストール後システムを再起動し、下記の様に表示されれば正常にインストールされています。

# dmesg | grep r8
[ 2.527491] r8168 Gigabit Ethernet driver 8.045.08-NAPI loaded
[ 2.527738] r8168 0000:02:00.2: irq 44 for MSI/MSI-X
[ 2.549988] r8168: This product is covered by one or more of the following patents: US6,570,884, US6,115,776, and US6,327,625.
[ 2.550016] r8168 Copyright (C) 2017 Realtek NIC software team <nicfae@realtek.com>
[ 7.939921] r8168: eth0: link up

 

 2.Debianのパッケージからrealtek用のfirmwareをインストール

ドライバが入っていない状態の起動Logを見ると…

# dmesg | grep r8
[ 1.813746] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded
[ 1.813775] r8169 0000:02:00.2: can't disable ASPM; OS doesn't have ASPM control
[ 1.814158] r8169 0000:02:00.2: irq 42 for MSI/MSI-X
[ 1.814933] r8169 0000:02:00.2 eth0: RTL8411 at 0xf7e18000, 80:ee:73:59:99:d7, XID 08800800 IRQ 42
[ 1.814945] r8169 0000:02:00.2 eth0: jumbo features [frames: 9200 bytes, tx checksumming: ko]
[ 3.305598] r8169 0000:02:00.2: firmware: failed to load rtl_nic/rtl8411-1.fw (-2)
[ 3.305602] r8169 0000:02:00.2: Direct firmware load failed with error -2
[ 3.305604] r8169 0000:02:00.2: Falling back to user helper
[ 3.306789] r8169 0000:02:00.2 eth0: unable to load firmware patch rtl_nic/rtl8411-1.fw (-12)
[ 3.330921] r8169 0000:02:00.2 eth0: link down
[ 3.330946] r8169 0000:02:00.2 eth0: link down
[ 5.012100] r8169 0000:02:00.2 eth0: link up

このログから、realtek 用の firmware をインストールすれば良いように読めます。

# aptitude install firmware-realtek
The following NEW packages will be installed:
firmware-realtek
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 208 kB of archives. After unpacking 719 kB will be used.
Get: 1 http://cdn.debian.or.jp/debian/ jessie/non-free firmware-realtek all 0.43 [208 kB]
Fetched 208 kB in 0s (884 kB/s)
Selecting previously unselected package firmware-realtek.
(Reading database ... 74137 files and directories currently installed.)
Preparing to unpack .../firmware-realtek_0.43_all.deb ...
Unpacking firmware-realtek (0.43) ...
Setting up firmware-realtek (0.43) ...
update-initramfs: deferring update (trigger activated)
Processing triggers for initramfs-tools (0.120+deb8u3) ...
update-initramfs: Generating /boot/initrd.img-3.16.0-5-686-pae

以上で、firmware-realtek のインストールが完了です。
一度システムを再起動して、起動ログを確認します。

# dmesg | grep r8
[ 1.847024] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded
[ 1.847058] r8169 0000:02:00.2: can't disable ASPM; OS doesn't have ASPM control
[ 1.847467] r8169 0000:02:00.2: irq 43 for MSI/MSI-X
[ 1.860501] r8169 0000:02:00.2 eth0: RTL8411 at 0xf7e18000, 80:ee:73:59:99:d7, XID 08800800 IRQ 43
[ 1.860510] r8169 0000:02:00.2 eth0: jumbo features [frames: 9200 bytes, tx checksumming: ko]
[ 3.402979] r8169 0000:02:00.2: firmware: direct-loading firmware rtl_nic/rtl8411-1.fw
[ 3.487015] r8169 0000:02:00.2 eth0: link down
[ 3.487039] r8169 0000:02:00.2 eth0: link down
[ 5.124603] r8169 0000:02:00.2 eth0: link up

ログからは RTL8411 としてドライバがインストールされているようです。

■ karnel ヘッダーファイル等は必要なく、ドライバを Makeする事もないので、上記 firmware-realtek をインストールするという方法が、運用的には楽かもしれません。もちろん、Linuxサーバとして運用するのであれば、なるべく蟹チップ搭載のマザーボードを選択しない事が一番だとは思いますが…

また、1-1 にある realtek 社のダウンロードサイトでは、Windows 用のドライバも落とせるので(結構まめに Update されている)、ご利用の PC が蟹チップ搭載のマザーボードであれば、ダウンロードして最新版のドライバをインストールすると良いと思います。