制作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如下

Ruby代码   收藏代码
  1. Summary:example  
  2. Name:new  
  3. Version:0.1  
  4. Release:4  
  5. Group:Application/User  
  6. License:Share  
  7. Packager:dj  
  8. BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root  
  9. Prefix:%{_prefix}  
  10. %description  
  11. #rpmtest example  
  12. %define userpath /usr/local/test/  
  13. %changlog  
  14. *Oct 25 2010  
  15. -build for the first time.  
  16. %prep  
  17. cp -r /usr/src/redhat/test/ /usr/src/redhat/SOURCES/  
  18. %build  
  19. %install  
  20. rm -rf $RPM_BUILD_ROOT  
  21. mkdir -p $RPM_BUILD_ROOT%userpath  
  22. cp -r /usr/src/redhat/SOURCES/. $RPM_BUILD_ROOT%userpath  
  23. %clean  
  24. rm -rf $RPM_BUILD_ROOT  
  25. %files  
  26. %defattr(-,root,root)  
  27. %{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个版本的信息揉在一起

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值