zoukankan      html  css  js  c++  java
  • rpm

    version:major.minor.release

    rpm包命名格式:

    name-version-release.arch.rpm

    release后也会跟os,release.os

    arch:archetecture的缩写,如i386表示32位的,x64(或者叫amd64,注意可不是适用于amd处理器的64)表示64位的,noarch是所有平台通用的。

    例子:

    redis-3.0.2-1.el7.x64.rpm

    redis对应name,3.0.2对应version,1对应release,el7表示centos7对应os,x86对应arch

    其中rpm包还可以分为主包,支包。主包是最基本的包,支包是一些支持其他功能的包,比如

    因为linux都是开源的,所以他的软件也会有对应的开发包,方便开发人员对这个软件进行二次研发

    但是这对于只是用这个软件的人来说就没什么用了,开发工具包的包名叫做devel

    主包:name-version-release.arch.rpm

    支包:name-function-version-release.arch.rpm

    function:devel,untils,libs,...

    rpm包存在依赖关系:

    X,Y,Z

        x--y,z

            y---a,b,c

            c ---y

    以上存在循环依赖,比如安装a之前要先安装b,安装b之前要安装c,安装c之前要先安装a

    为了解决这种循环依赖的问题,就会有很多安装工具,能自动解决依赖关系:

    yum:centos上的rpm包管理器

    apt-get:ubuntu

    zypper:suse

    dnf:fedora 22+

    程序包管理器的数据库:这个数据库里面有安装的程序包的名称,版本,依赖关系,功能说明,等等,在/var/lib/rpm。

    获取程序包的途径:

    1,系统发型版的光盘,或官方文件服务器,或镜像站点,有名的镜像站点有aliyun,sohu,1632:

    http://mirrors.aliyun.com

    2,各种软件的官方站点

    3,第三方组织:

    epel(这个是红帽社区比较权威的组织,他们收录的很多软件的rpm包,比如有些软件,官方没有收录,但是会被epel收购,而aliyun等镜像站点也会包含epel的镜像)

    搜索rmp包的网站:pkgs.org,rpmfind.net , rpm.pbone.net

    rpm命令:

    安装:-i,--install

    升级:-U,--update

    卸载:-e,--erase

    查询:-q,--query

    校验:-V

    数据库维护: --builddb,--initdb

    -v: verbose,通常与-i搭配,安装时输出详细信息

     -vv:更详细的信息

    -h:显示进度条

    --test:测试安装,只检查依赖关系冲突信息,不是真正安装

    --nodeps :忽略依赖关系,与i搭配,安装时忽略依赖关系,装上去的程序有可能不能用。所以不建议这么做,只适用于有些场景

     安装:

    安装常用选项:

    rpm -ivh

    rpm -ivvh 

    rpm -ivh --test

    注意:rpm可自带脚本(了解即可,自己制作rpm包的时候可能有用)

        四类:--noscripts

                  preinstall:安装过程开始之前运行的脚本,%pre,--nopre

        postinstall:安装过程完成之后运行的脚本,%post,--nopost

        preuninstall:卸载过程真正开始执行之前运行的脚本,%preun,--nopreun

        postuninstall:卸载过程完成之后运行的脚本,%postun,--nopostun

    升级:

      升级或安装(意思是如果当前不存在老版本则直接安装新版本):-U 常用搭配:rpm -Uvh;rpm -Uvh --test

      升级(如果不存在老版本就不升级了):-F 常用搭配:rpm -Fvh;rpm -Fvh --test

      升级还可以与以下搭配:     

      --oldpackage :降级安装

      --force:强制升级;(因为升级很可能带来这样的问题:以前老版本被其他软件所依赖,但是新版本中这些被依赖的文件不存在了,不能满足依赖关系,这时候升级就会报错,这时候加这个选项就表示强制升级)

      升级时需要注意的:

      

    1,不要对内核做升级操作;lInux支持多内核并存,因此,直接安装新版本内核
    2,如果某原程序的配置文件安装后被修改过,升级时,新版本的程序提供的同一配置文件不会覆盖原来版本的配置文件,而是把新版本的配置文件重命名(filename.rpmnew)后提供


    卸载:
    -e
    --allmatches:卸载所有匹配指定名称的程序包的个版本;(貌似统一软件可以在系统上荣是存在多个版本)
    --nodeps:忽略依赖关系
    --test

    查询:
    -q:rpm -q packagename,查询指定的程序包是否已经安装,及其版本
    -a,-all: rpm -qa :查询已安装的所有包
    -f:rpm -qf filename:查询这个文件是由哪个软件安装生成的
    -p,--package:用于实现对未安装的程序包执行查询操作 比如:rpm -qpl用于查询未安装的程序安装后会生成哪些文件或目录,rpm -qpi;rpm -qpd;rpm -qp --scripts;rpm -qpc;
    --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供
    --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
    -l:程序安装生成的所有文件列表
    -i,--info:程序包相关的信息,版本号,大小,所属的包组,等等
    -c,--configfiles:查询程序的配置文件
    -d,--docfiles:查询程序提供了哪些文档
    --provides:列出程序提供的所有的CAPABILITY
    [root@localhost boot]# rpm -q --provides bash
    config(bash) = 4.1.2-40.el6
    bash = 4.1.2-40.el6
    bash(x86-64) = 4.1.2-40.el6
    [root@localhost boot]# rpm -q --whatrequires 'config(bash)'
    bash-4.1.2-40.el6.x86_64
    [root@localhost boot]# rpm -q --whatrequires bash
    initscripts-9.03.53-1.el6.centos.x86_64
    dracut-004-409.el6.noarch
    rsyslog-5.8.10-10.el6_6.x86_64
    cronie-1.4.4-15.el6_7.1.x86_64
    autofs-5.0.5-122.el6.x86_64
    lvm2-2.02.143-7.el6.x86_64
    -R:查询程序包依赖哪些CAPABILITY
    [root@localhost ~]# rpm -qR bash
    /bin/sh
    /bin/sh
    config(bash) = 4.1.2-40.el6
    libc.so.6()(64bit)
    libc.so.6(GLIBC_2.11)(64bit)
    libc.so.6(GLIBC_2.2.5)(64bit)
    libc.so.6(GLIBC_2.3)(64bit)
    libc.so.6(GLIBC_2.3.4)(64bit)
    libc.so.6(GLIBC_2.4)(64bit)
    libdl.so.2()(64bit)
    libdl.so.2(GLIBC_2.2.5)(64bit)
    libtinfo.so.5()(64bit)
    ncurses-libs
    rpmlib(BuiltinLuaScripts) <= 4.2.2-1
    rpmlib(CompressedFileNames) <= 3.0.4-1
    rpmlib(FileDigests) <= 4.6.0-1
    rpmlib(PayloadFilesHavePrefix) <= 4.0-1
    rtld(GNU_HASH)
    rpmlib(PayloadIsXz) <= 5.2-1
    --scripts:查看程序包自带的脚本片段

    校验:
    此命令的目的是防止安装的软件被修改,他会与软件刚安装时候进行对比,一旦某个文件被修改了或者权限属组什么的修改了,他会显示出来
    -V:rpm -V zsh
    S file Size differs
    M Mode differs(includes permissions and file type)
    5 digest(firmerly 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
    [root@localhost scripts]# vi newuser
    [root@localhost scripts]# rpm -V zsh
    S.5....T. /usr/share/zsh/4.3.11/scripts/newuser
    包来源合法性和完整性验证:
    先补充一个数字签名的概念:
    数字签名:比如一个文件,我先用md5算出他的特征码,然后用私钥加密这个特征码,然后跟这个文件一起分发到互联网上,下载者下载到了这个文件,为了验证这个包有没有被其他人篡改,就用软件制作者在网上公开的公钥对这个文件进行解密,解密拿到这个特征码,然后算出这个文件特征码,比对自己算出的特征码与解密出来的特征码。

    对于Centos来说,我们要验证一个rpm包的完整性,只需要导入这个包对应的并且是我们信任的公钥(rpm --import 公钥),rpm命令安装时就能自动帮我们验证,或者也能手动验证:rpm -K PACKAGE_FILE    

    一般centos会自带公钥,比如我这台电脑centos6.8的公钥就放在了/etc/pki/rpm-gpg/ RPM-GPG-KEY-CentOS-6,我们知道在centos发行版的iso镜像中就集成了诸多的官方收录的rpm包(在Packages目录下),我这里将我当初安装centos的iso镜像挂载到系统中,然后将iso镜像里的zsh-4.3.11-4.el6.centos.2.x86_64.rpm文件复制了出来,同时我在163镜像站点中下载了centos7版的zsh-5.0.2-28.el7.x86_64.rpm

    可以很清楚的看到,用rpm -K 验证zsh4.3的时候显示ok,而验证zsh5.0的时候显示not ok,

    这是因为,centos6一个公钥私钥对,而centos7又是一个公钥私钥对,官方在放出rpm包的时候,会用私钥将rpm包签名认证,那么我们就可以用与私钥相匹配的公钥对rpm包进行完整性验证,如果验证合格了,证明这个rpm包确实是官方放出的,如果验证不通过,则说明这个包不是官方放出的,这样就保证了rpm包的安全,避免下载到的是其他人篡改了的植入了后门的rpm包

    在本例中,因为系统中只有centos6的公钥,所以在验证centos7版本的rpm包的时候不通过,那么我们可以在系统中添加163镜像站点上下载的centos7的公钥,也就是上图中的RPM-GPG-KEY-CentOS-7

    这个时候就发现,zsh5.0就能通过验证了,同时zsh4.3依然能验证通过,说明rpm --import 执行的是添加公钥,而非替换公钥

     ·  

    rpm数据库重建(此命令一般用于不小心把rpm数据库的某个文件删了,那么有可能通过这个命令来恢复):
    --initdb:初始化数据库,如果已经存在了不进行任何操作,如果不存在则初始化创建一个新的
    --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建
    rpm --initdb --dbpath=/tem/rpm
    rpm --rebuilddb --dbpath=/tem/rpm

  • 相关阅读:
    Http,Https(SSL)的Url绝对路径,相对路径解决方案Security Switch 4.2的配置和使用 分类: ASP.NET 2014-11-05 12:51 97人阅读 评论(0) 收藏
    Django入门----pycharm搭建django项目中遇见的问题
    在项目中遇见的linux问题
    在ubuntu 16.04下安装python3
    Springboot 2.x 开发过程中的注意点
    又开始学习小程序了 我真是个爱学习的宝宝啊!
    Django入门----建立模型
    Django入门----建立新的主页
    Django入门----关于shell的操作
    Django入门----在ubuntu上面建立项目
  • 原文地址:https://www.cnblogs.com/saolv/p/9657724.html
Copyright © 2011-2022 走看看