首页 > 代码库 > RHEL程序包管理

RHEL程序包管理

RHEL程序包管理

        

YUM Yellowdog UpdateModifier  

RPM : RPM is PackageManager


一.程序包管理


1.程序包的命名格式:

    程序包的命名经过多个过程,最初状态是由程序员编写后以program_name-VERSION的形式打包共享的。编译之后会加上相应的适用硬件架构平台ARCH

program name-VERSION.tar.gz 

                           编译:--> 归档压缩       

                            programname-VERSION-ARCH.tar.gz

                           包管理器:-->

                            program name-VERSION-ARCH.rpm

版本号的具体形式:

VERSIONmajor.minor.release

                            major:主版本号

                            minor:次版本号

                            release:  修订号

    例如:bash-4.3.2.tar.xz

当然,包的命名中不仅仅有程序包的版本号,还会包括所对应的程序包管理器的的修订号。

    例如:RPMbash-4.3.2-1.centos6.x86_64.rpm-1仅用于标识对rpm自身的修订。


2.程序包的分包机制:

程序包之所以会有分包机制主要是为了让程序包适应不同的用户。试想:某程序有20个功能;有10个常用功能,有3个次常用,用3个二次开发相关,余下极少用。这样分包之后,主包可以满足大多数用户的10常用功能,特定的用户自行安装自己需要的功能包。

包的分类:

                   主包:命名与源程序包名一致

                                     bash-4.3.2-1.centos6.x86_64.rpm

                                 子包(支包):

                                     bash-devel-4.3.2-1.centos6.x86_64.rpm

3.获取包的途径:

                                1、系统原发行光盘或者官方站点服务器;

                                     镜像:http://mirrors.sohu.com

                                2、程序项目官方站点

                                3、第三方组织

                                     Fedora-EPEL:epel

                                     搜索引擎:http://rpmfind.net,http://rpm.pbone.net, http://pkgs.org

                                4、自己制作

 

 提示:对于第三方组织,为了保证包的可靠。最好校验来源合法性,包的完整性。


二.RHEL系统程序包管理工具RPM的应用:


1.安装

           格式:#rpm{-i|--install} [install-options] PACKAGE_FILE ...

           #rpm -ivh  [install-options]PACKAGE_FILE

                             

           选项

                     -i: 安装

                     -v, -vv , -vvv:显示详细信息, vvvvv显示的信息更为详细, vv又比v详细

                     -replacepkgs:重新安装

                     --nodeps: 忽略依赖关系

                     --test: 测试安装,而不执行真正的安装过程;dryrun模式;

                

    注意:这里在安装程序包的时候极有可能会出现包之间的依赖关系,如果不解决依赖关系可能会导致依赖包的不正常;


2.升级:

            格式:# rpm -Fvh[install-options] PACKAGE_FILE ... 

                    执行升级时,如果存在升级包就升级。如果不存在,即停止。

            选项:

                    -U:如果有较旧版本程序包, 则升级安装;否则执行安装操作

                    -F:如果有较旧版本程序包, 则升级安装;否则终止操作

                    -v, -vv , -vvv:显示详细信息,vv比v信息更全面,依次vvv最详细。

                    --oldpackage:降级安装;

                    --force: 忽略冲突,强制执行过程;

 

    注意:1.不要对内核包执行升级操作;linux支持多版本内核并存,因此,对新版本内核可直接安装;2.如果原程序包的配置文件安装后曾被改动,升级时,新版本的文件并不会直接覆盖老版本的文件,而是把新版本的文件重命(加后缀.rpmnew)名后保


3.卸载:

            格式: #rpm -ePACKAGE_NAME ...

            选项:  --nodeps: 忽略依赖关系

                    --test:卸载测试

 

    注意:如果包的配置文件安装后曾被改动过,卸载时,此文件将也不会被删除,而是被重命名(原文件加.rpmsave后缀)并保留;

 

4.查询:

            格式:#rpm{-q|--query} [select-options] [query-options]

            选项:  -q PACKAGE_NAME ... 查询某包是否安装           

             -qa   查询已安装的所有包

      -qf   /path/to/somefile查询某文件是由哪个包安装生成

      -qpl  PACKAGE_FILE查询尚未安装包的相关信息

                    -qi   PACKAGE_NAME查询某包的简要说明信息

                    -ql   PACKAGE_NAME安装后的所有文件列表

                    -qc   PACKAGE_NAME查询某包安装后生成的所有配置文件的列表 

       -qd   PACKAGE_NAME查询某包安装后生成的所有帮助文件的列表   

      -q --changelogPACKAGE_NAME查询某rpm包制作时changelog变化                      -q --provides PACKAGE_NAME查询某包提供的capabilities

                    -q --requires PACKAGE_NAME查询某包所依赖的capabilities

       -q --scripts查询某包安装卸载时的脚本

                                                      

5.校验:

             格式:rpm -V PACKAGE_NAME   

             如果出现问题,就会以下面单个字符形式显示。

 S file Sizediffers                               

                          M Mode differs (includes permissions andfile type)

                          5 digest (formerly MD5 sum) differs               

                          D Device major/minor number mismatch

                          L readLink(2) path mismatch

                          U User ownership differs

                          G Group ownership differs

                          T mTime differs                                       

                          P caPabilities differ

             包来源合法性及完整性验正:

                          rpm--import PUBKEY ...

                          rpm{-K|--checksig} [--nosignature] [--nodigest] PACKAGE_FILE 

                                 --nosignature:不检查来源合法性

                                 --nodigest:不检查完整性

 

三.Linux程序包管理前端工具YUM

 

1.安装:

           yum install PACKAGE_NAME ...

                         PACKAGE-VERSION 安装指定的版本的程序

           reinstall PACKAGE_NAME ... 重装指定的程序包  

           yum groupinstall "GROUP_NAME"  安装包组

        

   注意:这里加引号是防止空格

2.升级:

                     yum update PACKAGE_NAME

                         update PACKAGE-VERSION升级包可用,且仅期望升级指定版本

                     yum groupupdate "GROUP_NAME"升级包组

                     yum check-update检查可用升级

3.降级:           yum downgrade PACKAGE_NAME

4.卸载:

                 yum erase|removePACKAGE_NAME

                 yum groupremove "GROUP_NAME "卸载包组

                 yum remove@"GROUP_NAME"

            

   注意:依赖于卸载指定程序包的其它包,会被一并卸载;

 

5.查询:

                    yum list 查看所有包

                    yum info PACKAGE_NAME 查看具体某个包组

                    yum search KEYWORD: 根据关键字模糊查询包名

                    yum provides|whatprovides/path/to/somefile

                    yum grouplist 显示所有包组

                     

 

 

6.yum客户端包仓库的创建:

配置文件:/etc/yum.conf这个是核心配置文件。当需要配置包仓库路径的时候,可以自己创建/etc/yum.repos.d/*.repo    例如:vim/etc/yum.repos.d/REPO_ID.repo

仓库定义:

                            [REPO_ID]

                            name=REPOdescription 

                            baseurl=ftp://192.168.0.1/pub/CentOS6/包仓库路径

                            enabled={1|0}创建时包仓库是否激活默认为1

                            gpgcheck={1|0}是否检验包的可靠性

                            gpgkey=ftp://172.16.0.1/pub/CentOS6/gpg-key公钥导入地址

            保存退出执行包仓库创建命令:

            yum –y install createrepo

 

 

    注意:1、在yum客户定义仓库时可使用cost定义仓库的使用开销,默认为1000;2、baseurl中指定路径时可使用变量$releasever:表示当前OS发行版的主版本号;$basearch:表示基础平台,例如i686,i586,i486,i386系列的基础平台都是i386;                            

          例如:http://mirrors.sohu.com/centos/$releasever/os/$basearch 

 

7.程序包的编译安装:

有时我们计划使用的包在仓库中无法找到时,还需要自己编译安装。

编译安装源程序的前提:

提供开发环境:开发工具和开发库

    包组:DevelopmentToolsServer Platform DevelopmentDesktop PlatformDevelopment

项目构建工具:make (gcc)。这是C源程序的的编译过程。

编译C源程序的步骤:

 1、/configure:检查编译环境,并根据指定的选项确定编译的特性、安装路径等;

         --prefix=:   指定安装路径;多数程序都有默认安装路径;

         --sysconfidr=:   指定配置文件安装路径;

    2make:调用所需要的编译器根据makefile配置文件定义执行编译过程;

    3make install:安装程序;  

    注意:这里的./configure的目的会生成makefile文件,如果包中已有可直接跳过。


8.程序安装于专用目录时,安装后的配置:

    1.导出二进制程序所在路径至PATH环境中

    # export PATH=/usr/local/nginx/sbin:$PATH

    手动添加配置文件: /etc/profile.d/*.sh   

2导出库文件给OS

    OS查找库文件方法:根据/etc/ld.so.conf配置文件指定的路径搜索,或搜索/lib, /lib64, /usr/lib, /usr/lib64,把查找到的所有的库文件路径和其名称映射关系保存为一个缓存文件/etc/ld.so.cache

手动添加配置文件:/etc/ld.so.conf.d/*.conf

假设nginx安装于/usr/local/nginx,此目录中有其库文件子目录lib,导出此目录中库文件:

       1)新建文件/etc/ld.so.conf.d/nginx.conf,在文件添加如下行:

                                         /usr/local/nginx/lib   

        (2) 运行命令:

                                         Ldconfig  -v

3帮助文件导出

    man命令搜索特定路径查找手册页文件,这些路径是定义在/etc/man.config中的MANPATH参数所指定的路径下的;将源程序的包中man文件cp/usr/share/man/man{1,8}这里要具体看自己的源程序包是第几章节。

4头文件导出  

        导出独立安装应用程序的头文件方法:创建链接至/usr/include下即可;

例如:/usr/local/nginx/include

    #ln -sv /usr/local/nginx/include /usr/include/nginx


本文出自 “我和Linux的那些年” 博客,请务必保留此出处http://guanqianjian.blog.51cto.com/9652236/1583489

RHEL程序包管理