免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11002 | 回复: 4
打印 上一主题 下一主题

使用RPM封装软件包 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-07 08:58 |只看该作者 |倒序浏览
当应用软件构建的服务开始庞大时,头疼的事接踵而至:如何管理应用软件本身的良莠不齐?如何保证已开发完毕的产品不会丢失?如何进行各类应用的部署和拆分?如何平顺的对公用组件更新和升级?如何管理因网络、操作系统、等环境因素不尽相同导致的如同蛛网般的复杂配置、如何在日常运作中对应用服务达到快速建立、恢复、回滚?如何对系统运作进行日志跟踪?在工作成员频繁变动、业务频繁拆分的情况下上述工作的难度会乘方级的增加,依赖和嵌套问题会让构建和维护人员不知所措,对维护人员的要求会不断提升,在运作成本本应最低的维护一环结果投入了不合情理的力量,当问题严重时更会拖累新业务和应用的开展和影响已有的服务质量和应用成果。

我们接触的最多的包管理器恐怕就是RPM软件包管理器了,大部分企业、公司、小团体都使用了RedHat Linux操作系统发行版,各大软硬件厂商的系统程序、驱动程序、软件系统、数据库软件几乎都会有RPM的软件包发行,数量庞大几乎占据了90%以上的能下载到的Linux软件,以至于其他Linux发行版不得不支持安装RPM软件的安装。对于需要大规模管理应用软件部署的情景来说,用一个软件包管理器统一管理操作系统上文件管理是理想且必须的。

在淘宝内部,大范围使用了RPM软件包作为软件的封装载体,下面我就对RPM的基本封装做一个简单的介绍:

1 前言
2 初次接触——预备知识、语汇、建立打包思路
3 分清层次——RPM软件包的组成与种类
3.1 建立RPM包的思维路线
3.2 BINARY RPMS – 已编译好的二进制程序包
3.3 SOURCE RPMS – 源码包RPM,含编译程序
4 准备入手——了解RPM打包环境与命令
4.1 操作系统环境与架构
4.2 RPM包打包环境目录结构
4.3 建立自己的打包工作目录与环境
4.4 rpm macros – 定义了rpm的环境变量
4.5 Shell变量 – 与系统变量的融合
4.6 macros配置文件
4.7 rpmbuild常用命令与说明
4.8 校验最后成果
4.9 留存源码信息
5 轻松上路——如何编写SPEC文件
5.1 编写二进制包的SPEC
5.2 编写源码包的SPEC
5.3 Scriptlet说明
5.4 升级时Scriptlet顺序
6 源于需求——常见问题与处理
6.1 版本号比较规则
6.2 生成架构无关包
6.3 crontab怎么处理
6.4 可使用Prefix的RPM (relocatable binary packages )
6.5 强制跳脱依赖
6.6 保留原有配置文件
6.7 参考资料,推荐阅读
前言

本文源自一次RPM宣讲,整理了一下RPM包封装的要点和思路,希望对正在进行或需要用RPM打包的同事有所帮助,欢迎转载

---技术保障 不平 2010-04-12

初次接触——预备知识、语汇、建立打包思路



RPM --- Redhat Package Manager
OS Architecture --- I386, x86_64, noarch, …
SPEC --- specified file
用户使用命令 --- rpm / yum
作者打包命令 --- rpmbuild
源码Source
二进制Binary
分清层次——RPM软件包的组成与种类

建立RPM包的思维路线

建什么样的包
准备周边软件
是否需要补丁
可重塑的软件
升级的准备
依赖关系
建立RPM
测试RPM
保留源代码信息
BINARY RPMS – 已编译好的二进制程序包

SOURCE RPMS – 源码包RPM,含编译程序

准备入手——了解RPM打包环境与命令

操作系统环境与架构

[luyan@opstest ~]$ $cat /etc/issue
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
Kernel \r on an \m
[luyan@opstest ~]$ uname -av
Linux opstest.corp.alimama.com 2.6.18-164.el5xen #1 SMP Tue Aug 18 15:59:52 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
RPM包打包环境目录结构

[luyan@opstest ~]$ tree /usr/src/redhat/
/usr/src/redhat/
|-- BUILD
|-- RPMS
|   |-- i386
|   |-- noarch
|   `-- x86_64
|-- SOURCES
|-- SPECS
`-- SRPMS
建立自己的打包工作目录与环境

mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
mkdir -p ~/rpmbuild/RPMS/{noarch,i386,x86_64}
echo "%_topdir %(echo \$HOME)/rpmbuild" > ~/.rpmmacros
rpm macros – 定义了rpm的环境变量

http://docs.fedoraproject.org/drafts/rpm-guide-en/ch09s07.html

Shell变量 – 与系统变量的融合

macros配置文件

配置文件         定义         说明
/usr/lib/rpm/macros         Official RPM macros         不要修改
/etc/rpm/macros         Per-system customizations         尽量避免使用
$HOME/.rpmmacros         Per-user customizations         建议定义
$rpm –showrc 显示最终的rc配置、macro定义和Shell变量
rpmbuild常用命令与说明

命令参数         用途
-ba         建立源码包和二进制包
-bb         建立二进制包
-bl         检测语法spec
校验最后成果

rpm -qlp your_binary_package.rpm
留存源码信息

建议在Description或URL中注明源代码地址,以便后续维护和修订

也可利用SRPM的形式封装源代码和Patch


轻松上路——如何编写SPEC文件

编写二进制包的SPEC

spec编写
Name: binary-test
Version: 0.0.1
Release: 1
Summary: RPM BINARY PACKAGE TEST
Vendor:Taobao
URL: http://twiki.corp.taobao.com/bin/view/SRE/OPS/RPM
Group: OPS
Packager: luyan
License: GPL
%description
This is a Template SPEC file to build binary RPM package
%prep
%pre
%post
chmod 777 %_appdir/binary-test/empty-dir
%preun
%postun
%files
# Main program dir bin
%_appdir/binary-test/bin
# Define An config file, when update the package, the old setting will keep last configuration
%config(noreplace) %_appdir/binary-test/conf/main.conf
# Define Ownership and mod to below files
%defattr(-,root,wheel,0755)
%dir %_appdir/binary-test/empty-dir
%attr(0755,ads,ads) %dir %_appdir/binary-test
%doc %_appdir/binary-test/README
%changelog
* Mon Apr 12 2010 BuPing <buping@taobao.com> 0.0.1-1
- wrote a binary-test template
用rpmbuild命令打包
$rpmbuild -bb binary_template.spec
[luyan@opstest ~]$ rpmbuild -bb binary_template.spec --target=noarch
Building target platforms: noarch
Building for target noarch
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.20466
+ umask 022
+ cd /home/luyan/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ exit 0
Processing files: binary-test-0.0.1-1
Provides: config(binary-test) = 0.0.1-1
Requires(interp): /bin/sh /bin/sh /bin/sh /bin/sh
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires(pre): /bin/sh
Requires(post): /bin/sh
Requires(preun): /bin/sh
Requires(postun): /bin/sh
Requires: /bin/bash config(binary-test) = 0.0.1-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files %{buildroot}
Wrote: /home/luyan/rpmbuild/RPMS/noarch/binary-test-0.0.1-1.noarch.rpm
编写源码包的SPEC

%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
)}

Summary:   Parallel SSH tools
Name:      pssh
Version:   1.4.3
Release:   1%{?dist}
License:   BSD
Url:       http://www.theether.org/pssh/
Group:     Applications/Productivity
Source0:   http://www.theether.org/pssh/pssh-%{version}.tar.gz
Requires:  openssh-clients
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: python-setuptools
%description
This package provides various parallel tools based on ssh and scp.
Parallell version includes:
o ssh : pssh
o scp : pscp
o nuke : pnuke
o rsync : prsync
o slurp : pslurp
%prep
%setup -q
%build
%{__python} setup.py build
%install
%{__rm} -rf %{buildroot}
%{__python} setup.py install -O1 --skip-build --root %{buildroot}
%clean
%{__rm} -rf %{buildroot}
%files
%defattr(-, root, root, -)
%doc AUTHORS BUGS ChangeLog COPYING TODO
%{_bindir}/pnuke
%{_bindir}/prsync
%{_bindir}/pscp
%{_bindir}/pslurp
%{_bindir}/pssh
%{python_sitelib}/%{name}-%{version}*
%{python_sitelib}/%{name}lib
%changelog
* Mon Jan  5 2009 Terje Rosten <terje.rosten@ntnu.no> - 1.4.3-1
- 1.4.3
* Sat Nov 29 2008 Ignacio Vazquez-Abrams <ivazqueznet+rpm@gmail.com> - 1.4.0-2
- Rebuild for Python 2.6
* Mon Aug 25 2008 Terje Rosten <terje.rosten@ntnu.no> - 1.4.0-1
- initial build
Scriptlet说明

标记         说明
%prep         在建包之前运行 适宜放置整理文件的脚本
%build         在配置编译时运行 放置./configure和make
%install         在编译完成后运行 放置make install
%pre         在安装包之前运行
%post         在安装包之后运行
%preun         在卸载包之前运行
%postun         在卸载包之后运行
升级时Scriptlet顺序

运行新包的 %pre
安装新文件
运行新包的 %post
运行旧包的 %preun
删除新文件未覆盖的所有旧文件
运行旧包的 %postun


源于需求——常见问题与处理

版本号比较规则

先比较 Epoch 再比较 Version 最后比较 Release

数字比字符串新

从nihui的blog摘取的一个比较的例子

1.00010 > 1.9,因为 10 > 9
2.02 = 2.2,因为 02 = 2
3.4.0 > 3.4,因为 3.4.0 多出一个列表分段
5mgc25 = 5.mgc.25,因为分隔后的列表两者相等
6.0 > 6beta,因为数字比字符串新

生成架构无关包

spec中注明 BuildArchitectures: noarch
rpmbuild时 --target=norarch
crontab怎么处理

将要执行的计划任务按照以下格式创建一个文件:

[gaosy@nlp1 cron.d]$ cat sysstat
# run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
#minute hour day month week user command
# generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A
将这个文件安装入/etc/cron.d/下

可使用Prefix的RPM (relocatable binary packages )


Prefix:/home/admin
%files
%{_prefix}/local/bin/hwconfig

不推荐,理由:底层库包很多都不能relocatable,yum不支持relocatable

强制跳脱依赖

AutoReqProv: no
保留原有配置文件

%config(noreplace)
参考资料,推荐阅读

需精读 http://docs.fedoraproject.org/en ... -creating-rpms.html

Redhat SRPMS库 学习构建S源码RPM的好地方 ftp://ftp.redhat.com/pub/redhat/ ... Server/en/os/SRPMS/

Les RPM de Remi 的源SEPC文件 http://rpms.famillecollet.com/SPEC/

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
2 [报告]
发表于 2011-07-07 09:14 |只看该作者
总结的不错,收藏先

论坛徽章:
0
3 [报告]
发表于 2011-07-07 12:22 |只看该作者
总结的不错 比较详细系统

论坛徽章:
1
天秤座
日期:2013-10-23 13:20:42
4 [报告]
发表于 2011-07-07 14:20 |只看该作者
我认为放到开发版更适合!

论坛徽章:
3
巨蟹座
日期:2013-08-29 09:59:30技术图书徽章
日期:2013-09-29 09:11:45CU十二周年纪念徽章
日期:2013-10-24 15:41:34
5 [报告]
发表于 2014-07-24 13:53 |只看该作者
最近也准备 做rpm封装软件包, 看来我是小看她了  还有很多东西要学啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP