搭建YUM服务器 配置yum客户端
作者:沈小然
版本:1.0
日期:2013年4月23日
1 YUM介绍
YUM是Yellow dog Updater, Modified的缩写,是由Duke University所发起的计划,目的就是为了解决在安装或卸载RPM包过程中的依赖问题,使用者在对RPM包的安装、升级、卸载过程中自动安装需要的依赖,卸载过程也自动卸载相关的软件包。可以实现这样功能的除了YUM外,还有APT (Advanced Package Tool,是由debian所发展的一个软件管理工具)。
YUM的工作原理,在每一个 RPM软件的头(header)里面都会纪录该软件的依赖关系,那么如果可以将该头的内容纪录下来并且进行分析,可以知道每个软件在安装之前需要额外安装哪些基础软件。也就是说,在服务器上面先以分析工具将所有的RPM档案进行分析,然后将该分析纪录下来,只要在进行安装或升级时先查询该纪录的文件,就可以知道所有相关联的软件。
所以YUM的基本工作流程如下:
服务器端:在服务器上面存放了所有的RPM软件包,然后以相关的功能去分析每个RPM文件的依赖性关系,将这些数据记录成文件存放在服务器的某特定目录内。
客户端:如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件(可通过http或FTP方式,所以yum服务器还要把RPM数据源通过http或ftp发布出来),通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装。
2 搭建YUM服务器
系统环境:
Red Hat Enterprise Linux Server release 5.6 (Tikanga)
YUM服务器需要的软件包:
yum
yum-security
yum-rhn-plugin
yum-metadata-parser
yum-updatesd
createrepo
yum客户端需要安装的软件包:
yum
yum-updatesd
YUM服务器配置步骤
1. 复制RHEL5光盘中的Cluster ClusterStorage Server VT四个目录做为YUM服务器的数据源。RHEL6中只需要copy一个目录Packages就可以了。
# mkdir -p /apps/Yum_Server/redhat5.6/
将Cluster ClusterStorage Server VT四个目录拷贝到/apps/Yum_Server/redhat5.6/
注:用户属主是root.root,不影响http的虚拟机发布。
2. 使用Createrepo命令将这4个目录里的所有包进行一次“包依赖性关系生成”,并且会把生成关系的xml文件保存到同级目录的一个叫repodata的文件夹里comps-rhel5-xxxx.xml(xxxx和目录名一致)。命令如下:
# createrepo Cluster(RHEL6 则是createrepo Packages
32/32 - Cluster_Administration-as-IN-5.2-1.noarch.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
查看生成的文件
# ls Cluster/repodata/
comps-rhel5-cluster.xml
# createrepo ClusterStorage/
39/39 - Global_File_System-si-LK-5.2-1.noarch.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
查看生成的文件
# ls ClusterStorage/repodata/
comps-rhel5-cluster-st.xml
# createrepo Server/
2428/2428 - gettext-devel-0.17-1.el5.i386.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
查看生成的文件
# ls Server/repodata/
comps-rhel5-server-core.xml
# createrepo VT/
38/38 - Virtualization-as-IN-5.2-11.noarch.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
查看生成的文件
# ls VT/repodata/
comps-rhel5-vt.xml
3. 配置一个HTTP或FTP服务器,发布Cluster ClusterStorage Server VT四个目录
直接通过非80端口来发布,这样不影响原来80端口运行的应用。
Listen 9100
<VirtualHost *:9100>
ServerAdmin shenxiaoran
DocumentRoot /var/www/html/Yum_Server
ServerName test.yum.com
</VirtualHost>
重启apache服务,记得关闭selinux,否则不允许开9100端口。
测试HTTP服务
http://192.168.1.10:9100/Packages/
4. 创建一个YUM客户端的xxx.repo文件,放到服务器上供yum客户端下载,这样不必在上百台客户端上逐个手动配置了。
创建一个yum.repo文件(扩展名必须是repo,文件名随便起)放到每个客户端的/etc/yum.repos.d/yum.repo位置。
[rhel-base] name= redhat5.6 x86 baseurl=http://192.168.1.10:9100/redhat5.6/Server gpgcheck=0 enabled=1
[rhel-vt] name= redhat5.6 x86 baseurl=http://192.168.1.10:9100/redhat5.6/VT gpgcheck=0 enabled=1
[rhel-cluster] name= redhat5.6 x86 baseurl=http://192.168.1.10:9100/redhat5.6/Cluster gpgcheck=0 enabled=1
[rhel-ClusterStorage] name= redhat5.6 x86 baseurl=http://192.168.1.10:9100/redhat5.6/ClusterStorage gpgcheck=0 enabled=1 |
相关参数说明:
l [ ]:内的是仓库的名字,不重复即可。
l name:仓库的描述。
l baseurl: YUM源地址,这里配置的是http,还可以是ftp,FILE等。
l enabled :是否启用这个仓库,1为起用,0为禁用
l gpgcheck :是否检查GPG签名(验证要安装的包是不是REDHAT官方的),我们搭建内部的yum源这里要关闭GPG签名检查。
3 配置YUM客户端
首先从YUM服务器把客户端需要的yum文件下载到本地相应目录
# wget http://192.168.1.10:8080/redhat5.6/yum.repo
# cp -f /root/yum.repo /etc/yum.repos.d/
测试yum客户端
# yum install openssl*
至此,YUM服务器成功搭建,yum客户端也可以成功访问
4 创建国外Saltstack的本地yum镜像源
解决的问题:
因为Saltstack自己的repo源是在国外,解决国内服务器yum安装Saltstack的时候下载慢,经常下载失败的问题;
解决本地某些服务器无法访问外网的情况下需要yum源的问题;
解决国内镜像版本不够新的问题;
搭建步骤
1) 在之前搭建的yum server的基础上,我们只需要yum-utils包的/usr/bin/reposync命令即可实现镜像整个国外Saltstack的yum源。
2) yum -y install yum-utils
3) 在yum server存放yum源rpm包的目录结构下,单独创建一个SaltStack的目录,做为本地Saltstack的yum源目录
# mkdir -p /var/www/html/Yum_Server/SaltsStack/
4) 去Saltstack官网,找到对应操作系统的repo源
cat > /etc/yum.repos.d/saltstack.repo << EOF [saltstack] name=SaltStack repo for RHEL/CentOS \$releasever baseurl=https://repo.saltstack.com/yum/redhat/\$releasever/\$basearch/latest enabled=1 gpgcheck=1 gpgkey=https://repo.saltstack.com/yum/redhat/\$releasever/\$basearch/latest/SALTSTACK-GPG-KEY.pub EOF |
执行上面的命令,创建一个Saltstack的repo文件
5) 使用 yum repolist命令查看国外Saltstack的yum源的仓库标识
# yum repolist
6) 使用reposync命令把saltstack仓库里的所有软件包都镜像下载到本地的目录
# reposync -r saltstack /var/www/html/Yum_Server/SaltsStack/
一共116个包,大概10几分钟下载完了。
7) 最后,创建镜像yum源的依赖关系
[root@ops1 SaltsStack]# createrepo saltstack/
116/116 - python27-tools-2.7.14-2.ius.el6.x86_64.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
8) 创建本地客户端使用的salt.repo文件
# vi salt.repo
[saltstack-base] name= local satlstack for redhat6.x_X64 baseurl=http://172.21.20.1:9100/SaltsStack/saltstack gpgcheck=0 enabled=1 |
把这个salt.repo传到各个客户机上就大功告成。
5 客户端多yum源提速
场景:通常客户端除了加载本地yum源,还加载了很多互联网上的yum源,每次yum list都要先读取互联网上的yum源列表才会读取本地的,而需要安装的包却在本地yum源。如何提升访问yum的速度?
解决方案,使用yum-plugin-priorities插件,设置多个yum.repo的优先级。
1、安装YUM 的 yum-plugin-priorities 插件。
$ yum install yum-plugin-priorities
2、开启优先级配置,默认安装后即开启
cat /etc/yum/pluginconf.d/priorities.conf
[main]
enabled = 1
3、设置优先级
# vi yumdiy.repo
[DIY-base] name= DIY for redhat6.x_X64 baseurl=http://172.21.20.1:9100/DIY_RedHat6_X64 gpgcheck=0 enabled=1 priority=1 |
说明:priority=1,priority 越小表示优先级越高
6 FAQ
6.1 Yum客户端若提示类似下面的Public key 相关错误,如何处理?
“warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID e8562897
updates/gpgkey | 1.7 kB 00:00
Public key for openssl-devel-0.9.8e-26.el5_9.1.i386.rpm is not installed”
解决办法:删掉/etc/yum.repos.d/目录下其他的.repo文件,例如系统自带的rhel-xxx.repo文件,因为这些文件中包含对GPG签名的校验,这将导致无法成功安装我们自搭建的yum服务器中的rpm包。
6.2 Yum客户端提示错误“Error performing checksum Trying other mirror.”如何处理?
部分错误截取如下:
rhel-ClusterStorage | 1.3 kB 00:00
rhel-ClusterStorage/primary | 8.9 kB 00:00
http://172.21.20.1:9100/RedHat5.8_X64/ClusterStorage/repodata/primary.xml.gz: [Errno -3] Error performing checksum
Trying other mirror.
rhel-ClusterStorage/primary | 8.9 kB 00:00
http://172.21.20.1:9100/RedHat5.8_X64/ClusterStorage/repodata/primary.xml.gz: [Errno -3] Error performing checksum
Trying other mirror.
Error: failure: repodata/primary.xml.gz from rhel-ClusterStorage: [Errno 256] No more mirrors to try.
原因分析:如果使用redhat6版本搭建yum服务器,使用createrepo命令创建的数据仓库,而yum客户端是redhat5版本来执行yum list就会出现上面的错误。
原因是redhat6版本的createrepo默认使用的checksum类型是sha256算法,而redhat5客户端的yum使用的checksum类型是md5。二者校验时因使用了不同的校验类型导致校验结果不同,所以报错。
解决方法:在YumServer上对于搭建redhat5版本的yum源时,使用createrepo -s md5来创建数据仓库就可以解决这个问题。yum客户端执行 yum clean all 以后在试一切正常。
RHEL 6.5的yum.repo文件样例
[rhel-base]
name= redhat6.5_X64
baseurl=http://192.168.1.10:9100/Packages
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
enabled=1
CentOS 6 的客户端可以直接使用互联网的yum源
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
yum clean all
增加第三方YUM源,方便安装APF,Saltstack等应用软件
1)安装rpmforge源,可以方便安装APF
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
rpm -Uvh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
2)安装epel源,方便安装Saltstack
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
rpm -ivh epel-release-latest-6.noarch.rpm
sed -i 's/mirrorlist=https/mirrorlist=http/g' /etc/yum.repos.d/epel.repo
sed -i 's/mirrorlist=https/mirrorlist=http/g' /etc/yum.repos.d/epel-testing.repo
RHEL7的YUM服务器和客户端配置
1、拷贝光盘中的Packages目录
cp -Rp /media/Packages/ /var/www/html/YumServer/rhel7.2/Packages/
2、使用createrepo命令创建依赖
createrepo Packages/
Spawning worker 0 with 1155 pkgs
Spawning worker 1 with 1155 pkgs
Spawning worker 2 with 1155 pkgs
Spawning worker 3 with 1155 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
3、配置HTTPD服务发布YumServer目录
vi /etc/httpd/conf/httpd.conf
Listen 9100
<VirtualHost *:9100>
ServerAdmin shenxiaoran
DocumentRoot /var/www/html/YumServer
ServerName test.yum.com
</VirtualHost>
注:RHEL7的httpd安装后,httpd.conf文件内容中没有关于虚拟机的配置模版了
<VirtualHost>
...
</VirtualHost>
3、YUM客户端的配置
vi /etc/yum.repos.d/yum.repo
[rhel-base]
name= RedHatES7.2
baseurl=http://172.16.96.59:9100/rhel7.2/Packages
gpgcheck=0
enabled=1
4.6、RHEL7在安装httpd服务器时,提示“could not open mime types config file /etc/mime.types.”
分析:/etc/mime.types文件属于mailcap这个安装包,安装上即可解决问题。
解决办法:若不知道某个文件属于哪个rpm包,使用 yum install /etc/mime.types 安装就可以了。前提是需要配置yum源。