linux软件包的管理
linux下软件有几类:二进制软件包 、源码包
二进制:有通用二进制,
源码包:可以定制、可跨平台 但安装比较麻烦,通常需要编译安装
程序包管理器的两大主流
dpkg: 是由 Debian Linux 社群所开发出来的, 只要是衍生版 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理软件的, 包括B2D, Ubuntu 等等,其前端工具有apt-get。
RPM: 由 RedHat 公司所研发开始名为(RedHat Package Manager),后因被纳为标准包管理器,后改名为(RPM is Package Manager)包括 Fedora, CentOS, SUSE 等等,其前端工具有yum。
包管理器的基本功能:
打包
安装
查询
升级
卸载
校验
数据库管理
rpm包命名的格式:
源程序:name-version.tar.{gz|bz2|xz}
version分为三个部份: major.minor.release 主版本.次版本号.发行号
rpm包:name-version-release.arch.rpm
release:通常包含rpm的制作发行号,还包含适用的OS
bash-4.3.2-2.el6.x86_64.rpm
OS:操作系统平台及板本
el6:代表 redhat enterprise linux 6
el5:代表 redhat enterprise linux 5
arch:cpu架构
x86_64
i386, i586, i686
ppc
noarch
nginx-1.4.16-5.noarch.rpm (如果arch位没写或写成noarch这种一般是通用格式)
下图是一个包格式说明,(引用)
在有些时候安装包里不是所有的功能都能用到的,包制作者这一点早就想到了。如:
一个源码:有10个功能,大多数用户只用其6个功能,余下的4个呢?这个时候这个包可能会分包
分包制作:把一个大的程序打包制作成多个包
主包:bash-4.3.2-2.el6.x86_64.rpm
支包:bash-hello-4.3.2-2.el6.x86_64.rpm
bash-world-4.3.2-2.el6.x86_64.rpm
例如 DNS:bind, bind-devel, bind-libs, bind-utils
来源合法性验正:
源程序:通过md5或sha1校验码验正;
rpm包:发行商提供的合法性是可信的
验正包完整性:校验码
验正来源合法:公钥
获取rpm包的途径:
1、发行商的光盘或站点服务器
以CentOS为例:
http://mirrors.163.com
http://mirrors.sohu.com
2、http://rpmfind.net
3、http://rpm.pbone.net
注意RPM包获取路径(相对安全的方式实在没有在到以上查找):
1、发行商,发行光盘中的包,需要升级时,官方释放出升级包;
2、Fedora EPEL(googole搜索EPEL)
rpm 命令使用
格式: rpm [option] package_name ...
option:
安装
-i ,--install 安装
-v 显示安装信息
-vv
-vvv
-h : hash, 以#号的个数显示安装进度,-个#号为2%。
--test: 仅测试安装,不真正安装;
-ivh --replacepkgs :重新安装
原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件
卸载
-e ,--erase 卸载
--nodeps 忽略依赖关系
如果卸载被其它程序所依赖的包有三种解决方法:1、把依赖者一同卸载; 2、忽略依赖关系; 3、不再卸载
查询(己安装包)
-q package_name :查询单个包是否己经安装
-qa : 查询所有己经安装的包
-qi package_name:查询包的描述信息
-ql package_name:查询安装包生成的文件及路径
-qf /path/to/somefile: 查询某个文件是哪个包提供的
-qc package_name :查询安装包生成的配置文件
-q --scripts package_name: 查询安装包相关的脚本
脚本有四类:
preinstall: 安装前脚本
postinstall: 安装后脚本
preuninstall: 卸载前脚本
postuninstall: 卸载后脚本
查询(未安装的包,在以上的基础上加上-p参数)
rpm -qpl /path/to/package_file 查询安装后会生成的文件列表
rpm -qpi /path/to/package_file 查询其简单描述信息
升级:
-U:升级(没有安装就安装)
-F:只做升级(包如果没有安装,就不做操作)
rpm {-Uvh|-Fvh} /path/to/package_file
--nodeps:忽略依赖关系
--force: 强行安装
注意:不要对内核执行升级操作;
多版本内核可并存,因此,建议执行安装操作;
校验:
检查包安装后生成的文件是否被修改过;
rpm -V package_name
S file Size differs 文件大小发生改变
M Mode differs (includes permissions and file type) 文件权限发生改变
5 digest (formerly MD5 sum) differs 文件的MD5码发生改变
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包管理:检验来源合法性和软件包完整性
包完整性:通过单向加密机制(md5|sha1)
来源合法性:通过公钥加密机制(RSA)
命令:gpg(加密工具), pgp(加密规范) gpg使用pgp加密规范
检查顺序:
1、导入制作者的公钥,CentOS发行版的公钥在iso文件中;
2、导入命令:rpm --import /path/to/gpg-key-file
3、检查:rpm -K /path/to/package_file
rpm --checksig /path/to/package_file
--nosignature: 不检查来源合法性
--nodigest: 不检查完整性,只检查来源合法性。
rpm包管理:数据库重建
数据库路径:/var/lib/rpm/
重建:
rpm --initdb: 初始化
如果事先不存在一个数据库,则新建之;
rpm --rebuilddb: 重建
直接重建数据库,会覆盖原有的库;