rpm

软件运行环境

API:Application Programming Interface
    POSIX:Portable OS

程序源代码--> 预处理--> 编译--> 汇编--> 链接
    静态编译:
    共享编译:.so

ABI:Application Binary Interface
    Windows与Linux不兼容
        ELF(Executable and Linkable Format)
        PE(Portable Executable)
    库级别的虚拟化:
        Linux: WINE
        Windows: Cywin

linux 软件的组成

二进制程序

共享库--给别应用程序用的
    共享库,把程序的某些功能做成库。

配置文件
帮助文件

/etc
/bin
/lib
/usr/share/man

/usr/local/
/usr/
也有类似的层级结构

包管理器:

二进制应用程序的组成部分:
    二进制文件、库文件、配置文件、帮助文件

程序包管理器:
    debian:deb文件, dpkg包管理器

    redhat: rpm文件, rpm包管理器
    rpm: RedhatPackage Manager
    RPM Package Manager

包命名

源代码:name-VERSION.tar.gz|bz2|xz
    VERSION: major.minor.release
rpm包命名方式:
    name-VERSION-release.arch.rpm
        例:bash-4.2.46-19.el7.x86_64.rpm

    VERSION: major.minor.release

    release:release.OS

    常见的arch:
        x86: i386, i486, i586, i686
        x86_64: x64, x86_64, amd64powerpc: ppc
        跟平台无关:noarch

包命名和工具

包:分类和拆包
    Application-VERSION-ARCH.rpm: 主包
    Application-devel-VERSION-ARCH.rpm开发子包
    Application-utils-VERSION-ARHC.rpm其它子包
    Application-libs-VERSION-ARHC.rpm其它子包

包名+版本号+发行号+平台

注安装过程中不要装错rpm包。一般情况都是需要装主包的,其他包看需要。

包之间:可能存在依赖关系,甚至循环依赖

安装软件的时候会有提示依赖关系,但是仅提示该软件的依赖关系,可能所依赖的软件包还有依赖关系。

解决依赖包管理工具:
    yum:rpm包管理器的前端工具
    apt-get:deb包管理器前端工具
    zypper: suse上的rpm前端管理工具

    dnf: Fedora 18+ rpm包管理器前端管理工具,未来的包管理工具。

库文件

查看二进制程序所依赖的库文件:
    ldd /PATH/TO/BINARY_FILE
        [root@localhost ~]# ldd /bin/cat
        linux-vdso.so.1 =>  (0x00007ffc0f7e8000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f2fbfc85000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2fc005b000)

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

    配置文件:有时候需要编写配置文件,使系统识别第三方软件带的库文件。

            /etc/ld.so.conf  #主配置文件,不用管
            /etc/ld.so.conf.d/*.conf  #如果自己安装的软件,自己带库文件。需要用户自定编写库配置文件。让操作系统识别。
            自己创建一个.conf结尾的文件。只需要把放库文件的路径(目录)写进去,再执行 ldconfig 使系统重新读取配置文件。               

                ldconfig -p 查看系统识别到的库文件。

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

程序包管理器:

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

    1、包文件组成(每个包独有)

        RPM包内的文件
        RPM的元数据,如名称,版本,依赖性,描述等
        安装或卸载时运行的脚本

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

    rpm --intdb | --rebuiddb 初始化或重建数据库

该数据库非常重要需要备份,如损坏的话即使重建也是空的。

程序包的来源

管理程序包的方式:
    使用包管理器:rpm
    使用前端工具:yum, dnf

获取程序包的途径:

    (1) 系统发版的光盘或官方的服务器;
        CentOS镜像:
        https://www.centos.org/download/
        http://mirrors.aliyun.com
        http://mirrors.sohu.com
        http://mirrors.163.com

    (2) 项目官方站点
        http://httpd.apache.org/

    (3) 第三方组织:
        Fedora-EPEL:
            Extra Packages for Enterprise Linux
以上方式推荐使用。除非都找不到,而且非关键性业务的可以使用如下方式

        Rpmforge:RHEL推荐,包很全

    搜索引擎:rpm包搜索引擎,不是百度也不谷歌。
        http://pkgs.org
        http://rpmfind.net
        http://rpm.pbone.net
        https://sourceforge.net/
    (4) 自己制作

    注意:检查其合法性:来源合法性,程序包的完整性

软件使用一定不要用盗版,包括管理软件

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

安装、卸载、升级、查询、校验、数据库维护
安装:
    rpm {-i|--install} [install-options] PACKAGE_FILE…
    -v: verbose
    -vv: 更详细的信息
    -h: 以#显示程序包管理执行进度

    rpm -ivh PACKAGE_FILE ...

[install-options]

    --test: 测试安装,但不真正执行安装;dry run模式
    --nodeps:忽略依赖关系
    --replacepkgs 覆盖安装(重新安装包名,版本号都一样的) 原来的配置文件 会改名。不会覆盖。

    --replacefiles 安装程序生成的文件可能和的软件的文件冲突,安装的位置和名称都一样,rpm会有提示,不能进行安装,这事需要使用replacefiles

    --nosignature: 不检查来源合法性
    --nodigest:不检查包完整性  

    --noscipts:不执行程序包脚本片断
        %pre: 安装前脚本;--nopre
        %post: 安装后脚本;--nopost
        %preun: 卸载前脚本;--nopreun
        %postun: 卸载后脚本;--nopostun

升级:意味着老版本删除,只留一个版本的该程序。

rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...

    upgrade:安装有旧版程序包,则“升级”
        如果不存在旧版程序包,则“安装”

    freshen:安装有旧版程序包,则“升级”
        如果不存在旧版程序包,则不执行升级操作

    rpm -Uvh PACKAGE_FILE ...
    rpm -Fvh PACKAGE_FILE ...

    --oldpackage:降级  与i配合使用。 
    rpm -ivh --oldpackgage PACKAGE-FILE

    --force: 可与 安装 -i 或 升级 -U -F配合使用。


升级注意项

注意:

(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核

(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

包查询 -q

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


[select-options]
    -a: 所有包
    -f: 查看指定的文件由哪个程序包安装生成
        系统上已经安装生成的文件,是由那个软件安装包生成的

    -p rpmfile:针对尚未安装的程序包文件做查询操作;
    --whatprovidesCAPABILITY:查询指定的CAPABILITY由哪个包所提供
    --whatrequiresCAPABILITY:查询指定的CAPABILITY被哪个包所依赖

    rpm2cpio 包文件|cpio –itv预览包内文件

        [root@localhost Packages]# rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -itv
        -rwxr-xr-x   1 root     root        62768 Jun 10  2014 ./usr/bin/tree
        drwxr-xr-x   2 root     root            0 Jun 10  2014 ./usr/share/doc/tree-1.6.0
        -rw-r--r--   1 root     root        18009 Aug 13  2004 ./usr/share/doc/tree-1.6.0/LICENSE
        -rw-r--r--   1 root     root         4628 Jun 24  2011 ./usr/share/doc/tree-1.6.0/README
        -rw-r--r--   1 root     root         4100 Jun 24  2011 ./usr/share/man/man1/tree.1.gz
        177 blocks

    rpm2cpio 包文件 | cpio –id “*.conf”释放包内文件   

        [root@localhost ~]# rpm2cpio tree-1.6.0-10.el7.x86_64.rpm |cpio -id ./usr/bin/tree
        177 blocks

        [root@localhost ~]# tree /root
        /root
        ├── anaconda-ks.cfg
        ├── fenge.sh
        ├── old
        ├── tree-1.6.0-10.el7.x86_64.rpm
        └── usr
            └── bin
                └── tree
        可能会出现的一个问题是权限属主或属组的问题。可能需要修改。

3 directories, 4 files

[query-options]
    --changelog:查询rpm包的changelog
    -c: 查询程序的配置文件
    -d: 查询程序的文档
    -i: information
    -l: 查看指定的程序包安装后生成的所有文件;列表

    --scripts:程序包自带的脚本片断

    -R: 查询指定的程序包所依赖的CAPABILITY;  ##查询软件都依赖那些文件或程序
    --provides: 列出指定程序包所提供的CAPABILITY;##列出该软件都能提供哪些能力。

查询用法:

-qi PACKAGE, -qfFILE, -qc PACKAGE, -qlPACKAGE, -qdPACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
-qa

卸载:

    rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

    --allmatches 安装了多个版本的同名软件,全部卸载
    --notriggers 触发器,多是脚本
    --test 测试不真实卸载

    ##卸载时,如有该程序为其他程序所依赖,不能卸载,忽略依赖关系强行卸载,可以。但是会影响到其他软件的运行。

安装过的软件–校验

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 mTimediffers
    P capabilities differ

    rpm -V PACKAGEFILE  ##安装过的软件的包名不带版本号例如 tree
    rpm -Va 检查系统所有软件的完整性。比较耗时间和系统资源。

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

完整性验正:SHA256
来源合法性验正:RSA

公钥加密:
    对称加密:加密、解密使用同一密钥;
    非对称加密:密钥是成对儿的
    public key: 公钥,公开所有人
    secret key: 私钥, 不能公开

导入所需要公钥:
    rpm -K|checksigrpmfile检查包的完整性和签名
    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
    rpm -qa gpg-pubkey* 查询安装的key

常用选项

rpm数据库

数据库重建:
    /var/lib/rpm

rpm {--initdb|--rebuilddb}

    initdb: 初始化
    如果事先不存在数据库,则新建之
    否则,不执行任何操作

    rebuilddb:重建
    无论当前存在与否,直接重新创建数据库

rpm常用用法:

安装 [root@yangyouwei ~]# rpm -ivh /media/CentOS6.8Final/Packages/tree-1.5.3-3.el6.x8664.rpm warning: /media/CentOS6.8Final/Packages/tree-1.5.3-3.el6.x8664.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing… ########################################### [100%] 1:tree ########################################### [100%] 升级

    rpm -uvh FILEPACKAGE...
    rpm -fvh FILEPACKAGE...

卸载

    [root@yangyouwei ~]# rpm -e  tree

查询 查询已经安装的软件包。后面跟的是包名 [root@localhost ~]# rpm -q tree #必须是准确的包名 tree-1.6.0-10.el7.x86_64 #已经安装的软件的版本

    使用正则表达式查询已经安装的软件
    [root@localhost ~]# rpm -qa | grep "^tr" #配合grep使用正则表达式查询
    trousers-0.3.13-1.el7.x86_64
    traceroute-2.0.19-5.el7.x86_64
    tree-1.6.0-10.el7.x86_64

    查询文件系统上的文件是由那个rpm包生成的
    [root@yangyouwei ~]# rpm -qf /etc/ssh/ssh_config 
    openssh-clients-5.3p1-117.el6.x86_64

    查询已经安装的软件包是由哪些文件构成的。一个列表。后面跟的是包名
    [root@yangyouwei ~]# rpm -ql tree
    /usr/bin/tree
    /usr/share/doc/tree-1.5.3
    /usr/share/doc/tree-1.5.3/LICENSE
    /usr/share/doc/tree-1.5.3/README
    /usr/share/man/man1/tree.1.gz

    查询rpm包内都有哪些文件
    [root@yangyouwei ~]# rpm -qpl /media/CentOS_6.8_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm
    /usr/bin/tree
    /usr/share/doc/tree-1.5.3
    /usr/share/doc/tree-1.5.3/LICENSE
    /usr/share/doc/tree-1.5.3/README
    /usr/share/man/man1/tree.1.gz

校验 导入公钥 rpm –import /media/CentOS6.8Final/RPM-GPG-KEY-CentOS-6 查询安装的公钥,用于来源和完整性校验

    rpm包校验
    [root@yangyouwei ~]# rpm -K /media/CentOS_6.8_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm
    /media/CentOS_6.8_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

    查询已经安装导入的key
    [root@yangyouwei ~]# rpm -qa gpg-pubkey*
    gpg-pubkey-c105b9de-4e0fd3a3

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

(0)
yywyyw
上一篇 2016-08-21
下一篇 2016-08-21

相关推荐

  • 计算机组成及Linux基础

    第1题:描述计算机的组成及功能 1.1计算机的组成       计算机是有 运算器,控制器,存储器,输入设备和输出设备组成计算机 1.2计算机各部件功能 运算器 对数据进行算术运算,逻辑运算和对数据进行加工处理 存储器 存储程序,数据和各种信号,命令等信息,并在需要时提供这些信息 控制器 是整个计算机的中枢神…

    Linux干货 2017-07-02
  • Linux 用户、用户组及权限管理

    一、Linux用户及用户组的基本概念 用户:用户是实现能够将有限的资源在多个使用者之间进行分配;、 用户组:用户组是指多个用户的集合,方便对一类需要同样权限的用户授权 Linux是多用户、多任务的操作系统。     多用户指:多人同时使用系统资源;多任务:同时运行多个进程 二、用户及用户组类别 1、用户:名称解析库 /…

    Linux干货 2016-03-20
  • 马哥教育网络班20期+第1周课程练习

    1、描述计算机的组成及其功能。  (1)组成:运算器、控制器、存储器、输入设备、输出设备  (2)功能:数值计算、数据处理、自动控制、辅助设计、辅助教学、人工智能、娱乐活动 2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。  (1)主要发行版本之间关系    基于slackware:sus…

    Linux干货 2016-06-23
  • 用户与用户组

    用户与组常见命令与用法

    Linux干货 2017-11-18
  • 自制linux和内核编译

    自制linux和内核编译 1、分区并创建文件系统 fdisk /dev/sdb分两个必要的分区/dev/sdb1对应/boot /dev/sdb2对应根/mkfs.ext4 /dev/sdb1mkfs.ext4 /dev/sdb2 2、挂载boot mkdir/mnt/bootmount /dev/sdb1 /mnt/boot 3、安装grub grub-i…

    Linux干货 2016-09-23
  • centos系统启动流程详解

    centos系统启动流程详解 CentOS启动流程: POST 加电自检 主板上有一个ROM芯片,有只读程序,CPU被设计为一旦通电就会自动去找ROM芯片上的程序并运行,即检查各种硬件设备是否存在。 BootSequence 引导过程 加电自检后按BIOS中设定的次序查找各引导设备,第一个有引导程序的设备即是本次启动用到的设备 MBR(BootLoader)…

    Linux干货 2017-09-04