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としてドライバがインストールされているようです。
https://packages.debian.org/ja/jessie/firmware-realtek
■Karnelヘッダーファイル等は必要なく、ドライバを Makeする事もないので、上記 firmware-realtek をインストールするという方法が、運用的には楽かもしれません。もちろん、Linuxサーバとして運用するのであれば、なるべく蟹チップ搭載のマザーボードを選択しない事が一番だとは思いますが…
また、1-1にあるrealtek社のダウンロードサイトでは、Windows用のドライバも落とせるので(結構まめにUpdateされている)、ご利用のPCが蟹チップ搭載のマザーボードであれば、ダウンロードして最新版のドライバをインストールすると良いと思います。
最近のコメント