程序组成部分
- 二进制程序 /bin,/sbin
- 库 /lib,/usr/lib
- 配置文件 /etc
- 帮助文件 /usr/share/man
软件包管理器的核心功能
- 制作软件包;
- 安装、卸载、升级、查询、校验;
不同Linux/Unix系统的安装包管理工具
后端工具:RPM, dpt
Redhat, SUSE: RPM
Redhat Package Manager
PRM is Package Manager
SUSE RPM与RedHat RPM软件包的组织形式有差别,所以同一个RPM不能混用
Debian: dpt
debian package tool
前端工具:yum, apt-get
yum: Yellowdog Update Modifier
RPM命令
rpm相关命令功能
rpm:管理软件包
安装、查询、卸载、升级、校验、数据库的重建、验证数据包等工作;
并提供追踪文件以便卸载;
查询(软件包--并提供追踪文件以便卸载,查询(软件包-->安装文件;安装文件-->生成文件等);
数据库:/var/lib/rpm(哈希树),数据库需要保存完整性,一旦数据库损坏,rpm将无法正常管理对应软件
rpmbuild:制作软件包
rpm包命名
包组成部分
主包:
bind-9.7.1-1.el5.i586.rpm
子包:
bind-libs-9.7.1-1.el5.i586.rpm
bind-utils-9.7.1-1.el5.i586.rpm
包名格式
name-version-release.arch.rpm
bind-major.minor.releaseID-release.arch.rpm
- 主版本号major:重大改进
- 次版本号minor:某个子功能发生重大变化
- 发行号releaseID:修正了部分bug,调整了一点功能
rpm命令
1、安装
rpm -i /PATH/TO/PACKAGE_FILE-h: 以#显示进度;每个#表示2%;
-v: 显示详细过程
-vv: 更详细的过程
rpm -ivh /PATH/TO/PACKAGE_FILE
--nodeps: 忽略依赖关系;
--replacepkgs: 重新安装,替换原有安装;
--replacefile:重新安装,替换原有文件;
--oldpackage:降级安装,用旧版本替换新版本;
--force: 强行安装,可以实现重装或降级;
--test:测试安装依赖关系,并不实现真正安装;
2、查询
已安装软件包:rpm -q PACKAGE_NAME: 查询指定的包是否已经安装
rpm -qa : 查询已经安装的所有包
rpm -qi PACKAGE_NAME: 查询指定包的说明信息;
rpm -ql PACKAGE_NAME: 查询指定包安装后生成的文件列表;
rpm -qc PACEAGE_NEME:查询指定包安装的配置文件;
rpm -qd PACKAGE_NAME: 查询指定包安装的帮助文件;
rpm -qf /path/to/somefile: 查询指定的文件是由哪个rpm包安装生成的;
rpm -q --scripts PACKAGE_NAME: 查询指定包中包含的脚本
四类脚本:
安装前(preinstall),安装后(postinstall),卸载前(preuninstall),卸载后(postuninstall)
尚未安装软件包:
rpm -qpi PACKAGE_NAME: 查询指定包的说明信息;
rpm -qpl PACKAGE_NAME: 查询指定包安装后生成的文件列表;
rpm -qpc PACEAGE_NEME:查询指定包安装的配置文件;
rpm -qpd PACKAGE_NAME: 查询指定包安装的帮助文件;
3、升级
rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE: 如果装有老版本的,则升级;否则,则安装;rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则,退出;
--oldpackage: 降级
4、卸载
rpm -e PACKAGE_NAME--nodeps
5、校验
rpm -V PACKAGE_NAME 校验指定的已安装软件rpm -Va 校验系统上所有已安装软件
rpm -Vp PACKAGE_NAME 校验未安装的软件
rpm -Vf FILE_NAME 校验该文件
检验结果含义:
第一段-单个字符:
S :(file Size differs) 文件的容量大小是否被改变
M :(Mode differs) 文件的类型或文件的属性 (rwx) 是否被改变?如是否可运行等参数已被改变
5 :(MD5 sum differs) MD5 这一种指纹码的内容已经不同
D :(Device major/minor number mis-match) 装置的主/次代码已经改变
L :(readLink(2) path mis-match) Link 路径已被改变
U :(User ownership differs) 文件的所属人已被改变
G :(Group ownership differs) 文件的所属群组已被改变
T :(mTime differs) 文件的创建时间已被改变
第二段-文件类型:
c :配置文档 (config file)
d :文件数据/帮助文档 (documentation)
g :鬼文件~通常是该文件不被某个软件所包含,较少发生!(ghost file)
l :授权文件 (license file)
r :readme文件 (read me)
6、重建数据库
rpm--rebuilddb: 无条件重建数据库;
--initdb:在没有安装包数据库的前提下,初始化数据库;
7、检验来源合法性,及软件包完整性
加密类型:对称:加密解密使用同一个密钥
公钥:一对儿密钥,公钥,私钥;公钥隐含于私钥中,可以提取出来,并公开出去;
当你要安装一个 RPM 文件时:
1.首先你必须要先安装原厂释出的公钥文件;
2.实际安装原厂的 RPM 软件时, rpm 命令会去读取 RPM 文件的签名,与本机系统内的签名比对,
若签名相同则予以安装,若找不到相关的签名时,则给予警告并且停止安装喔。
- 查找GPG 金钥文件放置的位置:
find /etc -name '*GPG-KEY*'
- 导入公钥文件:
rpm -K /PAPT/TO/PACKAGE_FILE
rsa, gpg: 验正来源合法性,也即验证签名;可以使用--nosignature,略过此项
sha1, md5: 验正软件包完整性;可以使用--nodigest,略过此项
- 查找安装完成以后的公钥文件(文件名一般包含pubkey):
- 查看该软件的签名:
# ls /etc/pki/rpm-gpg/
RPM-GPG-KEY-redhat-release
/etc/lib/rpm 存放当前安装软件包信息