結論
ゲストOSから外部へアクセスする際に、ネットワークインターフェースを有効化していなかった。
ネットワークインターフェース
→ 通信するときの規約、設定事項のこと
経緯
-
Virtual Box
にCentOS7
を入れる(UTMなどの他の仮想環境も同様) - Linux操作で
tabキー
の補完が効かない事を知る -
yum
でbash-completion
をダウンロード - エラーが起こってダウンロードができない
該当のソースコード
yum install bash-completion
エラー文
Cannot find a valid baseurl for repo base/7/x86_64
原因
DNSの名前解決ができていないみたいだった。
例えば、googleのトップページ( https://google.com )をIPアドレスに直すと
172.217.161.46
となり、実際にアクセスしてもらうとそのページに遷移してくれる。
そのgoogle.com
のような文字列を192.168.?.?みたいなIPアドレスに直してくれるやつをDNSといい、変換することを名前解決という。
pingを打って通信ができているか試してみる
ping google.com
>>> ping: google.com: Name or service not known
確かにうまくいかなかった。
試したこと
DNSサーバーのIPアドレスの設定ファイルをいじる
googleがDNSサーバーを運用していて、しかも自由に使えるパブリックDNSサービスとなっているため使わせてもらう。
# 追加
nameserver 8.8.8.8
再起動してやり直すも効かず。
ネットワークインターフェースをいじる
DNSの指定
# 追加
DNS1=8.8.8.8
# こいつは代替DNS
DNS2=8.8.4.4
再起動して試すも撃沈
イーサネット設定をいじる
実は自分の環境では複数のイーサネット設定ファイルが存在した
ls /etc/sysconfig/network-scripts
そのうちの1つが/etc/sysconfig/network-scripts/ifcfg-enp0s3
ってファイルで、そこにはいろんな設定が書き込まれていた。
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
...
...
ONBOOT=off
この、ONBOOT
ってやつを「on」に変えてみるといいらしい。
cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 | grep ONBOOT | sed -i 's/no/yes/' && systemctl restart network
再起動は手間なので、コマンドでrestartする。
grepでONBOOT
のみをしっかり取り出さないと、他のnoになってる項目がyesになってうまく動かないかも。
sedのiオプションが上書きなので、注意して使う必要がある。
無事名前解決、yumもしっかり動いたよ。
ONBOOT
が一体なんなのかというと、「デバイスが起動したときに、この設定ファイルを有効化しますか?(yes/no)」って意味だったっぽい。
Linuxを立ち上げたときに、このONBOOT
がon
になっているファイル(今回は/etc/sysconfig/network-scripts/ifcfg-enp0s3
)で通信を行うってことか。
最初からonにしてくれてもいいじゃんって思ったら、ホームディレクトリになぜかインストール初期からあったanaconda-ks.cfg
ファイルにoff
にするような記述があった。
...
# Network information
network --bootproto=dhcp --device=enp0s3 --onboot=off --ipv6=auto --no-activate
network --hostname=localhost.localdomain
...
...
やられた。。
結果
まとめると、
-
yum
がbash-completion
をダウンロードできなかった。 -
bash-completion
をダウンロードするurlを見つけたはいいけど、DNSサーバーが名前解決(IPアドレスに変換)できてなかった。 - イーサネット設定ファイル(通信規約)が
ifcfg-eth0
ではなく、自分の場合はifcfg-enp0s3
だった - システム起動時に設定ファイルを有効化する
ONBOOT
がoff
だった - offになっているのは、OSインストール時に勝手に作られる
anaconda-ks.cfg
の仕業だった
こんな単純なミスなのに、この遠回り具合がプロダクト作る時と違って慣れない。。
反省
何がどう動いているのかと疑問に思ったことはしっかり学ぼうと思いました、反省。
終わりに
よくよく考えればいろんなサイトにいろんないい情報が載ってるんだけど、「yum
コマンドが動かない」から派生して考えるのが難しかった。
誰かの参考になることを祈っております。
ちなみに
ほんとはコマンドを打ち終わった後に、複数ファイルがあったらtabキー
で候補を切り替える機能が欲しかったんだけど、bash-completion
は途中までコマンドを打ったらその後を補完してくれる機能だったっぽくて自分の求めてるものじゃなかった。