问题在于没有定义外部仓库。解决思路是加一个。

一、背景

某台生产服务器操作系统是centos 7,我需要在上面装个ftp软件:vsftpd。出于稳妥起见,在该生产服务器上安装之前,我先在测试服务器上捣鼓了一轮,尚算顺利。结果到生产服务器上按部就班,就傻眼了:

yum -y install vsftpd

提示没有可用软件包。以为vsftpd比较偏,装wget,还是同样提示;又试了其他包,还是一样的提示。服务器是保证可以上网的,用curl www.baidu.com可以返回网页内容。

这说明,可能是yum的设置有问题。

二、发现问题

ls /etc/yum.repos.d/

CentOS-CR.repo  
CentOS-Debuginfo.repo  
CentOS-fasttrack.repo  
CentOS-Media.repo  
CentOS-Sources.repo  
CentOS-Vault.repo  
CentOS-x86_64-kernel.repo  
yum-local.repo

查看 yum-local.repo,内容如下:

[os-init]
name=os-init
baseurl=file:///opt/os-init-yum/
gpgcheck=0
enabled=1

[acm4000-middleware]
name=acm4000-middleware
baseurl=file:///opt/acm4000-middleware-yum/
gpgcheck=0
enabled=1

这2个都是本地软件源:

os-init:
baseurl 指向 file:///opt/os-init-yum/,表示软件包将从本地路径 /opt/os-init-yum/ 加载。
gpgcheck 设置为 0,表示不检查软件包的 GPG 签名。
enabled 设置为 1,表示该软件源启用。

acm4000-middleware:
baseurl 指向 file:///opt/acm4000-middleware-yum/,表示软件包将从本地路径 /opt/acm4000-middleware-yum/ 加载。
gpgcheck 设置为 0,表示不检查软件包的 GPG 签名。
enabled 设置为 1,表示该软件源启用。

都是本地的,yum就不会主动到互联网上查找包,因此总是报没有可用包的错。

三、解决问题

手动添加一个软件源到 /etc/yum.repos.d/ 目录下,比如叫 vsftpd.repo。内容如下

[vsftpd]
name=VSFTPD Repository
baseurl=http://mirror.centos.org/centos/7/os/x86_64/
gpgcheck=0
enabled=1

然后清理 yum 缓存并重新生成,以确保 yum 能够使用新的软件源配置:

sudo yum clean all
sudo yum makecache

搞定。

四、小结

本来一般情况下,默认配置的centos不会出现这种问题。主要是我同事当时安装操作系统时,不知为啥手动指定了yum源,一顿操作猛如虎,结果就这个屌样子了。人生意外是常态。