Haswell の Intel NUC D34010WYK に Oracle VM Server 3.2.6 をインストールしたら
残念ながら NIC のドライバが当たりませんでした。
そこで、Intel のサイトから Intel I218-V のドライバをダウンロードして
インストールしてみました。
Intel NUC Kit D34010WYK
http://ark.intel.com/ja/products/76978/
Intel I218 ファミリー (NIC)
http://www.intel.com/content/www/us/en/ethernet-controllers/ethernet-connection-i218-family.html
NIC ドライバをインストールする OVS
[root@ovs326-6 ~]# dmidecode -s baseboard-product-name
# SMBIOS implementations newer than version 2.6 are not
# fully supported by this version of dmidecode.
D34010WYK
[root@ovs326-6 ~]# cat /etc/redhat-release
Oracle VM server release 3.2.6
[root@ovs326-6 ~]# cat /etc/oracle-release
Oracle VM Server release 5.7
[root@ovs326-6 ~]# uname -a
Linux ovs326-6 2.6.39-300.32.5.el5uek #1 SMP Mon Aug 5 11:19:15 PDT 2013 x86_64 x86_64 x86_64 GNU/Linux
NIC ドライバのソースファイル
I218-V のドライバを下記からダウンロードします。
https://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&DwnldID=15817&lang=jpn
[root@ovs326-6 ~]# ls -l e1000e-2.5.4.tar.gz
-rw-r--r-- 1 root root 269997 Jan 13 08:25 e1000e-2.5.4.tar.gz
RPM ファイル
OVS には gcc、make、man もインストールします。
依存関係のある RPM も含めて Oracle Linux 5.7 x86_64(64bit)の
インストールメディアから持ってきました。
ORACLE の パブリック YUM リポジトリからも入手できます。
http://public-yum.oracle.com/repo/OracleLinux/OL5/7/base/x86_64/
cpp-4.1.2-51.el5.x86_64.rpmkernel-uek-devel と kernel-uek-headers は、
gcc-4.1.2-51.el5.x86_64.rpm
glibc-2.5-65.i686.rpm
glibc-2.5-65.x86_64.rpm
glibc-common-2.5-65.x86_64.rpm
glibc-devel-2.5-65.x86_64.rpm
glibc-headers-2.5-65.x86_64.rpm
groff-1.18.1.1-11.1.x86_64.rpm
libgcc-4.1.2-51.el5.x86_64.rpm
libgomp-4.4.4-13.el5.x86_64.rpm
make-3.81-3.el5.x86_64.rpm
man-1.6d-2.el5.x86_64.rpm
nscd-2.5-65.x86_64.rpm
OVS 3.2.6 の UEK カーネルバージョンが一致する RPM が
インストールメディアやパブリック YUM サイトに見当たらなかったので
ソース RPM からビルドしました。
kernel-uek-devel-2.6.39-300.32.5.el5uek.x86_64.rpm
kernel-uek-headers-2.6.39-300.32.5.el5uek.x86_64.rpm
0. OVS のインストール
NIC を認識しないマシンには OVS がインストールできないため、
別のマシンを利用して USB メモリにOVSをインストールしておきます。
そして、 NUC を USB メモリで OVS を起動します。
NUC のローカル SSD に別の OS が入っていなければ、
USB メモリを接続して NUC の電源を入れるだけで起動できます。
NIC ドライバ適用前の状態
Intel の Ethernet controller は認識されていますが、使用できませんでした。
[root@ovs326-6 ~]# lspci
00:00.0 Host bridge: Intel Corporation Device 0a04 (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Device 0a16 (rev 09)
00:03.0 Audio device: Intel Corporation Device 0a0c (rev 09)
00:14.0 USB Controller: Intel Corporation Device 9c31 (rev 04)
00:16.0 Communication controller: Intel Corporation Device 9c3a (rev 04)
00:19.0 Ethernet controller: Intel Corporation Device 1559 (rev 04)
00:1b.0 Audio device: Intel Corporation Device 9c20 (rev 04)
00:1d.0 USB Controller: Intel Corporation Device 9c26 (rev 04)
00:1f.0 ISA bridge: Intel Corporation Device 9c43 (rev 04)
00:1f.3 SMBus: Intel Corporation Device 9c22 (rev 04)
bond0 は作成されていますが、MACアドレスは 00:00:00:00:00:00 で
eth0 は作成されていません。
ちなみに /etc/modprobe.conf で eth0 の エイリアスを e1000e にして
モジュールをロードしてもダメでした。
[root@ovs326-6 ~]# ifconfig -a
bond0 Link encap:Ethernet HWaddr 00:00:00:00:00:00
inet addr:192.168.4.26 Bcast:192.168.4.255 Mask:255.255.255.0
UP BROADCAST MASTER MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:46 errors:0 dropped:0 overruns:0 frame:0
TX packets:46 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6905 (6.7 KiB) TX bytes:6905 (6.7 KiB)
1. RPM のインストール
ドライバのインストールに必要な RPM をインストールしておきます。
[root@ovs326-6 rpm]# ls
cpp-4.1.2-51.el5.x86_64.rpm
gcc-4.1.2-51.el5.x86_64.rpm
glibc-2.5-65.i686.rpm
glibc-2.5-65.x86_64.rpm
glibc-common-2.5-65.x86_64.rpm
glibc-devel-2.5-65.x86_64.rpm
glibc-headers-2.5-65.x86_64.rpm
groff-1.18.1.1-11.1.x86_64.rpm
kernel-uek-devel-2.6.39-300.32.5.el5uek.x86_64.rpm
kernel-uek-headers-2.6.39-300.32.5.el5uek.x86_64.rpm
libgcc-4.1.2-51.el5.x86_64.rpm
libgomp-4.4.4-13.el5.x86_64.rpm
make-3.81-3.el5.x86_64.rpm
man-1.6d-2.el5.x86_64.rpm
nscd-2.5-65.x86_64.rpm
[root@ovs326-6 rpm]# rpm -Uvh *rpm
warning: cpp-4.1.2-51.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... #################### [100%]
1:libgcc #################### [ 7%]
2:glibc-common #################### [ 13%]
3:glibc #################### [ 20%]
4:cpp #################### [ 27%]
5:groff #################### [ 33%]
6:libgomp #################### [ 40%]
7:kernel-uek-headers #################### [ 47%]
8:man #################### [ 53%]
9:make #################### [ 60%]
10:nscd #################### [ 67%]
11:glibc-headers #################### [ 73%]
12:glibc-devel #################### [ 80%]
13:kernel-uek-devel #################### [ 87%]
14:glibc #################### [ 93%]
15:gcc #################### [100%]
2. ソースファイルの編集
ドライバを make install すると、エラーになってしまいました。
[root@ovs326-6 src]# make install
make -C /lib/modules/2.6.39-300.32.5.el5uek/build SUBDIRS=/root/e1000e-2.5.4/src modules
make[1]: Entering directory `/usr/src/kernels/2.6.39-300.32.5.el5uek'
CC [M] /root/e1000e-2.5.4/src/netdev.o
In file included from /root/e1000e-2.5.4/src/e1000.h:39,
from /root/e1000e-2.5.4/src/netdev.c:55:
/root/e1000e-2.5.4/src/kcompat.h:3446: error: redefinition of typedef ‘netdev_features_t’
include/linux/netdevice.h:985: error: previous declaration of ‘netdev_features_t’ was here
make[2]: *** [/root/e1000e-2.5.4/src/netdev.o] Error 1
make[1]: *** [_module_/root/e1000e-2.5.4/src] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.39-300.32.5.el5uek'
make: *** [default] Error 2
そこで、今回は下記のようにファイルを編集してしまいました。
[root@ovs326-6 src]# cp -p /usr/src/kernels/2.6.39-300.32.5.el5uek/include/linux/netdevice.h ~/netdevice.h_orig
[root@ovs326-6 src]# vi /usr/src/kernels/2.6.39-300.32.5.el5uek/include/linux/netdevice.h
/usr/src/kernels/2.6.39-300.32.5.el5uek/include/linux/netdevice.h の編集内容
(編集前)
985 typedef u32 netdev_features_t;(編集後)
986 /*
987 * The DEVICE structure.
988 * Actually, this whole structure is a big mistake. It mixes I/O
989 * data with strictly "high-level" data, and it has to know about
990 * almost every data structure used in the INET module.
991 *
992 * FIXME: cleanup struct net_device such that network protocol info
993 * moves out.
994 */
985 //typedef u32 netdev_features_t;(差分)
986 /*
987 * The DEVICE structure.
988 * Actually, this whole structure is a big mistake. It mixes I/O
989 * data with strictly "high-level" data, and it has to know about
990 * almost every data structure used in the INET module.
991 *
992 * FIXME: cleanup struct net_device such that network protocol info
993 * moves out.
994 */
[root@ovs326-6 src]# diff ~/netdevice.h_orig /usr/src/kernels/2.6.39-300.32.5.el5uek/include/linux/netdevice.h
985c985
< typedef u32 netdev_features_t;
---
> //typedef u32 netdev_features_t;
3. NIC ドライバのインストール
ドライバは、ソースからインストールします。
[root@ovs326-6 ~]# tar zxf e1000e-2.5.4.tar.gz
[root@ovs326-6 ~]# cd e1000e-2.5.4/src/
[root@ovs326-6 src]# make install
make -C /lib/modules/2.6.39-300.32.5.el5uek/build SUBDIRS=/root/e1000e-2.5.4/src modules
make[1]: Entering directory `/usr/src/kernels/2.6.39-300.32.5.el5uek'
CC [M] /root/e1000e-2.5.4/src/netdev.o
CC [M] /root/e1000e-2.5.4/src/ethtool.o
CC [M] /root/e1000e-2.5.4/src/param.o
CC [M] /root/e1000e-2.5.4/src/82571.o
CC [M] /root/e1000e-2.5.4/src/ich8lan.o
CC [M] /root/e1000e-2.5.4/src/80003es2lan.o
CC [M] /root/e1000e-2.5.4/src/mac.o
CC [M] /root/e1000e-2.5.4/src/nvm.o
CC [M] /root/e1000e-2.5.4/src/phy.o
CC [M] /root/e1000e-2.5.4/src/manage.o
CC [M] /root/e1000e-2.5.4/src/kcompat.o
LD [M] /root/e1000e-2.5.4/src/e1000e.o
Building modules, stage 2.
MODPOST 1 modules
CC /root/e1000e-2.5.4/src/e1000e.mod.o
LD [M] /root/e1000e-2.5.4/src/e1000e.ko.unsigned
NO SIGN [M] /root/e1000e-2.5.4/src/e1000e.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.39-300.32.5.el5uek'
gzip -c ../e1000e.7 > e1000e.7.gz
# remove all old versions of the driver
find /lib/modules/2.6.39-300.32.5.el5uek -name e1000e.ko -exec rm -f {} \; || true
find /lib/modules/2.6.39-300.32.5.el5uek -name e1000e.ko.gz -exec rm -f {} \; || true
install -D -m 644 e1000e.ko /lib/modules/2.6.39-300.32.5.el5uek/kernel/drivers/net/e1000e/e1000e.ko
/sbin/depmod -a || true
install -D -m 644 e1000e.7.gz /usr/share/man/man7/e1000e.7.gz
man -c -P'cat > /dev/null' e1000e || true
Formatting page, please wait...
[root@ovs326-6 src]#
4. 設定ファイルの編集
インストールした NIC ドライバをロードする前に
モジュールのエイリアスと、インターフェースの設定ファイルを修正しておきます。
modprobe.conf の修正
(修正前)
[root@ovs326-6 ~]# cat /etc/modprobe.conf | grep e1000
alias eth0 e1000
↓
(修正後)
[root@ovs326-6 src]# cat /etc/modprobe.conf | grep e1000
alias eth0 e1000e
/etc/sysconfig/network-scripts/ifcfg-eth0 の編集
OVS は NIC を認識しないマシンにはインストールできないので
この OVS は、別のマシンで USBメモリにインストールしていました。
その時にインストールした時に認識した NIC の名前と
MACアドレス(HWADDR=XX:XX:XX:XX:XX:XX の部分)を削除 か コメントアウトします。
Intel NUC はオンボード のネットワークポート が 1つしかないため
ifcfg-ethX で MAC アドレスを明記しなくてもなんとか使えます…
(修正前)
# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth0
BOOTPROTO=none
HWADDR=08:00:27:F3:4E:16
ONBOOT=yes
MASTER=bond0
SLAVE=yes
↓
(修正後)
DEVICE=eth0
BOOTPROTO=none
#HWADDR=08:00:27:F3:4E:16
ONBOOT=yes
MASTER=bond0
SLAVE=yes
5. e1000e モジュールのロード
modprobe コマンドで、e1000e ドライバをロードします。
[root@ovs326-6 ~]# modprobe e1000e
[root@ovs326-6 ~]# lsmod | grep e1000
e1000e 258218 0
e1000 164944 0
eth0 が認識されるようになります。
[root@ovs326-6 src]# ifconfig -aこれで OVS がネットワークに接続できるようになります。
bond0 Link encap:Ethernet HWaddr EC:A8:6B:FD:6F:63
inet addr:192.168.4.26 Bcast:192.168.4.255 Mask:255.255.255.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:184 errors:0 dropped:0 overruns:0 frame:0
TX packets:148 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:22686 (22.1 KiB) TX bytes:80761 (78.8 KiB)
eth0 Link encap:Ethernet HWaddr EC:A8:6B:FD:6F:63
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:184 errors:0 dropped:0 overruns:0 frame:0
TX packets:148 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:22686 (22.1 KiB) TX bytes:80761 (78.8 KiB)
Interrupt:20 Memory:f7c00000-f7c20000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:92 errors:0 dropped:0 overruns:0 frame:0
TX packets:92 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:19928 (19.4 KiB) TX bytes:19928 (19.4 KiB)
おまけ
OVS 3.2.6 がもともと持っている e1000e ドライバの情報
※ これでは NIC が認識しなかった。
[root@ovs326-6 ~]# modinfo e1000e | head
filename: /lib/modules/2.6.39-300.32.5.el5uek/kernel/drivers/net/e1000e/e1000e.ko
version: 2.0.0.1-NAPI
license: GPL
description: Intel(R) PRO/1000 Network Driver
author: Intel Corporation, <linux.nics@intel.com>
srcversion: 4E1E5D9368E2FAE279A50EE
alias: pci:v00008086d0000153Bsv*sd*bc*sc*i*
alias: pci:v00008086d0000153Asv*sd*bc*sc*i*
alias: pci:v00008086d00001503sv*sd*bc*sc*i*
alias: pci:v00008086d00001502sv*sd*bc*sc*i*
今回インストール(アップデート)したドライバの情報
[root@ovs326-6 ~]# modinfo e1000e | head
filename: /lib/modules/2.6.39-300.32.5.el5uek/kernel/drivers/net/e1000e/e1000e.ko
version: 2.5.4-NAPI
license: GPL
description: Intel(R) PRO/1000 Network Driver
author: Intel Corporation, <linux.nics@intel.com>
srcversion: 14FC0D45EE1DAA1B5E0DBBA
alias: pci:v00008086d000015A3sv*sd*bc*sc*i*
alias: pci:v00008086d000015A2sv*sd*bc*sc*i*
alias: pci:v00008086d000015A1sv*sd*bc*sc*i*
alias: pci:v00008086d000015A0sv*sd*bc*sc*i*
以上、OVS への NIC ドライバのインストールでした。
0 件のコメント:
コメントを投稿