一个软件的流程:准备 → 安装 → 升级 → 卸载
通产情况下软件的安装就是文件的复制,软件安装是会把所需要用到的文件复制到特定的目录。
目录
1. RPM 软件包安装
1.1 RPM 在安装软件包的时候需要:
检查软件的依赖关系 → 检查软件包的冲突 → 执行安装前脚本程序 → 处理配置文件 → 解压软件包并存放到相应位置 → 执行安装后脚本程序 → 更新 RPM 数据库 → 执行安装时触发脚本程序。
RPM 对配置文件有特别的处理,PRM 会将原配置文件换个名字保存起来,会将原文件以 源文件.rpmorig 的形式将原配置文件保存起来。
触发脚本程序:软件包满足特定的条件才会执行的脚本程序,这用于软件包之间的交互控制。
软件包名 和 软件名 是不同的
1.2 PRM 安装失败的情况
- ① 检查软件包的依赖,当 RPM 发现所依赖的动态库或程序等不存在、不满足相关要求的时候,终止安装。
- ② 检查软件包的冲突,有些软件和其他软件不能共存,通常这些信息在 RPM 包中有记录。
- ③ RPM 包可能含有在安装过程中以 root 身份运行的任意脚本
1.3 安装 RPM 包
rpm -ivh PACKAGE_FILE ... ...
rpm {-i|--install} {install-option} PACKAGE_FILE ... ...
rpm -i [安装选项1 安装选项2 ...] [包文件1] [包文件2] ...
选项 | 描述 |
---|---|
-i | 安装指定的包文件 |
-v | 显示指令的执行过程 |
-vv | 详细显示指令执行过程、方便排错 |
-h | 显示安装过程的进度条 |
--test | 测试安装、检查并报告依赖关系及冲突消息等 |
--nodeps | 忽略软件包的依赖关系强制进行安装 |
--replacepkage | 无论软件包是否已经被安装,都重新安装软件包 |
--nosignature | 无检查包签名信息、不检查来源合法性 |
--nodigest | 不检查完整性信息 |
其他安装选项和说明
安装选项 | 说明 | 安装选项 | 说明 |
---|---|---|---|
--excludedocs | 不安装软件包中的文档文件 | --nodeps | 不检查依赖关系 |
--force | 忽略软件包及文件的冲突 | --noscripts | 不运行预定安装脚本和安装后安装脚本 |
--ftpport port | 指定FTP的端口号为port | --percent | 以百分比的形式显示安装的进度 |
--ftpproxy host | 用 host 作为 FTP 代理 | --prefix path | 安装到由 path 指定的路径下 |
--h ( or --bash ) | 安装时输出 bash 记号 # | --replacefiles | 替换属于其他软件包的文件 |
--ignorarch | 不校验软件包的结构 | --replacepkgs | 强制重新安装已安装的软件包 |
--ignoreos | 不检查软件包运行的操作系统 | --test | 只对安装进行测试,不实际安装 |
--includedocs | 安装软件包中的文档文件 |
通用选项和其他 RPM 选项及其说明
通用选项 | 其他 RPM 选项 | ||
---|---|---|---|
选项 | 说明 | 选项 | 说明 |
--dppath path | 设置 RPM 资料库所在的路径为 PATH | --help | 显示帮助文件 |
--rcfile rcfile | 设置 rpmrc 文件为 rcfile | --initdb | 创建一个新的 RPM 资料库 |
--root path | 让 RPM 将 path 指定的路径作为 根目录 这样预安装程序和后安装程序都会安装到 这个目录下 | --quiet | 尽可能地减少输出 |
-v | 显示附加信息 | --rebuilddb | 重建 RPM 资料库 |
--vv | 显示调试信息 | --version | 显示 RPM 的当前版本 |
解决 RPM 包的依赖关系是麻烦的,这通常需要解决多个依赖,使用 rpm -qR 软件名 来查询安装包的依赖关系。
[root@localhost ~]# rpm -qR tree
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(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)
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
1.4 安装示列
[root@localhost ~]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm
Preparing... ################################# [100%]
package tree-1.6.0-10.el7.x86_64 is already installed
由于 tree 比较简单,所以不需要考虑 tree 的依赖关系
包的来源:
http://mirror.centos.org/centos/7/os/x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm