当前位置:   article > 正文

项目打包rpm包(rpmbuild)

rpmbuild

这里以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 文件示例
  1. Name: datalake-demo
  2. Version: 2.0
  3. Release: 1%{?dist}
  4. Summary: The "Datalake" program from Bigtera
  5. Summary(zh_CN): GNU "Qin datalake" 程序
  6. License: GPLv3+
  7. URL: http://172.17.37.131/datalake
  8. Source0: /root/rpmbuild/SOURCES/%{name}-%{version}.tar.gz
  9. Packager: project from qin-mis
  10. BuildRoot: /root/rpmbuild/BUILDROOT
  11. %description
  12. The "Bigtera Datalake" program, done with all bells and whistles of a proper FOSS
  13. project, including configuration, build, internationalization, help files, etc.
  14. %description -l zh_CN
  15. "Bigtera Datalake" 程序, include http_server, archive_agent ...
  16. %define _topdir /root/rpmbuild
  17. %define _buildroot %{topdir}/BUILDROOT
  18. %prep
  19. %setup -q
  20. %build
  21. # echo "bbbbbbbbbbbbbbbbbbbbbuild done ~~~~ "
  22. # make %{?_smp_mflags}
  23. echo "starting install action ..."
  24. %install
  25. echo %{buildroot}
  26. echo $RPM_BUILD_ROOT
  27. # install -d $RPM_BUILD_ROOT/
  28. mkdir -p $RPM_BUILD_ROOT/home/datalake-demo-2.0
  29. cp -ar ./* $RPM_BUILD_ROOT/home/datalake-demo-2.0
  30. # make install DESTDIR=%{buildroot}
  31. echo `pwd`
  32. %post
  33. if [ $1 == 1 ];then
  34. echo `pwd`
  35. echo `ls`
  36. if [ -f "/home/datalake-demo-2.0/driver/datalake-formation.service" ]; then
  37. # cp -rp "/home/datalake-demo-2.0/driver/datalake-formation.service" "/lib/systemd/system/datalake-formation.service"
  38. echo "copy formation service file"
  39. fi
  40. if [ -f "/home/datalake-demo-2.0/driver/datalake-rock.service" ]; then
  41. # cp -rp "/home/datalake-demo-2.0/driver/datalake-rock.service" "/lib/systemd/system/datalake-rock.service"
  42. echo "copy rock service file"
  43. fi
  44. if [ -f "/home/datalake-demo-2.0/driver/datalake-reporter.service" ]; then
  45. # cp -rp "/home/datalake-demo-2.0/driver/datalake-reporter.service" "/lib/systemd/system/datalake-reporter.service"
  46. echo "copy reporter service file"
  47. fi
  48. echo "Starting install datalake dependent packages ... "
  49. cd "/home/datalake-demo-2.0/"
  50. tar -xvzf "datalake_packages.tar.gz"
  51. if [ -d "/home/datalake-demo-2.0/datalake_packages" ];then
  52. cd "/home/datalake-demo-2.0/datalake_packages"
  53. echo "I am done tar action ..."
  54. echo `pwd`
  55. /bin/bash "build_script.sh"
  56. if [ -f "/home/datalake-demo-2.0/datalake_packages.tar.gz" ]; then
  57. echo "Will delete atalake_packages.tar.gz"
  58. rm -rf "/home/datalake-demo-2.0/datalake_packages.tar.gz"
  59. fi
  60. fi
  61. echo "install packages done ~~~~ "
  62. fi
  63. %files
  64. %defattr(-,root,root,0755)
  65. /home
  66. # %doc
  67. %changelog
  68. * Sun Dec 4 2016 ZHUZHU <396625689@qq.com> - 2.10-1
  69. - Update to 2.10
  70. * Sat Dec 3 2016 ZHUZHU <396625689@qq.com> - 2.9-1
  71. - 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包

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/469081?site
推荐阅读
相关标签
  

闽ICP备14008679号