制作RPM包

 

      制作RPM包最关键的就是要写SPEC文件。安装一个程序就是写一些配置项,然后把源码或者二进制码放入安装目录下。如果是用GCC的程序,RPM确实很方便,./config, make ,make install, clean全部都在这个spec文件里配置。编译,安装一次完成。可以保留其源码,也可以不保留。关于spec文件的书写网络资料铺天盖地,就不详细介绍了。推荐一篇不错的

http://hlee.iteye.com/blog/343499

      我的需求目前仅仅是把编译好的java class 文件从一个地方拷贝到指定的地方,这就代表安装了。正在研究以后是否可以把ant也集成进来,原则上是可以的。下面介绍下我做包的过程吧。

 

1 下载rpm-build包

    

      这个包是用来制作包的,它本身就是个rpm包,linux下很多软件都是rpm包的形式来安装的。如果用rpm -ivh ***.rpm安装,发现装不上,因为它要依赖很多其他的包。所以需要还是用yum安装吧。可以自动去找那些dependency来安装。

 

2 写spec文件

     spec文件里有软件的版本,build,厂商拉。。。一堆属性信息。把头填好了,就写SPEC脚本了,就是一堆%pre, %build等等。以%开头的地方。我的spec如下

Summary:example
Name:new
Version:0.1
Release:4
Group:Application/User
License:Share
Packager:dj
BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root
Prefix:%{_prefix}
%description
#rpmtest example
%define userpath /usr/local/test/
%changlog
*Oct 25 2010
-build for the first time.
%prep
cp -r /usr/src/redhat/test/ /usr/src/redhat/SOURCES/
%build
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%userpath
cp -r /usr/src/redhat/SOURCES/. $RPM_BUILD_ROOT%userpath
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
%{userpath}

 

   

解释几个容易迷惑的地方

1) BuildRoot

 

这是个临时的目录,制作安装包的时候用来测试的,定义好以后,后面的RPM_BUILD_ROOT 就指这个目录。执行install的时候了(当然由你自己把安装的动作放到这里的),会把文件安装到这个目录下面。所以在clean的时候了,又把下面的东西给删除了。如果没有它,那制作安装包的过程会把文件安装的真实环境里。

 

2) %files
这个文件列表起一个check的作用,表示我要装这些文件,看看rpm包你到底有没有安装。所以有时候会出现 installed (but unpackaged) file(s) found 的错误。表示你的files列表不对。

 

3) 执行安装的时候文件安装到哪里去了?

安装以后可以通过命令 rpm -ql  name 来查询这个包安装的路径。真是的路径就是RPM_BUILD_ROOT后面的%userpath

 

3 执行rpmbuild建包

做好包以后使用命令

rpmbuild -bb new.spec

根据spec脚本,执行建包过程。这个命令是构建二进制包,如果还需要保留源码那就是要用选项 -ba了。建好的rpm包放在这个目录下 Wrote: /usr/src/redhat/RPMS/x86_64/new-0.1-4.x86_64.rpm。如果有源码包的话在目录/usr/src/redhat/SRPMS下面。SRPM包是什么了?有时候你的包在你的环境下build出来的,换到其他地方可能一些环境变了,这时候需要重新在那个环境下rebuild。所以就徐哟啊这个SRPM了。

 

4 安装

rpm -ivh /usr/src/redhat/RPMS

这个时候包就会安装在路径userpath /usr/local/test/ 里边。

注意了不是路径RPM_BUILD_ROOT,那个只是制作安装包时用来测试的。如果想指定个路径,那就要使用{_Prefix}这个脚本了。SPEC里边加了这样,就可以使用命令

rpm -ivh --prefix path /usr/src/redhat/RPMS

安装到path路径下面。

 

5 查询

rpm有一列的查询命令

rpm -ql  查询安装路径信息

rpm -qi  软件信息,就是自己写的那一堆头

rpm -qf  这个是反查询的,根据路径,需要查询它是数据哪个包的

 

有个地方需要注意的是,查询以及卸载最好使用 rpm -ql name-version-build

如果用全名的话会查不到,或者卸不掉

如果只用name的话可能会查出N个版本的信息揉在一起

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值