• このエントリーをはてなブックマークに追加

【CentOS7】networkが起動しない

  • このエントリーをはてなブックマークに追加

centos
zaco muraです。

久々にCentOS7をいじりましたが盛大にハマりました。
原因はしょーもないことだったんですが、かなり苦労したので備忘までに書いておきます。systemctlやnmcliに少し詳しくなれたのが怪我の功名。。

事象概要

ネットワークの起動に失敗する。
具体的には
①systemctl restart network.service
②/etc/init.d/network restart
の両方で失敗します。

環境

OS : CentOS Linux release 7.1.1503 (Core)
HW : HP DL360G7

詳細

centos7をインストールしてネットワークの設定を行いました。一通りしたところで設定反映のためrestartしたんですが、そこで失敗してしまいました。

# systemctl restart network.service
Restarting network (via systemctl):  Job for network.service failed. See
'systemctl status network.service' and 'journalctl -xn' for details.

なんか詳細を確認しろと言っているので、コマンド実行
(ちなみに cinder というのがホスト名)

# systemctl status network.service
network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network)
   Active: failed (Result: exit-code) since 金 2015-10-09 18:55:59 JST; 2s
ago
  Process: 22402 ExecStop=/etc/rc.d/init.d/network stop (code=exited,
status=0/SUCCESS)
  Process: 23109 ExecStart=/etc/rc.d/init.d/network start (code=exited,
status=1/FAILURE)

10月 09 18:55:59 cinder network[23109]: RTNETLINK answers: File exists
10月 09 18:55:59 cinder network[23109]: RTNETLINK answers: File exists
10月 09 18:55:59 cinder network[23109]: RTNETLINK answers: File exists
10月 09 18:55:59 cinder network[23109]: RTNETLINK answers: File exists
10月 09 18:55:59 cinder network[23109]: RTNETLINK answers: File exists
10月 09 18:55:59 cinder network[23109]: RTNETLINK answers: File exists
10月 09 18:55:59 cinder network[23109]: RTNETLINK answers: File exists
10月 09 18:55:59 cinder systemd[1]: network.service: control process exited,
code=exited status=1
10月 09 18:55:59 cinder systemd[1]: Failed to start LSB: Bring up/down
networking.
10月 09 18:55:59 cinder systemd[1]: Unit network.service entered failed
state.



# journalctl -xn
-- Logs begin at 金 2015-10-09 03:47:45 JST, end at 金 2015-10-09 18:55:59
JST. --
10月 09 18:55:59 cinder network[23109]: RTNETLINK answers: File exists
10月 09 18:55:59 cinder network[23109]: RTNETLINK answers: File exists
10月 09 18:55:59 cinder network[23109]: RTNETLINK answers: File exists
10月 09 18:55:59 cinder network[23109]: RTNETLINK answers: File exists
10月 09 18:55:59 cinder network[23109]: RTNETLINK answers: File exists
10月 09 18:55:59 cinder network[23109]: RTNETLINK answers: File exists
10月 09 18:55:59 cinder network[23109]: RTNETLINK answers: File exists
10月 09 18:55:59 cinder systemd[1]: network.service: control process exited,
code=exited status=1
10月 09 18:55:59 cinder systemd[1]: Failed to start LSB: Bring up/down
networking.
-- Subject: Unit network.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit network.service has failed.
--
-- The result is failed.
10月 09 18:55:59 cinder systemd[1]: Unit network.service entered failed
state.

どっちも同じで、RTNETLINK answers: File exists と言っている模様。ただ、このエラーは今までも見たことがあって、直接原因を表すようなものでは無かった気がした。(実際ググっても問題に直結しなかった)

もう少しデバッグしよう。わけのわからないsystemctlは使わずに

ということで、慣れ親しんだ /etc/init.d/network restart を試してみることに。

# /etc/init.d/network restart
Restarting network (via systemctl):  Job for network.service failed. See
'systemctl status network.service' and 'journalctl -xn' for details.
                                                           [失敗]

あれ?こいつもsystemctl使ってない?
そんなことは無いでしょう。ということで -x オプションを使ってより詳細なデバッグ

# bash -x /etc/init.d/network restart
+ . /etc/init.d/functions
++ TEXTDOMAIN=initscripts
++ umask 022
++ PATH=/sbin:/usr/sbin:/bin:/usr/bin
++ export PATH
++ '[' 17528 -ne 1 -a -z '' ']'
++ /bin/mountpoint -q /cgroup/systemd
++ /bin/mountpoint -q /sys/fs/cgroup/systemd
++ case "$0" in
++ _use_systemctl=1
~~~~中略~~~~
++ /bin/systemctl restart network.service
Job for network.service failed. See 'systemctl status network.service' and
'journalctl -xn' for details.
++ failure 'Restarting network (via systemctl): '
~~~~中略~~~~

やっぱりsystemctl使ってる。どういうこと??
でログを見ると、_use_systemctl=1という怪しい記述が。その前の部分を見ると、/etc/init.d/functionsというファイルをsourceしているようなので、そいつの中身を見てみることに。

/etc/init.d/XXX を実行してもsystemctlにリダイレクトするらしい

ということで、中身を見ると

# vim /etc/init.d/functions
if [ $PPID -ne 1 -a -z "$SYSTEMCTL_SKIP_REDIRECT" ] && \
                ( /bin/mountpoint -q /cgroup/systemd || /bin/mountpoint -q
/sys/fs/cgroup/systemd ) ; then
        case "$0" in
        /etc/init.d/*|/etc/rc.d/init.d/*)
                _use_systemctl=1
                ;;
        esac
fi

2行目の$SYSTEMCTL_SKIP_REDIRECTが空文字の場合、systemctlを使うよ、というように読める。ちなみに$SYSTEMCTL_SKIP_REDIRECTという変数はファイル中にどこにも無い。ということは、環境変数に設定して実行すればsystemctlを使わないのか??

SYSTEMCTL_SKIP_REDIRECTを設定してみた

実際に以下のコマンドを実行してみた

# SYSTEMCTL_SKIP_REDIRECT="enable" bash -x /etc/init.d/network restart
+ . /etc/init.d/functions
++ TEXTDOMAIN=initscripts
++ umask 022
++ PATH=/sbin:/usr/sbin:/bin:/usr/bin
++ export PATH
++ '[' 17528 -ne 1 -a -z enable ']'
++ '[' -z '' ']'
++ COLUMNS=80
++ '[' -z '' ']'
++ '[' -c /dev/stderr -a -r /dev/stderr ']'
+++ /sbin/consoletype
++ CONSOLETYPE=pty
++ '[' -z '' ']'
++ '[' -z '' ']'
++ '[' -f /etc/sysconfig/i18n -o -f /etc/locale.conf ']'
++ . /etc/profile.d/lang.sh
++ unset LANGSH_SOURCED
++ '[' -z '' ']'
++ '[' -f /etc/sysconfig/init ']'
++ . /etc/sysconfig/init
+++ BOOTUP=color
+++ RES_COL=60
+++ MOVE_TO_COL='echo -en \033[60G'
+++ SETCOLOR_SUCCESS='echo -en \033[0;32m'
+++ SETCOLOR_FAILURE='echo -en \033[0;31m'
+++ SETCOLOR_WARNING='echo -en \033[0;33m'
+++ SETCOLOR_NORMAL='echo -en \033[0;39m'
++ '[' pty = serial ']'
++
__sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'
++ '[' '' = 1 ']'
+ '[' '!' -f /etc/sysconfig/network ']'
+ . /etc/sysconfig/network


~~~~省略~~~~


+ /etc/init.d/network stop
インターフェース enp3s0f0 を終了中:                        [  OK  ]
インターフェース enp3s0f1 を終了中:                        [  OK  ]
インターフェース enp4s0f0 を終了中:  Device 'enp4s0f0' successfully disconnected.
                                                           [  OK  ]
インターフェース enp4s0f1 を終了中:                        [  OK  ]
インターフェース ens1f0 を終了中:  Device 'ens1f0' successfully disconnected.
                                                           [  OK  ]
インターフェース ens1f1 を終了中:                          [  OK  ]
ループバックインターフェースを終了中  '/etc/sysconfig/network-scripts/ifcfg-lo'
ファイルを読み込めませんでした。
'/etc/sysconfig/network-scripts/ifcfg-lo' ファイルを読み込めませんでした。
'/etc/sysconfig/network-scripts/ifcfg-lo' ファイルを読み込めませんでした。
'/etc/sysconfig/network-scripts/ifcfg-lo' ファイルを読み込めませんでした。
                                                           [  OK  ]
+ /etc/init.d/network start
ループバックインターフェイスを呼び込み中 '/etc/sysconfig/network-scripts/ifcfg-lo'
ファイルを読み込めませんでした。
'/etc/sysconfig/network-scripts/ifcfg-lo' ファイルを読み込めませんでした。
'/etc/sysconfig/network-scripts/ifcfg-lo' ファイルを読み込めませんでした。
'/etc/sysconfig/network-scripts/ifcfg-lo' ファイルを読み込めませんでした。
                                                           [  OK  ]
インターフェース enp4s0f0 を活性化中:  接続が正常にアクティベートされました (D-Bus アクティブパス:
/org/freedesktop/NetworkManager/ActiveConnection/17)
                                                           [  OK  ]
インターフェース ens1f0 を活性化中:  接続が正常にアクティベートされました (D-Bus アクティブパス:
/org/freedesktop/NetworkManager/ActiveConnection/18)
                                                           [  OK  ]
インターフェース ens1f1 を活性化中:  エラー: 接続のアクティベーションに失敗: Connection 'ens1f1' is not
available on the device ens1f1 at this time.
                                                           [失敗]
+ rc=1
+ exit 1

お、なんかさっきと違う。エラーの詳細がもうちょっと出たっぽい。
とりあえず、このやり方であれば /etc/init.d/network のスクリプトを実行(=systemctlを使わない)することがわかりました。

で、エラー内容を見てみると

インターフェース ens1f1 を活性化中: エラー: 接続のアクティベーションに失敗: Connection ‘ens1f1’ is not
available on the device ens1f1 at this time.
[失敗]

とのこと。さっきよりだいぶわかってきたぞ。

とりあえず現状のインターフェイス状態を見てみると

# nmcli connection
名前      UUID                                  タイプ          デバイス
enp4s0f1  47d00982-9f99-4989-9b08-021950ca01a9  802-3-ethernet  --
enp4s0f0  d2ffc1b4-150d-448f-93f6-a24e093d8463  802-3-ethernet  enp4s0f0
ens1f0    e580f09f-416c-45e9-95fd-d6d4a23c6ecc  802-3-ethernet  ens1f0
ens1f1    51efc6bc-f365-46f5-a7dd-0d1327666bf8  802-3-ethernet  --
ens1f1    bb762c2f-43d2-45c1-b162-2440daf058fa  802-3-ethernet  --
enp3s0f0  8bdd02cc-c35f-4681-b2c9-cde9761cd9a8  802-3-ethernet  --
enp3s0f1  19614cc6-b56f-4e04-b85a-5f7c33cc9e31  802-3-ethernet  --

# nmcli device
デバイス  タイプ    状態      接続
enp4s0f0  ethernet  接続済み  enp4s0f0
ens1f0    ethernet  接続済み  ens1f0
enp3s0f0  ethernet  利用不可  --
enp3s0f1  ethernet  利用不可  --
enp4s0f1  ethernet  利用不可  --
ens1f1    ethernet  利用不可  --
lo        loopback  管理無し  --

確かにens1f1はupもしていないしアクティブではない模様。
とりあえずconnectionを使える状態にしてみる

# nmcli connection add type ethernet ifname ens1f1 con-name ens1f1
接続 'ens1f1' (bb762c2f-43d2-45c1-b162-2440daf058fa) が正常に追加されました。

正常に追加されたらしいのでもう1回実行。
問題の箇所がわかったのでifupだけを試してみることに。

# bash -x /etc/sysconfig/network-scripts/ifup ens1f1
~~~~~
+ nmcli con up uuid 51efc6bc-f365-46f5-a7dd-0d1327666bf8
エラー: 接続のアクティベーションに失敗: Connection 'ens1f1' is not available on the device
ens1f1 at this time.
+ exit 4
~~~~~

やっぱりダメ。。。なんでだろう?

ここでいろいろ試してみること2時間、全く改善せず。

そして、この時ふと気が付く。

そもそもens1f1にケーブルつながってなくね?

ケーブルがつながってないんだからそりゃアクティベーションできないよね。そりゃ。だってアクティブじゃないもの。

結論:Centos7は使っていないインターフェイスはautoconnect offにしよう!

ここで、「ケーブルがつながってないインターフェイスをUPしようとするとエラーになるのでは?」という仮説にようやくたどり着く。ということで、自動起動しないように設定変更。

# nmcli connection modify ens1f1 connection.autoconnect no
#

続いてネットワークの起動

# systemctl restart network.service
#
# ↑(何もメッセージが出ない=成功)

やっと解決した。。。

自分の記憶が正しければ、centos5,6ではケーブルがつながってなくてもUP自体はできた(network restartが失敗しない)はずだったのに、centos7からは変わったのかな。
何はともあれめでたく起動成功しました。

まとめ

ということで、非常にしょーもないことで時間を浪費しましたが、少しcentos7に詳しくなれて良かったです。(systemctlを経由せずに/etc/init.d/スクリプトを使う方法がなかなか見つからなかった)

まぁこうやって慣れていくしかないんかな。。。

スポンサーリンク
Sponsords Link
  • このエントリーをはてなブックマークに追加

ZacoDesign

スポンサーリンク
Sponsords Link