【本文首发于CSDN个人博客,转载请注明出处。】
欢迎交流想法!若有错误请指出。P.S. 欢迎【关注&点赞&收藏】哈~
本文的初始动机在于我最近在自学Dockers,没想到还没开始安装dockers的包就被创飞了,在VMware虚拟机上花了四五个小时终于解决了yum无法安装的问题。本贴全是血泪经验我哭死。
下面的内容针对由于无法安装yum的各种报错提供全面check的方法。尤其是如果你的报错是
Cannot find a valid baseurl for repo: base/7/x86_64,建议查看全文。
本人的虚拟机使用CentOS7版本 (以下内容应该适用于CentOS8及以下版本),终端使用Xshell操作(不过终端用啥都行啦哈哈)。
文章目录
两大原因判断
网络原因
尝试 ping 8.8.8.8
和 ping -c 4 www.baidu.com
输出类似:
64 bytes from lga25s80-in-f14.1e100.net (142.251.40.142): icmp_seq=1 ttl=54 time=31.9 ms
64 bytes from lga25s80-in-f14.1e100.net (142.251.40.142): icmp_seq=2 ttl=54 time=50.8 ms
64 bytes from lga25s80-in-f14.1e100.net (142.251.40.142): icmp_seq=3 ttl=54 time=36.5 ms
64 bytes from lga25s80-in-f14.1e100.net (142.251.40.142): icmp_seq=4 ttl=54 time=43.9 ms
否则尝试重启网络设置:sudo systemctl restart network
然后检查configure文件是否能成功显示IP:ip addr show enp0s3
(enp0s3可能是ens33文件名,按自己情况修改)。
DNS原因
尝试 dig mirrorlist.centos.org
或 nslookup mirrorlist.centos.org
输出类似:
Server: 8.8.8.8
Address: 8.8.8.8#53
否则跟我一样是DNS问题了。继续进一步检查。
建议完成下面每一步都去 “写在结尾” 一章跑一下前两步看有没有解决。
所有与yum相关的文件内容与检查
请确保与yum相关文件与我的内容类似!
如果需要修改文件:使用 vi 文件路径
指令(e.g. vi /etc/resolv.conf),打开后使用 i
进行修改。完成修改后使用Esc
和 :wq 和 回车键
保存修改。
检查网络配置 cat /etc/sysconfig/network-scripts/ifcfg-ens33
输出类似:
TYPE=“Ethernet”
PROXY_METHOD=“none”
BROWSER_ONLY=“no”
BOOTPROTO=“static”
DEFROUTE=“yes”
IPV4_FAILURE_FATAL=“no”
IPV6INIT=“yes”
IPV6_AUTOCONF=“yes”
IPV6_DEFROUTE=“yes”
IPV6_FAILURE_FATAL=“no”
IPV6_ADDR_GEN_MODE=“stable-privacy”
NAME=“ens33”
UUID=“014b345b-23bc-4655-80b2-9ee4ea58c54f”
DEVICE=“ens33”
ONBOOT=“yes”
IPADDR=“172.20.10.14”
GATEWAY=“172.20.10.1”
DNS1=“8.8.8.8”
DNS2=“8.8.4.4”
NETMASK=“255.255.255.0”
标红的请自己添加。其中 IPADDR 通过ip addr
查找。GATEWAY 把 IPADDR 最后一位改成1。
输出类似:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:48:0e:9d brd ff:ff:ff:ff:ff:ff
inet 172.20.10.14/28 brd 172.20.10.15 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
P.S. DNS1和2我使用的是Google的。不成功的话可以只改成 DNS1=“114.114.114.114” 试试。
对比YUM文件夹内容 ls /etc/yum.repos.d/
(注:此步非必要步骤,我只是自己会检查一下)
输出类似:
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo CentOS-x86_64-kernel.repo
CentOS-Debuginfo.repo CentOS-Sources.repo docker-ce.repo
多的可以自己用 sudo rm /etc/yum.repos.d/文件名
删掉。
检查DNS设置 cat /etc/resolv.conf
输出类似:
nameserver 8.8.8.8
nameserver 8.8.4.4
检查仓库配置 cat /etc/yum.repos.d/CentOS-Base.repo
这步可能是大多数人存在的问题,输出应该类似:
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
baseurl=http://vault.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
baseurl=http://vault.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
baseurl=http://vault.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
两个检查点:
①comment mirrorlist 且 comment out baseurl
②由于centos7在24年六月停更新版本了,所以记得把baseurl里的mirror改成vault
Docker仓库配置 cat /etc/yum.repos.d/docker-ce.repo
输出如下:
[docker-ce-stable]
name=Docker CE Stable - x86_64
baseurl=https://download.docker.com/linux/centos/7/x86_64/stable/
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
自己把上面内容完全粘进去。
其他检查内容
尝试禁用ipv6只用ipv4
如果检查 curl -v http://vault.centos.org/centos/7/os/x86_64/repodata/repomd.xml
运行不成功但是 curl -4 -v http://vault.centos.org/centos/7/os/x86_64/repodata/repomd.xml
,则可以尝试修改通过ipv4下载yum。
正确输出类似:
- About to connect() to vault.centos.org port 80 (#0)
- Trying 18.173.219.30…
- Connected to vault.centos.org (18.173.219.30) port 80 (#0)
GET /centos/7/os/x86_64/repodata/repomd.xml HTTP/1.1
User-Agent: curl/7.29.0
Host: vault.centos.org
Accept: /
< HTTP/1.1 301 Moved Permanently
< Server: CloudFront
< Date: Tue, 23 Jul 2024 17:27:51 GMT
< Content-Type: text/html
< Content-Length: 167
< Connection: keep-alive
< Location: https://vault.centos.org/centos/7/os/x86_64/repodata/repomd.xml
修改使用ipv4有两步:
cat /etc/yum.conf
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
ip_resolve=4
sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX=“rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet ipv6.disable=1”
完成上面两步后继续操作sudo grub2-mkconfig -o /boot/grub2/grub.cfg
并sudo reboot
重启虚拟机。
尝试再跑一下dhclient
写在结尾
如果成功的话记得操作下面几步完成yum安装噢。
sudo yum clean all
sudo yum makecache
sudo yum install bind-utils
sudo yum update
可以通过yum --version
检查是否安装成功
再后面就是安装dockers sudo yum install docker-ce docker-ce-cli containerd.io
blah blah 我就不写了哈哈。
希望上面的能帮助uu们解决问题。怎么做你懂的 😉