linux程序的源码编译安装方式毕竟比较繁琐,安装后也不易管理,为此linux官方提供了专门的程序包管理器来解决这些问题
 
一、程序包管理器
 
程序包管理器:将源程序编译并打包成一个或有限的几个文件,可用于实现安装、查询、升级、卸载等功能
 
程序包管理器的管理实现:
 
①数据库,用于记录:
 
程序名及版本
 
程序之间的依赖关系
 
功能性说明
 
安装生成的各文件路径及校验码
 
②程序的组成清单:
 
文件清单
 
安装卸载时运行的脚本
 
常用程序包管理器:
 
Redhat:rpm(redhat package manager),其对应的程序包后缀为.rpm,对应的前端工具为yum
 
Debian:dpkg,其对应的程序包后缀为.deb,对应的前端工具为apt-get
 
rpm包的制作需要rpmbuild工具,其制作过程这里不作说明,以下详解一下rpm包的管理
 
二、rpm程序包
 
2.1、rpm包命名格式:name-version-release.arch.rpm,如httpd-2.2.s.x86_64.rpm
version:lease,同源码
release:rpm自身发行号,与源码的发行号无关,仅用于标识对rpm包不同制作的修订,同时release还包含此包适用的OS
arch:适用的硬件平台
x86: i386, i486, i586, i686等
x86_64: x86_64
powerpc: ppc
noarch: 依赖于虚拟机
 
2.2、rpm分包机制
 
一个程序体积可能很大,为了方便管理,rpm包管理器依据功能性差异,将一个程序打包成若干个包
主包(核心包):其name与源程序一致,如httpd-2.2.s.x86_64.rpm 
子包:httpd-devel-2.2.s.x86_64.rpm
 httpd-tools-2.2.s.x86_64.rpm
 
区别:程序x依赖于y和z,若x是基于rpm包安装,则x依赖的是y和z的核心包;若x基于源码编译安装,则x依赖的是y和z的开发包
 
2.3、获取rpm包的途径
 
①官方发行的光盘、官方站点、镜像站点
   mirros.163
   mirrors.sohu
 
②项目的:源代码、rpm包
 
③第三方机构或个人制作并公开发布许多rpm包
   rpmfind
   rpm.pbone
 
④额外程序包的可靠途径:EPEL,为Federa所维护
 
2.4、rpm包的合法性验证
 
rpm包的合法性包括来源合法性和包的完整性两个方面
 
包的制作者使用单向加密算法提取出原始数据的特征码,并使用自己的私钥加密这段特征码,附加在原始数据之后
 
验证过程:
 
前提:必须有可靠机制获取到包制作者的公钥
 
①使用包制作者的公钥解密那段加密的特征码,能解密则说明来源合法
 
②使用与制作者同样的单向加密算法提取数据的特征码,并与解密得到的特征码比对,相同则说明包完整性没问题
 
2.5、rpm包管理器的使用
 
㈠验证程序包的合法性
 
我们在安装rpm程序包之前,一般要检验其合法性,尤其是从非官方或非权威站点获得的包。当然,不检验包的合法性并不影响包的安装
 
①导入制作者的公钥
rpm --import /path/to/key_file
 
②若已导入公钥,rpm安装程序包的过程中会自动检查其合法性
 
③手动检查:
 rpm -K /path/to/pkg_name
 rpm --checksig /path/to/pkg_name
 
不检查包完整性:
rpm -K --nodigest /path/to/pkg_name
 
不检查包的来源合法性:
rpm -K --nosignature /path/to/pkg_name
 
④rpm -qa gpg-pubkey*  #显示所有已导入的gpg格式的公钥
rpm -qi gpg-pubkey-NAME  #显示密钥的详细信息
 
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql下载libs包的网址17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@localhost ~]# mount /dev/cdrom /media  #挂载centos发行的光盘
[root@localhost ~]# ls /media  #centos光盘中自带了许多rpm包,位于Packages目录中
CentOS_BuildTag  EULA  imagesPackagesrepodata  RPM-GPG-KEY-CentOS-Debug-6 RPM-GPG-KEY-CentOS-Testing-6
EFI  GPL  isolinux  RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-6  RPM-GPG-KEY-CentOS-Security-6  TRANS.TBL
[root@localhost ~]# cd /media/Packages/
[root@localhost Packages]# ls
...
libreoffice-langpack-et-4.0.4.2-9.el6.x86_64.rpm  zlib-devel-1.2.3-29.el6.x86_64.rpm
libreoffice-langpack-eu-4.0.4.2-9.el6.x86_64.rpm  zsh-4.3.10-7.el6.x86_64.rpm
[root@localhost Packages]# rpm -ivh --test samba-3.6.9-164.el6.x86_64.rpm  #测试安装
warning: samba-3.6.9-164.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
#警告:没有公钥,无法验证包的合法性
>>>>>>>>### [100%]
[root@localhost Packages]# rpm --import ../RPM-GPG-KEY-CentOS-6  #导入光盘中提供的公钥
[root@localhost Packages]# rpm -ivh --test samba-3.6.9-164.el6.x86_64.rpm  #可以看到警告信息已消除,验证通过
>>>>>>>>### [100%]
[root@localhost Packages]# rpm -K samba-3.6.9-164.el6.x86_64.rpm #还可手动检查
samba-3.6.9-164.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
[root@localhost Packages]# rpm -qa gpg-pubkey*  #查看已导入的所有公钥
gpg-pubkey-c105b9de-4e0fd3a3
[root@localhost Packages]# rpm -qi gpg-pubkey-c105b9de-4e0fd3a3  #查看指定公钥的详细信息
Name  : gpg-pubkey Relocations: (not relocatable)
Version : c105b9de  Vendor: (none)
Release : 4e0fd3a3Build Date: Wed 28 Oct 2015 08:31:40 PM CST
Install Date: Wed 28 Oct 2015 08:31:40 PM CSTBuild Host: localhost
Group : Public Keys Source RPM: (none)
Size  : 0  License: pubkey
Signature  : (none)
Summary : gpg(CentOS-6 Key (CentOS 6 Official Signing Key) <>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.8.0 (NSS-3)
 
mQINBE4P06MBEACqn48FZgYkG2QrtUAVDV58H6LpDYEcTcv4CIFSkgs6dJ9TavCW
...
 
㈡安装程序包
   rpm -i [option] /path/to/package_file
 
常用选项:
 -i:install
 -h:安装时显示hash码,用来表示安装进度
 -v:显示执行过程
 -vv:详细显示执行过程
 --test:仅作测试,并不真正安装
 --nodeps:忽略依赖关系
 --replacepkgs:重新安装。如果原有的配置文件作了修改,重装可能不执行替换,而是将新生成的配置文件重命名为X.rpmnew
 
常用组合选项:-ivh
 
如果依赖于其它包:
 
 ①解决依赖关系
 
 ②使用--nodeps选项忽略依赖关系,能安装上,但可能无法运行
 
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost Packages]# rpm -ivh samba-3.6.9-164.el6.x86_64.rpm
>>>>>>>>### [100%]
   1:samba>>>>>>>>### [100%]
[root@localhost Packages]# rpm -ivh --test mysql-5.1.71-1.el6.x86_64.rpm
error: Failed dependencies:提示需要先解决依赖关系
libmysqlclient.so.16()(64bit) is needed by mysql-5.1.71-1.el6.x86_64
libmysqlclient.so.16(libmysqlclient_16)(64bit) is needed by mysql-5.1.71-1.el6.x86_64
libmysqlclient_r.so.16()(64bit) is needed by mysql-5.1.71-1.el6.x86_64
libmysqlclient_r.so.16(libmysqlclient_16)(64bit) is needed by mysql-5.1.71-1.el6.x86_64
mysql-libs = 5.1.71-1.el6 is needed by mysql-5.1.71-1.el6.x86_64
[root@localhost Packages]# rpm -ivh mysql-libs-5.1.71-1.el6.x86_64.rpm  #安装被依赖的包
>>>>>>>>### [100%]
   1:mysql-libs >>>>>>>>### [100%]
[root@localhost Packages]# rpm -ivh mysql-5.1.71-1.el6.x86_64.rpm
>>>>>>>>### [100%]
   1:mysql>>>>>>>>### [100%]
 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。