rpm与yum的初步学习

rpm与yum的初步学习

  我们在使用linux系统时需要安装和卸载软件,我们这节就先来看一下rpm和yum的初步简单实用。

linux软件安装:

  安装程序的方式:

     通用二进制格式:直接解压压缩文件,就可以使用。但一定要注意安装平台。

         软件包管理器:如RPM。

         软件包管理器的前端工具:如YUM。

         源代码编译。

   软件包的组成:

        二进制程序,位于 /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin 等目录中。

        库文件,位于 /lib, /usr/lib, /usr/local/lib 等目录中。Linux中库文件以 .so(动态链接库)或 .a(静态链接库)作为文件后缀名。

        配置文件,位于 /etc 目录中。

        帮助文件:手册, README, INSTALL (/usr/share/doc/)

   了解安装方式和软件包组成之后我们用什么来安装和卸载软件呢? 这里我们就需要用到软件包管理器来实现,要知道在没有软件包管理器之前,安装程序,卸载程序是非常繁杂的。

   软件包管理工具的特性:

        文件清单

        文件放置路径

        提供的功能说明

        依赖关系

        软件包管理器内部有一个数据库,其中记载着程序的基本信息,校验信息,程序路径信息等。

   软件包管理器:

        debian:deb文件, dpkg包管理器

        redhat: rpm文件, rpm包管理器

        rpm: Redhat Package Manager

         RPM  Package Manager

RPM

   RPM早期被称为RedHat Package Manager,但由于目前RPM非常流行,且已经成为Linux工业标准。所以RPM现在又被称为RPM is Package Manager。RPM管理支持事务机制。增强了程序安装卸载的管理。RPM的功能:打包、安装、查询、升级、卸载、校验、数据库管理。

   RPM包的命名规范:

      源程序的命名规范:

        name-version.tar.{gz|bz2|xz}

        版本号:major.minor.release

        例:bash-4.3.1.tar.xz

        RPM包的命名规范:name-version-release.os.arch.rpm

        name:程序名称。

        version:程序版本号。

        release(发行号):用于标识RPM包本身的发行号,与源程序的release号无关。

        os:即说明RPM包支持的操作系统版本。如el6(即rhel6)、centos6、el5、suse11。

        arch:主机平台。如i686、x86_64、amd64、ppc(power-pc)、noarch(即不依赖平台)

        例:bash-4.3.2-5.el6.x86_64.rpm

    RPM分包:

        包:分类和拆包

        Application-VERSION-ARCH.rpm: 主包

        Application-devel-VERSION-ARCH.rpm 开发子包

        Application-utils-VERSION-ARHC.rpm 其它子包

        Application-libs-VERSION-ARHC.rpm 其它子包

      这里需要注意的是:包之间可能存在依赖关系,甚至循环依赖。

    解决依赖包管理工具:

        yum:rpm包管理器的前端工具

        apt-get:deb包管理器前端工具

        zypper: suse上的rpm前端管理工具

        dnf: Fedora 18+ rpm包管理器前端管理工具

        这里我们稍后会简单介绍yum的使用,先来把RPM讲完。

  上面我们说过的包的组成有二进制程序、库文件、配置文件和帮助文档,我们说说库文件。

    库文件:

        查看二进制程序所依赖的库文件:

           ldd /PATH/TO/BINARY_FILE

        示例:

                    [root@centos6 Packages]# ldd /bin/ls                    
                    linux-vdso.so.1 =>  (0x00007ffcfbd95000)
                    libselinux.so.1 => /lib64/libselinux.so.1 (0x000000359f400000)
                    librt.so.1 => /lib64/librt.so.1 (0x000000359e400000)
                    libcap.so.2 => /lib64/libcap.so.2 (0x00000035a4800000)
                    libacl.so.1 => /lib64/libacl.so.1 (0x00000035a8800000)
                    libc.so.6 => /lib64/libc.so.6 (0x000000359dc00000)
                    libdl.so.2 => /lib64/libdl.so.2 (0x000000359d800000)
                    /lib64/ld-linux-x86-64.so.2 (0x000000359d400000)
                    libpthread.so.0 => /lib64/libpthread.so.0 (0x000000359e000000)
                    libattr.so.1 => /lib64/libattr.so.1 (0x00000035a8400000)

   管理及查看本机装载的库文件:

        ldconfig

        /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系

            配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

            缓存文件:/etc/ld.so.cache

               示例:

                    [root@centos7 Packages]# /sbin/ldconfig -p                    
                    922 libs found in cache `/etc/ld.so.cache'
                    p11-kit-trust.so (libc6,x86-64) => /lib64/p11-kit-trust.so
                    libzapojit-0.0.so.0 (libc6,x86-64) => /lib64/libzapojit-0.0.so.0
                    libz.so.1 (libc6,x86-64) => /lib64/libz.so.1
                    libyelp.so.0 (libc6,x86-64) => /lib64/libyelp.so.0
                    libyajl.so.2 (libc6,x86-64) => /lib64/libyajl.so.2
                    ...

    程序包管理器:

功能:将编译好的应用程序的各组成文件打包一个或几个 程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、 升级和校验等管理操作

1、包文件组成(每个包独有)RPM包内的文件 RPM的元数据,如名称,版本,依赖性,描述等 安装或卸载时运行的脚本

2、数据库(公共) 程序包名称及版本 依赖关系 功能说明 包安装后生成的各文件路径及校验码信息

获取程序包的途径:

(1) 系统发版的光盘或官方的服务器;

CentOS镜像:

https://www.centos.org/download/

http://mirrors.aliyun.com

http://mirrors.sohu.com

http://mirrors.163.com

(2) 项目官方站点

(3) 第三方组织

Fedora-EPEL

搜索引擎:

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

https://sourceforge.net

0822.png

(4) 自己制作

rpm包管理:

CentOS系统上使用rpm命令管理程序包:

安装、卸载、升级、查询、校验、数据库维护

安装:-i

rpm {-i|–install} [install-options] PACKAGE_FILE …

[install-options]:

   -v:详细信息

   -vv:更详细信息

   -h:输出进度条 (hash marks)每个#代表2%

     –test:测试安装,检查并报告以来关系及冲突消息

   –nodeps:忽略依赖关系

   –justdb:只升级数据库

   –relpacepkgs:重新安装

-F:升级

rpm -Fvh PACKAGE FILE

-U:升级或安装 

rpm -Uvh PACKAGE FILE

–oldpackage:降级

–force:强制升级

-e:卸载

–allmatches:卸载所有匹配指定名称的程序包的个版本

–nodeps:忽略依赖关系

–test:测试卸载

-q:查询

rpm {-q|–query} [select-options] [query-options]

[select-options]:

   PACKAGE——NAME:查询指定程序包是否已经安装,及其版本

   -a –all:查询已安装的所有程序包

   -f FILE:查询指定的文件由哪个程序包安装生成

                                [root@centos7 Packages]# rpm -qf /usr/sbin/httpd                        
                                  httpd-2.4.6-40.el7.centos.x86_64

   –whatprovides CAPBILITY:查询指定的CAPBILITY由哪个程序包提供

   –whatrequires CAPBILITY:查询指定的CAPBILITY被哪个包依赖

[query-options]:

   –changelog:查询rpm包的changelog

   -l –list:安装程序包生成了多少个文件

    rpm -ql 包名

                                  [root@centos7 Packages]# rpm -ql httpd                                    
                                    /etc/httpd
                                    /etc/httpd/conf
                                    /etc/httpd/conf.d
                                    /etc/httpd/conf.d/README
                                    ...
                                    [root@centos7 Packages]# rpm -ql httpd | wc -l
                                    496

   -i –info:查询程序包information(版本号,大小等)

    rpm -qi 包名

[root@centos7 Packages]# rpm -qi httpd                                
Name        : httpd
Version     : 2.4.6
Release     : 40.el7.centos
Architecture: x86_64
Install Date: Sun 21 Aug 2016 11:17:05 PM EDT
Group       : System Environment/Daemons
Size        : 9806197
License     : ASL 2.0
Signature   : RSA/SHA256, Wed 25 Nov 2015 09:41:23 AM EST, Key ID 24c6a8a7f4a80eb5
Source RPM  : httpd-2.4.6-40.el7.centos.src.rpm
Build Date  : Thu 19 Nov 2015 04:45:11 PM EST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

   -c –configfiles:程序包配置文件

   -d:查询指定的程序包提供的文档

   –provides:列出指定的程序包所提供的CAPBILITY

   -R –requires:查询指定程序包依赖关系

   –scripts:查询程序包自带的脚本

[root@centos7 Packages]# rpm -q --scripts httpd
preinstall scriptlet (using /bin/sh):
# Add the "apache" user
/usr/sbin/useradd -c "Apache" -u 48 \
    -s /sbin/nologin -r -d /usr/share/httpd apache 2> /dev/null || :
postinstall scriptlet (using /bin/sh):

if [ $1 -eq 1 ] ; then 
        # Initial installation 
        /usr/bin/systemctl preset httpd.service htcacheclean.service >/dev/null 2>&1 || : 
fi
preuninstall scriptlet (using /bin/sh):

if [ $1 -eq 0 ] ; then 
        # Package removal, not upgrade 
        /usr/bin/systemctl --no-reload disable httpd.service htcacheclean.service > /dev/null 2>&1 || : 
        /usr/bin/systemctl stop httpd.service htcacheclean.service > /dev/null 2>&1 || : 
fi
postuninstall scriptlet (using /bin/sh):

/usr/bin/systemctl daemon-reload >/dev/null 2>&1 || : 


# Trigger for conversion from SysV, per guidelines at:
# https://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Systemd
posttrans scriptlet (using /bin/sh):
test -f /etc/sysconfig/httpd-disable-posttrans || \
  /bin/systemctl try-restart httpd.service htcacheclean.service >/dev/null 2>&1 || :

rpm包自带脚本:

自带的脚本分为4类:

   preinstall:安装之前运行的

   postinstall:安装完成之后运行的

   preuninstall:卸载真正开始执行之前运行

     postuninstall:卸载过程执行完成之后执行

  安装程序包时加上下面的参数命令:

  –noscrips :  不执行脚本

–nosidnature:不检查包签名信息,不检查来源合法性

–nodigest:   不检查程序包完整性

包校验:-V

   rpm {-V|–verify} [select-options] [verify-options]

       S file Size differs

       M Mode differs (includes permissions and file 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

    包来源合法性验证和完整性验证:

    来源合法性验证:RSA

       数字签名

    完整性验正:SHA256

    rpm  -K|checksig rpmfile 检查包的完整性和签名

        导入所需要公钥:

        rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

    示例:

[root@centos7 Packages]# rpm --import /run/media/root/CentOS\ 7\ x86_64/RPM-GPG-KEY-CentOS-7                    
[root@centos7 Packages]# rpm -ivh zsh-5.0.2-14.el7.x86_64.rpm 
 Preparing...   ################################# [100%]
 Updating / installing...
 1:zsh-5.0.2-14.el7 ################################# [100%]
[root@centos7 Packages]# rpm -K zsh-5.0.2-14.el7.x86_64.rpm 
zsh-5.0.2-14.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
[root@centos7 rpm-gpg]# ll
total 12
-rw-r--r--. 1 root root 1690 Dec  9  2015 RPM-GPG-KEY-CentOS-7
-rw-r--r--. 1 root root 1004 Dec  9  2015 RPM-GPG-KEY-CentOS-Debug-7
-rw-r--r--. 1 root root 1690 Dec  9  2015 RPM-GPG-KEY-CentOS-Testing-7

    手动验证:rpm -K PACKAGE_FILE

    数据库重建:

            [root@centos7 rpm]# ls 

Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5

Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername

[root@centos7 rpm]# pwd

/var/lib/rpm

            rpm数据库路径

        查询操作:通过此处的数据库进行;

    rpm {–initdb|–rebuilddb}

    –initdb:事先无任何数据库时可创建新的;有时不执行任何操作

    –rebuilddb:重新构建,通过读取当前系统上的所有已安装的程序包进行重新构建;

yum

  YUM被称为 Yellow dog Updater, Modified,是一个在Shell前端软件包管理器。YUM客户端基于RPM包进行管理,可以通过HTTP服务器下载、FTP服务器下载、本地软件池的等方式获得软件包,可以从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系。YUM在安装RPM时,会从服务器下载相应包,且缓存在本地。

  yun repository:yum repo (yum仓库)

    存储众多rpm包,以及相关的元数据文件(放置于目录下:repodata);

文件服务器:

   ftp://

   http://

   nfs://

   file:///

yum客户端:

[root@centos7 ~]# rpm -qc yum                                    
/etc/logrotate.d/yum        
/etc/yum.conf          主配置文件
/etc/yum/version-groups.conf     
/etc/yum.conf                 为所有仓库提供公共配置
/etc/yum.repos.d/*.repo        为仓库的指向提供配置

仓库指向的定义:

配置文件的说明:

082202.png

[main]        #main仓库。[ ]中括号表示一个仓库的定义。其中是仓库的名称。

cachedir=/var/cache/yum/$basearch/$releasever    #RPM包的缓存位置。

keepcache=0    #RPM包在本地是否需要长期保存。1表示yes,0表示no。

debuglevel=2    #日志级别。

logfile=/var/log/yum.log    #日志文件。

exactarch=1    #下载的RPM包是否需要与本地平台完全匹配。1表示yes,0表示no。

obsoletes=1

gpgcheck=1    #是否需要自动来源合法性检测。

plugins=1

installonly_limit=5

bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bdistroverpkg=centos-release

CentOS-Base.repo配置文件:

[repositoryID]

name=Some name for this repository

baseurl=url://path/to/repository/

enabled={1|0}

gpgcheck={1|0}

gpgkey=URL

enablegroups={1|0}

failovermethod={roundrobin|priority} 默认为:roundrobin意为随机挑选

cost=    默认为1000

对配置文件中的一些配置项作说明:

           [ … ]:仓库的名称。不能重复。

enabled  {1|0}   是否启用仓库,不写默认启用。

gpgcheck {1|0}   检查合法性

repo_gpgcheck{1|0} 是否检查仓库元数据

gpgkey=URL  gpgkey:验证RPM包的密钥文件路径。该文件可以在远处服务器上,也可以在本地。

enablegroups {1|0}    是否允许在此仓库使用组批量管理程序包

baseurl:配置仓库的路径。用于指定一个url。可设置多个

baseurl=url://path/to/repository/

               url://server2/path/to/repository/

               url://server3/path/to/repository/

mirrorlist:指向一个镜像列表,里面有多个url。

cost:代价,其本质是仓库优先级的配置。

显示仓库列表:

repolist [all|enabled|disabled]

显示程序包:list

# yum list [all | glob_exp1] [glob_exp2] […]

# yum list {available|installed|updates} [glob_exp1]

yum list相关命令:

yum list all

082203.png

    最左边第一列:软件包名称.平台名称;中间列:软件版本号-release号;最右边一列:安装情况。

    若显示@则表示该软件已经通过仓库安装;如@anaconda表示已经通过naconda仓库安装;install,则表示系统已经安装,未通过仓库安装。若无@或不是install,则表示尚未安装。如base,表示未安装,包位于base仓库中。updates,表示未安装,包位于updates仓库中。

yum list installed  显示已安装

yum list available  只显示没有安装,但可安装的包

yum list updates    查看所有可更新的包。

yum list extras     显示不属于任何仓库的,额外的包。

yum list obsoletes  显示被废弃的包

yum list recent     新添加进yum仓库的包

显示查询某个文件是由哪个软件包生成的

yum provides 文件

yum whatprovides 文件

                        [root@centos7 Packages]# yum whatprovides /etc/issue            
            Loaded plugins: fastestmirror, langpacks
            Loading mirror speeds from cached hostfile
            centos-release-7-2.1511.el7.centos.2.10.x86_64 : CentOS Linux release file
            Repo        : base
            Matched from:
            Filename    : /etc/issue
            centos-release-7-2.1511.el7.centos.2.10.x86_64 : CentOS Linux release file
            Repo        : @anaconda
            Matched from:
            Filename    : /etc/issue

安装程序包:

install package1 [package2] […]

reinstall package1 [package2] […]  (重新安装)

升级程序包:

update [package1] [package2] […]

                        [root@centos7 Packages]# yum update ftp-0.17-66.el7.x86_64.rpm                         
                        Loaded plugins: fastestmirror, langpacks
                        Examining ftp-0.17-66.el7.x86_64.rpm: ftp-0.17-66.el7.x86_64
                        ftp-0.17-66.el7.x86_64.rpm: does not update installed package.
                        No packages marked for update

downgrade package1 [package2] […] (降级)

检查可用升级:

check-update 

卸载程序包:

remove | erase package1 [package2] […]

查看程序包information:

info […] 

示例:

[root@centos7 Packages]# yum info ftp
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Installed Packages
Name        : ftp
Arch        : x86_64
Version     : 0.17
Release     : 66.el7
Size        : 96 k
Repo        : installed
From repo   : base
Summary     : The standard UNIX FTP (File Transfer Protocol) client
URL         : ftp://ftp.linux.org.uk/pub/linux/Networking/netkit
License     : BSD with advertising
Description : The ftp package provides the standard UNIX command-line FTP (File
            : Transfer Protocol) client.  FTP is a widely used protocol for
            : transferring files over the Internet and for archiving files.
            : 
            : If your system is on a network, you should install ftp in order to do
            : file transfers.

搜索:

search string1 [string2] […] 以指定的关键字搜索程序包名及summary信息

[root@centos7 Packages]# yum search ftp
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
============================================================= N/S matched: ftp =====================
ftp.x86_64 : The standard UNIX FTP (File Transfer Protocol) client
lftp-scripts.noarch : Scripts for lftp
syslinux-tftpboot.x86_64 : SYSLINUX modules in /var/lib/tftpboot, available for network booting
tftp.x86_64 : The client for the Trivial File Transfer Protocol (TFTP)
tftp-server.x86_64 : The server for the Trivial File Transfer Protocol (TFTP)
vsftpd.x86_64 : Very Secure Ftp Daemon
vsftpd-sysvinit.x86_64 : SysV initscript for vsftpd daemon
curl.x86_64 : A utility for getting files from remote servers (FTP, HTTP, and others)
lftp.i686 : A sophisticated file transfer program
lftp.x86_64 : A sophisticated file transfer program
wget.x86_64 : A utility for retrieving files using the HTTP or FTP protocols

  Name and summary matches only, use "search all" for everything.

查看指定包所依赖的capabilities:

deplist package1 [package2] […]

查看yum事务历史:

history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

[root@centos7 Packages]# yum history 
Loaded plugins: fastestmirror, langpacks
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     3 | root <root>              | 2016-08-21 23:17 | Install        |    5  <
     2 | root <root>              | 2016-08-19 05:57 | Install        |    1 > 
     1 | System <unset>           | 2016-07-20 05:39 | Install        | 1243   
history list

yum的命令行选项:

–nogpgcheck:禁止进行gpg check

-y: 自动回答为“yes”

-q:静默模式

–disablerepo=repoidglob:临时禁用此处指定的repo

–enablerepo=repoidglob:临时启用此处指定的repo

–noplugins:禁用所有插件

    rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时。Yum(全称为 Yellow dog Updater, Modified)是Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

原创文章,作者:zanghonglei,如若转载,请注明出处:http://www.178linux.com/38856

(0)
zanghongleizanghonglei
上一篇 2016-08-24
下一篇 2016-08-24

相关推荐

  • Linux系统程序包管理工具-RPM

    一、rpm是什么 RPM 是RPM Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的。RPM包管理器(RPM)是一个强大的命令行驱动的包管理系统能够安装、卸载、验证、查询和更新计算机软件包。每个软件包包括存档的文件连同包和它的版本信息,描述等。还有一个库API,允…

    Linux干货 2015-11-19
  • Linux下DNS服务器配置

    Linux下DNS服务器配置 简要描述各种DNS服务器的配置方法。包括正向解析DNS服务器、逆向解析DNS服务器、主从DNS服务器。 实验环境整体配置 关闭SElinux setenfore 0 清空防火墙 iptables -F 修改主配置文件 /etc/named.conf #监听本机外网端口 listen-on port 53 { 127.0.0.1;…

    Linux干货 2017-05-31
  • 第三周

    第三周blog 第三周blog 1    列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。    # who|cut -d&rsquo; &lsquo; -f 1 |sort -u 2    取出最后登录到当前系统的用户的相关信息。  …

    Linux干货 2016-12-19
  • 0809linux基础小记(sed和vim用法)

    sed  [options] ‘scripts’ inputfile -n: 不输出模式空间内容的自动打印 -e: 多点编辑 -f:从指定文件中读取编辑脚本 -i:原处编辑 scripts: ’地址命令’ 地址定界: (1)  不给地址:对全文进行处理 (2)  单地址: #:  指定的行 例: sed '2…

    Linux干货 2016-08-11
  • N23-第三周博客作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -d' ' -f1 | sort -u 2、取出最后登录到当前系统的用户的相关信息。 [root@localhost ~]# last -1 | head -1 3、取出当前系统上被用户当…

    Linux干货 2016-12-05
  • Linux 基础知识(六.三)

    按找下列要求,写一个脚本 (1)创建目录/tmp/testdir-当前日期时间 (2)在此目录创建100个空文件:file1-file100 (3)显示/etc/passwd文件中位于偶数行的用户的用户名 (4)创建10个用户:user10-user19,密码同用户名 (5)在/tmp创建10个空文件file10-file19 脚本如下: #!/bin/ba…

    Linux干货 2016-11-14