天天看点

yum

 在linux中要想使用某个软件,我们需要对其源码进行编译、链接库,然后生成二进制可执行程序。程序的编译是有规则的,哪些程序先编译,哪些程序后编译,哪些程序需要重新编译,因此程序员给安装程序提供了一个文件:makefile,里面记录了程序的编译规则,但是当程序文件数目很庞大的时候,Makefile的制作无疑也是个费时的工程,因此,有人专门开发了工具制作它,比如:autotools,具体的可以参考:http://blog.chinaunix.net/uid-20544507-id-3494422.html

    有时候我们只需要这个程序所能提供的功能中的一两个,所以一次性把程序所有功能都编译成可执行程序必然是耗时且作用不大的。为了解决这个问题,程序的开发者给程序提供了编译参数,利用configure命令进行选择,可以参考:http://www.chinaz.com/server/2009/0807/85792.shtml    

    所以一般来说一个完整的程序应该包含以下几种文件:

        1.二进制程序:一般是/bin或/sbin下的程序

        2.库文件:/lib下的文件

        3.头文件:include里面的文件(程序调用函数,这些函数必须在事先声明变量等,头文件存放这些信息)

        4.配置文件:一般是/etc里面的内容(编译参数是让你有使用这个功能的能力,而配置文件则是让你选择是否启用这个功能)

        5.帮助文件:一般放在share或者man这个目录

    因为编译实在是太耗费时间了,当我们硬件架构与某些人编译程序的架构一模一样的时候,此时如果这些人能提供我们编译好的程序,我们就没必要再自己编译一遍,这些人就是redhat或者debian等厂商,这些编译好的程序我们把它们做成rpm或者dkpg格式,所谓rpm包的安装就是把程序里面编译好的程序解压出来,放到相对应的地方,比如二进制程序放在/bin或/sbin等目录,模块放在/lib/module等。但是这样有个缺点,别人编译好的程序并不一定是我们想要的,他们编译出来的程序是大部分人需要的,因此,当我们需要特定功能的时候,我们仍然需要自己编译软件,大部分情况下rpm包已经能满足我们的需要了。

    rpm包安装起来很方便,但是除了有可能没有我们需要的功能以外,它还有一个缺点,不能解决包与包之间的依赖关系。因此,有人就想如果我们把rpm包和依赖包收集起来,并记录它们之间的关联关系,放到服务器上以供下载,这样安装rpm包不就不用再辛辛苦苦地找依赖包了吗?这个就是本文要说明的yum(还有其他种 比如debian的apt等)

yum把包与依赖包的信息记录在元数据文件中,主要包含以下几种:

primary.xml.gz:

    所有rpm包的列表

    依赖关系

    每个rpm包安装生成的文件列表

filelists.xml.gz:

    当前仓库中所有rpm包的所有文件列表

other.xml.gz:

    额外信息,rpm包的修改日志

repomd.xml:

    记录的是上面三个文件的时间戳和校验和

comps.xml.gz

    rpm包分组信息

客户端要想使用yum服务器所提供的功能,则必须配置/etc/yum.conf文件,或者编辑以.repo结尾的文件,放在/etc/yum.repos.d/目录下

如何为yum定义repo文件

[Repo_ID]

name=Description

baseurl=    #yum服务器所在地址,三种格式,指向要指向repodata所在路径

enable={1|0}  #这个代表是否启用这个repo

gpgcheck={1|0}    #这个代表是否验证包的来源合法性

gpgkey=    #这个代表密钥路径

示例:

[root@logstash yum.repos.d]# ls  /mnt/

CentOS_BuildTag                repodata/

.discinfo                      RPM-GPG-KEY-CentOS-6

EULA                           RPM-GPG-KEY-CentOS-Debug-6

GPL                            RPM-GPG-KEY-CentOS-Security-6

images/                        RPM-GPG-KEY-CentOS-Testing-6

isolinux/                      TRANS.TBL

Packages/                      .treeinfo

RELEASE-NOTES-en-US.html       

[root@logstash yum.repos.d]# ls

bak  sys.repo

[root@logstash yum.repos.d]# cat sys.repo 

[sys]

name=test repo

baseurl=file:///mnt/

enable=1

gpgcheck=0

CentOS_BuildTag  Packages                    RPM-GPG-KEY-CentOS-Security-6

EULA             RELEASE-NOTES-en-US.html    RPM-GPG-KEY-CentOS-Testing-6

GPL              repodata                    TRANS.TBL

images           RPM-GPG-KEY-CentOS-6

isolinux         RPM-GPG-KEY-CentOS-Debug-6

[root@logstash yum.repos.d]# yum  list

zenity.i686                                2.28.0-1.el6                sys      

zlib-static.i686                           1.2.3-27.el6                sys      

zsh.i686                                   4.3.10-5.el6                sys      

zsh-html.i686                              4.3.10-5.el6                sys   

(太多了..截取后面几行)

yum命令格式:

yum [option] [command] [package ...]

option:

    -y:自动选择yes

command:

    list:列表

        支持glob    

        all:显示所有

        available:可用的,仓库中有但尚未安装的

        installed:已经安装的

        updates:可用的升级

    clean:清理缓存

        [packages|headers|metadata|dbcache|all]

    repolist:显示repo列表及其简要信息

        all:所有

        enabled:已经启用的(默认显示这个)

        disable:没启用的

    install:安装

    update:升级

    update_to:升级为指定版本

    remove|erase:卸载

    info:说明

    provides|whatprovides:查看指定的文件或特性是由哪个包安装生成的;

    groupinfo:组信息

    grouplist:

    groupinstall:

    groupremove:

    groupupdate:

如何创建yum仓库

createrepo /PATH/TO/RPM_package's_father_dir

[root@logstash Packages]# pwd

/yum-test/Packages

[root@logstash Packages]# ls

abrt-2.0.8-6.el6.centos.i686.rpm

abrt-addon-ccpp-2.0.8-6.el6.centos.i686.rpm

abrt-addon-kerneloops-2.0.8-6.el6.centos.i686.rpm

abrt-addon-python-2.0.8-6.el6.centos.i686.rpm

abrt-cli-2.0.8-6.el6.centos.i686.rpm

abrt-desktop-2.0.8-6.el6.centos.i686.rpm

abrt-gui-2.0.8-6.el6.centos.i686.rpm

abrt-libs-2.0.8-6.el6.centos.i686.rpm

abrt-tui-2.0.8-6.el6.centos.i686.rpm

abyssinica-fonts-1.0-5.1.el6.noarch.rpm

[root@logstash Packages]# cd  ..

[root@logstash yum-test]# cd  /etc/yum

yum/         yum.conf     yum.repos.d/ 

[root@logstash yum-test]# cd  /etc/yum.repos.d/

[root@logstash yum.repos.d]# vi  

bak/                      CentOS-Vault.repo         mirrors-rpmforge-testing

CentOS-Base.repo          epel.repo                 rpmforge.repo

CentOS-Debuginfo.repo     epel-testing.repo         sys.repo

CentOS-fasttrack.repo     mirrors-rpmforge          

CentOS-Media.repo         mirrors-rpmforge-extras   

[root@logstash yum.repos.d]# mv  ./* bak/

mv: cannot move `./bak' to a subdirectory of itself, `bak/bak'

[root@logstash yum.repos.d]# mv bak/sys.repo   .

[root@logstash yum.repos.d]# vi  sys.repo 

baseurl=file:///yum-test/Packages

[root@logstash yum.repos.d]# yum repolist

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

file:///yum-test/Packages/repodata/repomd.xml: [Errno 14] Could not open/read file:///yum-test/Packages/repodata/repomd.xml

Trying other mirror.

repo id                             repo name                             status

sys                                 test repo                             4,776

repolist: 4,776

[root@logstash yum.repos.d]# yum clean metadata

Cleaning repos: sys

2 metadata files removed

1 sqlite files removed

0 metadata files removed

sys                                 test repo                             0

repolist: 0

[root@logstash yum.repos.d]# createrepo   /yum-test/Packages/

Spawning worker 0 with 10 pkgs

Workers Finished

Gathering worker results

Saving Primary metadata

Saving file lists metadata

Saving other metadata

Generating sqlite DBs

Sqlite DBs complete

sys                                                      | 2.9 kB     00:00 ... 

sys/primary_db                                           |  11 kB     00:00 ... 

sys                                 test repo                             10

repolist: 10

[root@logstash yum.repos.d]# ls  /yum-test/Packages/

repodata/

repodata

[root@logstash yum.repos.d]# ls  /yum-test/Packages/repodata/

03a9c58549ff25cca1d0f8dd97d82d539a0b11b99c50bc303b3e53a5cddd27b1-other.sqlite.bz2

0c0afd76be4eb9f2170ae47ce261a607966a1123e8980455088b39f224a77549-other.xml.gz

24c2e2ff0624a9c617353bbfe75276b9865e0edc11f2e6ac11af65d6451783b2-filelists.xml.gz

7bc227e5e01412e6179bc1e604bb57f1b4c7a0a9cb0b26b03b47e18a7826fad4-filelists.sqlite.bz2

c4d29babe0205855a823dcb718a51af964409066f5a7b3ffb470bf57f904c727-primary.sqlite.bz2

ef11c37fc89a392df2c366c3a26778993d9207fb04653f54f34839aa6de440aa-primary.xml.gz

repomd.xml

[root@logstash Packages]# yum  list available

Available Packages

abrt.i686                                 2.0.8-6.el6.centos                 sys

abrt-addon-ccpp.i686                      2.0.8-6.el6.centos                 sys

abrt-addon-kerneloops.i686                2.0.8-6.el6.centos                 sys

abrt-addon-python.i686                    2.0.8-6.el6.centos                 sys

abrt-cli.i686                             2.0.8-6.el6.centos                 sys

abrt-desktop.i686                         2.0.8-6.el6.centos                 sys

abrt-gui.i686                             2.0.8-6.el6.centos                 sys

abrt-libs.i686                            2.0.8-6.el6.centos                 sys

abrt-tui.i686                             2.0.8-6.el6.centos                 sys

abyssinica-fonts.noarch                   1.0-5.1.el6                        sys

本文转自biao007h51CTO博客,原文链接:http://blog.51cto.com/linzb/1754812 ,如需转载请自行联系原作者

继续阅读