前言:
在操作系统上安装程序是个很常见的事。但在Linux中,很多程序都是由网上的黑客或是项目组使用C,C++或perl开发的源程序包。想要将这些源程序进行安装,就必须要将程序进行编译。这大概就想要经过以下几步:预处理——>编译——>汇编——>链接。然后才能真正的安装运行起来。但不是所有的用户都有这个能力安装。所以这就出现了简化用户安装使用的程序包管理器。
-------------------------------------------------------------------------------------------
包管理器的分类:
Debian:dpkg
RedHat:rpm(redhat package manager)
包管理器的功能:
打包
安装
卸载
升级
校验
数据库管理
包管理器的发展:前端工具
dpkg:apt-get
rpm:yum
-------------------------------------------------------------------------------------------
程序的命名格式:
源代码:
name-version.tar.{gz,bz2,xz}
version:major.minor.release
rpm包:
name-version-relase.arch.rpm
version:major.minor.release,同源代码。
relase:rpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS。
arch: 适用于的硬件平台。
获取rpm的途径:
1.发行的光盘或站点服务器
镜像:
http://mirrors.163.com
http://mirrors.sohu.com
2.项目的官网
源代码
rpm包
3.很多第三方机构或个人制作并公开发布许多rpm包
http://rpmfind.net
http://rpm.pbone.net
可靠的途径:EPEL
Fedora-EPEL
rpm包的合法性验证:
包制作者制作完成之后会附加数字签名于包上;
验证方式:
来源合法性
包的完整性
验证过程:
前提:必须有可靠机制获取到包制作者的公钥;
1.使用制作者的公钥解密加密的特征码,能解密意味着来源合法;
2.使用与制作者同样的意向加密算法提取原始数据的特征码,并与解密出来的特征码作比对,相同,则意味着完整性没问题;
-------------------------------------------------------------------------------------------
rpm包管理器的使用:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
安装
rpm [option] /path/to/package_file
-i:install 安装
-v 显示
-vv 详细显示
-vvv 详细+显示
-h 以#号显示进度
组合选项:-ivh
--test:仅作测试,没有真正执行安装
如果依赖于其它包:
1.解决依赖关系
2.忽略依赖关系
能安装上,但有可能无法运行;
--nodeps 忽略依赖关系
重新安装:
--replacepkgs
如果原有配置文件作了修改,很有可能不执行替换,而是将应该安装生成的配置文件重命名为.rpmnew
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
卸载程序包:
rpm [option] package_name
-e erase
如果被其它包所依赖:
1.将依赖于此包的所有包一并卸载
2.忽略依赖关系
能卸载,但依赖于此包程序可能会运行不正常
--nodeps 忽略依赖关系
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
升级程序包:
新版本替换老版本
rpm [option] /path/to/package_file
1.升级或安装
-Uvh
2.纯升级
-Fvh
--force 强制升级
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
查询操作:
1.查询某包是否安装
rpm -q package_name...
2.查询所有已经安装的包
rpm -qa
3.查询包的描述信息
rpm -qi package_name
4.查询某包安装生成了哪些文件
rpm -ql package_name
(1)查询某包安装生成了哪些配置文件
rpm -qc package_name
(2)查询某包安装生成了哪些帮助文件
rpm -qd package_name
(3)查询程序包的相关脚本
rpm -q --scripts package_name
5.查询某文件是由哪个包安装生成的
rpm -qf /path/to/some_file
6.对尚未安装的包执行查询
rpm [option] /path/to/package_file
-qpi 查询未安装的某包生成了哪些信息
-qpl 查询未安装的某包生成了哪些文件
-qpc 查询未安装的某包生成了哪些配置文件
-qpd 查询未安装的某包生成了哪些帮助文件
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
校验:
用于检查包安装生成的文件属性是否发生变化
rpm -V package_name
- - - - - - - - - - - -
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
某属性无变化,显示为.
- - - - - - - - - - - -
rpm包来源合法性及完整性检验:
前提:在当前系统上导入包的制作者的公钥
导入:
rpm --import /path/to/key_file
#rpm -qa gpg-pubkey*
显示所有已经导入的gpg格式的公钥
#rpm -qi gpg-pubkey-NAME
显示密钥的详细信息
检查包:安装过程中会自动执行
手动检查:
rpm -K /path/to/package_file
不检查包完整性:
rpm -K --nodigest
不检查来源合法性:
rpm -K --nosignature
rpm --checksig /path/to/package_file
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
数据库重建:
数据库目录位置:/var/lib/rpm
重建:
rpm --initdb:初始化
如果事先没有库,会新建一个;如果有,则不新建
rpm --rebuilddb:重建
直接重建,覆盖原有的数据库