4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ubuntu20.04でやったapt updateがDNSが原因でエラーになる.

Last updated at Posted at 2022-02-28

はじめに

私が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.confnanoviで入って,自分の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だけではなく,母艦でも同じようなバグがありそうなので,また直面した時に使えそうです.

誰かの助けになれば幸いです.

参考記事

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?