您好,欢迎来到吉趣旅游网。
搜索
您的当前位置:首页一步步制作RPM包

一步步制作RPM包

来源:吉趣旅游网
⼀步步制作RPM包

⼀步步制作RPM包

⼀.RPM制作步骤

我们在企业中有的软件基本都是编译的,我们每次安装都得编译,那怎么办呢?那就根据我们的需求制作RPM安装包吧。先来说说基本布骤:

1.Planning what you want 计划做什么rpm包。软件的?库的?2.Gathering the software to package 收集原材料,即收集源码包

3.Patch the software as need 如果需要打补丁,收集补丁⽂件。此布骤不是必须4.Outling any dependenies 确定依赖关系包

------------------ 上述动作可由我们⼿动编译⼀次软件来确定 -------------------5.Building RPMs 开始动⼿制作RPM包

5.1 Set up the directory stucture 设定好⽬录结构,我们在这些⽬录中制作我们的RPM包,我们需要下列⽬录BUILD 源代码解压后的存放⽬录

RPMS 制作完成后的RPM包存放⽬录,⾥⾯有与平台相关的⼦⽬录SOURCES 收集的源材料,补丁的存放位置SPECS SPEC⽂件存放⽬录SRMPS 存放SRMPS⽣成的⽬录

5.2 Place the Sources in the right directory 把源材料放到正确的位置

5.3 Create a spec file that tell rpmbuild command what to do 创建spec⽂件,这是纲领⽂件,rpmbuild命令根据spec⽂件来制作合适的rpm包

5.4 Build the source and binary RPMS 制作src或⼆进制rpm包6.Test RPMS 测试制作的PRM包7.Add signature for RPM 为RPM包签名⼆.RPM包制作实例

我还是⽤连贯的话为⼤家叙述⼀遍吧,我们⾸先确实我们要为什么做rpm包,通常我们是为⼀些软件,⽐如httpd,nginx等,然后去收集这些软件包的源代码,如果有需要的话也收集这些补丁⽂件,⼿动编译安装⼀下这个软件(当然如果是不需要编译的就不⽤演练了),确定依赖的软件包,并记录下来,下⾯开始准备制作tengine的PRM包吧:

1.建⽴⼀个普通⽤户,有普通⽤户来制作rpm,⽤root的可能会因为代码问题导致毁灭的后果1. useradd ibuler 2. su - ibuler

2.确定我们在哪个⽬录下制作RPM,通常这个⽬录我们topdir,这个需要在宏配置⽂件中指定,这个配置⽂件称为macrofiles,它们通常为/usr/lib/rpm/macros:/usr/lib/rpm/macros.*:~/.rpmmacros,这个在rhel 5.8中可以通过rpmbuild --showrc | grep macrofiles 查看,6.3的我使⽤这个找不到,但使⽤是⼀样的。你可以通过rpmbuild --showrc | grep topdir 查看你系统默认的⼯作车间 1. rpmbuild --showrc | grep topdir 2.

3. -14: _builddir %{_topdir}/BUILD

4. -14: _buildrootdir %{_topdir}/BUILDROOT 5. -14: _rpmdir %{_topdir}/RPMS

6. -14: _sourcedir %{_topdir}/SOURCES 7. -14: _specdir %{_topdir}/SPECS 8. -14: _srcrpmdir %{_topdir}/SRPMS

9. -14: _topdir %{getenv:HOME}/rpmbuild 我们还是⾃定义⼯作⽬录(或车间)吧

1. vi ~/.rpmmacros

2. %_topdir /home/ibuler/rpmbuild ##⽬录可以⾃定义 3.

4. mkdir ~/rpmbuild 3.在topdir下建⽴需要的⽬录

1. cd ~/rpmbuild

2. mkdir -pv {BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} 4.把收集的源码放到SOURCES下

1. cp /tmp/tengine-1.4.2.tar.gz SOURCES ##事先放好的5.在SPECS下建⽴重要的spec⽂件

1. cd SPECS

2. vi tengine.spec ##内容见后讲解,rhel6.3会⾃动⽣成模板 6.⽤rpmbuild命令制作rpm包,rpmbuild命令会根据spec⽂件来⽣成rpm包 1. rpmbuild

2. -ba 既⽣成src.rpm⼜⽣成⼆进制rpm 3. -bs 只⽣成src的rpm 4. -bb 只⽣⼆进制的rpm 5. -bp 执⾏到pre 6. -bc 执⾏到 build段 7. -bi 执⾏install段

8. -bl 检测有⽂件没包含

我们可以⼀步步试,先rpmbuild -bp ,再-bc 再-bi 如果没问题,rpmbuild -ba ⽣成src包与⼆进制包吧7.安装测试有没有问题,能否正常安装运⾏,能否正常升级,卸载有没有问题root⽤户测试安装:

1. cd /tmp

2. cp /home/ibuler/rpmbuild/RPMS/x86_/tengine-1.4.2-1.el6.x86_.rpm /tmp 3. rpm -ivh tengine-1.4.2-1.el6.x86_.rpm ##测试安装

4. rpm -e tengine ##测试卸载,如果版本号⽐原来的⾼,升级测试 8.如果没问题为rpm包签名吧,防⽌有⼈恶意更改 ##这个先不写了,有点晚了,以后补上到此整个流程完毕。下⾯来说说其中最最重要的spec的格式,先说最简单的,最容易实现的

1. vi tengine.spec 2.

3. ### 0.define section #⾃定义宏段,这个不是必须的

4. ### %define nginx_user nginx #这是我们⾃定义了⼀个宏,名字为nginx_user值为nginx,%{nginx_user}引⽤ 5.

6. ### 1.The introduction section #介绍区域段 7.

8. Name: tengine #名字为tar包的名字

9. Version: 1.4.2 #版本号,⼀定要与tar包的⼀致哦 10. Release: 1%{?dist} #释出号,也就是第⼏次制作rpm

11. Summary: tengine from TaoBao #软件包简介,最好不要超过50字符 12.

13. Group: System Environment/Daemons #组名,可以通过less /usr/share/doc/rpm-4.8.0/GROUPS 选择合适组 14. License: GPLv2 #许可,GPL还是BSD等 15. URL: http://laoguang.blog.51cto.com #可以写⼀个⽹址 16. Packager: Laoguang 17. Vendor: TaoBao.com

18. Source0: %{name}-%{version}.tar.gz

19. #定义⽤到的source,也就是你收集的,可以⽤宏来表⽰,也可以直接写名字,上⾯定义的内容都可以像上⾯那样引⽤ 20. #patch0: a.patch #如果需要补丁,依次写 21. BuildRoot: %_topdir/BUILDROOT

22. #这个是软件make install 的测试安装⽬录,也就是测试中的根,我们不⽤默认的,我们⾃定义,23. #我们可以来观察⽣成了哪此⽂件,⽅便写file区域

24. BuildRequires: gcc,make #制作过程中⽤到的软件包

25. Requires: pcre,pcre-devel,openssl,chkconfig #软件运⾏需要的软件包,也可以指定最低版本如 bash >= 1.1.1 26. %description #软件包描述,尽情的写吧

27. It is a Nginx from Taobao. #描述内容 28.

29. ### 2.The Prep section 准备阶段,主要⽬的解压source并cd进去 30.

31. %prep #这个宏开始

32. %setup -q #这个宏的作⽤静默模式解压并cd 33. #%patch0 -p1 #如果需要在这打补丁,依次写 34.

35. ### 3.The Build Section 编译制作阶段,主要⽬的就是编译 36. %build

37. ./configure \\ #./configure 也可以⽤%configure来替换 38. --prefix=/usr \\ #下⾯的我想⼤家都很熟悉 39. --sbin-path=/usr/sbin/nginx \\

40. --conf-path=/etc/nginx/nginx.conf \\

41. --error-log-path=/var/log/nginx/error.log \\ 42. --http-log-path=/var/log/nginx/access.log \\ 43. --pid-path=/var/run/nginx/nginx.pid \\ 44. --lock-path=/var/lock/nginx.lock \\ 45. --user=nginx \\ 46. --group=nginx \\

47. --with-http_ssl_module \\ 48. --with-http_flv_module \\

49. --with-http_stub_status_module \\ 50. --with-http_gzip_static_module \\

51. --http-client-body-temp-path=/var/tmp/nginx/client/ \\ 52. --http-proxy-temp-path=/var/tmp/nginx/proxy/ \\ 53. --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \\ . --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \\ 55. --http-scgi-temp-path=/var/tmp/nginx/scgi \\ 56. --with-pcre

57. make %{?_smp_mflags} #make后⾯的意思是:如果就多处理器的话make时并⾏编译 58.

59. ### 4.Install section 安装阶段 60. %install

61. rm -rf %{buildroot} #先删除原来的安装的,如果你不是第⼀次安装的话 62. make install DESTDIR=%{buildroot}

63. #DESTDIR指定安装的⽬录,⽽不是真实的安装⽬录,%{buildroot}你应该知道是指的什么了 .

65. ### 4.1 scripts section #没必要可以不写 66. %pre #rpm安装前制⾏的脚本

67. if [ $1 == 1 ];then #$1==1 代表的是第⼀次安装,2代表是升级,0代表是卸载 68. /usr/sbin/useradd -r nginx 2> /dev/null ##其实这个脚本写的不完整69. fi

70. %post #安装后执⾏的脚本 71.

72. %preun #卸载前执⾏的脚本 73. if [ $1 == 0 ];then

74. /usr/sbin/userdel -r nginx 2> /dev/null 75. fi

76. %postun #卸载后执⾏的脚本 77.

78. ### 5.clean section 清理段,删除buildroot 79.

80. %clean

81. rm -rf %{buildroot} 82.

83. ### 6.file section 要包含的⽂件 84. %files

85. %defattr (-,root,root,0755) #设定默认权限,如果下⾯没有指定权限,则继承默认 86. /etc/ #下⾯的内容要根据你在%{rootbuild}下⽣成的来写 87. /usr/ 88. /var/ .

90. ### 7.chagelog section 改变⽇志段 91. %changelog

92. * Fri Dec 29 2012 laoguang - 1.0.14-1 93. - Initial version

到此⼀个简单的tengine RPM包制作好了。三.RPM包制作拓展

下⾯我们来拓展⼀下,⽐如:我们想为tengine增加控制脚本,可以通过start|stop控制,我们还想更换⼀下默认的⾸页index.html,默认的fastcgi_params是不能直接连接php的,所以我们替换为新的配置⽂件,我们也可以⽤设置好的nginx.conf替换原来的nginx.conf。基于上述步骤下⾯继续

1.把修改后的⾸页⽂件index.html,控制脚本init.nginx,fastCGI配置⽂件fastcgi_params,Nginx配置⽂件nginx.conf 放到SOURCES中 。 1. [ibuler@ng1 rpmbuild]$ ls SOURCES/

2. fastcgi_params index.html init.nginx nginx.conf tengine-1.4.2.tar.gz 2 编辑tengine.spec,修改

2.1 介绍区域的SOURCE0下增加如下1. Source0: %{name}-%{version}.tar.gz 2. Source1: index.html 3. Source2: init.nginx

4. Source3: fastcgi_params 5. Source4: nginx.conf 2.2 安装区域增加如下

1. make install DESTDIR=%{buildroot}

2. %{__install} -p -D %{SOURCE1} %{buildroot}/usr/html/index.html #%{__install}这个宏代表install命令3. %{__install} -p -D -m 0755 %{SOURCE2} %{buildroot}/etc/rc.d/init.d/nginx 4. %{__install} -p -D %{SOURCE3} %{buildroot}/etc/nginx/fastcgi_params 5. %{__install} -p -D %{SOURCE4} %{buildroot}/etc/nginx/nginx.conf 2.3 脚本区域增加如下

1. %post

2. if [ $1 == 1 ];then

3. /sbin/chkconfig --add nginx 4. fi

2.4 %file区域增加如下

1. %files

2. %defattr (-,root,root,0755) 3. /etc/ 4. /usr/ 5. /var/

6. %config(noreplace) /etc/nginx/nginx.conf #%config表明这是个配置⽂件noplace表明不能替换7. %config(noreplace) /etc/nginx/fastcgi_params 8. %doc /usr/html/index.html #%doc表明这个是⽂档

9. %attr(0755,root,root) /etc/rc.d/init.d/nginx #%attr后⾯的是权限,属主,属组3. ⽣成rpm⽂件测试

1. rpmbuild -ba tengine.spec 4. 安装测试

到此RPM包制作完毕,你可以根据你的需求制作RPM包吧。四.RPM包签名

1.⽣成GPG签名密钥,我⽤的是root⽤户

1. gpg --gen-key 2.

3. Your selection?1 ##默认即可

4. What keysize do you want? (2048) 1024 ##密钥长度5. Key is valid for? (0) 1y ##有效期6. Is this correct? (y/N) y ##确认

7. Real name: LaoGuang ##密钥名称8. Email address: ibuler@qq.com ##邮件9. Comment: GPG-RPM-KEY ##备注

10. Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

11. Enter passphrase OK ##使⽤空密码,也可以输⼊ 12. 13.

有时可能因为随机数不够导致卡在那⾥,这时候你就yum 安装⼏个包组,马上就够了。2.查看成⽣的密钥

1. [root@ng1 dev]# gpg --list-keys 2. /root/.gnupg/pubring.gpg 3. ------------------------

4. pub 1024R/49C99488 2012-11-28 [expires: 2013-11-28] 5. uid LaoGuang (GPG-RPM-KEY) 6. sub 1024R/69BA199D 2012-11-28 [expires: 2013-11-28] 3.导出公钥以供⼤家使⽤验证

1. gpg --export -a \"LaoGuang\" > RPM-GPG-KEY-LaoGuang

4.编缉 .rpmmacros说明我们⽤哪⼀个密钥加密,我们⽤root加密的那就在/root下编辑1. vi ~/.rpmmacros

2. %_gpg_name LaoGuang 5.为rpm包加签名

1. rpm --addsign tengine-1.4.2-1.el6.x86_.rpm 2. Enter pass phrase: ##输⼊密钥3. Pass phrase is good.

4. tengine-1.4.2-1.el6.x86_.rpm: 到此签名添加成功,下⾯来验证6.讲刚才导出的公钥导⼊rpm中

1. rpm --import RPM-GPG-KEY-LaoGuang 7.验证

1. rpm --checksig tengine-1.4.2-1.el6.x86_.rpm 2.

3. tengine-1.4.2-1.el6.x86_.rpm: rsa sha1 (md5) pgp md5 OK 到此整个过程完毕,你也试试吧

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- jqkq.cn 版权所有 赣ICP备2024042794号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务