Linux程序包管理 API:Application Program Interface ABI:Application Binary Interface Unix-like ELF Windows exe,msi 库级别的虚拟化 Linux:WinE Windows:Cywin 系统级开发: C/C++: http,vsftpd,nginx 应用级开发: java/Python/perl/ruby/php java:hadoop,hbase(jvm) Python: openstack(pvm) perl:(perl) ruby:(ruby) php:(php) 程序格式: 源代码:文本格式的程序代码 二进制格式:文本格式的程序代码--> 编译器-->二进制格式(二进制程序、库文件、配置文件、帮助文件) java/Python程序格式: 源代码-->目标二进制格式(二进制程序、库文件、配置文件、帮助文件)-->组织成为一个或有限几个"包"文件 安装、升级、卸载、查询、校验 程序包管理器: debian:dpt,dpkg, ".deb" redhat:redhat package manager,rpm ".rpm"; rpm is package manager S.u.S.E:rpm, ".rpm" Gentoo:ports Archlinux 源代码:name-VERSION.tar.gz VERSION: major,minor,release rpm包命令格式: name-VERSION-release.arch.rpm VERSION: major.minor.release release.arch:rpm包的发行号 release.os: 2.el7.i386.rpm archetecture:i386,x64(amd64),ppc,noarch redis-3.0.2.tar.gz-->redis-3.0.2.1.centos7.x64.rpm 拆包:主包和支包 主包:name-VERSION-release.arch.rpm 支包:name-function-VERSION-release.arch.rpm包命令格式: function:devel,utils,libs,... 依赖关系: X,Y,Z X-->Y,Z Y-->A,B,C C-->Y 前端工具:自动解决依赖关系: yum:rhel系列系统上rpm包管理器的前端工具 apt-get(apt-cache): deb包管理器的前端工具 zypper:suse的rpm管理器的前端工具 dnf:Fedora22+系统上的rpm包管理器的前端工具 程序包管理器: 功能:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作 1、程序的组成清单(每个程序包都单独实现) 文件清单 安装或卸载时运行的脚本 2、数据库(公共) 程序包的名称和版本: 依赖关系 功能说明 安装生成的各文件的文件路径及校验码信息 ... /var/lib/rpm/ 获取程序包的途径: (1)系统发行版的光盘或官方的文件服务器(或镜像站点) http://mirrors.allyun.com http://mirrors.sohu.com http://mirrors.163.com (2)项目的官方站点 (3)第三方组织: EPEL: 搜索引擎 http://pkgs.org http://rpmfind.net http://rpm/pbone.net (4)自己动手,丰衣足食 建议:检查其合法性 来源合法性 程序包的完整性 CentOS系统上rpm命令管理程序包: 安装、升级、卸载、查询、校验和数据库维护 rpm命令:rpm [OPTION] [PACKAGE_FILE] 安装: -i,--install 升级: -U,--update,-F,--freshen 卸载: -e,--erase 查询: -q,--query 校验: -V,--verify 数据库维护:--builddb,--initdb 安装: rpm {-i|--install} [install-options] PACKAGE_FILE ... GENERAL OPTIONS: -v:verbose,详细信息 -vv:更详细的信息 [install-options] -h:hast marks输出进度条:每个#表示2%的进度 --test:测试安装,检查并报告依赖关系及冲突消息等 --nodeps:忽略依赖关系,不建议 --replacepkgs:重新安装 注意: rpm可以自带脚本: 四类:--noscripts preinstall:安装过程开始之前运行的脚本,%pre,--nopre postinstall:安装过程开始之后运行的脚本,%post,--nopost preuninstall:卸载过程开始之前运行的脚本,%preun,--nopreun postuninstall 卸载过程开始之后运行的脚本,%postun,--nopostun -nosignature:不检查包签名信息,不检查来源合法性 -nodigest:不检查包完整性信息 升级: rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-F|--freshen} [install-options] PACKAGE_FILE ... -U:升级或安装 -F:升级 rpm -Uvh PACKAGE_FILE... rpm -Fvh PACKAGE_FILE... --oldpackage:降级 --force:强制升级 注意:(1)不要对内核做升级操作,Linux支持多内核版本并存,因此,直接安装新版本内核 (2)如果某原程序的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把版本的配置文件重命名(FILENAME.rpmnew)后提供 卸载: rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ... --allmatches:卸载所有匹配指定名称的程序包的各版本 --nodeps:忽略依赖关系 --test:测试卸载,dry run模式 查询: rpm {-q|--query} [select-options] [query-options] [select-options] PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本 -a,--all: 查询所有安装的所有包 -f FILE: 查询指定的文件由哪个程序包安装生成 -p,--package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作 --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供 --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个程序包所依赖 [query-options] --changelog:查询rpm包的changelog -l,--list:程序安装生成的所有文件列表 -i,--info:程序包相关的信息,版本号、大小、所属的包组,等; -c,--configfiles:查询指定的程序包提供的配置文件; -d,--docfiles;查询指定的程序包提供的文档; --provides:列出指定的程序包提供的所有的CAPABILITY -R,--requires: 查询指定的程序包的依赖关系 --scripts:查看程序包自带的脚本片断 用法: -qi PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE -qpl PACKAGE_FILE,-qpi PACKAGE_FILE,-qpc PACKAGE_FILE,... 校验: 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 包来源合法性验证和完整性验证: 来源合法性验证: 数字签名: 完整性验证: 获取并导入信任的包制作者的密钥: 对于CentOS发行版:rpm --import /etc/pki/rpm-gpg/RPM-RPG-KEY-CentoOS-7 验证: (1)安装此组织签名的程序时,会自动执行验证 (2)手动验证,rpm -K PACKAGE_FILE 数据库重建: rpm管理数据库路径:/var/lib/rpm/ 查询操作:通过此处的数据库进行 获取帮助: CentOS 6:man rpm CentOS 7:man rpmdb rpm {--initdb|--rebuilddb} --initdb:初始化数据库,当前无任何数据库可初始化创建一个新的,当前有时不执行任何错作; --rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建 博客作业:rpm包管理功能全解
原文:https://www.cnblogs.com/43945616b/p/11366185.html