软件包管理

软件包管理

  • rpm,yum

软件运行和编译

  • ABI:Application Binary Interface(应用程序与OS之间的接口)
    ??Windows与Linux不兼容;可执行程序文件格式
    ????Windows:PE(Portable Executable)
    ????Linux:ELF(Executable and Linkable Format)
    ??库级别的虚拟化
    ????Windows:Cygwin
    ????Linux:WINE
  • API:Application Programming Interface(应用程序与库之间的接口)
  • 程序源代码–>预处理–>编译–>汇编–>链接
  • C程序编译过程:
    软件包管理

Linux包和包管理器

  • 程序在互联网一般是以源代码的方式提供,.tar.gz的打包的源代码,用户使用软件必须将源码编译为Linux上能运行的二进制文件。因此Linux发行版商考虑用户对软件编译时可能存在的困难,将大多数可能用到的软件编译为可以在Linux直接运行的代码,开发出包和包管理器的概念,对Linux系统的包实现安装、卸载
    查询、升级等功能。最早由Debian提出,它的管理工具被称为dpkg,随后Red Hat也开发了自己的包管理器rpm。

  • 包的组成:
    ??二进制文件、库文件、配置文件、帮助文件

  • 程序包管理器:
    ??debian: deb包文件,dpkg包管理器
    ??redhat:rpm包文件,rpm包管理器
    ????rpm:RedHat Package Manager
    ????rpm:RPM Package Manager

  • 包的命名:
    ??源代码:name-VERSION.tar.gz|xz|bz2
    ????VERSION:major.minor.release

  • rpm包命名方式:
    ??name-VERSION-release.arch.rpm
    ??eg:tree-1.6.0-10.el7.x86_64
    ??软件名-主版本号.次版本号.末版本号.Redhat编译次数.系统版本.CPU架构.rpm
    ??常见的arch
    ????x86: i386, i486, i586, i686
    ????x86_64: x64, x86_64, amd64
    ????跟平台无关:noarch

  • 大软件分包:
    ??Application-VERSION-ARCH.rpm: 主包
    ??Application-devel-VERSION-ARCH.rpm 开发子包
    ??Application-utils-VERSION-ARHC.rpm 其它子包
    ??Application-libs-VERSION-ARHC.rpm 其它子包
    ????eg:
    ????httpd-2.4.6-88.el7.centos.x86_64.rpm 主包
    ????httpd-manual-2.4.6-88.el7.centos.noarch.rpm 手册
    ????httpd-devel-2.4.6-88.el7.centos.x86_64.rpm 开发
    ????httpd-tools-2.4.6-88.el7.centos.x86_64.rpm 工具
    ????这样可以根据需要安装相应的包。

  • 包与包之间存在依赖关系,包管理器rpm解决依赖关系相对麻烦

  • 解决包之间依赖关系的工具:
    ?yum:rpm包管理器的前端工具
    ?apt:deb包管理器前端工具
    ?zypper:suse上的rpm前端管理工具
    ?dnf:Fedora 18+ rpm包管理器前端管理工具

  • 库文件
    查看二进制程序所依赖的库文件
    ??ldd /PATH/TO/BINARY_FILE
    管理及查看本机装载的库文件
    ??ldconfig 加载配置文件中指定的库文件
    ??/sbin/ldconfig -p 显示本机已经缓存的所有可用的库文件名即文件路径映射
    ??配置文件:/etc/ld.so.conf , /etc/ld.so.conf.d/*.conf
    ??缓存文件:/etc/ld.so.cache

  • 包管理器
    1、程序包管理器:
    ??功能:将编译好的应用程序的各组成文件打包成一个或多个程序文件,从而方便快捷地实现程序包的安装、卸载、查询、升级等操作
    2、包文件的组成:(每个包独有)
    ??RPM包内的文件
    ??RPM的元数据,如名称,版本,依赖性,描述等
    ??安装或卸载时运行的脚本
    3、数据库(公共):/var/lib/rpm
    ??程序包名称及版本
    ??依赖关系
    ??功能说名
    ??包安装后生成的各文件路径及校验码信息
    ??注意:使用rpm均会使/var/lib/rpm目录中文件更新,使用rpm查询时也是查询此数据库中的数据,此数据库非常重要,破坏会系统不能安装、卸载、查询等各种包,建议备份。
    ??

  • 程序包的来源
    1)系统发版的光盘或官方的服务器
    ??CentOS镜像:
    ????https://www.centos.org/download/
    ????http://mirrors.aliyun.com
    ????http://mirrors.sohu.com
    ????http://mirrors.163.com
    (2) 项目官方站点
    (3) 第三方组织:
    ??Fedora-EPEL:
    ????Extra Packages for Enterprise Linux
    ??Rpmforge:RHEL推荐,包很全
    ??搜索引擎:
    ????http://pkgs.org
    ????http://rpmfind.net
    ????http://rpm.pbone.net
    ????https://sourceforge.net/
    (4) 自己制作
    注意: 第三方包建议要检查其合法性来源合法性,程序包的完整性

RPM包管理器

  • 安装:rpm -i
    ??-ivh:以#显示程序包的安装进度,v显示安装详细过程
    ??–test:测试安装,并未真正安装,即dry run 模式
    ??–nodeps:忽略依赖关系
    ??–replacepkgs|replacefile
    ??–nosignature:不检查包完整性
    ??–noscripts:不执行程序包安装脚本
    ??–nopre: %pre:安装前脚本
    ??–nopost %post:安装后脚本
    ??–nopreun %preun:卸载前脚本
    ??–nopostun %postun:卸载后脚本

  • 卸载:rpm -e

  • 升级:rpm -U | -F
    ??upgrade:安装有旧版程序包,则“升级”
    ????如果不存在旧版程序包,则“安装”
    ??freshen:安装有旧版程序包,则“升级”
    ????如果不存在旧版程序包,则不执行升级操作
    ??rpm -Uvh PACKAGE_FILE …
    ??rpm -Fvh PACKAGE_FILE …
    ??–oldpackage:降级
    ??–force: 强制安装
    ??升级注意:
    (1)不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核
    (2)如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件不会直接覆盖老版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)后保留

  • 查询:rpm -q
    ??-a:所有包
    ??-f:查看指定的文件由哪个程序包安装生成
    ??-p rpmfile:针对尚未安装的程序包文件做查询操作
    ??–whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
    ??–whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
    ??rpm2cpio 包文件|cpio –itv 预览包内文件
    ??rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
    ??–changelog:查询rpm包的changelog
    ??-c:查询程序的配置文件
    ??-d:查询程序的文档
    ??-i:information
    ??-l:查看指定的程序包安装后生成的所有文件
    ??–scripts:程序包自带的脚本
    ??–provides:列出指定程序包所提供的CAPABILITY
    ??-R:查询指定的程序包所依赖的CAPABILITY

  • 校验:rpm -K | -V
    ?1、rpm -V
    ??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
    ?2、rpm -K
    ??导入所需要公钥
    ??rpm -K|checksig rpmfile 检查包的完整性和签名
    ??rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    ??CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
    ??rpm -qa “gpg-pubkey*”

  • rpm数据库(数据最重要)
    1、数据库重建:
    ??/var/lib/rpm
    2、rpm {–initdb|–rebuilddb}–>一般没什么用
    ??initdb: 初始化
    ????如果事先不存在数据库,则新建之
    ????否则,不执行任何操作
    ??rebuilddb:重建已安装的包头的数据库索引目录

※※※※※
rpm -ivh | -e | -qi | -ql | -q –scripts | -qa | -qf /path/file | -q package | –force| -qc

yum

  • yum:Yellowdog Update Modifier,rpm的前端程序,可以解决依赖关系,可以在多个库之间定位软件包。

  • yum的工作原理:

    软件包管理

    来源:Hskds

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年7月5日
下一篇 2019年7月5日

相关推荐