はじめに
先日Ubuntu
の新しいLTSとなるUbuntu 24.04
が公開されたため、自宅のサーバOSをUbuntu Server 24.04
に入れ替えていたのですが、起動時にsystemd-networkd-wait-online.service
で2分ほど待たされるようになったため、待たされないようにした方法を残しておこうと思います。
systemd-networkd-wait-online.serviceで待たされる問題
私は基本的にはテスト用のサーバ用途で使うことが多いため、Ubuntu Server
を使っており、たまにVirtualBox
やVMware Workstation Player
などGUIで操作するアプリケーションを使うこともあるため、邪道かもしれませんが、Ubuntu Server
にGUI環境もインストールして使っています。
問題は、Ubuntu Server 24.04
にデスクトップサービスやxrdp
をインストール後、再起動した際に発生しました。
起動時にsystemd-networkd-wait-online.service
のチェックに失敗し、以下のようにデフォルトのタイムアウト時間となる2分待機させられてしまうため、起動はしますが時間がかかってしまいます。
ちなみにsystemd-networkd-wait-online.service
はネットワークが起動する前に他のアプリケーションが起動して、ネットワークが見つからずにエラーとなってしまうことを防ぐためにネットワークが起動し終わるまでに待機するためのサービスのようです。
タイムアウトとなるため、ネットワークが起動できていないかと思いきや、そんなことはなく、起動後はサーバに繋がるため、ネットワークサービス自体には問題がないようです。
以下調査した結果をまとめていこうと思いますが、対処法だけ知りたい方は以下にお進みください。
- 対処法その1:systemd-networkd-wait-online.serviceの停止
- 対処法その2:レンダリングエンジンをnetworkdに戻す
- 対処法その3:systemd-networkdの設定も行う
原因調査
調べてみると、systemd-networkd-wait-online.service
を止めてしまう方法や、LANが繋がっていないインタフェースを除外する方法等が出てきましたが、止めてしまうとネットワークが起動し終わる前に他のサービスが起動してしまうこともありうるのでできれば止めたくありません。
また、LANが繋がっていないインタフェースを除外しようにも、1つのインタフェースだけでも問題が発生したため、今回の問題とは事象が異なるようです。
ということで、他の方法がないか色々と調べた結果を以下に示します。
原因切り分け
事象再現のため、VirtualBox
で同様の構成を構築してみたところ、2分待たされる問題が発生しました。
項目 | 内容 |
---|---|
OS | Ubuntu Server 24.04 LTS |
インタフェース数 | 1つ(物理ネットワークにブリッジ) |
主なインストールアプリケーション | ubuntu-desktop、xrdp |
GUI系のサービスをインストールするまでは2分待たされることはなかったので、GUI系サービスが影響しているだろうというところまで分かりました。
また、最初からGUI環境もインストールされるUbuntu Desktop 24.04 LTS
にubuntu-desktop
やxrdp
をインストールして再起動を行ってみたところ、Ubuntu Desktop
では2分待たされることはありませんでした。
Ubuntu ServerとUbuntu Desktopの違い
どういうこっちゃ?と思いつつ、Ubuntu Server
とUbuntu Desktop
について調べてみると、Ubuntu Server
とUbuntu Desktop
ではデフォルトのネットワークサービスが異なるとのこと。
OS | デフォルトネットワークサービス |
---|---|
Ubuntu Server 24.04 LTS | systemd-networkd |
Ubuntu Desktop 24.04 LTS | NetworkManager |
それぞれネットワーク系サービスのインストールと起動有無をまとめたものが以下となります。
ネットワーク系サービス | Ubuntu Server 24.04 LTS | Ubuntu Desktop 24.04 LTS |
---|---|---|
systemd-networkd | 自動起動 | 未起動 |
NetworkManager | 未インストール | 自動起動 |
systemd-networkd-wait-online | 自動起動 | 未起動 |
NetworkManager-wait-online | 未インストール | 自動起動 |
Ubuntu Desktop
はサービスとしては使われていませんが、インストールはされている状態のようです。
Ubuntu Server
はNetworkManager
がそもそもインストールされていない状態のようです。
問題の原因仮説
途中で飽きてしまい、根本原因の裏取りまで行きつかなかったので仮説までとしておきます。
NetworkManager
は以下のようにGUIでネットワークインタフェースの設定等行う際のサービスとしても使われています。
Ubuntu 24.04
ではネットワークはNetPlan
の設定と統合されたようなので、Ubuntu Server
でも、Ubuntu Desktop
でも、/etc/netplan
配下にNetPlan
のファイルが置かれていればネットワークが設定されます。
しかし、systemd-networkd-wait-online
サービスではNetworkManager
で起動されたネットワークはおそらく管理外のため起動判定されず、タイムアウトまでの2分間待機する動作となっていると思われます。
今回は、Ubuntu Server
にGUI環境をインストールしたタイミングでNetworkManager
がインストールされたことで、NetworkManager
が動き出し、おそらくデフォルトのネットワークレンダリングエンジンがNetworkManager
に変わったことでsystemd-networkd
の起動状態を監視するsystemd-networkd-wait-online
が正常に判定できず、タイムアウトまで待ってしまったということなのかと思われます。
対処法その1:systemd-networkd-wait-online.serviceの停止
おそらくGUI環境を構築するとNetworkManager
がデフォルトのネットワークレンダリングエンジンとなることでチェックできずにタイムアウトまで待つことになるため、そもそもの原因となるsystemd-networkd-wait-online.service
を止めてしまう方法となります。
NetworkManager
でネットワークの起動は問題無くでき、NetworkManager-wait-online.service
といったサービスもあるため、systemd-networkd-wait-online.service
を止めてしまってもおそらく問題ないと思いますが、停止する場合はしっかりと検証してから行うようにしてください。
systemctl disable --now systemd-networkd-wait-online.service
対処法その2:レンダリングエンジンをnetworkdに戻す
ネットワークレンダリングエンジンがNetworkManager
に変わることで問題が発生しているため、ネットワークレンダリングエンジンをNetworkManager
からnetworkd
に戻す方法となります。
/etc/netplan
配下にデフォルトで生成されるyamlファイル(今回の場合、50-cloud-init.yaml
)を編集してレンダリングエンジンを明示的に記載することにより、systemd-networkd
で動くようになります。
network:
renderer: networkd ←左記追加
ethernets:
enp0s3:
(以下略)
上記設定を行うことでNetworkManager
からsystemd-networkd
に変わってしまうことから、GUI上からのネットワーク設定はできなくなるためご注意ください。
※アイコンもネットワーク設定項目も無くなる。
対処法その3:systemd-networkdの設定も行う
systemd-networkd
の状態はnetworkctl
コマンドで認識されているネットワークの管理状態などを確認することができます。
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 enp0s3 ether routable unmanaged
2 links listed.
仮説ですが、GUI環境をインストールすることでデフォルトネットワークエンジンがNetworkManager
に変わった際、systemd-networkd
が/etc/netplan
配下のファイルでネットワークの判定ができなくなることで失敗しているものと思われます。
GUI環境をインストールするまではnetworkctl
の結果が、systemd-networkd
で管理されていないunmanaged
の状態でも起動判定してくれるようですが、GUI環境をインストールしてしまうと、管理状態のネットワークにしないといけないようなので、NetworkManager
の設定はそのままに、本来のsystemd-networkd
のやり方でsystemd-networkd
の設定も追加する方法となります。
本来、systemd-networkd
の設定を行う場合、/etc/systemd/network
配下に〜.network
ファイルを作成することでsystemd-networkd
の管理下になるため、新規で〜.network
ファイルを作成します。
今回はIPアドレスを固定させたかったため、50-wired.network
というファイル名で以下のように設定しました。
[Match]
Name=enp0s3
[Network]
DHCP=no
DNS=8.8.8.8
DNS=8.8.4.4
NTP=ntp.nict.jp
[Address]
Address=192.168.0.51/24
[Route]
Gateway=192.168.0.1
設定後、ネットワークをリロードします。
networkctl reload
リロード後、再度networkctl
コマンドを実行して、enp0s3
がconfigured
になっていればOKです。
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 enp0s3 ether routable configured
2 links listed.
ついでに、networkctl status enp0s3
と実行すると、設定したNTPやDNSも確認することができます。
● 2: enp0s3
Link File: /usr/lib/systemd/network/99-default.link
Network File: /etc/systemd/network/50-wired.network
State: routable (configured)
Online state: online
Type: ether
Path: pci-0000:00:03.0
Driver: e1000
Vendor: Intel Corporation
Model: 82540EM Gigabit Ethernet Controller (PRO/1000 MT Desktop Adapter)
Hardware Address: 08:00:27:6a:09:7d (PCS Systemtechnik GmbH)
MTU: 1500 (min: 46, max: 16110)
QDisc: pfifo_fast
IPv6 Address Generation Mode: eui64
Number of Queues (Tx/Rx): 1/1
Auto negotiation: yes
Speed: 1Gbps
Duplex: full
Port: tp
Address: 192.168.0.51
2400:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
fe80::a00:27ff:fe6a:97d
Gateway: 192.168.0.1
fe80::2a0:deff:fe7d:792
DNS: 8.8.8.8
8.8.4.4
2400:4051:e01:d500::1
NTP: ntp.nict.jp
2404:1a8:1102::b
2404:1a8:1102::a
Activation Policy: up
Required For Online: yes
DHCP6 Client IAID: 0xe2343f3e
DHCP6 Client DUID: DUID-EN/Vendor:0000ab11e4a5cff67bd4f086
5月 12 18:46:08 vmware systemd-networkd[696]: enp0s3: Configuring with /etc/systemd/network/50-wired.network.
5月 12 18:46:08 vmware systemd-networkd[696]: enp0s3: Link UP
5月 12 18:46:08 vmware systemd-networkd[696]: enp0s3: Gained carrier
5月 12 18:46:09 vmware systemd-networkd[696]: enp0s3: Gained IPv6LL
今回の設定の場合、GUI上からは以下のようにnetplan-enp0s3
とenp0s3
の2つのネットワーク設定が存在し、赤枠のenp0s3
の設定が有効となっていることが確認できます。
この場合、NetworkManager
も有効であり、systemd-networkd
の設定も行われていることから、GUI上からネットワークの設定も行うことができ、OS起動時にsystemd-networkd-wait-online.service
で待たされることも無くなります。
設定ファイルはNetworkManager
とsystemd-networkd
の二重で管理しているように見えるため、運用する場合は気をつける必要がありますが、特にサービス停止等行わずに対応できるため、他の対処法よりは動作検証や影響調査が少なくて済むのではないかと思います。
おわりに
Ubuntu 24.04
は公開されてから1ヶ月も経っておらず、情報もまだ少なかったので苦労しましたが、調査をしたことで、Ubuntu 24.04
のネットワークサービスの構成やUbuntu Server
とUbuntu Desktop
の違いなど、なんとなく知ることができました。
以前のLTSとなるUbuntu 22.04
から比較しても色々と変わっているところが多く、ネットワークインストールがどうしてもうまくいかなかったり、まだ使いたいアプリが対応していなかったりと、問題は山積みですが、自宅サーバなのでぼちぼち改善していこうと思います。