实战RPM包制作

转载 2015年07月06日 23:15:25
  在开发中经常会用到一些rpm包,但是一直没有自己手动制作过。今天在制作的时候意外地还解决了自己以前一直困惑的问题,就是怎么制作rpm debuginfo包,类似CentOS官网那样的debuginfo包。原来在制作rpm时如果没有特殊设置就会在RPMS目录下同时生成rpm包及对应的debuginfo包。
  下面总结一下制作rpm包的流程以及遇到的一些问题的解决。
  1、配置工作路径
  在制作rpm包之前,首先要配置工作路径,也就是制作rpm包所在的目录,当前的工作路径可以通过rpmbuild命令查看,如下所示:

  工作路径是由_topdir变量指定的,默认情况下是当前用户目录下的rpmbuild目录。如果你在制作rpm包之前不知道需要设置工作路径的话,只是单纯地照搬网上的一些文章,在后面制作的时候很有可能会报找不到源码包等类似的错误。如果你不想在用户目录下的rpmbuild目录制作rpm包,可以在当前用户目录下的.rpmmacros文件(如果没有,则创建)中修改,格式为:
% _topdir 你的目录
我这里设置的是/usr/src/redhat,后面的制作过程都是在这个目录下进行。
  默认情况下会生成debuginfo包,如果不需要debuginfo包,在.rpmmacros文件中添加"%debug_package %{nil}"。
2、建立所需要的目录
mkdir -pv /usr/src/redhat/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
 目录说明:

3、编写spec文件

  spec文件是制作rpm包的关键,定义了rpmbuild命令生成时需要遵循的一些规则。下面的spec文件是以nginx为例来制作rpm包:

[plain] view plaincopy
  1. # 这个区域定义的Name、Version这些字段对应的值可以在后面  
  2. # 通过%{name},%{version}这样的方式来引用,类似于C语言中的宏  
  3.    
  4. # Name制定了软件的名称  
  5. Name:       nginx  
  6. # 软件版本  
  7. Version:    1.5.2   
  8. # 释出号,也就是第几次制作rpm  
  9. Release:    1%{?dist}  
  10. # 软件的介绍,必须设置,最好不要超过50个字符  
  11. Summary:    Nginx from WangYing  
  12.    
  13. # 软件的分组,可以通过/usr/share/doc/rpm-4.8.0/GROUPS文件中选择,也可以  
  14. # 在相应的分类下,自己创建一个新的类型,例如这里的Server  
  15. Group:      Application/Server  
  16. # 许可证类型  
  17. License:    GPL  
  18. # 软件的源站  
  19. URL:        http://nginx.org  
  20. # 制作rpm包的人员信息  
  21. Packager:   WangYing <justlinux2010@gmail.com>  
  22. # 源码包的名称,在%_topdir/SOURCE下,如果有多个源码包的话,可以通过  
  23. # Source1、Source2这样的字段来指定其他的源码包  
  24. Source0:    %{name}-%{version}.tar.gz  
  25. # BuildRoot指定了make install的测试安装目录,通过这个目录我们可以观察  
  26. # 生成了哪些文件,方便些files区域。如果在files区域中写的一些文件报  
  27. # 不存在的错误,可以查看%_topdir/BUILDROOT目录来检查有哪些文件。  
  28. BuildRoot:  %_topdir/BUILDROOT  
  29. # 指定安装的路径  
  30. Prefix:     /usr/local/nginx-1.5.2  
  31.    
  32. # 制作过程需要的工具或软件包  
  33. BuildRequires:  gcc,make  
  34. # 安装时依赖的软件包  
  35. Requires: pcre,pcre-devel,openssl  
  36.    
  37. # 软件的描述,这个可以尽情地写  
  38. %description  
  39. Nginx is a http server  
  40.    
  41. # %prep指定了在编译软件包之前的准备工作,这里的  
  42. # setup宏的作用是静默模式解压并切换到源码目录中,  
  43. # 当然你也可以使用tar命令来解压  
  44. %prep  
  45. %setup -q  
  46.    
  47. # 编译阶段,和直接编译源代码类似,具体的操作或指定的一些参数由configure文件决定。  
  48. %build  
  49. CFLAGS="-pipe -O2 -g -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror" ./configure --prefix=%{prefix}  
  50. # make后面的意思是:如果是多处理器,则并行编译  
  51. make %{?_smp_mflags}  
  52.    
  53. # 安装阶段  
  54. %install  
  55. # 先删除原来的测试安装的,只有在制作失败了%{buildroot}目录才会有内容,  
  56. # 如果成功的话,目录下会被清除。  
  57. # %{buildroot}指向的目录不是BuildRoot(%_topdir/BUILDROOT)指定的目录,  
  58. # 而是该目录下名称与生成的rpm包名称相同的子目录。例如我的是  
  59. # /usr/src/redhat/BUILDROOT/nginx-1.5.2-1.el6.x86_64  
  60. rm -rf %{buildroot}  
  61. # 指定安装目录,注意不是真实的安装目录,是在制作rpm包的时候指定的  
  62. # 安装目录,如果不指定的话,默认就会安装到configure命令中指定的prefix路径,  
  63. # 所以这里一定要指定DESTDIR  
  64. make install DESTDIR=%{buildroot}  
  65.    
  66. # 安装前执行的脚本,语法和shell脚本的语法相同  
  67. %pre  
  68.    
  69. # 安装后执行的脚本  
  70. %post  
  71.    
  72. # 卸载前执行的脚本,我这里的做的事情是在卸载前将nginx服务器停掉  
  73. %preun  
  74.     MSG=`ps aux | grep nginx | grep -v "grep"`  
  75.     if [ -z "$MSG" ];then  
  76.         killall nginx 1>/dev/null 2>/dev/null  
  77.     fi  
  78.    
  79. # 卸载完成后执行的脚本  
  80. %postun  
  81.     rm -rf %{prefix}  
  82.    
  83. # 清理阶段,在制作完成后删除安装的内容  
  84. %clean  
  85. rm -rf %{buildroot}  
  86.    
  87. #指定要包含的文件  
  88. %files  
  89. #设置默认权限,如果没有指定,则继承默认的权限  
  90. %defattr  (-,root,root,0755)  
  91. %{prefix}  
如果在制作的过程中报类似下面的错误,检查你的files区域,看要包含的文件是否存在。

[plain] view plaincopy
  1. + /usr/lib/rpm/check-buildroot  
  2. + /usr/lib/rpm/redhat/brp-compress  
  3. + /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip  
  4. + /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump  
  5. + /usr/lib/rpm/brp-python-bytecompile  
  6. + /usr/lib/rpm/redhat/brp-python-hardlink  
  7. + /usr/lib/rpm/redhat/brp-java-repack-jars  
  8. Processing files: nginx-1.5.2-1.el6.x86_64  
  9. error: File not found: /usr/src/redhat/BUILDROOT/nginx-1.5.2-1.el6.x86_64/usr/local/nginx  
  10.    
  11.    
  12. RPM build errors:  
  13.     File not found: /usr/src/redhat/BUILDROOT/nginx-1.5.2-1.el6.x86_64/usr/local/nginx  
[plain] view plaincopy
  1.   

来源:http://blog.csdn.net/justlinux2010/article/details/9905425

参考:http://www.ibm.com/developerworks/cn/linux/l-rpm/

简单 RPM 包制作

今天为了测试搭建自己的yum仓库并安装升级软件包,因此需要一个rpm包来做测试,所以就想到了自己来做一个最简单rpm,因为仅仅就是做一个测试所以没有添加需要编译的文件,而是只使用了一个shell文件来...
  • kongxx
  • kongxx
  • 2015年02月12日 13:21
  • 6266

centOS下制作RPM包

1.环境的准备: 安装环境时当前用户要有系统管理权限。但是在制作RPM包时请一定要用无系统管理权限的用户来进行操作。在开始一切的准备工作之前,请先保证您的工作环境下已经安装了gcc和make。关于这...
  • Lin_litao
  • Lin_litao
  • 2014年04月18日 11:58
  • 6692

rpm包如何制作-个人经验

原文链接:http://blog.chinaunix.net/uid-21123336-id-1830527.html 一 RPM介绍 RPM 前是Red Hat Pack...
  • bpingchang
  • bpingchang
  • 2013年09月02日 22:13
  • 17957

centos下rpm包的制作

RPM(Red Hat Package Manager)是用于 Linux 分发版(distribution)的最常见的软件包管理器。因为它允许分发已编译的软件,所以用户只用一个命令就可以安装软件。R...
  • trochiluses
  • trochiluses
  • 2013年09月09日 10:13
  • 4109

如何制作rpm包

以前写的一篇文档,文章重点在于讲清如何快速上手和会碰到的问题。并不是软件文档的中文翻译,要看大全或faq的见参考文献1. 概述以及难点这里的概述仅仅是我的理解。如果要获得准确全面的信息,建议阅读“参考...
  • redguardtoo
  • redguardtoo
  • 2006年11月08日 17:08
  • 13570

rpm包制作之——nginx

rpmbuild安装 # yum install -y rpmdevtools rpm-build 创建一个RPM构建根目录结构(默认将再当前用户主目录下),如果需要改变次默认位置,可以修...
  • tshangshi
  • tshangshi
  • 2016年12月13日 21:11
  • 1186

一步步制作RPM包

本文根据马哥教育视频http://mageedu.blog.51cto.com/4265610/919986 总结而来,如果想仔细学习请看该视频。 一.RPM制作步骤 我们在企业中有的软件...
  • u010154760
  • u010154760
  • 2015年07月06日 23:20
  • 665

ceph集群 Centos7下RPM包制作说明

Centos RPM包制作说明 准备打包环境 1、centos系统下使用如下命令安装rpmbuild #yum install rpmbuild 2、rpmbuild的工作目录如下, ~/r...
  • skdkjxy
  • skdkjxy
  • 2014年12月05日 20:26
  • 2007

源码包制作成rpm包

将源码包(tar包)制作成rpm 包 一、准备实验环境 实验环境 RHEL6 1.下载源码软件包:lsyncd-2.0.5.tar.gz 2.首先检查本地的编译环境和 rpm 包制作软件与...
  • u010749412
  • u010749412
  • 2014年04月05日 19:37
  • 2396

rpm包打包过程详解(二)——制作源代码安装包

制作源代码安装包(.tar.gz) 1.      解决依赖的软件: 系统环境:[红帽企业Linux.6.4.64位服务器版].rhel-server-6.4-x86_64 源码制作中使用到的软...
  • wutangkafei1990
  • wutangkafei1990
  • 2015年10月27日 15:52
  • 1351
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实战RPM包制作
举报原因:
原因补充:

(最多只允许输入30个字)