bash 環境の検証用に CentOS7 の環境を新しく用意したら、名前解決できなくて yum
コマンドがことごとく死んだ話。
ロケ地
- Vagrant 2.2.1 -> 2.2.10
- VirtualBox 6.0.22
結論を先に
Vagrantfile に以下を記述する。
すでに vb.gui
などの記述で config.vm_provider
を記述してある場合は、同じブロックに追記で良いです。
config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"] end
yum コマンド実行時にエラー
vagrant init centos/7
のちに vagrant up
すると、起動時に良きように yum
実行してくれるようになり幾星霜、いかがお過ごしでしょうか。
エラー的には以下のようなものが出力されます。
[user@localhost ~]$ vagrant up #snip# 14: PYCURL ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'" #snip#
おーん名前解決できとらんやんけ? ということで VM 自体の起動は出来ているので、そのまま vagrant ssh
で仮想環境へログインして ping www.google.co.jp
などしてみるも反応なし。
ping 8.8.8.8
には応答があるので、 nmtui
で eth0 の DNS を 8.8.8.8
に設定後、systemctl restart network
するも、引き続き名前解決できず。
このあたりでググりだしたのですが、
/etc/resolv.conf
を直接編集してservice network restart
/etc/sysconfig/network-scripts/ifcfg-* (自分の環境で設定されている eth )
を直接編集してservice network restart
と、 NetworkManager 停止と自動起動の OFF/etc/nsswitch.conf
内のhosts:
にdns
記述を追加
あたりの記述がほとんどで、どれも解決しないし nm
系コマンドを利用せずに修正するのもアレじゃねえの? となって「うーん?」となってしまった。
ので、順番につぶしていくかという発想になり、まず Vagrant をバージョンアップしました。
Vagrant のバージョンアップ
2.2.1 -> 2.2.10 にアップデートしました。 公式サイトから dmg ダウンロードしてきてインストールするだけでバージョンアップ終了です。 なおバージョンアップ後に以下のエラーが出たので、メッセージに従ってぷらぎんを再インストールしています。
[user@localhost ~]$ vagrant up Vagrant failed to initialize at a very early stage: The plugins failed to initialize correctly. This may be due to manual modifications made within the Vagrant home directory. Vagrant can attempt to automatically correct this issue by running: vagrant plugin repair If Vagrant was recently updated, this error may be due to incompatible versions of dependencies. To fix this problem please remove and re-install all plugins. Vagrant can attempt to do this automatically by running: vagrant plugin expunge --reinstall Or you may want to try updating the installed plugins to their latest versions: vagrant plugin update Error message given during initialization: Unable to resolve dependency: user requested 'vagrant-vbguest (= 0.24.0)' [user@localhost ~]$ vagrant plugin expunge --reinstall This command permanently deletes all currently installed user plugins. It should only be used when a repair command is unable to properly fix the system. Continue? [N]: y All user installed plugins have been removed from this Vagrant environment! Vagrant will now attempt to reinstall user plugins that were removed. Installing the 'vagrant-vbguest' plugin. This can take a few minutes... Fetching micromachine-3.0.0.gem Fetching vagrant-vbguest-0.26.0.gem Installed the plugin 'vagrant-vbguest (0.26.0)'!
解決しないので Vagrant の Box を変えてみる
作業後に再び vagrant init cntos/7
実施してみましたが、エラー出力が変わらないため Vagrant の問題ではなく VirtualBox か仮想環境そのものが残りの原因となります。
ので、手軽に検証できる仮想環境から疑うことにして、別 Box であり同じく yum
を使う AmazonLinux2 を利用してみました。
が、ダメッ……! yum の問い合わせ失敗するの変わらず! ということで、根本的に VirtualBox がなんかダメそう、というコトになりました。
ここ 2, 3 ヶ月でルータ変更した
使ってたルータを NEC から Buffalo に変更したなあ (ログが見えないのとオンラインアップデートで、ソシャゲで問題が出て切り分け出来なくてキレてしまった)、と思いネットワークの食い合わせか? とも思っていたのですが。
そういえば NAT 使ってるよな
ということで、 vagrant virtualbox NAT 名前解決
などで検索した所、以下の記事にたどり着きました。 いやーありがてえ!
注意点として、 --natdnshostresolver1
だけだと解決しないので、 --natdnsproxy1
も記述する必要があります (片方しか記述してないサイトもいくつかあったので、 VirtualBox のバージョンで差異があるのやもしれぬ)。
環境によるのかもしれないですが、少なくとも僕の環境ではそうだったのでうまいこと行かない人は確認してみてください。
2020/11/09 追記
既存の環境も名前解決できないなってたので全部同じような設定書いて回避した。 ここしばらくアップデート適用もしてないし何が原因だこれ……。