お客様専用ページ > お客様専用FAQ

Fedora 16/RedHat 7, CentOS 7以降の eth0 ポートがないことによる問題

【Linuxのシステム設定】 Fedora 16, RedHat 7, CentOS 7 以降のデフォルトで、ネットワーク I/F の eth0 ポートが廃止されたことによる hostid="00000000"となる問題(ライセンスキーを取得できない)、あるいは、コンパイラコマンドを実行した時に、License Manager problem が生じるといった問題。
2015年4月補筆
2013年1月初稿
© 株式会社ソフテック

Question  Fedora 16 以降の OS 上に、PGI をインストールしたところ、/opt/pgi/license.info の Hostid 情報が 00000000 となり、Hostid が取得できていない。対処法と hostid の取得方法は?

Answer

この問題は、Fedora 15 以上で変更された「Network Device Naming変更」に因る eth0 と言うネーミングがデフォルトで廃止されたことによるものです。em1 とか p6p1と言った名前が、PGIの FLEXlm ライセンスマネージャが期待する eth0 とは異なっているため、FLEXlmライセンスマネージャに関係する utility がうまく動作しません。これによりHostidが00000000となってしまいます。

詳細は、以下に説明があります。

Fedora のリリースノート( Consistent Network Device Naming )

Change the network device naming scheme from ethX to a physical location-based name for easy identification and use.
http://fedoraproject.org/wiki/Features/ConsistentNetworkDeviceNaming

これを解決する方法を説明します。テスト環境に Fedora 17 をデフォルトの状態でインストールした場合を例として説明します。ifconfig コマンドを実施すると以下のネットワーク・インタフェース論理名が現れます。特に、p6p1 と言うポートが、従来は eth0 としてnaming されていたものです。

Fedora 19 以降、RedHat EL 7.0, CentOS 7 以降の場合は、必ず、こちらも参照してください(対策の方法に追加作業があります))

[root@photon30 ~]# ifconfig
lo: flags=73  mtu 16436
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 0  (Local Loopback)
        RX packets 98  bytes 6380 (6.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 98  bytes 6380 (6.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

p6p1: flags=4163  mtu 1500
        inet 192.168.0.30  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::52e5:49ff:fe38:ca8a  prefixlen 64  scopeid 0x20
        ether 50:e5:49:38:ca:8a  txqueuelen 1000  (Ethernet)
        RX packets 19717  bytes 24534818 (23.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11482  bytes 806446 (787.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 45  base 0x6000

この論理名は、p6p1 (PCI add-in card NICs)ではなく、別の名前(em0,em1...、LAN-on-Motherboard ports の場合)が付されているかもしれません。いずれにしても、「eth0 が無い」と言う状態になります。

FLEXlm ライセンスマネージャの Linux 版は、必ず eth0 のポートの MAC アドレスを参照してハンドリングを行います。ライセンスキーもこの eth0アドレスをキーとして生成されています。従って、eth0 が存在していないシステム上では、キーを生成するための hostid 情報を見つけることができません。また、lmgrd ライセンスマネージャも起動できません。

原因はこうした経緯で生じています。

さて、ここから解決方法を説明しますが、一番簡単な方法を説明します。
「Network Device Naming」の方法を昔の方法 eth0,eth1,...,ethX に戻す方法です。Fedora15 以降の新しい方法は biosdevname と言うモジュールで、 ハードウェアのポート名が naming されます。この biosdevname モジュールをシステムから削除することで、昔の naming style に戻ります(以下で述べる方法は、Fedora 17 で確認されています。Fedora 18は未確認ですが、同様な方法で可能かと思います。しかし、Fedora 19以降、Red Hat LE 7以降では、以下の方法だけでは eth0 ポート名が復活しません。この対策法に関しては、このページの後段で説明します。)

以下にその手順例を示します。
(1) この処理を行う前に、/etc/sysconfig/network-scripts配下に ifcfg-eth0 のファイルを作成することが必要です。デフォルトのインストールでは、ifcfg-em* と言ったファイルが存在するはずですので、ifcfg-em* を ifcfg-eth* に rename して下さい。その後、以下に述べる方法で、ファイルの中身を一部修正して下さい

root@photon30 network-scripts]# pwd
/etc/sysconfig/network-scripts

[root@photon30 network-scripts]# ls  
ifcfg-eth0   ifdown-ippp  ifdown-routes  ifup-bnep  ifup-isdn   ifup-routes       net.hotplug
ifcfg-lo     ifdown-ipv6  ifdown-sit     ifup-eth   ifup-plip   ifup-sit          network-functions
ifdown       ifdown-isdn  ifdown-tunnel  ifup-ippp  ifup-plusb  ifup-tunnel       network-functions-ipv6
ifdown-bnep  ifdown-post  ifup           ifup-ipv6  ifup-post   ifup-wireless
ifdown-eth   ifdown-ppp   ifup-aliases   ifup-ipx   ifup-ppp    init.ipv6-global

ifcfg-eth0 が存在すること。

(2) root 権限で biosdevname を削除

コマンド「yum remove biosdevname」を実行します。

[root@photon30 ~]# yum remove biosdevname

読み込んだプラグイン:fastestmirror, langpacks, presto, priorities, refresh-packagekit
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ biosdevname.x86_64 0:0.3.11-6.fc17 は 削除 です
--> 依存性解決を終了しました。

依存性を解決しました

==============================================================================================
 Package               アーキテクチャ      バージョン          リポジトリー        容量
==============================================================================================
削除中:
 biosdevname             x86_64            0.3.11-6.fc17       @anaconda-0          52 k

トランザクションの要約
==============================================================================================
削除  1 パッケージ

インストール済み容量: 52 k
これでいいですか? [y/N]y
パッケージをダウンロードしています:
トランザクションのチェックを実行してします。
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  削除中                  : biosdevname-0.3.11-6.fc17.x86_64                                                                     1/1
  検証中                  : biosdevname-0.3.11-6.fc17.x86_64                                                                     1/1

削除しました:
  biosdevname.x86_64 0:0.3.11-6.fc17

完了しました!

[root@photon30 ~]# reboot

その後、以下のようになる。eth0 復活

[root@photon30 ~]# ifconfig -a
eth0: flags=4163  mtu 1500
        inet 192.168.0.30  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::52e5:49ff:fe38:ca8a  prefixlen 64  scopeid 0x20
        ether 50:e5:49:38:ca:8a  txqueuelen 1000  (Ethernet)
        RX packets 2062  bytes 591148 (577.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2669  bytes 221369 (216.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 45  base 0x2000

lo: flags=73  mtu 16436
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 0  (Local Loopback)
        RX packets 118  bytes 7636 (7.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 118  bytes 7636 (7.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@photon30 ~]# route (ルーティングテーブルの確認 eth0)
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         photon0         0.0.0.0         UG    0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

現在のMACアドレスとポート名を確認

$ grep -H . /sys/class/net/*/address (以下は私のマシンの例)
/sys/class/net/eth0/address:54:04:a6:15:1d:04
/sys/class/net/lo/address:00:00:00:00:00:00

もし、eth0が見えない場合は、eth0 の設定が適切に行われていないものと思います。 まず、ifcfg-eth0 ファイルの中身を確認して下さい。

● インタフェース定義ファイルの確認と修正の一例

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
以下の 0 や 1 の suffix を除去(suffix 番号がついていなければ、そのままで良い)
HWADDR="00:0C:29:D1:2A:3A"
DOMAIN="softek.co.jp"
IPV6INIT="no"
UUID="5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03"
IPADDR0="192.168.1.5"
    ↓
IPADDR="192.168.1.5"
DNS1="192.168.1.1"
    ↓
DNS="192.168.1.1"
PREFIX0="24"
    ↓
PREFIX="24"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
NM_CONTROLLED="yes"
BOOTPROTO="none"
GATEWAY0="192.168.1.1"
    ↓
GATEWAY="192.168.1.1"
DEVICE="eth0"
TYPE="Ethernet"
ONBOOT="yes"
NAME="em0"
    ↓     
NAME="eth0"

以下のファイルも確認して下さい。

● /etc/udev/rules.d/70-persistent-net.rulesを確認し、 NAME="em1" 等を NAME="eth0" に修正

[root@photon31 ~]# cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x10ec:0x8168 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="54:04:a6:15:1d:04", 
ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

上記の  NAME="em1" を NAME="eth0"に変更。

以上のような方法で、eth0 ポートが復活したこと(ifconfigコマンド)を確認して下さい。

次に、すでに PGI のインストール(実装)は成功していますので、hostid だけを出力するコマンド(lmutil lmhostid) で、これを取得することができます。

(参考) http://www.softek.co.jp/SPG/Pgi/keyissue.html#linux
PGI関係の環境変数PATHを設定してから lmutil を実行してください。

■ Fedora 19以降, Red Hat(CentOS,Scientific Linux) 7 の場合の対処法

  1. 上記(1) で述べた、/etc/sysconfig/network-scripts/ifcfg-eth0ファイルを作成する。
  2. 上記(2) で述べた、root 権限で biosdevname を削除する(yum remove biosdevname)。
  3. /etc/default/grubファイルを編集する。GRUB_CMDLINE_LINUXの定義部分に、net.ifnames=0を追加する。例えば、以下のような行となる。
    GRUB_CMDLINE_LINUX="rd.md=0 rd.dm=0 rd.lvm.lv=fedora_muddy/root $([ -x /usr/sbin/rhcrashkernel-param ]
      && /usr/sbin/rhcrashkernel-param || rd.luks=0 vconsole.keymap=us 
      rd.lvm.lv=fedora_muddy/swap rhgb quiet net.ifnames=0 biosdevname=0"
  4. 以下のコマンドを実行して、grub 構成ファイルを再構築する。
    grub2-mkconfig -o /boot/grub2/grub.cfg
  5. システムをリブートする。これで、eth0 ポートが復活するはずです。