浅谈RPM

浅谈RPM

[先絮叨下编译啊]

1、 库:其实就是一个程序模块(它没有执行入口,不能独立执行,只能被能独立运行的程序调用时执行)你可以把它想象成工具螺丝刀,可执行的程序是就是你自己;螺丝刀能自己干活吗?没有螺丝刀能拧螺丝吗?或者说你现在制作一个?螺丝刀可以实现这个功能但需要你来执行这个动作。

2、静态编译:将程序所需要的所有的库都编译进二进制程序,不依赖于共享库运行;就好像随身携带螺丝刀一样。

3、动态编译:程序所依赖的共享库并不会被编译进整个二进制程序,运行环境依赖于共享库;需要找到螺丝刀才能拧螺丝。

4、动态库文件:linux以[.so]结尾  dll是windows的。

5、因为大部分的程序都是动态编译的方式来编译的,可想而知我们的程序会产生依存关系链;也就是说你想装一个A程序,A可能需要B的支持而B又需要X和Y的支持才能运行。当然BXY可能使库也可能是程序。

6、不通的编译平台(硬件、系统)编译的程序是不通用的。就好像螺丝刀有梅花有一子有内六角一样,要对套才能使用。

7、新平台兼容老平台;所以呢在在新平台上编译的软件到老平台上一般会出现兼容性问题。我们安装的操作系统能够在过个平台上使用呢高低都兼容呢,难道在很老的平台上编译的吗?

  

[程序包管理器的两大主流]

dpkg:由 Debian Linux 社群所开发出来的,  Debian 系的其他 Linux distributions 大多使用它来管理软件,例如B2D, Ubuntu 等,其前端工具有apt-get。

RPM:由 Red Hat 最早开发,后期使用C语言重新编写,效率和处理方式都非常好用。因此很多distributions 就使用其来作为软件安装的管理方式。例如 Fedora, CentOS, SuSE 等等,其前端工具有yum。

[Linux程序文件的组成及存放]

程序安装完成后由二进制文件、库文件、配置文件、帮助文件组成。

二进制程序
  /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin, /usr/local/APP/{bin,sbin}
  注意:
  有些特殊的应用程序放置于libexec目录中
  有些第三方应用默认安装于/opt目录
库文件(开发库、运行库)
  /lib64, /usr/lib64, /usr/local/lib64, /usr/local/APP/lib
配置文件
  /etc, /usr/local/APP/etc或conf目录
帮助文件
  /usr/share/man, /usr/local/share/man, /usr/local/APP/man
  帮助文件:man, info,
  doc: README, INSTALL, ChangeLog

[应用程序的命名格式]

源代码包的命名格式,一般都为压缩文件name-version.tar.{gz,bz2,xz}。
name-major.minor.release.tar.gz 名字-主版本号.次版本号.修订号.tar.gz
示例:bash-4.2.3.tar.gz   keepalived-1.2.13.tar.gz
    
rpm包的命名格式
name-version-relase.arch.rpm  名字-版本-rpm包发行号.适用平台.rpm
version: major.minor.release,版本命名格式同源代码,就是从源码包上拷贝过来的
release: rpm自身的发行号,与程序源码的发行号无关,仅用于标识对rpm包不同制作的修订;同时,release还包含此包适用的OS
arch: 适用于的硬件平台:x86: i386, i486, i586, i686,ppc(Power PC)、noarch(没有平台就是虚拟机)

示例:

xorg-x11-fonts-ISO8859-15-75dpi-7.2-9.1.el6.noarch.rpm

qemu-kvm-0.12.1.2-2.445.el6.x86_64.rpm

名字好长啊,这就是下面我们要将的分包的名字

[分包]

我想我们都装过精简版的office吧,或者安装自身的需要对office进行选择性的安装,这其实就是程序的分包。这在Linux上是一样存在的,这个应该就是个操作系统的实现方式上的区别了毕竟他们都要实现同样功能的螺丝刀就是样子和手感不一样而已。同样的在Linux上一个程序的功能可能很强大强大到我们使用不过来那么为了节省安装空间同样也可以选择安装。这在Linux上被叫做程序包分包

一般把程序分包成主包与子包。例如一个bash程序有N多个功能(其实这个同样也遵循28原则):可能最常用功能有10个,A功能:4个,二次开发相关功能:3个,那么包在分包的时候就会把这最常用的功能房子核心包内,其它各相关的功能被分别打包成子安装包。

核心包,主包:命名与源程序一致
        bash-4.2.3-3.centos7.x86_64.rpm
子包:
        bash-a-4.2.3-3.centos7.x86_64.rpm    name-分包名-major.minor.release.tar.gz  
        bash-devel-4.2.3-3.centos7.x86_64.rpm  (devel 开发)

以下下测试所使用的RPM包均来自系统安装光盘

[[email protected] CentOS_6.6_Final]# ll
总用量 712
-r--r--r--. 2 root root     14 10月 24 21:59 CentOS_BuildTag
dr-xr-xr-x. 3 root root   2048 10月 24 22:12 EFI
-r--r--r--. 2 root root    212 11月 28 2013 EULA
-r--r--r--. 2 root root  18009 11月 28 2013 GPL
dr-xr-xr-x. 3 root root   2048 10月 24 22:17 images
dr-xr-xr-x. 2 root root   2048 10月 24 22:12 isolinux
dr-xr-xr-x. 2 root root 686080 10月 24 22:16 Packages                    #就在这个文件夹里
-r--r--r--. 2 root root   1354 10月 20 00:00 RELEASE-NOTES-en-US.html
dr-xr-xr-x. 2 root root   4096 10月 24 22:17 repodata                    #yum仓库的元数据
-r--r--r--. 2 root root   1706 11月 28 2013 RPM-GPG-KEY-CentOS-6               #相应的包程序的认证KEY
-r--r--r--. 2 root root   1730 11月 28 2013 RPM-GPG-KEY-CentOS-Debug-6         #相应的包程序的认证KEY
-r--r--r--. 2 root root   1730 11月 28 2013 RPM-GPG-KEY-CentOS-Security-6      #相应的包程序的认证KEY
-r--r--r--. 2 root root   1734 11月 28 2013 RPM-GPG-KEY-CentOS-Testing-6       #相应的包程序的认证KEY
-r--r--r--. 1 root root   3380 10月 24 22:17 TRANS.TBL

[使用RPM-安装程序包]

命令格式: rpm [option]/path/to/package_file...  rpm [选项] [包路径]  (绝对路径、相对路径、网络路径)

常用选项说明:

-i:install安装程序;

-v:显示安装执行过程;

-vv:显示更详细安装执行过程;

-vvv:详细了在详细的过程;

-h:安装进度条,#一个#表示2%

常用组合选项:-ivh

--test: 仅作测试,没有真正执行安装

--nodeps:忽略依赖关系,强制安装,能安装上,但有可能无法运行

--replacepkgs:重新安装,会检测已安装的程序的文件,如原配置文件修改过,则有可能不执行替换,并将新的配置文件重命名为 .rpmnew。同样删除时也会将修改过的配置文件进行备份并在平面上输出备份文件名。

示例测试强制安装KVM
[[email protected] Packages]# rpm -ihv --test  qemu-kvm-0.12.1.2-2.445.el6.x86_64.rpm --nodeps
warning: qemu-kvm-0.12.1.2-2.445.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
如果不强制忽略这个依赖关系就会出现
[[email protected] Packages]# rpm -iv --test  qemu-kvm-0.12.1.2-2.445.el6.x86_64.rpm 
warning: qemu-kvm-0.12.1.2-2.445.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
error: Failed dependencies:
/usr/share/gpxe/e1000-0x100e.rom is needed by qemu-kvm-2:0.12.1.2-2.445.el6.x86_64
/usr/share/gpxe/pcnet32.rom is needed by qemu-kvm-2:0.12.1.2-2.445.el6.x86_64
/usr/share/gpxe/rtl8029.rom is needed by qemu-kvm-2:0.12.1.2-2.445.el6.x86_64
/usr/share/gpxe/rtl8139.rom is needed by qemu-kvm-2:0.12.1.2-2.445.el6.x86_64
还有就不做详细的拷贝了,这就是我们一开始说的依存关系链(我这么叫而已,仅供参考)

[使用RPM-卸载程序包]

命令格式:rpm [option] package_name

常用选项说明:-e: 卸载程序    同样删除时也会将修改过的配置文件进行备份并在平面上输出备份文件名。

--nodeps:忽略依赖关系,强行卸载,其他依赖于此包的程序可能无法正常运行,慎用啊

[[email protected] Packages]# rpm -e --nodeps qemu-kvm 
[[email protected] Packages]# echo $?
0

[使用RPM-升级程序包]

命令格式:rrpm [-Uvh | -Fvh] /path/to/package_file

常用组合选项:-Uvh: 升级或安装,后面的程序安装此电脑已安装则进行升级,如没有安装则现在安装;

-Fvh: 升级,只对电脑上已安装的程序进行升级,如没有安装则不进行安装;

--force:强制升级

内核不要进行升级,有可能会发生不可预料的错误出现,可以安装新内核,系统运行多内核并存。

[使用RPM-进行查询操作]

命令格式:rpm [option] package_name|file

-q: 查询某包是否安装,可以一次查询多个,彼此间用空格隔离; rpm -q kvm zsh

[[email protected] Packages]# rpm -q kvm zsh
package kvm is not installed
zsh-4.3.10-7.el6.x86_64

-qa: 查询所有已经安装的包,组合管道使用效果更佳。

[[email protected] Packages]# rpm -qa | grep bash
bash-4.1.2-15.el6_4.x86_64

-qi: 查询包的描述信息(只能查询已经安装的包的描述信息);

[[email protected] Packages]# rpm -qi bash
Name        : bash                          Relocations: (not relocatable)     #
是否保留缓存的安装包
Version     : 4.1.2                             Vendor: CentOS
Release     : 15.el6_4                      Build Date: 2013年07月18日 星期四 21时21分24秒     #包创建日期
Install Date: 2015年03月09日 星期一 07时43分42秒      Build Host: c6b10.bsys.dev.centos.org  
#安装日期                                                                         #编译主机
Group       : System Environment/Shells     Source RPM: bash-4.1.2-15.el6_4.src.rpm
Size        : 3139291                          License: GPLv3+
Signature   : RSA/SHA1, 2013年07月18日 星期四 21时46分10秒, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.gnu.org/software/bash
Summary     : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.

-ql: 查询某包安装生成了哪些文件(所有);

-qc: 查询某包安装生成了哪些配置文件;不记得了那个程序的配置文件的时候非常常用。

-qd: 查询某包安装生成了哪些帮助文件;

--q--scripts package_name: 查询程序包的相关脚本;

脚本有四类: preinstall:安装前脚本,包安装之前的脚本

postinstall: 安装后脚本

preuninstall:卸载前脚本

postuninstall:卸载后脚本

[[email protected] Packages]# rpm -q --scripts preinstall bash
package preinstall is not installed
postinstall scriptlet (using <lua>):
bashfound = false;
shfound = false;
 
f = io.open("/etc/shells", "r");
if f == nil
then
  f = io.open("/etc/shells", "w");
else
  repeat
    t = f:read();
    if t == "/bin/bash"
    then                         #
后面的内容不做详细叙述了

查询没有安装的包的相关信息,只需要在选项里加入-p即可,如下:

-qpi  包的描述信息

-qpl  包安装会生成的文件

-qpc  包安装会生成的配置文件

-qpd  包安装会生成的帮助文件

查询某文件是由哪个包安装生成的:rpm -qf /path/to/some_file

[[email protected] Packages]# rpm -qf /bin/bashbash-4.1.2-15.el6_4.x86_64

[使用RPM-进行校验]

用于检查包安装生成的文件属性是否发生变化

命令格式:rpm [option] package_name|file

常用选项说明:

-V :后面加的是程序名称,若该程序属有的文件发生改变就会显示;

-Va :显示目前系统上面所有可能被修改过的文件;

-Vp :后面加的是文件名,显示该程序内可能被更改过的文件;

-Vf :后面加的是文件名,显示某个文件是否被修改过。

[[email protected] Packages]# vi /etc/skel/.bashrc  #
添加了一条#ceshi
[[email protected] Packages]# rpm -V bash
S.5....T.  c /etc/skel/.bashrc

对应属性位说明:

 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包的校验主要有来源合法性验证与包的完整性验证。

数字签名:包的制作者使用单向加密提取原始数据的特征码,而后使用自己的私钥加密这段特性码,附加原始数据后面。

验正过程:

前提:必须有可靠机制获取到包制作者的公钥;

1、使用制作者的公钥解密加密的特征码,能解密则意味着来源合法。

2、对文件进行相应的完整性校验工具MD5|SHA-1 等得到特征码对比制作者提供的加密特征码,一致则认为包完整。

rpm包来源合法性及完整性检验:

在当前系统上导入包的制作者的公钥:

rpm--import /path/to/key_file    【公钥路径】

显示所有已经导入的gpg格式的公钥:

rpm -qa gpg-pubkey*                 【通配符方式检查】

显示密钥的详细信息

rpm -qi gpg-pubkey-NAME

[[email protected] Packages]# rpm --import /media/CentOS_6.6_Final/RPM-GPG-KEY-CentOS-6
[[email protected] Packages]# rpm -qa gpg-pu*
gpg-pubkey-c105b9de-4e0fd3a3
[[email protected] Packages]# rpm -qi gpg-pubkey-c105b9de-4e0fd3a3
Name        : gpg-pubkey                   Relocations: (not relocatable)
Version     : c105b9de                          Vendor: (none)
Release     : 4e0fd3a3                      Build Date: 2015
年04月17日 星期五 19时49分12秒
Install Date: 2015年04月17日 星期五 19时49分12秒      Build Host: localhost
Group       : Public Keys                   Source RPM: (none)
Size        : 0                                License: pubkey
Signature   : (none)
Summary     : gpg(CentOS-6 Key (CentOS 6 Official Signing Key) <[email protected]>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.8.0 (NSS-3)
mQINBE4P06MBEACqn48FZgYkG2QrtUAVDV58H6LpDYEcTcv4CIFSkgs6dJ9TavCW
NyPBZRpM2R+Rg5eVqlborp7TmktBP/sSsxc8eJ    #余下的内部不做详细拷贝了

安装过程中会只要有相对应的公钥就会自动用已经导入的的公钥,对程序包进行检验,一般无需进行手动校验。

手动检查:前提是导入KEY文件

rpm {-K|--checksig} [--nosignature] [--nodigest] PACKAGE_FILE

选项说明:

-K :等同于 --checksig ,进行检查并显示结果;

--nodigest:不检查包完整性;

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

 [ RPM数据库重建]

万一哪天发现rpm不能管理我们的程序包了,可以通过RPM数据库重建来尝试解决。

数据库目录:  /var/lib/rpm

重建数据库:

rpm--initdb:初始化

如果事先没有库,会新建一个;如果有,则不新建。

rpm--rebuilddb : 重建

直接重建,覆盖原有的数据库。

时间: 2024-08-08 13:46:41

浅谈RPM的相关文章

浅谈ELK日志分析平台

作者:珂珂链接:https://zhuanlan.zhihu.com/p/22104361来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 小编的话 "技术干货"系列文章意在分享技术牛人的知识干货,每期主题都不一样哟!期待各位读者在文后发表留言,来一场技术上的交流和思想上的碰撞! 2016年7月20日,本期品高云公开课由叶春草带来"可视化案发现场--浅谈ELK日志分析平台"的分享. 分享嘉宾 叶春草现就职于品高云软件技术支持工程师.就职

浅谈算法和数据结构: 十 平衡查找树之B树

转载自 http://www.cnblogs.com/yangecnu/p/3632027.html 浅谈算法和数据结构: 十 平衡查找树之B树 前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据.对其进行排序并允许以O(log n)的时间复杂度运行进行查找.顺序读取.插入和删除的数据结构.B树,概括来说是一个节点可以拥

流媒体网站开发技术浅谈

流媒体网站开发技术浅谈(2012-02) 2012-03-02    新闻来源:武汉广电网 张方东 (黄陂区广播影视局事业技术科) 摘 要:随着有线和无线网络宽带的高速发展,人们不再满足于因特网中仅有的文字.图片等简单信息,而越来越希望看到更直观.更丰富的影视节目,流媒体网站因此应运而生.本文从流媒体概念.流媒体格式.流媒体文件制作.流媒体文件传输.流媒体文件发布及流媒体网站部署等方面对开发流媒体网站作了详细阐述. 关键词:流媒体 网站开发 部署 技术 1.概述 在网络上传输多媒体有下载和流式传

浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点. 二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍. 一 定义 二叉查找树(B

.net中对象序列化技术浅谈

.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数 据.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.反之,反序列化根据流重新构造对象.此外还可以将对象序列化后保存到本地,再次运行的时候可以从本地文件 中“恢复”对象到序列化之前的状态.在.net中有提供了几种序列化的方式:二进制序列化

浅谈——页面静态化

现在互联网发展越来越迅速,对网站的性能要求越来越高,也就是如何应对高并发量.像12306需要应付上亿人同时来抢票,淘宝双十一--所以,如何提高网站的性能,是做网站都需要考虑的. 首先网站性能优化的方面有很多:1,使用缓存,最传统的一级二级缓存:2,将服务和数据库分开,使用不同的服务器,分工更加明确,效率更加高:3,分布式,提供多台服务器,利用反向代理服务器nginx进行反向代理,将请求分散开来:4,数据库的读写分离,不同的数据库,将读操作和写操作分开,并实时同步即可:5,分布式缓存,使用memc

单页应用SEO浅谈

单页应用SEO浅谈 前言 单页应用(Single Page Application)越来越受web开发者欢迎,单页应用的体验可以模拟原生应用,一次开发,多端兼容.单页应用并不是一个全新发明的技术,而是随着互联网的发展,满足用户体验的一种综合技术. SEO 一直以来,搜索引擎优化(SEO)是开发者容易忽略的部分.SEO是针对搜索(Google.百度.雅虎搜索等)在技术细节上的优化,例如语义.搜索关键词与内容相关性.收录量.搜索排名等.SEO也是同行.市场竞争常用的的营销手段.Google.百度的搜

浅谈html标签

浅谈html各常用标签用法 标题标签:<h1>-<h6>来表示,使标题字体变粗. <br />换行标记 <hr />水平分隔符 &nbsp空格符 &copy版权符 <a href>a标签超链接 href可接链接地址 <p>段落标签<blockquote>引用标签及可用做缩进 <table>表格中的<ul>无序列表<ol>有序列表<dl>自定义列表<row

浅谈二维中的树状数组与线段树

一般来说,树状数组可以实现的东西线段树均可胜任,实际应用中也是如此.但是在二维中,线段树的操作变得太过复杂,更新子矩阵时第一维的lazy标记更是麻烦到不行. 但是树状数组在某些询问中又无法胜任,如最值等不符合区间减法的询问.此时就需要根据线段树与树状数组的优缺点来选择了. 做一下基本操作的对比,如下图. 因为线段树为自上向下更新,从而可以使用lazy标记使得矩阵的更新变的高校起来,几个不足就是代码长,代码长和代码长. 对于将将矩阵内元素变为某个值,因为树状数组自下向上更新,且要满足区间加法等限制