项目打包是什么意思_rpm打包多个目录

项目打包是什么意思_rpm打包多个目录在日常项目交付时,我们都需要把源码、依赖包打包成rpm,deb来进行部署,这里以python项目为例进行rpmbuild_rpmbuild

这里以python项目为例,通过rpmbuild工具打包成rpm包,并进行安装验证

rpmbuild打包 rpm流程

  • 构建rpmbuild打包目录

项目打包是什么意思_rpm打包多个目录

  • rpmbuild 默认变量配置文件

项目打包是什么意思_rpm打包多个目录

  • 将我们的python项目和依赖包压缩成xx.tar.gz格式,并copy到SOURCE目录

我们这里以datalake-demo-2.0项目为例,将其移到/root/rpmbuild/SOURCE即可

项目打包是什么意思_rpm打包多个目录

  •  编写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打包多个目录

项目打包是什么意思_rpm打包多个目录

  • 查看rpm包【/root/rpmbuild/RPMS/x86_64】

项目打包是什么意思_rpm打包多个目录

  • 尝试安装rpm包 【rpm -ivh datalake-demo-2.0-1.el7.x86_64.rpm】

项目打包是什么意思_rpm打包多个目录

项目打包是什么意思_rpm打包多个目录 可以看到连同我们的python项目依赖包都安装好了 

  • 卸载包 【rpm -e atalake-demo-2.0-1.el7.x86_64】 

项目打包是什么意思_rpm打包多个目录

 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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注