本文以 ZooKeeper 为例详细介绍了一种通用的从源码到 RPM 包的详细制作过程。
简介
在使用 Ambari 安装或集成大数据组件时, CentOS 系统下,需要将组件格式制作成 rpm 格式,这里总结一种通用简便的从大数据组件源码制作 rpm 格式文件的方法:将源码编译成tar
包,然后再将tar
包打成 rpm
包。
这里以HDP版本的 ZooKeeper 为例介绍这种方法,其实 ZooKeeper 是可以直接从源码制作成rpm包的,这里为了介绍通用的做法,采用先将 ZooKeeper 的源码编译成 tar.gz
包,然后再制作成 rpm
的方式。
源码编译
下载源码
Release HDP-2.6.4.91-3-tag: Modify HDP-CHANGES.txt to include ZOOKEEPER-2146 · hortonworks/zookeeper-release
https://github.com/hortonworks/zookeeper-release/releases/tag/HDP-2.6.4.91-3-tag
解压
1 | tar -zxvf zookeeper-release-HDP-2.6.4.91-3-tag.tar.gz |
制作 tar 包
1 | yum install ant -y |
ant 打包
1 | cd zookeeper-release-HDP-2.6.5.148-3-tag/ |
查看 tar 包
打包后的tar.gz位于zookeeper下的build目录
准备环境
所用命名未特殊说明的情况下均为使用root用户执行
安装 rpm-build 包
1 | yum install rpm-build |
安装 rpmdevtools
1 | yum install rpmdevtools |
创建工作空间
1 | rpmdev-setuptree |
制作 rpm 包
编辑 spec 文件
制作 rpm 包需要用到一个 spec
格式的文件,这里使用zookeeper.spec
文件的内容为:
1 | Name: zookeeper |
放置文件
将zookeeper.spec
文件放到/root/rpmbuild/SPECS
文件夹中,将编译好的zookeeper-3.4.6.tar.gz
放在/root/rpmbuild/SOURCES
文件夹中
执行打 rpm 包命令
1 | cd /root/rpmbuild/SPECS |
查看 rpm 包
打包好的rpm包在/root/rpmbuild/RPMS
文件夹中
安装测试
现在将制作出来的 rpm 包安装测试。
安装
1 | rpm -Uvh zookeeper-3.4.6-0.noarch.rpm |
启动
1 | cd /opt/zookeeper/bin/ |
查看状态
至此,说明制作的 rpm 包是可用的。
spec 文件解析
这个方法的关键在于先后步骤及 spec 文件,现在来看下 spec 文件的几点注意事项
Version中不能出现“-”等字符
Source0需要与SOURCES中的文件名一致
创建打包过程中文件存放位置,解压并复制文件
复制zookeeper配置文件,也可不在此设置,启动之前手动配置
创建软连接
注意事项
实际上使用”下载源码”中的链接下载的源码包在编译成 tar 包的过程中是会报错的,为了不打乱步骤介绍,特在这里说明。
在执行
1 | rpmbuild -ba zookeeper.spec |
后,会出现如下错误:
可以看出是源码中的加注释时格式出错了,解决办法为修改源码后重新打包
1 | cd /root/rpmbuild/SOURCES |
修改文件/root/rpmbuild/SOURCES/zookeeper-3.4.6/contrib/zkpython/src/python/zk.py
和/root/rpmbuild/SOURCES/zookeeper-3.4.6/src/contrib/zkpython/src/python/zk.py
两个文件,
将两个zk.py文件中去掉如下图红框中的一行代码
重新打成 tar 包
1 | cd /root/rpmbuild/SOURCES/ |
这时重新打包rpm
首先清空BUILD、BUILDROOT、RPMS、SRPMS文件夹,重新执行:
1 | cd /root/rpmbuild/SPECS |
参考资料
RPM打包原理、示例、详解及备查 - 刘康的专栏 - CSDN博客
https://blog.csdn.net/get_set/article/details/53453320[ZOOKEEPER-2777] There is a typo in zk.py which prevents from using/compiling it. - ASF JIRA
https://issues.apache.org/jira/browse/ZOOKEEPER-2777CentOS7环境下zookeeper-release-HDP-2.6.5.148-3-tag编译打RPM包 - 汤昕的博客 - CSDN博客
https://blog.csdn.net/Happy_Sunshine_Boy/article/details/90479508