rpm包制作总结

什么是rpm包,是redhat 提供的一种包安装方法,将一些预编译好的包,按照到目标平台上
缺点是,不能自动解析依赖关系,已经编译好,不能再次编译

src.rpm中放置的是源代码,可以根据目标平台,编译出适合该平台的rpm包

src.rpm包如何解压?
rpm -i src.rpm  解压完毕后,src中的代码会出现在  /root/rpmbuild/**目录下面 解压的文件中包含了一个.spec的文件

如何将自己的源文件打包成一个rpm包:

已准备源文件

配置spec文件

rpmbuild -ba mypackage.spec 

-ba  binary + src
-bb 支撑生binary

-bs 只生成src



rpm包文件如何查看?
rpm2cpio rpm |cpio -id 将rpm包生成目标文件

rpm使用总结:

rpm -qpl 可以查看rpm包的一些信息,包括,依赖 版本 。。。。


rpm -qa 查找所有的软件包

rpm -qa|grep ^a 查找已a开头的软件包

rpm -qi 查看此软件包是否安装,已经一些信息

------------------------------------------------------------------------------

[root@cloud-controller rpm]# rpm -qa |grep nova
openstack-nova-scheduler-2013.2.1-1.el6.noarch
openstack-nova-conductor-2013.2.1-1.el6.noarch
openstack-nova-cert-2013.2.1-1.el6.noarch
python-nova-2013.2.1-1.el6.noarch
openstack-nova-compute-2013.2.1-1.el6.noarch
openstack-nova-novncproxy-2013.2.1-1.el6.noarch
openstack-nova-2013.2.1-1.el6.noarch
openstack-nova-common-2013.2.1-1.el6.noarch
openstack-nova-objectstore-2013.2.1-1.el6.noarch
openstack-nova-network-2013.2.1-1.el6.noarch
openstack-nova-api-2013.2.1-1.el6.noarch
openstack-nova-console-2013.2.1-1.el6.noarch
python-novaclient-2.15.0-1.el6.noarch
openstack-nova-cells-2013.2.1-1.el6.noarch
[root@cloud-controller rpm]# rpm -qi openstack-nova-compute
Name        : openstack-nova-compute       Relocations: (not relocatable)
Version     : 2013.2.1                          Vendor: Fedora Project
Release     : 1.el6                         Build Date: Tue 17 Dec 2013 05:44:44 PM CST
Install Date: Thu 16 Oct 2014 10:09:38 AM CST      Build Host: buildvm-21.phx2.fedoraproject.org
Group       : Applications/System           Source RPM: openstack-nova-2013.2.1-1.el6.src.rpm
Size        : 11753                            License: ASL 2.0
Signature   : RSA/SHA1, Wed 18 Dec 2013 11:59:27 PM CST, Key ID fa167b7c2bc7c801
Packager    : Fedora Project
URL         : http://openstack.org/projects/compute/
Summary     : OpenStack Nova Virtual Machine control service
Description :
OpenStack Compute (codename Nova) is open source software designed to
provision and manage large networks of virtual machines, creating a
redundant and scalable cloud computing platform. It gives you the
software, control panels, and APIs required to orchestrate a cloud,
including running instances, managing networks, and controlling access
through users and projects. OpenStack Compute strives to be both
hardware and hypervisor agnostic, currently supporting a variety of
standard hardware configurations and seven major hypervisors.
This package contains the Nova service for controlling Virtual Machines.

-------------------------------------------------------------------------------------------------------

rpm -qc qpidd-cpp-server 查找httpd这个服务所涉及到的文件
--------------------------------------------------------
[root@cloud-controller lsb]# rpm -qc qpid-cpp-server
/etc/qpid/qpidd.acl
/etc/qpidd.conf
/etc/sasl2/qpidd.conf
/var/lib/qpidd/qpidd.sasldb
[root@cloud-controller lsb]# rpm -qc qpid-cpp-client
/etc/qpid/qpidc.conf
-------------------------------------------------------

rpm -qf /etc/crontab 查找/etc/ctrontab这个文件属于哪个软件


rpm -Va 查找哪些程序的配置文件被修改过
rpm -Vp 查找某个软件中,被修改过的档案
rpm -Vf 查看此文件是否被修改过



spec文件详解:http://rikers.org/rpmbook/node66.html


%setup宏

放置在%prep宏之后,将source文件中的压缩文件解压,然后

Source: cdplayer-1.0.tgz

 

%setup  

这种情况是最简单的情况,默认做一下动作

cd /usr/src/redhat/BUILD

rm -rf cdplayer-1.0

gzip -dc /usr/src/redhat/SOURCES/cdplayer-1.0.tgz | tar -xvvf -

if [ $? -ne 0 ]; then

  exit $?

fi

cd cdplayer-1.0

cd /usr/src/redhat/BUILD/cdplayer-1.0   这两个意义一样,用于确认目录创建成功

chown -R root.root .

chmod -R a+rX,g-w,o-w .

 

将源文件中的压缩文件解压到build目录下,然后进入该目录

 

 

%setup -n cd-player

cd /usr/src/redhat/BUILD
rm -rf cd-player
gzip -dc /usr/src/redhat/SOURCES/cdplayer-1.0.tgz | tar -xvvf -
if [ $? -ne 0 ]; then
  exit $?
fi
cd cd-player
cd /usr/src/redhat/BUILD/cd-player
chown -R root.root .
chmod -R a+rX,g-w,o-w .

 

把第一脚本中的变量都变成了cd-player

这种方式要确保cdplayer-1.0.tgz解压后的名字如果是cd-player,否则脚本是无法执行的

 

 

buildroot  %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}

 





关于RPM的%config和(noreplace)

这篇文章翻译自这里, 是一篇关于制作RPM包中的一个比较难于理解的地方。 不做开发的同学就不要看了。

RPM spec文件有个名为 %config 的宏,它可以标识配置文件, 
这样在升级时用户对配置文件做过的修改就不会丢失。 没有它,用户千辛万苦修改过的配置文件会在升级过程中被覆盖。

%config也可以写成%config(noreplace),不过网上关于它的说明却屈指可数。 下面是关于这两者的一些实验,都是在RedHat 9的RPM(rpm-4.2-0.69)上进行的, 其他版本有可能不同。

RPM中的文件的制约条件有三个:1. 该文件在spec中如何标识(默认,%config或者%config(noreplace)); 
2. 在rpm升级包中该文件是否被更新;3. 该文件是否被用户编辑过。

下表就是各个条件的组合结果。

文件标识在RPM升级包中是否更新了?旧版本文件未被用户编辑过旧版本文件被用户编辑过
默认No用新文件覆盖用新文件覆盖
~Yes用新文件覆盖用新文件覆盖
%configNo用新文件覆盖保持旧文件
~Yes用新文件覆盖旧文件改名为.rpmsave并复制新文件
%config(noreplace)No用新文件覆盖保持旧文件
~Yes用新文件覆盖保持旧文件,新文件安装为.rpmnew

其中(noreplace)有效的两种情况上存在以下的问题:当spec文件中的定义改变时会发生什么?结论如下:

文件标识在RPM升级包中是否更新了?旧版本文件被用户编辑过
由%config(noreplace)改为%configYes旧文件改名为.rpmsave并安装新文件
由%config改为%config(noreplace)Yes保持旧文件,新文件安装为.rpmnew

结论:非配置文件或是上次安装后没有被修改的文件会被RPM包内的新文件覆盖。 如果配置文件被修改过,但在新的RPM包中未作更新,则修改过的文件保留。 仅当配置文件被修改并且在新的RPM包中被更新时,具体动作取决于(noreplace)。 %config使得旧文件被改名为.rpmsave并安装新文件,而%config(noreplace)将保持旧文件 并将新文件安装为.rpmnew。

建议一般配置文件都标识为(noreplace),除非升级所带来的配置文件变动非常重要, 使用上一版本的配置文件无法正常工作时才使用%config。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值