在Ubuntu20.04上进行apt update时由于DNS的原因出现错误
首先
這是我在使用Vagrant時遇到的錯誤。不僅是Vagrant,這似乎是常見的ubuntu20錯誤,所以我留下來以備下次遇到。
环境
-
- 母艦:Ubuntu18.04.5LTS
-
- Vagrant & Virtualbox 使用
-
- ubuntu20.04をインストール
- bridged network interfaces : br0
情况
在使用Vagrant up启动虚拟机后,
使用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
在探索之后发现,
127.0.0.53是什么意思?这是nameserver(DNS)。
这似乎是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的位置,但现在却引用了一个更高级的目录。
这样做的话,即使修正了原因文件/etc/resolv.conf和/run/systemd/resolve/stub-resolv.conf这两个文件,问题也无法解决。
(因为在修复后使用sudo systemctl restart systemd-resolved更新,导致无法还原正常状态,sudo apt update也无法通过。)
处理
因此,只需编辑DNS并重新创建符号链接,它就会正常工作。
请使用nano或vi编辑/etc/systemd/resolve.conf文件,并添加自己的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
最后
根据参考文章所说,似乎是Ubuntu 18.04的一个错误,但是即使升级到20版本也仍然存在相同问题。不仅仅在虚拟机上,主机上也可能会有类似的错误,所以当再次面临时可以有用。
如果能帮到某人,我会感到幸福。
请查阅此文