软件包管理之RPM
应用程序
程序是数据+指令。运行时,应用程序申请CPU和内存资源
### 包含文件
- 二进制文件(可执行程序)
- 库库:分为静态库和动态库 以.so结尾 shared object /usr/lib /usr/lib64
- 配置文件
- 帮助文件
### 生成过程
- 源代码编译:生成二进制文件(可执行文件),匹配底层架构。
- 链接:
- 静态链接过程:把库文件集成到应用程序中
- 动态链接古城:库文件和应用程序分开,运行时再链接
### 内存地址空间
结构如下
text 存放指令|
data存放数据+ BSS存放初始化为0的变量 | block system of symbol
heap(堆)存放运行时临时文件,向下增长 |
|
stack(栈)存放应用程序变量和函数体 向上增长|
应用程序中:
二进制文件(可执行程序)
库、配置文件、帮助文件
二进制文件存放在:/bin /sbin /usr/bin /usr/sbin下面
RPM:redhat package manager 红帽公司的一个软件包管理器
redhat、suse使用的包管理是RPM Debian和ubuntu使用的是dpt
## 软件包管理
### 软件包管理器的功能:
1. 制作软件包
2. 安装、卸载、升级、查询、校验
### 软件包依赖关系
1. 先安装被依赖的软件包,卸载软件包时,先卸载以来的软件包
A---B---C 安装的时候先安装c在安装b在A 卸载的时候先A然后B、C
2. 分为前端工具和后端工具:
- 前端工具:yum,apt-get,自行解决依赖关系
- 后端工具:RPM,dpt 只进行安装升级,不能解决依赖关系
3. 使用RPM的优点:
- RPM软件包包含了编译过的程序和配置文件,用户不用重新编译
- 在安装前会首先检查硬盘容量、操作系统版本等,避免被错误安装
- RPM使用RPM数据库管理,数据中记录了应用程序的参数,便于升级、卸载、查询RPM数据库(/var/lib/rpm)
- RPM本身会提供应用程序版本信息、相关属性、软件名称、用途等,便于用户了解软件
4. 使用RPM的缺点
- 依赖关系要自己进行安装
## RPM命令
### RPM包
1. 包的组成部分
- 主包:php-5.3.3-26.el6.x86_64.rpm
- 子包:php-mysql-5.3.3-26.el6.x86_64.rpm, mysql-devel-5.1.52-1.el6.x86_64.rpm
2. 包名格式
- name-version-relesase.arch.rpm
- name:这里指的是对应软件的名称,比如httpd,我们的apache服务
- version:这里的版本主要指的是对应的源代码的版本号(这其中的version有三部分组成:主版本号、次版本号、发布号)
- release:这个是这个RPM的修订的次数,发布商的发布版本号,与源代码的版本号无关
- arch:这个是它所支持的硬件平台,有x86_64,i386,ppc,noarch(即不分平台)等
- bind-major.minor.release-release
3. 版本号说明
- 主版本号:功能重大改进修改主版本号
- 次版本号:某个子功能发生重大变化
- 发行号:修正了部分bug,调整了一点功能
4. 包后缀
- RPM:经过源代码编译后的软件包
- .tar.gz:源码包,没有进行编译
### RPM命令
1. 安装
- -i:安装软件包
- -h:以#显示进度,一个#代表2%
- -v:显示详细信息
- -vv:更详细的过程
- --nodeps:忽略依赖关系,可能会导致安装包安装不完整
- --replacepkgs:重新安装替换原有安装
- --force:强行安装,可以实现重装或降级
2. 查询
- -q PACKAGE_NAME:查询指定的包是否被安装
- -qa:查询所有已安装的包
- -qi PACKAGE_NAME:查询详细信息
- -ql PACKAGE_NAME:查询指定包安装后生成的文件列表
- -qc PACKAGE_NAME:查询配置文件的信息
- -qd PACKAGE_NAME:查询帮助文档,一般放到/usr/share
- -qpi/-qpl PACKAGE_NAME:查看某个未被安装的包说明信息和安装以后会生成的文件
- -q --scripts PACKAGE_NAME:查询指定包中包含的脚本。脚本标记如下
- 安装前preinstall
- 安装后postinstall
- 卸载前preuninstall
- 卸载后postuninstall
3. 升级
- -U:如果装有老版本的则升级,否则则安装
- -F:如果装有老版本的则升级,否则则退出
- --oldpackage:降级
4. 卸载
- -e PACKAGE_NAME
5. 校验
- -V PACKAGE_NAME:验证软件包和配置文件的完整性。相应的状态在man rpm中有详解
6. 重建数据库
位于/var/lib/rpm中
- --rebuilddb:重建数据库,一定会重新创建
- --initdb:初始化数据库,没有才建立
7. 检验来源合法性
- -K /PATH/TO/PACKAGE_FILE
- dsa,gpg:验证来源合法性,即验证签名。可使用--nosignature忽略
- sha1,md5:验证软件包完整性。可使用--nodigest略过此项
- --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7:导入密钥文件
.so shared object
内存地址空间:
text:存放指令
data+BSS:data存放数据,BSS:block system of symbol :存放初始化为零的数据
堆:heap存放运行中的临时文件
栈:stack存放应用程序的变量和函数等
/usr/loacl:独立的 (/usr/是可以分区的)
软件管理:PRM redhat package manager
前端工具:yum(redhat,SUSE) apt-get(debian,ubuntu) 自行解决依赖关系
后端工具:RPM,dpt
cd /var/lib/rpm(rpm数据库)
/media/public(应用程序包)
包:主包、子包
主版本号:功能重大改进修改主版本号
次版本号:某个子功能发生重大变化
发型号:修正了部分bug,调整了一些功能
RPM包:经过源代码编译后的软件包
.tar.gz:源码包,没有经过编译
rpt:
-i:安装软件包
-h:以#显示进度条
-v:显示详细过程
-vv:更详细的过程
--force:强行安装,可以实现重装或降级
--replacepkgs:重新安装,替换原有安装
--nodeps:忽略依赖关系,可能导致软件包安装不完整
-q:查询指定安装包
-qa:所有安装包
-qpi:查看未安装软件包信息
-qpl:查看未安装软件包列表
-q --script PACKAGE_NAME查询 指定包中包含的脚本
-e 卸载
-V验证软件包完整性
--rebuilddb:重建数据库,一定会重新建立
--initdb:初始化数据库,没有才建立,有就不建立
-K验证数据包完整性和签名来源合法性
脚本:包含软件安装包前 preinstall,安装后postinstall,卸载前preuninstall,卸载后postuninstall执行的脚本

浙公网安备 33010602011771号