LinuxでNICが認識しない場合に気合でデバイスドライバをインストールする
先日、新しいマシンを組み立てました。
マザーボードはQ470。第10世代のCore i9を載せたハイスペック。そこにCentOSをクリーンインストールし、DBサーバとして使おうと思っていました。CentOSのバージョンは7.3。
ところが・・・・
7.3のインストーラDVDを入れて起動し、インストーラのネットワーク設定画面で、目が点になりました。
NICを認識してない!!!
NICのないLinuxなど、肉抜きの牛丼です。なんとかしなければなりません。
今日はそんな奮闘記を。コマンドは青字、編集内容は緑字で。
まず、インストールは、もう、進めるしかありません。ネットワーク設定をスキップし、とりあえず、最小インストールを実行。
再起動した後にログインしましたところ、やはりNICは認識していませんでした。
Ethernet controller: Intel Corporation Ethernet Connection 0x4d
マザーボードの製造元サイトを見て、NICの型番を調べました。
intelのI219-LMというものらしい。
どうやらintelがLinux用ドライバを提供してくれているようです。
ダウンロードして、コンパイルして、modprobeして、という流れです。
作業の前提として、以下3点。事前にやっときましょう。
・SELinuxは無効化しておく
・Firewalldも無効化しておく
・BIOSのSecureBootを無効化しておく
まずは、上のサイトからe1000e-3.8.4.tar.gzをダウンロードし、DVDに焼いて、CentOSに突っ込みます。
mount /dev/cdrom /media
cp /media/e1000e-3.8.4.tar.gz ~/
umount /media
次に、開発ツール類をyumでインストールします。
mount /dev/cdrom /media
vi /etc/yum.repos.d/CentOS-Media.repo
[dvd]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
file:///media/cdrom/
file:///media/cdrecorder/
file:///media/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
保存します。
yum update
開発ツールをインストールします。
yum disablerepo=* enablerepo=dvd groupinstall "Development Tools"
これでたぶん全部入ると思いますが、環境によってはkernel-headersやkernel-develを個別インストールしないとかも。念のため。
yum disablerepo=* enablerepo=dvd install kernel-headers kernel-devel
ここで再起動する必要があります。
shutdown -r now
再起動したら、突っ込んだe1000eのソースをコンパイルして、rpmを作り、インストールします。make installしてもいいのですが、後々rpmにしといたほうがスマートなので、rpmbuildしましょう。
rpmbuild -tb --clean e1000e-3.8.4.tar.gz
cd rpmbuild/RPMS/x86_64/
rpm -ivh e1000e-3.8.4-1.x86_64.rpm
これで、ドライバがインストールされます。
次は、モジュールをinsmodします。
insmod /lib/modules/3.10.0-1160.25.1.el7.x86_64/updates/drivers/net/ethernet/intel/e1000e/e1000e.ko
ここで、required key not availableエラーが出ることがあります。なんと、BIOSでSecureBootを有効にしていると、デバイスへのアクセスを遮断するようです。BIOS画面でSecureBootを無効化し、また起動し、再度insmodしましょう。
insmodが正常にいったら、modprobe。
modprobe e1000e
nmcli device show
すると、なにやらeno1というデバイス名で認識されたようです。
しかし、/etc/sysconfig/network-scripts配下にifcfg-eno1は存在しません。
なので、手で作ります。ここでは固定IPの例。
まずは、NICのUUIDを調べます。
nmcli con
表示されたUUIDをコピペしときます。
vi /etc/sysconfig/network-scripts/ifcfg-eno1
TYPE="Ethernet"
BOOTPROTO="static"
IPV6INIT="no"
NAME="eno1"
UUID="上で調べたUUID文字列"
DEVICE="eno1"
ONBOOT="yes"
NETBOOT="yes"
DNS1=192.168.1.50
DOMAIN=local
IPADDR=192.168.1.3
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
赤字のネットワークのパラメータは環境に応じて適宜変えてくださいね。
/etc/hostsも編集しときますか。
vi /etc/hosts
192.168.1.3 myhost myhost.local
ホスト名も編集しときましょう。
vi /etc/hostname
myhost.local
後は、ネットワークを再起動。
systemctl restart network
これでIPアドレスも付与されたはず。
ip a
おしまい。なかなか大変ですね、デバイスは。