概要
Ubuntu Server 20.04 LTSをインストールしたワークステーションを起動するとき、Linuxカーネルが「Starting Wait for Network to be Configured...」というメッセージを出力したまま2分ほど停止し、その後タイムアウトエラーとなる事象が発生していた。ネットで調べたところ、タイムアウトまでの時間を短縮する方法は見つかったものの、エラーは残り続ける。巡り巡って最終的に英語のウェブサイトにたどりついたので、以下に一例として日本語の備忘録を残しておく。
systemd-networkd-wait-onlineはLinuxデーモンのひとつsystemdの一部で、ネットワークの接続が確立するまで待機するという動きをするものらしい。
セットアップしていたワークステーションにはLANポートが複数存在し、そのうちひとつは有効なネットワークに接続していたが、残りのポートにはLANケーブルを挿入していなかった。このため、残りのケーブルを刺していないLANポートでのネットワークへの接続確立まで待機しようとしたのが、今回の起動時の動きのようだ。なので、systemd-networkd-wait-onlineが起動するときに、LANケーブルが刺さっていないポートを無視するよう、以下の方法で設定ファイルに追記し、エラーの出力を回避する。
ちなみに、systemd-networkd-wait-onlineはデフォルトで最大2分間待機する仕様となっている。毎回決まって2分程度停止するのもそれが原因だった。
解決方法
sudo su -
コマンドを使ってrootユーザでログイン。systemctl status systemd-networkd-wait-online
でステータスを確認する。
root@hogehoge:~# systemctl status systemd-networkd-wait-online
● systemd-networkd-wait-online.service - Wait for Network to be Configured
Loaded: loaded (/usr/lib/systemd/system/systemd-networkd-wait-online.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2021-05-22 15:22:08 JST; 3min 54s ago
Docs: man:systemd-networkd-wait-online.service(8)
Process: 901 ExecStart=/usr/lib/systemd/systemd-networkd-wait-online (code=exited, status=1/FAILURE)
Main PID: 901 (code=exited, status=1/FAILURE)
May 22 15:20:08 hogehoge systemd[1]: Starting Wait for Network to be Configured...
May 22 15:22:08 hogehoge systemd-networkd-wait-online[901]: Event loop failed: Connection timed out
May 22 15:22:08 hogehoge systemd[1]: systemd-networkd-wait-online.service: Main process exited, code=exited, status=1/FAILURE
May 22 15:22:08 hogehoge systemd[1]: systemd-networkd-wait-online.service: Failed with result 'exit-code'.
May 22 15:22:08 hogehoge systemd[1]: Failed to start Wait for Network to be Configured.
Loaded:を確認すると、設定ファイルが/usr/lib/systemd/system/systemd-networkd-wait-online.service
であることがわかる。このファイルパスを控えておく。
次に、networkctl
コマンドでLANポートの状態を確認する。
root@hogehoge:~# networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 eth0 ether no-carrier configuring
3 eth1 ether no-carrier configuring
4 eth2 ether routable configured
5 eno1 ether no-carrier configuring
5 links listed.
LANケーブルを接続しているポートeth2だけがOPERATIONALがroutable、SETUPがconfiguredになっている。OPERATIONALがno-carrier、SETUPがcofiguringになってるポートは、OSに認識されているが、ネットワーク接続が確立されていないポートである(今回の例だとeth0
、eth1
、eno1
)。このポート名もすべて控えておく。
そして、VimやEmacsといったエディタで設定ファイル/usr/lib/systemd/system/systemd-networkd-wait-online.service
を開き、[Service]のExecStart=...
行の末尾に、--ignore=控えたポート名
を追記する。
root@hogehoge:~# vi /usr/lib/systemd/system/systemd-networkd-wait-online.service
(前省略)
[Service]
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --ignore=eth0 --ignore=eth1 --ignore=eno1
(後省略)
また、systemctl edit sytemd-networkd-wait-online.service
コマンドでも編集が可。この場合、ファイルパスを指定する必要はなく、systemctl
コマンドに付属するエディタで設定ファイルを開く。--full
オプションはお好みで。
無視するポートを指定するのではなく、タイムアウトまでの時間を変更したい場合は、--timeout=秒数
を--ignore
と同じように追記すればよい。
追記できたら、設定ファイルを保存してエディタを終了。reboot
コマンドで再起動する。設定がうまくいっていれば、カーネル起動時のメッセージはスムーズに流れていく。
最後に念の為、もう一度systemctl status systemd-networkd-wait-online
コマンドを入力して、状態を確認。
root@hogehoge:~# systemctl status systemd-networkd-wait-online
● systemd-networkd-wait-online.service - Wait for Network to be Configured
Loaded: loaded (/usr/lib/systemd/system/systemd-networkd-wait-online.service; enabled; vendor preset: enabled)
Active: active (exited) since Fri 2021-05-22 15:31:34 JST; 1min 5s ago
Docs: man:systemd-networkd-wait-online.service(8)
Process: 898 ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --ignore=eth0 --ignore=eth1 --ignore=eno1 (code=exited, status=0/SUCCESS)
Main PID: 898 (code=exited, status=0/SUCCESS)
May 22 15:31:31 hogehoge systemd[1]: Starting Wait for Network to be Configured...
May 22 15:31:34 hogehoge systemd-networkd-wait-online[898]: managing: eth2
May 22 15:31:34 hogehoge systemd[1]: Finished Wait for Network to be Configured.
Active:active (existed)になっていればOK。
参考
https://github.com/systemd/systemd/issues/5154
https://bbs.archlinux.org/viewtopic.php?id=256366