这里以python项目为例,通过rpmbuild工具打包成rpm包,并进行安装验证
rpmbuild打包 rpm流程
- 构建rpmbuild打包目录
- rpmbuild 默认变量配置文件
- 将我们的python项目和依赖包压缩成xx.tar.gz格式,并copy到SOURCE目录
我们这里以datalake-demo-2.0项目为例,将其移到/root/rpmbuild/SOURCE即可
- 编写rpmbuild核心 spec 文件【datalake.spec】
spec里面很多字段网上都有说明,这里只介绍几个关键参数
- rpmbuild spec 文件示例
Name: datalake-demo
Version: 2.0
Release: 1%{?dist}
Summary: The "Datalake" program from Bigtera
Summary(zh_CN): GNU "Qin datalake" 程序
License: GPLv3+
URL: http://172.17.37.131/datalake
Source0: /root/rpmbuild/SOURCES/%{name}-%{version}.tar.gz
Packager: project from qin-mis
BuildRoot: /root/rpmbuild/BUILDROOT
%description
The "Bigtera Datalake" program, done with all bells and whistles of a proper FOSS
project, including configuration, build, internationalization, help files, etc.
%description -l zh_CN
"Bigtera Datalake" 程序, include http_server, archive_agent ...
%define _topdir /root/rpmbuild
%define _buildroot %{topdir}/BUILDROOT
%prep
%setup -q
%build
# echo "bbbbbbbbbbbbbbbbbbbbbuild done ~~~~ "
# make %{?_smp_mflags}
echo "starting install action ..."
%install
echo %{buildroot}
echo $RPM_BUILD_ROOT
# install -d $RPM_BUILD_ROOT/
mkdir -p $RPM_BUILD_ROOT/home/datalake-demo-2.0
cp -ar ./* $RPM_BUILD_ROOT/home/datalake-demo-2.0
# make install DESTDIR=%{buildroot}
echo `pwd`
%post
if [ $1 == 1 ];then
echo `pwd`
echo `ls`
if [ -f "/home/datalake-demo-2.0/driver/datalake-formation.service" ]; then
# cp -rp "/home/datalake-demo-2.0/driver/datalake-formation.service" "/lib/systemd/system/datalake-formation.service"
echo "copy formation service file"
fi
if [ -f "/home/datalake-demo-2.0/driver/datalake-rock.service" ]; then
# cp -rp "/home/datalake-demo-2.0/driver/datalake-rock.service" "/lib/systemd/system/datalake-rock.service"
echo "copy rock service file"
fi
if [ -f "/home/datalake-demo-2.0/driver/datalake-reporter.service" ]; then
# cp -rp "/home/datalake-demo-2.0/driver/datalake-reporter.service" "/lib/systemd/system/datalake-reporter.service"
echo "copy reporter service file"
fi
echo "Starting install datalake dependent packages ... "
cd "/home/datalake-demo-2.0/"
tar -xvzf "datalake_packages.tar.gz"
if [ -d "/home/datalake-demo-2.0/datalake_packages" ];then
cd "/home/datalake-demo-2.0/datalake_packages"
echo "I am done tar action ..."
echo `pwd`
/bin/bash "build_script.sh"
if [ -f "/home/datalake-demo-2.0/datalake_packages.tar.gz" ]; then
echo "Will delete atalake_packages.tar.gz"
rm -rf "/home/datalake-demo-2.0/datalake_packages.tar.gz"
fi
fi
echo "install packages done ~~~~ "
fi
%files
%defattr(-,root,root,0755)
/home
# %doc
%changelog
* Sun Dec 4 2016 ZHUZHU <396625689@qq.com> - 2.10-1
- Update to 2.10
* Sat Dec 3 2016 ZHUZHU <396625689@qq.com> - 2.9-1
- Update to 2.9
- rpmbuild spec参数说明
Name | 项目名称 |
Version | 项目版本 |
Summary | 项目概述 |
%define | 定义spec全局变量 |
%pre |
预处理脚本(rpm安装前执行操作) |
%setup -q | 通常是从SOURCES目录里的包解压到BUILD/%{name}-%{version}中 |
%build | 开始构建包,我们这里不需要 |
%install |
开始把软件安装到虚拟的根目录,这里我们是将解压后的代码copy到$RPM_BUILD_ROOT/home/datalake-demo-2.0 这里说明一下/home/datalake-demo-2.0是以后rpm包的安装路径,也就是你想要把你的包装在哪个目录,就把你的源码包copy到哪里即可,安装的时候$RPM_BUILD_ROOT可以理解为根目录 / |
%post |
rpm安装后执行的脚本, 这里我做的操作是将service file拷贝到/lib/systemd/system目录,然后将项目依赖包解压并进行安装,最后将安装包删除 |
%file |
定义那些文件或目录会放入rpm中,我们这里指定/home 设置文件属性 %defattr(-,root,root) %attr(644,root,root) etc/conf/nginx.conf |
%changelog | 本次rpm包说明 |
%preun和 postun | 分别表示卸载rpm包前后卸载后要做的事 |
- 开始rpmbuild rpd 【rpmbuild -ba datalake.spec】
- 查看rpm包【/root/rpmbuild/RPMS/x86_64】
- 尝试安装rpm包 【rpm -ivh datalake-demo-2.0-1.el7.x86_64.rpm】
可以看到连同我们的python项目依赖包都安装好了
- 卸载包 【rpm -e atalake-demo-2.0-1.el7.x86_64】
rpmbuild rpm包完成~
补充:
在使用rpmbuild构建rpm包时,往往能够自动打出debuginfo包。如果不想要,可以echo “%debug_package %{nil}” >> ~/.rpmmacros 如果不想拆分出debuginfo包,让binary包里就是带调试符号的,可以在spec文件头加上%global debug_package %{nil}
如果想打出debuginfo包,而默认却打不出来,可以检查机器是否安装了redhat-rpm-config包,如果没有,就会因为缺少brp-compress工具而打不出debuginfo包
今天的文章项目打包是什么意思_rpm打包多个目录分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/70785.html