OpenSUSE 13: wickedd-dhcp6の起動時間が遅い問題の回避策

wickedd-dhcp6の起動時間が遅い問題を回避する方法について記載します。

1 wickedd-dhcp6の起動が遅い

IPv6ネットワークでない環境の場合、wickedd-dhcp6がタイムアウトしています。IPv6ネットワークの場合はDHCPv6の返答があるので、本問題は発生しないと思います。

> systemd-analyze
Startup finished in 2.542s (kernel) + 1.382s (initrd) + 22.252s (userspace) = 26.177s

wickedd-dhcp6の起動が遅いという問題が報告されていますが、wicked-0.6.39-36.1でも上記の起動時間なので別の問題なのかもしれません。

2 回避策

wickedd-dhcp6.serviceを起動させなければ良いのですが、wicked.serviceから必ず起動するようになっています。そこでwickedd-dhcp6のウェイトとタイムアウトの値を変更するか、NetworkManager.serviceを使う方法で回避します。

2.1 wickedd-dhcp6をカスタマイズする

IPv4ネットワークの場合はwickedd-dhcp6のウェイトとタイムアウトの値を短くすることでwickedd-dhcp6の待ち時間が改善されます。

> diff -uprN /etc/sysconfig/network/dhcp{.org,}
--- /etc/sysconfig/network/dhcp.org     2016-12-05 00:58:04.860081134 +0900
+++ /etc/sysconfig/network/dhcp 2016-12-05 01:05:54.648180334 +0900
@@ -239,7 +239,7 @@ DHCLIENT6_SLEEP="0"
 # When you increase this time, increase also the WAIT_FOR_INTERFACES variable
 # e.g. to a value twice as high as the time specified here.
 #
-DHCLIENT6_WAIT_AT_BOOT="15"
+DHCLIENT6_WAIT_AT_BOOT="1"

 ## Type:       integer
 ## Default:    "0"
@@ -248,7 +248,7 @@ DHCLIENT6_WAIT_AT_BOOT="15"
 # not get a reply from the dhcp server. Before you set this variable, take a
 # look at DHCLIENT6_WAIT_AT_BOOT allowing to continue in background instead.
 #
-DHCLIENT6_TIMEOUT="0"
+DHCLIENT6_TIMEOUT="1"

 ## Type:        list<rfc3004,string>
 ## Default:     string

2.2 wicked.serviceではなくNetworkManager.serviceを使う

wicked.serviceではなくNetworkManager.serviceでネットワークインターフェースを初期化するようにします。ただし、wicked.serviceを使うのがおそらく本流なので、マイナーなカスタマイズになる恐れがあります。

> sudo systemctl disable wicked.service
> sudo systemctl enable NetworkManager.service

3 実行結果

起動時間が15秒ほど短縮されました。

> systemd-analyze
Startup finished in 2.552s (kernel) + 1.319s (initrd) + 3.260s (userspace) = 7.132s