Help us understand the problem. What is going on with this article?

デバイスの認識が遅くてnetwork.serviceがfailedになる問題

More than 3 years have passed since last update.

自宅鯖にCentOS7を入れたんだけど起動時にネットワークデバイスの初期化(link up?)が終わる前に、systemctl network.service start が行われてしまって、network.service が failed になってしまう問題が起きて困っていた。

症状

1. 現象としてはまず以下の様なログが出てる。

Mar 30 05:39:22 r16 NetworkManager[829]: Failed to activate 'enp3s0': Connection 'enp3s0' is not available on the device enp3s0 at this time.
Mar 30 05:39:22 r16 network: インターフェース enp3s0 を活性化中: エラー: 接続のアクティベーションに失敗: Connection 'enp3s0' is not available on the device enp3s0 at this time.
Mar 30 05:39:22 r16 NetworkManager[829]: NetworkManager state is now DISCONNECTING
Mar 30 05:39:22 r16 NetworkManager[829]: NetworkManager state is now DISCONNECTED
Mar 30 05:39:22 r16 network: [失敗]
Mar 30 05:39:22 r16 systemd: network.service: control process exited, code=exited status=1
Mar 30 05:39:22 r16 systemd: Failed to start LSB: Bring up/down networking.
Mar 30 05:39:22 r16 systemd: Unit network.service entered failed state.

2. でもこの後すぐに sshd とか firewalld とかが起動し始めちゃってる。でも firewalld が起動した時にはネットワークインターフェースがまだ無いので sshd の TCP22番ポートのルールが iptables に上手く追加できなくて有効になってくれくれない。

3. しかしその数秒送れで更に以下の様なログが出ていてNICの link up は果たされる。そしてこの時点で ping は通るようになっているのだ。

Mar 30 05:39:24 r16 kernel: r8169 0000:03:00.0 enp3s0: link up
Mar 30 05:39:24 r16 kernel: IPv6: ADDRCONF(NETDEV_CHANGE): enp3s0: link becomes ready
Mar 30 05:39:24 r16 NetworkManager[829]: (enp3s0): link connected
Mar 30 05:39:24 r16 NetworkManager[829]: (enp3s0): device state change: unavailable -> disconnected (reason 'carrier-changed') [20 30 40]
Mar 30 05:39:24 r16 NetworkManager[829]: Auto-activating connection 'enp3s0'.
Mar 30 05:39:24 r16 NetworkManager[829]: Activation (enp3s0) starting connection 'enp3s0'
Mar 30 05:39:24 r16 NetworkManager[829]: Activation (enp3s0) Stage 1 of 5 (Device Prepare) scheduled...
Mar 30 05:39:24 r16 NetworkManager[829]: Activation (enp3s0) Stage 1 of 5 (Device Prepare) started...

4. だがfirewalldは既に起動を終えており、肝心のsshポートは開かないまま。起動シーケンスは最後まで実行されて終了…。

5. 仕方ないのでコンソールからログインして systemctl restart firewalld.service を手で実行してやることでsshは一応出来るようになると言う状態だ。

解決策

ダメな奴(一応解決はするんだけどね…)

とりあえず、/etc/rc.local に

sleep 5; systemctl restart network.service; systemctl restart firewalld.service

とか書いとけば一応繋げれるようになる。だが如何にもダメな奴だw

本解決

色々試しつつ、ふと systemctl list-unit-files を見てたら NetworkManager-wait-online.service なんて名前のサービスがあるじゃない!?デフォルトではdisabledらしいが、いかにも僕の問題を解決してくれそうなサービス名である。おもむろに有効化。

systemctl enable NetworkManager-wait-online.service

再起動してみる。…やったー、無事SSH入れたよ!network.service のステータス見ても failed しなくなってる!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away