链接一篇关于yum的文章:http://bbs.chinaunix.net/thread-4061323-2-1.html
1、yum的工作原理
yum是rpm的一个前端工具,分为服务器端与客户端,客户端有yum的配置文件,通过配置文件的设定去联系yum仓库,但先去取得yum仓库的元数据,而不是直接云取rpm包。其中元数据中的信息是指一些放在仓库中的各个rpm包之间的依赖关系、各个rpm包中的文件列表等信息。yum仓库可在本地,也可在远端的一个服务器上,主要是ftp和http文件服务器。当客户端第一次运行yum命令时,会去联系yum的仓库中的元数据,把这些元数据下载到yum客户端,以便加速访问。
服务器端的配置:服务器端先在计划一个目录用来做我们的yum仓库,把所有的rpm包都放进这个目录后,通过createrepo这个命令来生成元数据文件目录repodata,这样一个yum仓库就创建完成。
客户端配置:主配置文件是/etc/yum.conf,这个文件配置了yum的一些全局参数。怎样来配置一个自定义的yum客户端呢?在/etc/yum.reps.d下自己创建以repo结尾的文件,定义好相应的参数即可!
2、yum常用命令
命令格式:yum [options] [command] [package ...]
yum list {all|installed|available} [package ...]:后边跟上指定的package包名,包名支持文件名通配符
all:显示yum仓库中所有的安装包
installed:只显示系统已安装的包
available:显示yum仓库中搜索到的rpm包,在系统中没有安装且可安装的包,
例:yum list all bind*
显示yum仓库中所以以bind开头相关的包
yum repolist:显示系统可用的yum仓库有哪些
yum repolist [all|enabled|disabled]
all:显示系统中所有yum仓库的id
enabled:显示系统中已启用的仓库id
disabled:显示系统中已禁用的仓库id
yum info PACKAGE:显示指定软件包的信息,没有安装的软件包也可以查询,因为是直接从仓库查询
yum grouplist:显示所有的包组信息
yum groupupdate group1 [group2] [...]:更新一组包
yum groupremove group1 [group2] [...]:卸载一组包
yum groupinstall "Development tools" "Desktop Platform Development" "Server Platform Development":安装三个开发包组,这是rhel6上的
yum groupinstall "Development Tools" "Development Libraries":安装开发包组,这是rhel5上的
yum groupinfo "group_name":显示指定包组的详细信息
yum clean [ packages | headers | metadata | dbcache | all ]:管理本地缓存的命令
packages:清空指定包
headers:清空头部信息
metadata:只清空元数据
dbcache:清空数据库缓存
all:全部清理
yum makecache:手动建立缓存
yum -y install package_name ...:安装软件包,可指定多个。这里的y是yum的一个选项,在安装包时自动回答yes,自动安装
yum -y reinstall package_name ...:重新安装软件包
yum upadte package_name:把软件包更新到仓库中最新的版本
yum update-to package_name.version:把软件包更新到仓库中指定的版本
yum check-update:显示可更新的包
yum remove package_name:卸载安装包,依赖此卸载包的其他安装包也一并被卸载
yum provides|whatprovide feature1 [feature2] [...]:查询文件是由哪个包安装生成的
例如:yum provides /etc/fstab:查询fstab这个档案是由哪个包安装后生成的
yum --nogpgcheck localinstall rpmfile1 [rpmfile2] [...]:安装本地的rpm包,不从yum仓库来安装。在rhel6上直接用install来安装本地rpm包,用此命令的优点在于当安装的rpm包依赖另外的包时会直接去仓库下载安装。"--nogpgcheck"不检查rpm包的合法性,因为用yum安装本地的包时会去检查包的合法性的。
yum localupdate rpmfile1 [rpmfile2] [...]:更新rpm包,但rpm包是本地的包
3、yum服务器端配置
把光盘当作一个yum仓库
[root@zcj cdrom]# mount /dev/sda1 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/sda5 on /home type ext3 (rw) /dev/sda2 on /var type ext3 (rw) tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) /dev/hdc on /media/cdrom type iso9660 (ro) \\光盘挂载点
[root@zcj cdrom]# pwd /media/cdrom [root@zcj cdrom]# ls CentOS RELEASE-NOTES-de RELEASE-NOTES-fr RELEASE-NOTES-ro CentOS_BuildTag RELEASE-NOTES-de.html RELEASE-NOTES-fr.html RELEASE-NOTES-ro.html EULA RELEASE-NOTES-en RELEASE-NOTES-ja repodata GPL RELEASE-NOTES-en.html RELEASE-NOTES-ja.html RPM-GPG-KEY-beta p_w_picpaths RELEASE-NOTES-en_US RELEASE-NOTES-nl RPM-GPG-KEY-CentOS-5 isolinux RELEASE-NOTES-en_US.html RELEASE-NOTES-nl.html TRANS.TBL RELEASE-NOTES-cs RELEASE-NOTES-es RELEASE-NOTES-pt_BR RELEASE-NOTES-cs.html RELEASE-NOTES-es.html RELEASE-NOTES-pt_BR.html
光盘目录中有"repodata"这个目录,这个目录就是放元数据的目录,把这个目录所在目录当成一个yum仓库的地址。且这个目录下有RPM-GPG-KEY-CentOS-5签名文件,所以在系统上配置好yum源后就可以把光盘当作一个yum仓库了。
[root@zcj yum.repos.d]# pwd /etc/yum.repos.d [root@zcj yum.repos.d]# vi CentOS-Base.repo [base] name=CentOS-$releasever - Base baseurl=file:///media/cdrom/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 \\系统中也有这个签名文件
[root@zcj yum.repos.d]# yum clean all [root@zcj yum.repos.d]# yum makecache [root@zcj yum.repos.d]# yum repolist Failed to set locale, defaulting to C Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile repo id repo name status base CentOS-5 - Base 3663 repolist: 3663
自己收集的rpm包作为一个yum
以在rhel6.4_x64上安装httpd为例,首先在系统上安装好开发包组,再用“yum install httpd”得知安装httpd时要安装两个依赖的包,去mirror.sohu.com上下载这几个对应的安装包上传到系统的"/repository"这个目录。有了仓库目录,那创建好包的元文件即可,就是生成repodata这个元数据目录就行。创建元数据的命令是createrepo,但这个命令系统上默认没有安装,用yum安装即可。
[root@localhost httpd]# pwd /repository/httpd [root@localhost httpd]# ls apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm httpd-2.2.15-26.el6.centos.x86_64.rpm httpd-tools-2.2.15-26.el6.centos.x86_64.rpm [root@localhost httpd]# createrepo /repository/httpd/ Spawning worker 0 with 3 pkgs Workers Finished Gathering worker results Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete [root@localhost httpd]# ls apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm httpd-tools-2.2.15-26.el6.centos.x86_64.rpm httpd-2.2.15-26.el6.centos.x86_64.rpm repodata
现在有了yum仓库,再配置好yum客户端工具即可。
[root@localhost yum.repos.d]# pwd /etc/yum.repos.d [root@localhost yum.repos.d]# vim rhel-source.repo [base] name=CentOS-$releasever - Base baseurl=http://mirror.centos.org/centos/6/os/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 enabled=0 [basesohu] name=mirror.sohu.com baseurl=http://mirror.sohu.com/centos/6/os/$basearch/ gpgcheck=1 gpgkey=http://mirror.sohu.com/centos/RPM-GPG-KEY-CentOS-6 enabled=0 [httpd_test] name=httpd test baseurl=file:///repository/httpd/ \\指向自定义目录 gpgcheck=0 enabled=1 [root@localhost yum.repos.d]# yum repolist Loaded plugins: product-id, subscription-manager This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. httpd_test | 2.9 kB 00:00 ... repo id repo name status httpd_test httpd test 3 repolist: 3 [root@localhost yum.repos.d]# yum -y install httpd
如此这样,httpd就通过本地"/repository/httpd"仓库被安装上了。
把mirror.sohu.com作为yum仓库
在把mirror.sohu.com作为系统的yum仓库前先认识两个yum中的变量,第一个是"releasever",这个变量会识别到我们的当前系统是redhat5,还是rehat6,centos的系统也同样能识别,这个变量只取后边的“5”或者“6”这个数字;第二个变量是“basearch”,这个变量会识别系统的平台是“i386”的,还是“x86_64”的平台。注意:i486、i686这些都统称为i386。有了像“mirror.sohu.com”这样公开的yum仓库,那我们安装redhat的系统后就可以把yum仓库指定sohu的站点,这样就可以使用yum工具来安装软件包了。
这里以rhel6.4为例,把rhel6.4的yum仓库配置成centos和sohu的yum仓库:
[root@localhost yum.repos.d]# uname -r 2.6.32-358.el6.x86_64 [root@localhost yum.repos.d]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.4 (Santiago) [root@localhost yum.repos.d]# pwd /etc/yum.repos.d [root@localhost yum.repos.d]# vi rhel-source.repo [base] name=CentOS-$releasever - Base baseurl=http://mirror.centos.org/centos/6/os/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 [basesohu] name=mirror.sohu.com baseurl=http://mirror.sohu.com/centos/6/os/$basearch/ gpgcheck=1 gpgkey=http://mirror.sohu.com/centos/RPM-GPG-KEY-CentOS-6 [root@localhost yum.repos.d]# yum repolist Loaded plugins: product-id, subscription-manager This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. repo id repo name status base CentOS-6Server - Base 6,381 \\这里的“6Server”显示不正常,经测试rhel6.4不支持"$releasever"变量 basesohu mirror.sohu.com 6,381 repolist: 12,762
经测试,对于变量“$releasever”这个变量,在rhel6.4_x86_64上不支持,所以在baseurl中直接把“$releasever”直接用数字"6"来替换了,因为系统是rhel6。配置好后,清除原有的cache,再建立新的cache,把相应的元数据下载到本地cache中。
[root@localhost yum.repos.d]# yum clean all [root@localhost yum.repos.d]# yum makecache
如此,就可以愉快的使用yum工具来管理我软件包了!