RPM 软件包管理
1、rpm软件包管理:
本章内容:
软件运行环境
软件包基础
rpm包管理
yum管理
定制yum仓库
编译安装
Linux程序包管理:
API:Application program interface (应用编程接口)
ABI:Application binary interface (应用二进制接口)
API:Application program interface
程序源代码—->预处理—->编译——->汇编——–>链接
静态编译 和 共享编译
ABI:Application binary interface
windows 和 Linux 不兼容
Windows PE
Linux ELF
库级别的虚拟化:
Linux:wine
Windows:cywin
2、包管理器:
二进制应用程序的组成部分:
二进制文件;
库文件;
配置文件;
帮助文件;
程序包管理器:
debian:deb文件,dpkg包管理器
redhat:rpm文件,rpm包管理器
S.U.S.E:rpm文件,rpm包管理器
gentoo:ports文件
3、包命名:
使用rpm机制封装的软件包文件一般使用“软件名-软件版本-发布次数.硬件平台类型.rpm”的文件名形式:
例如:bash-4.2.46-12.el7.x86_64.rpm
basesystem-10.0-7.el7.centos.noarch.rpm
其中硬件平台通常为“i386 i586 i686 X86_64 或 noarch(不区分硬件平台)”
4、包命名和工具:
主包:libasyncns-0.8-7.el7.x86_64.rpm
支包:libasyncns-devel-0.8-7.el7.i686.rpm
支包命名:function devel utils libs
rpm包之间可能存在依赖关系,甚至循环依赖;
解决依赖包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器的前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 22+ rpm包管理器前端管理工具
5、库文件:
查看二进制程序所依赖的库文件:
ldd /PATH/TO/BINARY_FILE
管理及查看本机装载的库文件:
ldconfig
/sbin/ldconfig -p 显示本机已经缓存的所有可用库文件;
6、程序包管理器:
功能:将编译好的应用程序的各组成文件打包成一个或几个程序文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作;
(1)程序包的组成清单(每个程序包都单独实现);
文件清单
安装或卸载时运行的脚本
(2)数据库(公共)
程序包的名称和版本
依赖关系
功能说明
安装生成的各文件路径及校验码信息
/var/lib/rpm:rpm包的数据库文件存放路径;
示例:
rpm包的数据库文件
[root@centos7 rpm]# ll
total 70248
-rw-r–r–. 1 root root 4120576 ago 19 05:55 Basenames
-rw-r–r–. 1 root root 16384 ago 19 05:43 Conflictname
-rw-r–r–. 1 root root 311296 ago 23 06:59 __db.001
-rw-r–r–. 1 root root 90112 ago 23 06:59 __db.002
-rw-r–r–. 1 root root 1318912 ago 23 06:59 __db.003
-rw-r–r–. 1 root root 1130496 ago 19 05:55 Dirnames
-rw-r–r–. 1 root root 32768 ago 19 05:55 Group
-rw-r–r–. 1 root root 24576 ago 19 05:55 Installtid
-rw-r–r–. 1 root root 81920 ago 19 05:55 Name
-rw-r–r–. 1 root root 40960 ago 19 05:55 Obsoletename
-rw-r–r–. 1 root root 61956096 ago 19 05:55 Packages
-rw-r–r–. 1 root root 2154496 ago 19 05:55 Providename
-rw-r–r–. 1 root root 536576 ago 19 05:55 Requirename
-rw-r–r–. 1 root root 135168 ago 19 05:55 Sha1header
-rw-r–r–. 1 root root 81920 ago 19 05:55 Sigmd5
-rw-r–r–. 1 root root 8192 ago 19 05:55 Triggername
[root@centos7 rpm
7、获取rpm程序包的途径:
(1)系统发行版的光盘或官方的文件服务器(或镜像站点):
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2)项目的官方站点
(3)第三方组织:
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
(4)自己制作rpm包:
8、rpm包管理:
centos系统上使用rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护等;
rpm [options] PACKAGE_FILE …
安装: -i 在当前系统中安装(install)一个新的rpm软件包;
rpm -ivh PACKAGE_FILE……
-U:检查并升级系统中的某个软件包,若该软件包原来未安装,则等同于-i选项;
-e:卸载指定名称的软件包;
-F:检查并更新系统中的某个软件包,若该软件包原来并未安装,则放弃安装;
–force 强制安装某个软件包,当需要替换现在已安装的软件包及文件、或者安装一个比当前使用的软件版本更旧的软件时,可以使用此选项;
–nodeps在安装、升级或卸载一个软件包时,不检查与其他软件包的依赖关系;
-h:在安装或升级软件包的过程中,以“#”号显示安装进度;
-v:显示软件安装过程中的详细信息;
-vv:显示软件安装过程中更详细的信息;
-V:校验安装后的文件有没有被篡改;
–test:测试安装,但不真正执行安装;
–nosignature:不检查来源合法性;
–nodigest:不检查包完整性;
–nosciptis:不执行程序包脚本片段;
%pre:安装前脚本:–nopre
%post:安装后脚本:–nopost
%preun:卸载前脚本:–nopreun
%postun:卸载后脚本:–nopostun
–oldpackage:降级程序包;
升级:
rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
rpm {-F|–freshen} [install-options] PACKAGE_FILE …
-U:升级或安装;
-F:升级;
rpm -Uvh PACKAGE_FILE
rpm -Fvh PACKAGE_FILE
注意:(1)不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核;
(2)如果某源程序包的配置文件安装后曾被修改,升级时,新版的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版的配置文件重命名(FILENAME.rpmnew)后提供;
卸载:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–test] PACKAGE_NAME …
–allmatches:卸载所有匹配指定名称的程序包的各版本;
–nodeps:忽略依赖关系;
–test:测试卸载,dry run模式;
rpm查询:
rpm命令的查询功能主要通过“-p”选项实现,主要针对当前系统中的已经安装的软件包;
rpm {-q|–query} [select-options] [query-options]
[select-options]
PACKAGE-NAME:查询指定的程序包是否已经安装,及其版本;
-qa:–all 查询所有已经安装过的rpm包;
-qf:file 查询指定的文件是由哪个程序包安装的;
-qi:info 查询指定软件包的名称、版本、许可协议、用途描述等详细信息;
-ql:list 显示指定的软件包在当前系统中安装的所有目录、文件列表;
-qc:configfile 显示指定软件包在当前系统中安装的配置文件列表;
-qd:docfiles 显示指定软件包在当前系统中安装的文档文件列表;
使用“-qp”选项时,需要使用rpm包文件作为参数,主要查询系统中未安装的软件包信息;
-qpi:查询指定软件包的名称、版本、许可协议、用途描述等详细信息;
-qpl:查询指定的软件包在当前系统中准备安装的所有目录、文件列表;
-qpc:查询定软件包在当前系统中准备安装的配置文件列表;
-qpd:查询指定软件包在当前系统中准备安装的文档文件列表;
校验rpm包:
包来源合法性验证和完整性验证:
来源合法性验证:
完整性验证:
获取并导入信任的包制作者的秘钥:
对于centos发行版来说导入公钥的方法:
[root@centos7 ~]# rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
验证:
安装此组织签名的程序时,会自动执行验证;
手动验证:rpm -k PACKAGE_FILE
[root@centos7 Packages]# rpm -K zsh-5.0.2-7.el7.x86_64.rpm
zsh-5.0.2-7.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
rpm数据库重建:
rpm 管理器数据库路径:/var/lib/rpm
获取帮助:
centos6:man rpm
centos7:man rpmdb
rpm {–initdb|–rebuilddb} [-v] [–dbpath DIRECTORY] [–root DIRECTORY]
–initdb :初始化数据库,当前无任何数据库可初始创建一个新的,当前有时不执行任何操作;
–rebuilddb :重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;
rpm –initdb
rpm –rebuilddb
yum创建:
centos : yum dnf
yum repository : yum repo
存储了众多rpm包,以及包的相关的元数据文件(放置于特定的目录下:repodata):
文件服务器:
ftp://
http://
nfs://
file:///
yum客户端:
配置文件:
/etc/yum.conf :yum主配置文件为所有仓库提供公共配置
/etc/yum.repos.d/*.repo :为仓库的指向提供配置
yum仓库指向的定义:
[repositoryID]
name=some name for this repository
baseurl=url://path/to/repository
enabled={1|0}
gpgcheck={1|0}
enabedgroups={1|0}
failovermethod={roundrobin|priority}
默认为:roundrobin,意为随机挑选;
cost=
默认为:1000
示例:
1 [base]
2 name=base
3 baseurl=http://10.1.0.1/cobbler/ks_mirror/7/
4 file:///mnt
5 enabled=1
6 gpgcheck=1
7 gpgkey=http://10.1.0.1/cobbler/ks_mirror/7/
8
9
10 [fedora]
11 name=fedora
12 baseurl=http://10.1.0.1/fedora-epel/7/x86_64/
13 enabled=1
14 gpgcheak=0
15
yum命令的用法:
yum [options] [command][package…..]
yum-config-manager –disable “仓库名” 禁用指定的仓库
yum-config-manager –enable “仓库名” 启用指定的仓库
示例:
[root@centos7 yum.repos.d]# yum-config-manager –disable base
[root@centos7 yum.repos.d]# yum-config-manager –enable base
显示仓库列表:
repolist [all|enable|disable]
[root@centos7 yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, langpacks
repo repo name status
base base 9.007
fedora fedora 0
repolist: 9.007
[root@centos7 yum.repos.d]#
显示所有程序包:
list
示例:
[root@centos7 yum.repos.d]# yum list
yum安装程序包:
install
reinstall 重新安装;
示例:
升级程序包:
update
检查可用升级:
check-update
卸载程序包:
remove
查看程序包information
info
查看指定的特性(可以是某文件)是由哪个程序包所提供;
provides
清理本地缓存:
clean
构建缓存:
makecache
搜索:
search string1 string2
以指定的关键字搜索程序包名及summary信息;
查看指定包所依赖的capabilities
deplist package1
查看yum事物历史
history
安装及升级本地程序包:
localinstall
localupdate
包租管理的相关命令:
groupinstall
groupupdate
grouplist
groupremove
groupinfo
编译安装:
解包、配置、编译、安装
第一步:configure脚本
选项:指定安装位置、指定启用的特性
–help:获取其支持使用的选项
选项的分类:
安装路径设定:
–prefix=/path:指定默认安装位置,默认为/usr/local
–sysconfdir=/path:配置文件的安装路径
system types :支持交叉编译;
optional features :可选特性
–disable-feature
–enable-feature[=arg]
optional packages:可选包
–with-packsge[=arg]依赖包
–without-package禁用依赖关系
第二部:make
第三部:make install
安装后的配置:
(1)二进制程序目录导入至path环境变量中
编辑文件/etc/profile.d/NAME.sh
export PATH=/path/to/bin:$PATH
(2)导入库文件路径
编辑/etc/ld.so.conf.d/name.conf
添加新的库文件所在目录至此文件中
让系统重新生成缓存
ldconfig -v
(3)导入头文件
基于链接的方式实现:
in -sv
(4)导入帮助手册
编辑/etc/man.config|man_db.conf文件
添加一个MANPATH
原创文章,作者:zhengyibo,如若转载,请注明出处:http://www.178linux.com/42404