yum的详解

简介:

yum

  yum是C/S结构,即客户端服务器结构

  yum的服务器是yum repository(yum程序包仓库,yum repo)

 

  程序包仓库

    1.所有程序包的元数据(metadata)----repodata

      所有程序包文件名称清单

      所有程序包的版本号

      所有程序包的校验信息

      所有程序包的依赖关系

 

    2.为数众多的程序包文件

 

  yum的客户端:

    利用配置文件指向正确的yum仓库(yum源)

    利用URL机制完成指向

      一个标准的URL:

        schema://[username@]hostname[:port]/document[parameters][method]

 

    可能在yum配置文件中使用的URL有以下几种:

      ftp://hostname/PATH/TO/REPODATA

      http://hostname/PATH/TO/REPODATA

      nfs://hostname/PATH/TO/REPODATA

 

    本地的yum仓库

      file:///PATH/TO/REPODATA

 

    配置网卡的配置文件:

      NAME=eno33554984

      DEVICE=eno33554984

      BOOTPROTO=dhcp

      NM_CONTROLLED=no

      ONBOOT=yes

 

    如何制作软件仓库(yum的服务器端)

      createrepo:

        createrepo - Create repomd(xml-rpm-metadata) repository

        createrepo [options] <directory>

      例子:createrepo/PATH/TO/SOME_RPM-FILES

 

    如何设置yum客户端:

      yum的主配置文件:

        /etc/yum.conf

 

        # PUT YOUR REPOS HERE OR IN separatefiles named file.repo

        # in /etc/yum.repos.d

 

        用户可以将其自己定义的yum源的指向信息存放到这个配置文件中,也可以file.repo的方式命名之后存放在/etc/yum.repos.d中的独立文件

     

      格式:

         类似于.ini格式片段式配置文件:

         [repository_id]

         注意:

           1.整个repository_id必须为一段字符串,其中只能包括字母,数字,下划线或点号

           2.每一段配置属性从[]开始,到下一对[]结束

           3.每个配置文件中可以包含多个repoid,每个repoid指向一个或多个yum源,但是repoid必须全局唯一

 

                [repoid1]

                .....

 

                [repoid2]

                ...

 

/etc/yum.conf文件中默认的内容:

[main]

cachedir=/var/cache/yum/$basearch/$releasever

keepcache=0

debuglevel=2

logfile=/var/log/yum.log

exactarch=1

obsoletes=1

gpgcheck=1

plugins=1

installonly_limit=5

bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum

distroverpkg=centos-release

 

注意:此文件一般无需修改,如果想要建立自己的yum源的指向,可以在/etc/yum.repos.d目录中创建以.repo为后缀名的文件,在其中也安装上述格式填写即可

 

通常自定义repo文件的格式:

[repository_id]

name=fullname of repository

baseurl=schema://hostname/path/to/repodata

        schema2://hostname/path/to/repodata

        schema3://hostname/path/to/repodata

enabled={1|0}  //如果没有给出enabled,则默认为enabled=1

gpgcheck={1|0}

gpgkey=/PATH/TO/PUBLIC_KEY

failovermethod={roundrobin|priority}

 

例:

本地关平yum源的指向配置

[root@mylab1yum.repos.d]# cat local.repo

[local]

name=dvd

baseurl=file:///mnt/cdrom

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

 

互联网Fedora-EPEL yum源指向配置

[root@mylab1yum.repos.d]# cat myepel.repo

[myepel]

name=defineby myself for epel

baseurl=https://dl.fedoraproject.org/pub/epel/7/x86_64/

enabled=1

gpgcheck=0

 

yum命令的使用:

  yum [options] [command] [package ...]

    -y, --assumeyes 所有的问题都以yes来回答

    -q, --quiet 安静模式,在使用yum时不输出任何信息

    --enablerepo=repoidglob

    --disablerepo=repoidglob

      在此次yum事务中,明确规定使用或禁用某个repoid

      --enablerepo=*epel*

    --nogpgcheck 此次yum事务中,明确规定不进行程序包验证

 

  command

 

       command is one of:

        * install package1 [package2] [...]

          安装程序包:

          注意:

            1.可以通过同一个repo文件或不同的repo文件指向一个或多个yum源,如果要安装的程序包,在多个仓库中都存在,yum会默认安装版本最高的那个程序包,如果不想安装最新的,可以在安装时,直接写出对应版本号,如yum install gcc-4.4.7

            2.一次yum操作可以安装多个程序包,yum会为所有选择的程序包解决依赖关系问题。

 

        * update [package1] [package2] [...]

        * update-to [package1] [package2] [...]

        * check-update

        * upgrade [package1] [package2] [...]

        * upgrade-to [package1] [package2][...]

          升级程序包:

      

        * remove | erase package1 [package2][...]

          卸载程序包:

 

        * list [...]

          显示:

            可以显示所有的程序包,已安装的程序包,未安装可用的程序包,可以更新的程序包,

            list{available | installed | updates}[glob-expr1]

 

        * info [...]

          显示程序包相关信息的命令,相当于rpm -qi

 

        * provides | whatprovides feature1[feature2] [...]

          查看指定的特性(可以是一个文件)是由那个程序包组成的

 

        * clean [ packages | metadata |expire-cache | rpmdb | plugins | all ]

          清除本地缓存

 

        * makecache [fast]

          构建缓存

 

        * search string1 [string2] [...]

          模糊搜索,根据关键字进行匹配,搜索程序包名称及summary汇总信息

            如果想要搜索全部信息,可以使用search all命令

 

        * shell [filename]

          为yum提供的交互式操作界面

 

        * localinstall rpmfile1 [rpmfile2][...]

           (maintained for legacy reasons only- use install)

        * localupdate rpmfile1 [rpmfile2] [...]

           (maintained for legacy reasons only- use update)

           已经被废弃,

 

        * reinstall package1 [package2] [...]

          重新安装

 

        * downgrade package1 [package2] [...]

          降级安装

 

        * deplist package1 [package2] [...]

          根据repodata中的信息,显示指定程序包的所有依赖关系

 

        * repolist [all|enabled|disabled]

          显示客户端上指定的yum源的指向信息:

          默认是enabled

 

        * version [ all | installed | available| group-* | nogroups* | grouplist | groupinfo ]

          版本

 

        * history[info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll゜ack|new|sync|stats]

         查询所有影响了rpmdb的事务

 

        * load-transaction [txfile]

        * check

        * help [command]

 

程序包组管理

    CentOS6

        * groupinstall group1 [group2] [...]

        * groupupdate group1 [group2] [...]

        * grouplist [hidden] [groupwildcard][...]

        * groupremove group1 [group2] [...]

        * groupinfo group1 [...]

            程序包组的管理方案:

 

    CentOS7

        groups[list|info|summary|install|upgrade|remove|mark] [GROUP]

 

        为了兼容性考虑,为上述命令建立了别名:

        别名:group, grouplist,groupinfo, groupinstall, groupupdate, groupremove, grouperase

 

 

    yum的repo配置文件中常用的变量:

      $releasever:当前操作系统的发行版本的主版本号,如:centos6.7的主版本号是6,centos7.2的主版本号是7。

      $arch:平台类型

      $basearch:基础平台类型,x86_64,ppc...

      $YUM0~$YUM9:10个内置的可以由用户自定义的变量

 

    引入变量的目的:为了能够让多种类型的客户端可以正确的找到适合其使用的yum仓库中的程序包

 

    必须掌握:

    1.yum的repo配置文件的写法

    2.yum的主要操作命令:install,erase,update,list,info,repolist,clean,groupinstall,groupremove,grouplist,groupinfo

 

  工具:

    yum-config-manager --add-repo=URL

 

    epel源:epel-release-VERSION.noarch.rpm

    上传到Linux,使用rpm -ivh epel-release-VERSION.noarch.rpm

    就会直接生成一个epel.repo文件

 

 

1.想要使用某个程序包但是找不到可以用的二进制包。

2.想要使用的程序包有二进制格式的,我们所需要的功能和特性并没有被编译,

 

程序的源代码包有两种格式:

  原始的源代码包:name-VERSION.tar.gz

    用tar xf命令释放包中的源代码文件

  rpm封装的源代码包:name-VERIONS-release.src.rpm

    rpm -ivh将源代码文件安装到某个目录中

 

源代码程序包的组织形式:

  多个源代码文件

  同一个文件的不同代码段,或者是不同文件的不同代码段可能有依赖关系,在编译源代码的时候,必须先编译某些代码段,或者说必须先编译某个文件中的代码段,然后才能进行后续的编译

 

  在源代码之间可能存在跨文件的依赖关系,这种依赖关系可能只有作者知道

 

  程序员为了让用户能够比较轻松的了解文件与文件之间,代码段与代码段之间的依赖关系,他们会编写说明文档

 

  后来程序员为每一个源代码文件附加一个头部信息,用以说明文件和代码段的依赖关系,程序员开发一个工具专门提取此类信息,并汇总,结合程序员给提供的配置模板有针对性的生成安装的说明文档,其中包括:

    此次编译调用那个预处理器,如何进行预处理,调用哪个编译器,如何进行编译,调用哪个汇编器,如何进行汇编,程序需要安装在哪个路径下,程序文件的编译顺序如何

 

  项目管理工具:

    C/C++:make

    java:maven

    python:buildout

 

 

  说明性的文档,Makefile,这样的文件并不是固定不变的而是随着用户进行的选择而不断的变化

 

  Makefile文件用Makefile.in(Makefile.win)的模板生成的

 

    程序员可以使用专用的工具,来对于所有的源代码文件进行内容分析和抽取,构建出makefile文件,所有的makefile文件都有一个统一的模版——Makefile.in

 

    帮助用户生成makefile文件的通常是一个名为configure的脚本文件;

 

    程序员编写源代码,并且给源代码文件增加头部信息,提供Makefile.in的模板文件

 

    需要autoconf工具,生成configure脚本

    需要automake工具,并利用configure脚本接收来的所有参数,创建Makefile文件。

  有了正确的Makefile文件,可以使用make命令来进行源代码编译:

  源代码 --> 预处理(预处理器,cpp) --> 编译(编译器,gcc) --> 汇编(汇编器)--> 链接(链接器) --> 用于执行操作的二进制文件

 

  安装二进制文件--将二进制文件复制到正确的目录路径中

 

  在现在的源代码编译过程中,如果在源代码包中已经有了configure脚本,我们还需以下工作:

    1.使用./configure脚本根据用户提供的选项信息,生成Makefile文件

    2.make

    3.make install

 

    建议:在真正的安装程序包之前,最好先查看在源代码包中的install文件,如果没有这个文件,则查看README文件。

 

  开源程序的源代码的获取方式:

      1.官方自建的站点:

         apache.org(ASF,Apache Software Foundation)

         mariadb.org

         kernel.org

         ...

 

      2.代码的托管站点

         SourceForge

         Github.com

         code.google.com

 

  在Linux系统上进行源代码编译安装的前提:

    1.编译开发环境必须符合编译要求

      CentOS6:

           yum groupinstall "Development Tools" "Server PlatformDevelopment"

         CentOS7:

        yum groups install "DevelopmentTools(开发工具)"

    2.编译器要符合要求

      gcc,cpp,make,automake,autoconf,qt,ncurses

    3.编译时所用到的标准库要完备:glibc,C标准库

 

  满足上述条件之后,接下来进行源代码的编译安装:

  第一步:运行configure脚本

    大量的选项:指定安装过程中所用到的各种路径,启动或关闭的特性等

    --help:获取该程序包所支持的所有选项。

 

  选项分类:

    1.安装路径选项:

      --prefix=/PATH/TO/SOFTWARE_INSTALL

    2.系统类型选项:

      如果所有的系统类型选项都不选择,则默认在本机的操作系统,和本机的平台架构的基础之上进行编译。

      也可以在编译的时候选择其他的文件系统和其他的平台类型,这种情况通常称为“交叉编译”

    3.可选特性:

      --disable-FEATURE  在编译过程中禁用某种特性或功能

      --enable-FEATURE[=ARG]  在编译过程中启用某个特性或功能

    4.可选程序包选项:

      在编译源代码的时候,源代码的某些特性可能会依赖于其他的外部程序包

       --with-PACKAGE[=ARG]  在编译过程中,选择使用额外的程序包

             --without-PACKAGE  在编译过程中,不使用额外的程序包

 

        上述命令及选项执行成功后会在源代码目录中自动创建出Makefile文件

 

    第二步:make [j] [#]

 

    第三步:make install

 

  源代码程序安装之后,要做的收尾工作:

    1.导出二进制程序所在的目录到PATH变量中:

      在/etc/profile.d/name.sh

      export PATH=/PATH/TO/BINARY:$PATH

 

      source /etc/profile.d/name.sh

    2.导出库文件:

      编辑/etc/ld.so.conf.d/name.conf

      /PATH/TO/SOFTWARE_LIBRARY

 

      ldconfig [-v]

 

    3.导出头文件:

      创建对应的符号链接

      ln -sv /PATH/TO/HEAD_FILE/usr/include/name

 

    4.导出帮助文件:

      centos7默认已经导出帮助文件。

 

      centos6中:

      编译/etc/man.config文件,在该文件中添加新行:

      MANPATH=PATH/TO/MAN_FILE




举例安装httpd-2.4.18

    1.首先要解决开发工具环境;

        yum groupinstall "Developmenttools"

 

    2.使用适合httpd-2.4.18版本的apr及apr-util工具;

        安装apr工具

            ~]# tar xf apr-1.5.2.tar.bz2 -C/usr/src

            ~]# cd /usr/src/apr-1.5.2

            ~]# ./configure--prefix=/usr/local/apr-1.5.2

            ~]# make

            ~]#make install

 

        安装arp-util工具

            ~]# tar xf apr-util-1.5.4.tar.bz2 -C/usr/src

            ~]# cd /usr/src/apr-util-1.5.4

            ~]# ./configure--prefix=/usr/local/apr-util-1.5.4 --with-apr=/usr/local/apr-1.5.2

            ~]# make

            ~]# make install

 

    3.需要安装pcre-devel以满足httpd的正则表达式使用需求;

        yum -y install pcre-devel

 

编译安装httpd:

    ~]# tar xf httpd-2.4.18.tar.gz -C /usr/src

    ~]# cd /usr/src/httpd-2.4.18

    ~]# ./configure--with-apr=/usr/local/apr-1.5.2 --with-apr-util=/usr/local/apr-util-1.5.4

    ~]# make

    ~]# make install

 

收尾:

    1.导出二进制文件:

        vim /etc/profile.d/httpd.sh

        export PATH=/usr/local/apache2/bin:$PATH

 

        source /etc/profile.d/httpd.sh

 

    2.导出库文件:

        vim /etc/ld.so.conf.d/httpd-x86_64.conf

        /usr/local/apache2/modules

 

        ldconfig -v

 

    3.导出头文件:

        ln -sv /usr/local/apache2/include/usr/include/httpd

 


本文转自 Runs_ 51CTO博客,原文链接:http://blog.51cto.com/12667170/1930753,如需转载请自行联系原作者

相关文章
|
6月前
|
Web App开发 应用服务中间件 Linux
yum使用总结
yum使用总结
84 0
|
存储 Linux Shell
|
数据格式 XML
|
缓存 安全 Linux
|
Python C语言 Go
yum问题解决
错误信息1:There was a problem importing one of the Python modulesrequired to run yum. The error leading to this problem was:No module named urlgrabberPlea...
1319 0