码迷,mamicode.com
首页 > 其他好文 > 详细

RPM程序包管理

时间:2015-04-13 07:04:17      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:rpm程序包管理

1.程序包的生成:

程序包以源代码形式提供:

编译型语言:==>编译器,GCC编译器

c语言

c++语言

编译:

C程序包

源代码(文本)--> 预处理 --> 编译 --> 汇编 --> 链接


编译时,根据是否将被调用的库文件直接打包进生成的二进制程序文件,编译方式可分为两类:

动态链接:不将被调用的库文件打包进来,而是运行时去装载它;

静态链接:将被调用的库文件打包进来,将来运行时,可自己完全独立运行,而无须外部库文件运行

解释型语言:==>解释器,特定解释器或称虚拟机编译接口

perl语言

python语言

ruby语言

编译之后:

二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin, /opt/bin, /opt/sbin

库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64

配置文件:/etc, /etc/DIR, /usr/local/{etc,conf}

帮助文件(手册、文档):/usr/share/man, /usr/share/doc, /usr/local/share/man


!!!注意:有些特殊的应用程序可能会将可执行文件放置于libexec目录;


因为程序包由源码提供,源码需要编译后才能安装。编译后的软件需要适应不同的硬件平台即ABI接口,所以需要不同编译成为不同平台的软件包,同时需要解决程序包之间的依赖关系,很不方便。

注意:制作成的二进制格式程序与平台有相关性ABI,所以,通常需要制作各种流行平台所兼容的版本;



2.程序包命名及格式:

源代码压缩格式:appname-VERSION.tar.gz, appname-VERSION.tar.bz2, appname-VERSION.tar.xz

包管理器(rpm)格式:

appname-VERSION-RELEASE.ARCH.rpm

VERSION:

major: 主版本号

minor: 次版本号

release: 发行号

RELEASE: 包自身的修订号;有时候还会包含适用于的OS信息;比如bash-4.3.2-2.centos6.x86_64.rpm中的2.centos6

ARCH: 适用的平台

x86: i386, i486, i586, i686

x86_64: x86_64, amd64

powerpc: ppc

noarch: 跟平台无关;

分包机制:

核心包,主包:命名与源项目名称一致;通常包含程序的主要功能

bash-4.3.2-2.centos6.x86_64.rpm

子包(支包):命令为源项目名称后附加支包中的文件提供的功能组成,为主程序包提供特别功能;

bash-devel-4.3.2-2.centos6.x86_64.rpm


3.常见的包管理器:

.deb: Debian

.rpm: Red hat Package Manager, 成为通用标准后,RPM is Package Manager

4.获取程序包的途径:

1、系统的发行光盘镜像或官方站点(或站点镜像服务器);

挂载光盘:

mount -r /dev/cdrom /media/cdrom

国内镜像站点:

http://mirrors.ustc.edu.cn/

http://mirrors.sohu.com/

http://mirrors.163.com/

http://mirrors.aliyun.com/


2、程序包的官方站点


3、第三方组织:epel

http://mirrors.fedoraproject.org/publiclist/EPEL/


4、搜索引擎

www.google.com.hk

http://rpmfind.net

http://rpm.pbone.net

http://pkgs.org

5.校验:

查询包安装之后生成的文件是否发生了改变


rpm {-V|--verify} [select-options] [verify-options]


常见用法: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 --import /path/to/RPM-GPG-KEY-FILE


验正:rpm {-K|--checksig} PACKAGE_FILE

--nosignature: 不检查来源合法性

--nodigest: 不检查完整性


6.安装:

rpm {-i|--install} [install-options] PACKAGE_FILE1...


-h: hash,以#来表示安装进度;

-v, --verbose:显示安装过程中的详细信息;

-vv: 更详细过程

-vvv:更更详细过程


常用的组合: -ivh, -ivvh


测试安装:

--test:不执行真正的安装过程,而仅报告依赖关系及冲突信息等;

忽略依赖关系:【能安装成功,但不一定能成功运行】


--nodeps


覆盖安装:重新安装并覆盖原有的文件

--replacepkgs


强制安装:

--force


7.升级:


rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

-U: 升级或安装


rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

-F:升级


常用组合:-Uvh, -Fvh


测试安装:

--test

忽略依赖关系升级(有可能依赖的包也需要升级):

--nodeps

强制升级:

--force

降级到旧版本:  

--oldpackage:降级到旧版本;


!!!注意:一定不要对内核执行升级;但是Linux允许多内核共存,所以,可以直接安装多个不同版本内核;


!!!注意:如果程序包的配置文件安装后曾被修改,升级时,新版本的文件不会覆盖老版本的配置文件,而把新版本的配置文件重命名(加后缀.rpmnew)后保存;

8.卸载:


移除已经安装的程序包


rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...


简单用法:rpm -e PACKAGE_NAME...


--nodeps:忽略依赖关系;

--test: 测试卸载;dry-run模式;

--allmatches: 如果一个程序包同时安装多个版本,则此选项一次全部卸载之;


注意:如果程序包的配置文件安装后曾被修改,卸载时,此文件通常不会被删除,而是被重命名(加后缀.rpmsave)后留存;


9.查询:

查询某包是否已经安装,以及检查安装的所有包;还可以查看某包的详细信息;


rpm {-q|--query} [select-options] [query-options]


[select-options]:

1、查询某包或某些包是否安装:

rpm -q PACKAGE_NAME...


2、查询已经安装的所有包:

rpm -qa


3、查询某文件是由哪个包安装生成:

rpm -qf /PATH/TO/SOMEFILE


4、查询尚未安装的包文件的相关信息

-p

# rpm -qpi PACKAGE_FILE


[query-options]:

1、查询某包的简要说明信息:

rpm -qi PACKAGE_NAME


2、查询某包安装生成的文件列表:

rpm -ql PACKAGE_NAME


3、查询某包安装完成后生成的所有配置文件:

rpm -qc PACKAGE_NAME


4、查询某包安装完成后生成的所有帮助文件:

rpm -qd PACKAGE_NAME


5、查看某包制作时随版本变化的changelog信息:

rpm -q --changelog PACKAGE_NAME


6、查询某包提供的capabilities:

rpm -q --provides PACKAGE_NAME


7、查询某包所依赖的capabilities:

rpm -q --requires PACKAGE_NAME


8、查询某包安装或卸载时执行脚本:

rpm -q --scripts PACKAGE_NAME


脚本有四类:

preinstall: 安装过程开始之前执行的脚本;

postinstall: 安装过程完成之后执行的脚本;

preuninstall: 卸载开始之前执行的脚本 ;

postuninstall: 卸载过程完成之后执行的脚本;


10.rpm管理器数据库:/var/lib/rpm


重建数据库:

rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY]


--initdb: 初始化数据库,即数据库完全不存时,可新建之;


--rebuilddb: 无论当前数据存在与否,都会直接重建此库;


RPM程序包管理

标签:rpm程序包管理

原文地址:http://wbcla.blog.51cto.com/9367213/1631637

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!