純規の暇人趣味ブログ

首を突っ込んで足を洗う

UbuntuServerにIntelNICを載せてみる

      HimaJyun

先日、自分の運営するマイクラ鯖のメンテを実施しました
その時にNICをオンボのカニからIntelに変更したのですが、地味に手古摺ったので同じ様な方のために記事にします。

IntelNIC

カニ(Realtek)よりIntelNICの方が高性能だと言うのは良く聞く話ですが、特に問題がある訳でも無ければ変えようと言う強い動機にもなりませんし、基本はそのままだと思います。

ただ、気になってはいたので、別件でマイクラ鯖のメンテを行う際に「ついで」と言う事でIntelNICを載せてみる事にしました

購入したパーツ

今回購入したのはドが付くくらいの定番中の定番、EXPI9301CTです。

ubuntuserver-intelnic-001

UbuntuServerで使う

もちろん、これはサーバ用途で購入したパーツです。
僕はマイクラと東方くらいしかやりませんし、自PCはカニで間に合っています。

と言う訳で、普通にPCIにブスリ、起動するもNICを認識してくれません

ifconfigで確認しても何も追加されていない(eth1が無い……など)の場合はドライバを入れると良いらしいです。

「lspci | grep Ethernet」とかを実行すると使用しているNICのチップが表示されます。
今回のNICでしたら「Intel Corporation 82574L Gigabit Network Connection」などと表示されると思われます。

これで検索に掛けてみるとe1000eと言うドライバがこのNICに合うドライバの様です。
Intelのダウンロードセンターからドライバのダウンロードページを探し出します。

ダウンロードボタンをポチっとクリックして、使用許諾契約がなんたらに同意するとダウンロードが開始されます。
この記事を書いた時点(2016/03/21)でのバージョンは3.3.3でした、タイプが楽ですね。

ドライバ(e1000e)をインストールする

先程ダウンロードしたドライバをFTPとかで鯖に転送するなり、USBで持って行くなり、ダウンロードURLを探し出してwgetするなり、とにかく鯖に持って行きます。

ユーザのホームディレクトリ(/home/[ユーザ名]/)に置くのが定石らしいです。

後はtarボールを切り開いてドライバをインストールするだけです。
以下のコマンドを実行する事で行けます。
(3.3.3の部分は自分がダウンロードしたドライバにあったバージョンに読み替えて下さい。)

tar xf e1000e-3.3.3.tar
cd e1000e-3.3.3/src/
sudo make install
sudo modprobe -r e1000e
sudo modprobe e1000e

tarを切り開いて、その中のsrcに移動、make installした後に、既に読み込んでいるドライバを削除して新しいドライバを読み込み

です。

DKMSでドライバをインストールする

先程の手法はあくまで手動でドライバをビルドしてロードしたに過ぎません。

すなわち、カーネルがアップデートされると再びコンパイルしなければならない=それをするまでネットワークが切れる、と言う超絶不便仕様になってしまいます。

可愛い彼女(そんなものは居ない)とデートしている時にカーネルが自動アップデートされて、サーバの死活監視とか上司から繋がらないだの何だののメールが鬼の様に届いていたのではせっかくのデートが台無しです、ビンタからの絶交デスコンボ不可避です。

時代は自動化です、いつまで人間が手元でポチポチせねばならぬのですか?
と言う訳で登場するのがDKMS(Dynamic Kernel Module Support)です。

これはカーネルのバージョンアップが行われた際にモジュールを自動でビルドしてくれる優れものです。
これで可愛い彼女(そんなものは居ない)とのデートも安心ですね。

DKMSのインストール

まず最初にDKMSを使うのですから、DKMSのインストールが必要です。
当たり前ですね、イカでも分かります。

「sudo apt-get install dkms」でインストールしてしまいましょう!!
当然ながらネットワークが必要です、オンボNICを使うなり、とりあえず手動でビルドするなりしてネットワークに繋ぎましょう。

設定

手動でビルドする際にはホームディレクトリ(/home/[ユーザ名]/)が定石、と言いましたが、DKMSの場合は/usr/src/に置くのが定石の様です。

以下のコマンドを実行して下ごしらえをして下さい。
(3.3.3の部分は自分がダウンロードしたドライバにあったバージョンに読み替えて下さい。)

sudo mv /ドライバのある所/e1000e-3.3.3.tar /usr/src/
cd /usr/src/
sudo tar xf e1000e-3.3.3.tar
sudo rm e1000e-3.3.3.tar
cd e1000e-3.3.3/

次に、「/usr/src/e1000e-3.3.3/dkms.conf」を新規作成して編集します。
以下の内容を書き込んで下さい。

PACKAGE_NAME="e1000e"
# バージョン
PACKAGE_VERSION="3.3.3"
BUILT_MODULE_LOCATION=src
BUILT_MODULE_NAME[0]="e1000e"
DEST_MODULE_LOCATION[0]="/kernel/drivers/net/e1000e/"
AUTOINSTALL="yes"
MAKE[0]="BUILD_KERNEL=${kernelver} make -C src CFLAGS_EXTRA=-DDISABLE_PM"
CLEAN[0]="make -C src clean"
REMAKE_INITRD=yes

実行

以下の3コマンドでDKSMに追加、ビルド、インストールが出来ます。

sudo dkms -m e1000e -v 3.3.3 add 
sudo dkms -m e1000e -v 3.3.3 build 
sudo dkms -m e1000e -v 3.3.3 install 

動作確認

動作確認は「ls /lib/modules/」にいくつかのカーネルが含まれているので、それの中から現在インストールしているバージョンでは無い物(現在インストールしているものは「uname -r」で確認可能)を「apt-get install --reinstall linux-image-[バージョン]」で再インストールしてみれば分かります。

何言っているのか意味不明でしょうが、以下のコマンドを実行すれば古いバージョンのLinuxカーネルがインストールされます。

ls -1 /lib/modules/ | head -1 | perl -nle 'print "linux-image-$_"' | xargs sudo apt-get install --reinstall

その後、「/lib/modules/[バージョン]/updates/dmks」に「e1000e.ko」があればおkです。
以下のコマンドで確認できるはずです。

ls -1 /lib/modules/ | head -1 | perl -nle 'print "/lib/modules/$_/updates/dkms"' | xargs ls

確認が終わったら最新版のカーネルを入れ直しておきましょうね。

ls -r1 /lib/modules/ | head -1 | perl -nle 'print "linux-image-$_"' | xargs sudo apt-get install --reinstall

eth1をeth0に更新する

OS上からNICが2つ認識されるのはなんだかキモチワルイので、BIOSの設定画面からオンボのLANを使えなくします。

すると、「dmesg | grep eth」を実行した際に「renamed interface eth0 to eth1」と表示されます。
ドライバ類をキチンとインストールしたのに繋がらない……って時はここを確認してみて下さい。

eth0とか1ってのは「/etc/udev/rules.d/70-persistent-.rules」に記録されているので、これをエディタで開きます。
例えば、以下の様な設定が記されていたとします。

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:00:00:00:00:00", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="ff:ff:ff:ff:ff:ff", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

その場合は以下の様に、eth0をコメントアウトして、eth1を0に変更してあげれば良いです。

この様な感じですね。

#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:00:00:00:00:00", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="ff:ff:ff:ff:ff:ff", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

後はOSを再起動してやれば全てが丸く、上手く行くと思います。
(ネットワークの再起動だけではダメっぽい?)

カニからIntelに変えて何か起こったかと言われると特別な変化はありませんが、コスト重視で作られているカニよりかは幾分かは良いはずなので試してみる価値ありです。

 - サーバ運営 ,