はじめに
私がVagrantで遊んでいるときに直面したエラーでした.
Vagrantだけではなく,ubuntu20によくあるエラーらしいので,次に直面したとき用に残しておきます.
環境
- 母艦:Ubuntu18.04.5LTS
- Vagrant & Virtualbox 使用
- ubuntu20.04をインストール
- bridged network interfaces : br0
状況
vagrant up
でVMを立ち上げたのち,
vagrant ssh
で接続して,apt update
でエラー
vagrant@ubuntu2004:~$ sudo apt update
Err:1 http://jp.archive.ubuntu.com/ubuntu focal InRelease
Temporary failure resolving 'jp.archive.ubuntu.com'
Err:2 http://security.ubuntu.com/ubuntu focal-security InRelease
Temporary failure resolving 'security.ubuntu.com'
Err:3 http://jp.archive.ubuntu.com/ubuntu focal-updates InRelease
Temporary failure resolving 'jp.archive.ubuntu.com'
Err:4 http://jp.archive.ubuntu.com/ubuntu focal-backports InRelease
Temporary failure resolving 'jp.archive.ubuntu.com'
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
W: Failed to fetch http://jp.archive.ubuntu.com/ubuntu/dists/focal/InRelease Temporary failure resolving 'jp.archive.ubuntu.com'
W: Failed to fetch http://jp.archive.ubuntu.com/ubuntu/dists/focal-updates/InRelease Temporary failure resolving 'jp.archive.ubuntu.com'
W: Failed to fetch http://jp.archive.ubuntu.com/ubuntu/dists/focal-backports/InRelease Temporary failure resolving 'jp.archive.ubuntu.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/focal-security/InRelease Temporary failure resolving 'security.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.
エラーを調べてみると,
どうやらDNSの名前変換がうまくいっていないらしい.
DNSがどうなってるか確認してみる.
$ cat /etc/resolv.conf
nameserver 127.0.0.53
options edns0 trust-ad
と出力.
nameserver(DNS)が127.0.0.53って何?
これもまた調べてみると,
Ubuntuの方のバグで,シンボリックリンクの参照先が別のところになってしまっているらしい.
確認してみる.
$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 12月 13 23:01 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
上記のように,本来は/run/systemd/resolve/stub-resolv.conf
となるところが,
1個ディレクトリが上がったところから参照している.
これでは,原因のファイルである/etc/resolv.conf
と/run/systemd/resolve/stub-resolv.conf
の2つを修正しても直らない.
(修正後にsudo systemctl restart systemd-resolved
で更新するため,
元通りになってsudo apt update
が通らない.)
対処
そのため,DNSを編集して,シンボリックリンクを張り直せば動いてくれる.
/etc/systemd/resolve.conf
をnano
,vi
で入って,自分のDNSのIPを追加してください.
(aptが通ってないので,emacs
はまだ使えないです.)
$ sudo nano /etc/systemd/resolve.conf
#DNS=
↓
DNS=your_DNS_IP
編集をしたら,/etc/resolv.conf
のシンボリックリンクを張り直します.
$ sudo unlink /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
最後に,DNSの設定を更新して終わりです.
参考記事では,sudo reboot
をしていますが,systemctl restart
で動作を確認しました.
$ sudo systemctl restart systemd-resolved
ちゃんとリンクが張られているか確認します.
$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 12月 14 08:01 /etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf
正常に戻りました.
あとは,sudo apt update
を行なって,動作するか確認をしてください.
Vagrantfileで一撃で直す
VM立ち上げにの時に直してくれるようにします.
3行目,sed
のYour_DNS_IPを自分の環境に合わせたDNSのIPを指定すれば動くと思います.
config.vm.provision "shell", inline: <<-SHELL
sed -i -e 's/DNS=4.2.2.1 4.2.2.2 208.67.220.220/DNS=Your_DNS_IP/g' /etc/systemd/resolved.conf
unlink /etc/resolv.conf
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
systemctl restart systemd-resolved
SHELL
さいごに
参考記事では,Ubuntu18.04のバグだったそうですが,20に上がっても同じようにあるんですね.
VMだけではなく,母艦でも同じようなバグがありそうなので,また直面した時に使えそうです.
誰かの助けになれば幸いです.
参考記事