snap版lxdのdnsエラー解決方法

はじめに

lxdチュートリアルのようにコンテナ作成コマンドを実行すると

~$ lxc launch ubuntu:18.04 first
Creating first
Error: Failed container creation: Get https://cloud-images.ubuntu.com/releases/streams/v1/index.json: lookup cloud-images.ubuntu.com on [::1]:53: read udp [::1]:48280->[::1]:53: read: connection refused

ん?名前解決エラー?インストールしたときはできてたやん。

原因

lxdのサービスが開始する前に、NetworkManagerが完全に起動できていないため、dnsの参照先を見失う。

~$ sudo  journalctl -u snap.lxd.daemon --no-tail
-- Logs begin at Mon 2019-08-26 16:50:48 JST, end at Tue 2019-08-27 13:37:25 JST. --
 8月 26 16:50:51 server1 systemd[1]: Started Service for snap application lxd.daemon.
 8月 26 16:50:51 server1 lxd.daemon[1073]: => Preparing the system
 8月 26 16:50:51 server1 lxd.daemon[1073]: ==> Loading snap configuration
 8月 26 16:50:51 server1 lxd.daemon[1073]: ==> Setting up mntns symlink (mnt:[4026532483])
 8月 26 16:50:51 server1 lxd.daemon[1073]: ==> Setting up persistent shmounts path
 8月 26 16:50:51 server1 lxd.daemon[1073]: ====> Making LXD shmounts use the persistent path
 8月 26 16:50:51 server1 lxd.daemon[1073]: ====> Making LXCFS use the persistent path
 8月 26 16:50:51 server1 lxd.daemon[1073]: ==> Setting up kmod wrapper
 8月 26 16:50:51 server1 lxd.daemon[1073]: ==> Preparing /boot
 8月 26 16:50:51 server1 lxd.daemon[1073]: ==> Preparing a clean copy of /run
 8月 26 16:50:51 server1 lxd.daemon[1073]: ==> Preparing a clean copy of /etc
 8月 26 16:50:52 server1 lxd.daemon[1073]: ====> Unusual /etc/resolv.conf detected, using workaround
 8月 26 16:50:52 server1 lxd.daemon[1073]: cat: /etc/resolv.conf: そのようなファイルやディレクトリはありません
 8月 26 16:50:52 server1 lxd.daemon[1073]: ==> Setting up ceph configuration
 8月 26 16:50:52 server1 lxd.daemon[1073]: ==> Setting up LVM configuration
 8月 26 16:50:52 server1 lxd.daemon[1073]: ==> Rotating logs
 8月 26 16:50:52 server1 lxd.daemon[1073]: ==> Escaping the systemd cgroups
 8月 26 16:50:52 server1 lxd.daemon[1073]: ====> Detected cgroup V1
 8月 26 16:50:52 server1 lxd.daemon[1073]: ==> Escaping the systemd process resource limits
 8月 26 16:50:52 server1 lxd.daemon[1073]: ==> Enabling unprivileged containers kernel support
 8月 26 16:50:52 server1 lxd.daemon[1073]: ==> Disabling shiftfs on this kernel (auto)
 8月 26 16:50:52 server1 lxd.daemon[1073]: ==> Detected kernel with partial AppArmor support
 8月 26 16:50:52 server1 lxd.daemon[1073]: => Starting LXCFS
 8月 26 16:50:52 server1 lxd.daemon[1073]: => Starting LXD
 8月 26 16:50:52 server1 lxd.daemon[1073]: mount namespace: 5
 8月 26 16:50:52 server1 lxd.daemon[1073]: hierarchies:
 8月 26 16:50:52 server1 lxd.daemon[1073]:   0: fd:   6: rdma
 8月 26 16:50:52 server1 lxd.daemon[1073]:   1: fd:   7: net_cls,net_prio
 8月 26 16:50:52 server1 lxd.daemon[1073]:   2: fd:   8: blkio
 8月 26 16:50:52 server1 lxd.daemon[1073]:   3: fd:   9: freezer
 8月 26 16:50:52 server1 lxd.daemon[1073]:   4: fd:  10: memory
 8月 26 16:50:52 server1 lxd.daemon[1073]:   5: fd:  11: cpuset
 8月 26 16:50:52 server1 lxd.daemon[1073]:   6: fd:  12: devices
 8月 26 16:50:52 server1 lxd.daemon[1073]:   7: fd:  13: perf_event
 8月 26 16:50:52 server1 lxd.daemon[1073]:   8: fd:  14: pids
 8月 26 16:50:52 server1 lxd.daemon[1073]:   9: fd:  15: cpu,cpuacct
 8月 26 16:50:52 server1 lxd.daemon[1073]:  10: fd:  16: name=systemd
 8月 26 16:50:52 server1 lxd.daemon[1073]:  11: fd:  17: unified
 8月 26 16:50:52 server1 lxd.daemon[1073]: t=2019-08-26T16:50:52+0900 lvl=warn msg="CGroup memory swap accounting is disabled, swap limits will be ignored."
 8月 26 16:50:52 server1 lxd.daemon[1073]: t=2019-08-26T16:50:52+0900 lvl=warn msg="Failed to update instance types: Get https://images.linuxcontainers.org/meta/instance-types/.yaml: lookup images.linuxcontainers.org on [::1]:53: read u
 8月 26 16:50:52 server1 lxd.daemon[1073]: t=2019-08-26T16:50:52+0900 lvl=warn msg="Unable to refresh cache, using stale entry" server=https://cloud-images.ubuntu.com/releases
 8月 26 16:50:53 server1 lxd.daemon[1073]: => LXD is ready
 8月 27 13:23:15 server1 lxd.daemon[1073]: t=2019-08-27T13:23:15+0900 lvl=warn msg="Unable to refresh cache, using stale entry" server=https://cloud-images.ubuntu.com/releases
 8月 27 13:23:31 server1 lxd.daemon[1073]: t=2019-08-27T13:23:31+0900 lvl=warn msg="Unable to refresh cache, using stale entry" server=https://cloud-images.ubuntu.com/releases
 8月 27 13:31:55 server1 lxd.daemon[1073]: t=2019-08-27T13:31:55+0900 lvl=warn msg="Unable to refresh cache, using stale entry" server=https://cloud-images.ubuntu.com/releases

/etc/resolv.confが存在しない。

8月 26 16:50:52 server1 lxd.daemon[1073]: cat: /etc/resolv.conf: そのようなファイルやディレクトリはありません

解決策

なぜこんな事が起きるのか。これはsystemdのサービスの記述を見ればわかります。

~$ cat /etc/systemd/system/snap.lxd.daemon.service
[Unit]
# Auto-generated, DO NOT EDIT
Description=Service for snap application lxd.daemon
Requires=snap-lxd-11727.mount
Wants=network.target
After=snap-lxd-11727.mount network.target
X-Snappy=yes

[Service]
ExecStart=/usr/bin/snap run lxd.daemon
SyslogIdentifier=lxd.daemon
Restart=on-failure
WorkingDirectory=/var/snap/lxd/11727
ExecStop=/usr/bin/snap run --command=stop lxd.daemon
ExecReload=/usr/bin/snap run --command=reload lxd.daemon
TimeoutStopSec=600
Type=simple

lxdの依存として、snapとnetworkに依存しています。が、これはネットワークプロセスの起動に成功したことに依存するだけで、ネットワークが正常に使用できることに依存していません。

黄色の線を超えたとき、Networkが利用可能になります。

それよりも先にlxdが起動しているため、dnsを設定できません。

なので、このファイルに、ネットワークがオンラインになることを依存として記述します。

Wantsに network-online.target を追加します。

~$ cat /etc/systemd/system/snap.lxd.daemon.service
[Unit]
# Auto-generated, DO NOT EDIT
Description=Service for snap application lxd.daemon
Requires=snap-lxd-11727.mount
Wants=network.target network-online.target
After=snap-lxd-11727.mount network.target
X-Snappy=yes

[Service]
ExecStart=/usr/bin/snap run lxd.daemon
SyslogIdentifier=lxd.daemon
Restart=on-failure
WorkingDirectory=/var/snap/lxd/11727
ExecStop=/usr/bin/snap run --command=stop lxd.daemon
ExecReload=/usr/bin/snap run --command=reload lxd.daemon
TimeoutStopSec=600
Type=simple

これでNetwork起動まで待ってくれます。

今すぐ解決したい場合

すでに起動が完了しているので、lxdのサービスを再起動することで治ります。

sudo systemctl restart snap.lxd.daemon.service

未分類

Posted by penM