赞
踩
这里以python项目为例,通过rpmbuild工具打包成rpm包,并进行安装验证
我们这里以datalake-demo-2.0项目为例,将其移到/root/rpmbuild/SOURCE即可
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

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包前后卸载后要做的事 |
可以看到连同我们的python项目依赖包都安装好了
补充:
在使用rpmbuild构建rpm包时,往往能够自动打出debuginfo包。如果不想要,可以echo "%debug_package %{nil}" >> ~/.rpmmacros 如果不想拆分出debuginfo包,让binary包里就是带调试符号的,可以在spec文件头加上%global debug_package %{nil}
如果想打出debuginfo包,而默认却打不出来,可以检查机器是否安装了redhat-rpm-config包,如果没有,就会因为缺少brp-compress工具而打不出debuginfo包
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。