忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
楼主: duanjigang

Linux平台软件管理系统设计与规划-进阶篇(2)-rpm生成:rpmbuild 和 spec文件剖析 [复制链接]

论坛徽章:
0
发表于 2012-12-22 22:40 |显示全部楼层
到此为止,第二篇告一段落,想起来什么再补上吧,阅读的朋友有什么意见和发现的问题欢迎与我交流。以下是参考的所有文章:

论坛徽章:
0
发表于 2012-12-23 10:24 |显示全部楼层
好文档啊,果断收藏了

论坛徽章:
0
发表于 2012-12-24 21:51 |显示全部楼层
本帖最后由 duanjigang 于 2012-12-24 21:52 编辑



附上一个nginx的spec 文件,感兴趣的朋友可以分析下:
nginx.zip (2.38 KB, 下载次数: 6)

论坛徽章:
0
发表于 2012-12-24 23:32 |显示全部楼层
我最近也在研究rpmbuild,max-rpm已经快看完了。从哪里能下载到一些(>10个)的source rpm,然后学习下他们的spec脚本?

另外,我在一些spec中看到这样的写法,不知道其作用:

%post -p /sbin/ldconfig

'-p'在这里是什么意思呢?

论坛徽章:
0
发表于 2012-12-25 05:03 |显示全部楼层
回复 34# libinbluewolf

spec 中默认对 hook 段的代码采用 /bin/sh 去解释,用户可以自己修改解释器,通过 %hook -p path 的方式来指定。
常见到的好多lib中

  1. %post  -p /sbin/ldconfig
  2. %postun -p /sbin/ldconfig
复制代码
的方式就是在安装/升级/卸载后显示调用/sbin/ldconfig 来更新链接库信息,比如你也可以写成这样子

  1. %post -p /bin/date
  2. %postun -p /usr/bin/uptime
复制代码
这些都容易理解,但是有一个现象比较奇怪,我还没弄清楚。
%post %postun 或者 %preun
在一起出现两个或者以上时 -p path 执行的就没问题,
但是单个出现时,比如:

  1. %post  -p /bin/date

  2. #%preun  -p /usr/bin/uptime

  3. %verifyscript
  4. echo "verify by duanjigang now"
复制代码
这样的方式,安装时,它就会把操作标志位通过第一个参数的方式传递给解释器,从而导致报错,比如 install 时参数是1,update 是2
我上面的写法在安装时会报错:

  1. sudo rpm -ivh RPMS/i386/test-baby-1.1-1.i386.rpm
  2. Preparing...                ########################################### [100%]
  3.    1:test-baby              ########################################### [100%]
  4. /bin/date: 额外的操作数 “1”
  5. 请尝试执行“/bin/date --help”来获取更多信息。
  6. error: %post(test-baby-1.1-1.i386) scriptlet failed, exit status 1
复制代码
这个可以理解,是因为执行了 "/bin/date 1"命令。 但是不清楚为什么%post 单独出现时就会传递operation参数1/2给它,而最少两个hook出现时就不会传递参数给它。。
有知道这个现象的朋友帮解释下,谢谢!



   

论坛徽章:
0
发表于 2012-12-25 17:10 |显示全部楼层
所以
  1. %post -p /sbin/ldconfig
复制代码
完全等同于
  1. %post
  2. /sbin/ldconfig
复制代码
喽?

你说的现象难道是把这行
  1. #%preun  -p /usr/bin/uptime
复制代码
uncomment的话,就不会传递operation参数(1/2)给%post/%postun了吗? 我试了一下,并没有你所说的现象……

论坛徽章:
0
发表于 2012-12-25 17:14 |显示全部楼层
本帖最后由 libinbluewolf 于 2012-12-26 21:21 编辑

我还有其他的一些疑问,发到这里讨论一下:

  1. - What is `%{with xxx}`

  2.         %if %{with openssl}
  3.         BuildRequires:  openssl-devel
  4.         %endif

  5.         `%{with xxx}` is shorthand for `%{defined with_xxx}`.

  6. - What is `0%{?xxx:1}`

  7.         %if 0%{?_with_stunnel:1}
  8.         # used by the testsuite
  9.         BuildRequires:  stunnel
  10.         %endif

  11.         `{?_with_stunnel:1}`是一个Macro,如果定义了`_with_stunnel` tag,则这个Macro被扩展成`1`,否则就是nothing。`%if 0%{?with_stunnel:1}等同于`%if %{with stuneel}`.
  12.         还有另外一种相反的语法`%{!?SOME:1}`,如果没定义`SOME` tag,则该Macro被扩展为`1`,否则就是nothing。
  13.         因此,下面这句就完成了常用的一种逻辑:使用变量CUSTOM_RELEASE的值,如果没定义,则使用1
  14.         %define rel     %{?CUSTOM_RELEASE} %{!?CUSTOM_RELEASE:1}

  15. - What is `Obsoletes`

  16.         # bug437293
  17.         %ifarch ppc64
  18.         Obsoletes:      curl-64bit
  19.         %endif

  20.         声明这个rpm package安装后,`curl-64bit`这个package就可以废弃了。Refer to http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch-dependencies.html#RPM_Guide-Dependencies-obsoletes

  21. - What is `%defattr(-,root,root)` in %files list

  22.         What's the difference with `attr` directive?

  23.         Ans. `%defattr` is default attribution. 格式是`%defattr(file_mode, owner, group, dir_mod)`. Refer to http://www.rpm.org/max-rpm-snapshot/s1-rpm-inside-files-list-directives.html

  24. - What is `Requires(pre)`

  25.         Requires(pre): /usr/sbin/useradd
  26.         Requires(post): chkconfig

  27.         我实验的结果是括号中的内容被rpmbuild/rpm忽略,可能只是为了可读性.

  28. - What is `Prereq` and `BuildPrereq`

  29.         # In httpd.spec
  30.         BuildPrereq: apr-devel, apr-util-devel, openldap-devel, db4-devel, expat-devel, findutils, perl, pkgconfig, pcre-devel >= 5.0
  31.         BuildPrereq: /usr/bin/apr-1-config, /usr/bin/apu-1-config
  32.         Requires: apr >= 1.4.2, apr-util >= 1.3.10, pcre >= 5.0, gawk, /usr/bin/find, openldap
  33.         Prereq: /sbin/chkconfig, /bin/mktemp, /bin/rm, /bin/mv
  34.         Prereq: sh-utils, textutils, /usr/sbin/useradd


复制代码

论坛徽章:
0
发表于 2012-12-25 21:55 |显示全部楼层
你说的第一点正是我要表达的。
第二个现象我再检查下我的spec文件。

回复 36# libinbluewolf


   

论坛徽章:
0
发表于 2013-03-22 12:35 |显示全部楼层
谢谢分享!!!!:wink:

论坛徽章:
9
CU大牛徽章
日期:2013-04-17 11:10:17CU大牛徽章
日期:2013-04-17 11:09:57CU大牛徽章
日期:2013-04-17 11:09:40CU大牛徽章
日期:2013-04-17 11:09:10CU大牛徽章
日期:2013-04-17 11:08:52CU大牛徽章
日期:2013-04-17 11:06:23CU大牛徽章
日期:2013-05-20 10:43:41CU大牛徽章
日期:2013-05-20 10:44:06CU大牛徽章
日期:2013-05-20 10:44:16
发表于 2013-03-28 16:18 |显示全部楼层
先mark再看。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

SACC2017购票7.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月2日前

活动链接>>
  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP