链接一篇关于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工具来管理我软件包了!