2019年4月17日水曜日

Ubuntu Desktop 16.04で起動時にDHCPからのIPアドレス取得が遅く、NFSのマウントに失敗する

Ubuntu Desktop 16.04で起動時にDHCPからのIPアドレス取得が遅く、NFSのマウントに失敗するということがありました。これは
/lib/systemd/system/NetworkManager-wait-online.service

[Service]
Type=oneshot
ExecStart=/usr/bin/nm-online -s -q --timeout=30
RemainAfterExit=yes
の太字の部分を
[Service]
Type=oneshot
# ExecStart=/usr/bin/nm-online -s -q --timeout=30
ExecStart=/usr/bin/nm-online -s -q --timeout=90
RemainAfterExit=yes
とすることで回避できました。

これは、/var/log/syslogの内容を手がかかりにして見つけました。

  1. /var/log/syslogには以下のようなエラーが記録されていました。
    DHCPDISCOVER on enp2s0 to 255.255.255.255 port 67 interval 3 (xid=0xe6993237)
    DHCPDISCOVER on enp2s0 to 255.255.255.255 port 67 interval 8 (xid=0xe6993237)
    NetworkManager-wait-online.service: Main process exited, code=exited, status=1/FAILURE
    Failed to start Network Manager Wait Online.
    NetworkManager-wait-online.service: Unit entered failed state.
    NetworkManager-wait-online.service: Failed with result 'exit-code'.
    Reached target Network is Online.
    Mounting /home...
    mount.nfs: Failed to resolve server NFS0: Temporary failure in name resolution
  2. この「NetworkManager-wait-online.service」が怪しそうなので、検索をしてみると以下のWWWページがありました。
    デバイスの認識が遅くてnetwork.serviceがfailedになる問題
    https://qiita.com/kawaz/items/715d7ea761f13230607b

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

    systemctl enable NetworkManager-wait-online.service

    再起動してみる。…やったー、無事SSH入れたよ!network.service のステータス見ても failed しなくなってる!
  3. そこでこのサービスを確認し見たところ、enabledにはなっているがエラーがある(太字)。
    $ systemctl status NetworkManager-wait-online.service
    ● NetworkManager-wait-online.service - Network Manager Wait Online
    Loaded: loaded (/lib/systemd/system/NetworkManager-wait-online.service; enabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since …; 3min 40s ago
    Docs: man:nm-online(1)
    Process: 874 ExecStart=/usr/bin/nm-online -s -q --timeout=30 (code=exited, status=1/FAILURE)
    Main PID: 874 (code=exited, status=1/FAILURE)
  4. このサービスの記述ファイルをlocateコマンドで探して中を確認してみると以下のようになりました。
    $ locate NetworkManager-wait-online.service
    /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service
    /lib/systemd/system/NetworkManager-wait-online.service
    /var/lib/systemd/deb-systemd-helper-enabled/NetworkManager-wait-online.service.dsh-also
    /var/lib/systemd/deb-systemd-helper-enabled/network-online.target.wants/NetworkManager-wait-online.service
    $
    もう少し見てみると、
    $ cd /etc/systemd/system/network-online.target.wants/
    $ ls -l

    lrwxrwxrwx 1 root root  38  2月 19 19:50 networking.service -> /lib/systemd/system/networking.service
    lrwxrwxrwx 1 root root  54  2月 19 19:50 NetworkManager-wait-online.service -> /lib/systemd/system/NetworkManager-wait-online.service
    ようにシンボリックリンクとなっていて、/lib/systemd/system/NetworkManager-wait-online.service が本体のようです
  5. そこで/lib/systemd/system/NetworkManager-wait-online.serviceを最初に書いたように変更しました。
さらに、このUbuntu Desktop 16.04はサーバーとして運用しているのでGUIが不要です。そこで、以下のようにしてGUIを停止しました。
$ systemctl status lightdm
● lightdm.service - Light Display Manager
Loaded: loaded (/lib/systemd/system/lightdm.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/display-manager.service.d
         └─xdiagnose.conf
Active: active (running) since … 15:24:23 JST; 3min 28s 


$ sudo systemctl disable lightdm 
$
補足: この「IPアドレスが必要なサービスがIPアドレスの付与を待たない」という問題は、Ubuntu Server 18.04では解消されていました。