项目打包rpm包(rpmbuild)

2 篇文章 0 订阅

这里以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包

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
将jar打包rpm的步骤如下: 1. 安装rpmbuild工具 在Linux系统上,可以使用以下命令安装rpmbuild工具: ``` sudo yum install rpm-build ``` 2. 创建rpm的目录结构 在rpmbuild的根目录下,创建一个名为SPECS的目录,用于存放.spec文件,以及一个名为SOURCES的目录,用于存放源文件。 ``` mkdir -p ~/rpmbuild/{SPECS,SOURCES} ``` 3. 编写.spec文件 .spec文件是用于打包和安装rpm的文件,需要根据实际情况编写。以下是一个简单的.spec文件示例: ``` Name: myapp Version: 1.0 Release: 1%{?dist} Summary: My Java Application License: GPL URL: http://www.example.com/myapp Source0: myapp.jar BuildRequires: java-devel Requires: java %description My Java Application %prep %setup -q %build %install rm -rf %{buildroot} mkdir -p %{buildroot}/usr/share/myapp cp -a * %{buildroot}/usr/share/myapp/ %files %defattr(-,root,root,-) /usr/share/myapp ``` 在.spec文件中,需要指定应用程序的名称、版本、许可证、依赖关系等信息,并指定应用程序的源文件(在本例中为myapp.jar)。同时,还需要指定应用程序的安装路径和文件列表。 4. 将源文件复制到SOURCES目录下 将应用程序的源文件(在本例中为myapp.jar)复制到SOURCES目录下。 ``` cp myapp.jar ~/rpmbuild/SOURCES/ ``` 5. 使用rpmbuild打包 使用rpmbuild命令打包.rpm: ``` rpmbuild -bb ~/rpmbuild/SPECS/myapp.spec ``` 此命令将在rpmbuild的根目录下生成一个.rpm,可以使用以下命令进行安装: ``` sudo yum localinstall ~/rpmbuild/RPMS/x86_64/myapp-1.0-1.el7.x86_64.rpm ``` 其中,x86_64是指64位系统,el7是指CentOS 7操作系统版本。具体的操作系统版本可能会有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qin147896325

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值