程序包管理(一)rpm

一、编程语言与操作系统:
    应用程序
    ____________________
    |lib call |            |
    |-------------------|
    |system call        |
    |———————————----————|
    |各种硬件            |
    ————————————————————|

API:application program interface
    ABI:application binary interface
        Api应用层级兼容,未必abi层次也兼容,有些程序对二进制的识别格式是不相同的
        
        UNix-like:ELF格式的程序
        windows:exe,msi
            linux:wine模拟windows库
            windows:Cywin虚拟出linux运行环境
    系统级开发:C/C++:httpd,vsftpd,nginx
        go编程语言:新贵
        C/C++编程依赖于系统上的标准库
    应用级开发:java/Python/perl/ruby/php
        java:hadoop,hbase,(jvm)运行环境
        Python:openstack 云管理平台,(pvm)
        perl:(perl)perl的解释器
        ruby:(ruby)解释器/虚拟机{运行环境}
        php:(php)
        //一般解释器或者虚拟机{jvm,pvm} 使用C/C++编写
    
        php:世界上最好的语言
c/C++程序格式:    
    源代码:文本格式的程序代码
        编译开发环境:编译器、头文件、开发库
    二进制格式:文本格式的代码-->编译器-->二进制格式(二进制程序、库文件、配置文件)
java/python
    源代码:编译成能够在其虚拟机(jvm/pvm)上运行的格式
        开发环境:编译器、开发库
    二进制:
    
    项目构建工具://不再需要考虑程序编译主次关系,由项目构建关系负责,项目构建工具借助于配置文件实现
        c/c++:make
        java:maven

程序包管理器:
        源代码 --> 目标二进制格式 -->组织成为一个或有限几个“包”文件;
            安装、升级、卸载、查询、校验等操作
        程序包管理器:
            debian:kali,ubuntu //dpt,dpkg , ".deb"
            redhat:rhel,centos,fedora //redhat package manager,rpm , ".rpm" //perl-C现在使用的是C语言写的
                    //rpm:rpm is package manager;成为标准
            slckware:S.u.S.E:  //rpm,suse的rpm和rhel的是不兼容的,suse为rpm开发了一个重要的库,后期被rhel收纳
                     //rpm:".rpm" 命令rpm
            Gentoo: //采用了freebsd的机制,ports的包机制
            Archlinux //轻量级,
    源代码:name-VERSION.tar.[xz,gz,bz2]
        VERSION:major-minor-release
            major:重大改变
            minor:局部改变
            release:修复bug,小串代码改变
    rpm包命令格式:
        vsftpd-3.0.2-10.el7.x86_64.rpm
        name-VERSION-release.arch.rpm
        release:是制作rpm包的次数
        VERSION.release是源代码的release
        arch:architecture:i386,x64(amd64),ppc(powerpc),noarch(通用平台)
            i386:支持较老版本的32bit cpu
            i686:支持较新版本的32bit cpu
        
        拆包:
            redis-3.0.2.tar.gz--> redis.3.0.2-1.el7.x86_64
            //把一个包的多种功能,拆成多个部分,按需组织rpm包
            //主包和分支包
            主包:name-VERSION-release.arch.rpm
            支包:name-function-VERSION-release.arch.rpm
                function:devel,utils(工具程序),libs,plugins(插件)
    依赖关系:每个程序包的功能都很简单,包之间存在很复杂的依赖关系
        x,y,z
            x-->y,z
                y-->a,c,b
                c-->Y
        前端工具:自动解决依赖关系
            yum:rpm包管理器的前端工具
            apt-get(apt-cache):deb包
            zypper:suse上的rpm包管理器
            dnf:Fedora 22+ 系统上的rpm包管理器的前端工具
    程序包管理:
        功能:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等操作
        1.程序包的组成清单(每个程序包单独实现)
            文件清单
            安装或卸载时运行的脚本
        2.数据库(公共)
            程序包的名称和版本
            依赖关系
            功能说明
            安装生成的各文件路径及校验码信息
            /var/lib/rpm/ rpm数据库所在
            
二、获取程序包的途径:
    1.系统发行版的光盘或者官方的文件服务器
        http://mirrors.aliyun.com
        http://mirrors.sohu.com
        http://mirrors.163.com
    2.项目官方站点
        apache官网:www.apache.org
        zabbix:www.zabbix.com
    3.第三方组织
        (a)EPEL:
            mirrors.aliyun.com/epel/7/x86_64
        (b)搜索引擎
            pkgs.org
            rpmfind.net
            rpm.pbone.net
    4.自己动手,丰衣足食
            
    建议:校验,检查其合法性
        来源合法性:
        程序包的完整性:

三、Centos上rpm命令管理程序包
(1)安装
    安装,升级,卸载,查询和校验,数据库维护
     rpm {-i|--install} [install-options] PACKAGE_FILE ...
    -i :install
        -v  verbose通用选项,显示过程
        -vv 更详细
        -h 以hash输出进度条
        --test 仅仅是检查一下,测试不安装
        --nodeps //忽略依赖关系,no dependce
        --replacepkgs //替代安装
        --noscripts //有些程序包安装过程中,可能需要运行一段自带脚本,
        rpm可以自带脚本:
            四类:
                preinstall:安装之前,%pre
                postinstall:安装完成之后,%post
                preuninstall:卸载开始前,%preun
                postuninstall :卸载完成之后,%postun
            --noscripts
            --nopre
            --nopost
            --nopreun
            --nopostun
        --nosignature //来源合法性,不检查包签名信息
        --nodigest //不检查包完整幸信息,头文件摘要
    -U :update,-F --freshen//使更新
    -e :--erase
    -q:--query
        -l :list生成文件
    -V:--verify校验
    数据库维护:
        --builddb,--initdb
 
(2)升级
    -U update
    Uvh /Fvh
    rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... //和安装一样
        -U 升级或者安装,有没有老版本,都会安装
        -F 升级,有老版本才会安装
        --oldpackage :降级安装老的程序包,不兼容
        --force:强制升级
        
        其他和rpm -ivh 一样
    注意:
        (1)不要对内核做升级操作,更新内核需要重启系统
            //linux支持多内核版本并存,因此,直接安装新版本内核即可
        (2)如果某源程序包的配置文件,安装后曾被修改过,升级时,新版本的程序提供的同一个配置那文件不会覆盖原有的
            配置文件,而是把新版本的配置文件,重命名后(filename.rpmnew)后,提供
        
(3)卸载
    -e
        --allmatches //假如存在多版本的话,多版本一并删除
        --nodeps  //忽略依赖关系
        --test  //dry run 仅仅测试
        --noscripts //不执行脚本
        rpm -e zsh //pack_name zsh即可,数据库中有文件保存
        rpm -ivh 文件名
(4)查询

rpm {-q|--query} [select-options] [query-options]
    -q  zsh //查询指定包zsh是否安装
        select-options:
            -a,--all 不加选项,查询所有已经安装的包
                rpm -qa |grep zsh
            -f /etc/fstab 查询文件的安装包
            -g,--group 组名//查询指定包组中包含的包
            -p,--packaeg package_file:实现查看未安装包的,结合query-optionss实现
                rpm -qpl zsh-5.0.2-14.el7.x86_64.rpm //查询未安装程序包的安装能够生成文件
            --wahtprovice CAPABILITY//查询提供某种能力的包
                rpm -q --whatprovide ‘config(bash)‘
            --whatrequires CAPABLITY //查询指定的CAPABILITY被哪个程序包所依赖
                
        query-options
            --changelog //查询rpm包的changelog,不是源码的
                rpm -q --changelog zsh //查看zsh的改进日志
                
            -l,--list //程序包安装生成的所有文件列表
                rpm -ql zsh
            -i info,查询程序包相关信息,版本号,大小,所属的包组,等
                rpm —qi bash
            -c ,--configfiles:查询指定的程序包的配置文件
                rpm -qc  bash
            -d,--docfile :查询指定的程序包的帮助文档
                rpm -qd bash
            --provides:列出指定的程序包提供的CAPABILITY
                rpm -q --provides bash //bash提供的
                rpm -q --whatprovides ‘config(bash)‘
            -R requires//查询指定程序包的所依赖的程序包
                rpm -qR bash
            --scripts //查询脚本
                rpm -q --scripts bash
                rpm -qp --scripts zsh-5.0.2-14.el7.x86_64.rpm
        ql,qf,qc,qi,qd    //qf文档的产生源
(5)校验
    rpm {-V|--verify} [select-options] [verify-options]
    -V //rpm -V zsh //安装完成后,校验

       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

rpm -ql zsh //随意修改其中一个文件
        rpm -V zsh //就能看到效果
        select-options:和查询的select-options一样
            -a,-f,-g,-p
        verify-options:
            --nodeps 不校验依赖
            --nodigest 不校验包头,
            --noscripts 不检查脚本
            --nofiles 不检查
            --nosignature 不检查包头签名信息
        //默认检查所有属性
         rpm -V --nofiles zsh
(6)包来源合法性验证和完整性验证
    来源合法性验证:
    数字签名:非对称加密:一个公钥,一个私钥
        包的制作者,
        1.首先使用单项加密,计算出包的特征码,定长输出
        2.然后再用自己的私钥加密特征码,这叫数字签名 ,
        3.把加密后的特征码附加到包后    
    //只要拿到公钥,就能解密
        中间者:能够解密特征码,因为能拿到对方公钥,但是不能再次加密,因为没有作者的私钥
    //用户拿到作者的公钥,进行解密特征码,解密成功,则认为来源合法
    //我用同样的方法,进行单项加密计算特征码,一样则证明包内容没有修改过//完整性
    如何拿到对方的公钥:
        1.从网上下载,不可靠
        2.互联网上是使用CA来实现,可靠手段拿到对方公钥
    rpm --import /mnt/RPM-GPG-KEY-CentOS7 //导入公钥
        /etc/pki/rpm-gpg/ 导入到此地
        对于CentOS发行版:rpm --import
    rpm -ivh zsh-***** //自动进行校验操作
    rpm -K zsh-5.03..... //手动验证
    
    验证:
        安装此组织签名的程序时,会自动执行验证
        手动验证:rpm -K PACKAGE_FILE
        1
    数字签名:保证来源合法性和数据完整性
(7)数据库重建
        rpm管理数据库路径:/var/lib/rpm/
            查询操作:就是基于该数据库查询
            Centos6:man rpm //rpm --initdb|--rebuilddb
            Centos7:man rpmdb
        rpmdb
            --initdb  初始化db,当前无任何数据库时创建一个新的,当前有,不执行任何操作
            --rebuildb 重建db,重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建
            --dbpath 指定db路径
            rpmdb --initdb --dbpath=/tmp/rpm
            
四、rpm命令小结

linux程序包管理器,rpm包管理器

    安装:rpm -ivh ,--nodeps,--replacepkgs
    卸载:-e,--nodeps
    升级:-U|-F vh //F只用于升级,--nodeps,--oldpackage
    查询:-q,-a,f,i,qd,qc,--script,changelog,provides/whatprovides,requires/whatrequires
    校验:-V,
    验证合法性:--import,-K手动验证,--nodigest,--nosignature
    数据库重建:rpmdb --initdb --rebuilddb
时间: 2024-10-05 05:21:04

程序包管理(一)rpm的相关文章

程序包管理:RPM YUM的总结

程序包管理:RPM YUM的总结 一.RPM的简介 RPM 是RPM Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux.S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,是公认的行业标准. 二.RPM程序包管理的用途 1.可以安装.删除.升级和管理软件:当然也支持在线安装和升级软件: 2.通过RPM包管理能知道软件包包含哪些文件,也能知道系统中的某个文件属于哪

CentOS系统程序包管理之---rpm、yum和编译

一.程序包管理器 1.软件的运行 2.程序包管理 将编译好的文件打包成一个或有限的几个文件,可用于实现便捷的安装.卸载.升级.查询,校验等程序管理. centos常用的程序管理器有rpm和yum 二.程序包管理器之RPM  1.rpm是什么    RPM 是RPM Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的.RPM包管理器(RPM)是一个强大的命令行驱动的包管理系统能够安装.卸载.验证.查询和更新计算机软

程序包管理:rpm&yum命令

1.软件包管理简介 Windows中所有的软件包都不可以直接在linux系统中直接安装使用. linux系统中软件包分类: 源码包(脚本安装包) 源代码直接开放的包,绝大部分是C语言写的: 二进包(源码包编译之后的包.RPM包.系统默认包) 优点:安装快速,简化安装过程但不能看到源代码,例如qq等: redhad系列和ubanto系列最大的区别就是二进制软件包不同,rehad用的二进制包是.rpm包,debin系列用的是deb包,其余的部分两种发行版本基本一致. 源码包的优点: 开源,可以修改源

Linux程序包管理:RPM和YUM

Linux程序包管理:RPM和YUM   就像Window一样,我们安装了windows系统如果没有相应的应用软件,如OFFICE,IE,等各种软件,用户是无法使用计算机,linux 完成各种应用功能,也需要各种应用程序,所以程序包的管理就非常必要. Linux平台的内核功能:进程管理.内存管理.网络协议栈.驱动程序....             应用程序:              早期的linux程序包的组成部分:                二进制程序:/bin, /sbin,/ /u

CentOS程序包管理器rpm、yum以及程序包编译安装详解

一.程序包管理器RPM和Yum简介 程序包管理器:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,可以更方便地实现程序包的安装.升级.卸载和查询等管理操作. rpm软件包管理器(RPM Package Manager):rpm包存在依赖关系,依赖关系复杂,安装时间很长,虽然可以忽略依赖关系,但是可能会导致程序包安装后无法正常使用. yum程序包管理器( Yellow dog Updater, Modified):yum是基于RPM包管理,自动解决程序包间的依赖关系.根据配置文件的资源地

  程序包管理器之 RPM的用法

在Linux中我们经常回遇到安装个卸载各种程序,但是我们又没有必要每次都对源代码进行预处理.编译.汇编.链接,这样很不方便,于是我们就可以使用RPM包管理器. 一:RPM包的介绍:RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux.S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了. 二:RPM包的功能介绍:

[Linux程序包管理之RPM及YUM]

Linux程序包管理之RPM及YUM 一.RPM和YUM简介 RPM,全称RPM Package Manager,是由Red Hat推出的软件包管理系统,现在在各个发行版普遍使用. RPM包管理器,将编译好的程序打包成一个文件或有限的几个文件,可用于实现便捷地安装.卸载.升级.查询.校验等程序管理:通常用与RHEL,红帽衍生系统,如CenOS等系统,用来实现对Linux程序包进行快捷管理. RPM包命名格式: Yum,全称Yellow dog Updater, Modified , 由Duke

2015年9月10日课程作业【程序包管理:rpm, yum】_JY1506402-19+liuhui880818

<Linux系统管理> (1)磁盘和文件系统管理: (2)RAID, LVM; btrfs; (3)程序包管理:rpm, yum(dnf) (4)Linux的网络管理; (5)进程和作业管理:htop, glances, tsar: (6)sed和awk: (7)Linux系统的开机启动流程: (8)内核基础知识,内核定制编译: (9)系统安装:kickstart, pxe 一.作业(练习)内容: 1.总结rpm和yum实现程序包的管理功能. 要求:作业要图文并茂 二.完成时间: 2015年9

CentOS程序包管理器之rpm前端管理器

CentOS的程序包管理器: 首先,我们要来了解一下程序包(源代码包)的命名规则: software_name-VERSION.tar.gz VERSION:major.minor.release major:主版本号,通常代表重大功能改进的版本分支: minor:次版本号,通常代表在某个版本的分支中的某个功能发生变化: release:发行版本号,修复了某些bug或者对某段代码进行了优化: 例如:apache-tomcat-7.0.63.tar.gz 而rpm程序包命名规则为: 源码包:sou

Linux学习笔记——程序包管理之rpm命令

RPM rpm是Linux上一个很好用的程序包管理管理器,它具有安装.卸载.升级.查询.校验.数据库维护等功能. 下面分别介绍一下rpm的各个功能: 安装: rpm {-i|--install} [install-options] PACKAGE_FILE ... -v:详细显示安装过程 -vv:相对-v更加详细 -h: 以#显示程序包管理执行进度:每个#表示2%的进度 安装过程如图 另外还有一些其他选项 [install-options] --test: 测试安装,但不真正执行安装过程:dry