61.制作跨平台的RPM安装包

原创
09/24 11:33
阅读数 96

环境准备

建议使用普通用户,会在用户目录下生成rpmbuild工作目录

#1. 安装rpmbuildyum -y install rpm-build rpmdevtools   #2. 在用户目录下生成rpmbuild工作目录rpmdev-setuptree

目录说明

在用户的目录下,例如 /root/rpmbuild

目录 说明 macros宏名
BUILD 编译之前,如解压包后存放的目录 %{_builddir}
RPMS 最终制作好的二进制包 %{_rpmdir}
SOURCES 所有源代码和补丁文件 %{_sourcedir}
SPECS 存放SPEC文件(重要) %{_specdir}
SPRMS 生成的二进制源码包 %{_srcrpmdir}

所有宏都可以在 /usr/lib/rpm/macros 找到,附录一些常见的宏:

%{_sysconfdir}        /etc%{_prefix}            /usr%{_exec_prefix}       %{_prefix}%{_bindir}            %{_exec_prefix}/bin%{_lib}               lib (lib64 on 64bit systems)%{_libdir}            %{_exec_prefix}/%{_lib}%{_libexecdir}        %{_exec_prefix}/libexec%{_sbindir}           %{_exec_prefix}/sbin%{_sharedstatedir}    /var/lib%{_datadir}           %{_prefix}/share%{_includedir}        %{_prefix}/include%{_oldincludedir}     /usr/include%{_infodir}           /usr/share/info%{_mandir}            /usr/share/man%{_localstatedir}     /var%{_initddir}          %{_sysconfdir}/rc.d/init.d %{_topdir}            %{getenv:HOME}/rpmbuild%{_builddir}          %{_topdir}/BUILD%{_rpmdir}            %{_topdir}/RPMS%{_sourcedir}         %{_topdir}/SOURCES%{_specdir}           %{_topdir}/SPECS%{_srcrpmdir}         %{_topdir}/SRPMS%{_buildrootdir}      %{_topdir}/BUILDROOT%{_var}               /var%{_tmppath}           %{_var}/tmp%{_usr}               /usr%{_usrsrc}            %{_usr}/src%{_docdir}            %{_datadir}/doc%{buildroot}          %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}$RPM_BUILD_ROOT       %{buildroot}

rpm制作过程

  1. 读取并解析 filename.spec 文件

  2. 运行 %prep 部分来将源代码解包到一个临时目录,并应用所有的补丁程序.

  3. 运行 %build 部分来编译代码.

  4. 运行 %install 部分将代码安装到构建机器的目录中.

  5. 读取 %files 部分的文件列表,收集文件并创建二进制和源 RPM 文件.

  6. 运行 %clean 部分来除去临时构建目录.

编写spec文件

#软件包简要介绍Summary: ffmpeg arm 64
#软件包的名字Name: ffmpeg
#软件包的主版本号Version: 4.3
#软件包的次版本号Release: 1.el7
#软件网址URL: https://ffmpeg.org
#打包人Packager: springrain
#软件包所属类别Group: Applications/System
#install使用的虚拟目录,安装后就在该目录下打包BuildRoot: %_topdir/BUILDROOT

## 通过 --target aarch64 指定,不使用此参数.## CPU架构平台.noarch表示该软件与体系结构无关#BuildArch: noarch
#授权协议License: LGPL/GPL
#软件包的内容介绍%descriptionffmpeg
#表示预操作字段,后面的命令将在源码代码BUILD前执行#%prep#echo "prep"
#BUILD字段,将通过直接调用源码目录中自动构建工具完成源码编译操作 #%build#echo "build"

#安装%installecho "install"
#创建/usr/local/ffmpeg/bin/目录mkdir -p %{buildroot}/usr/local/ffmpeg/bin/
#把SOURCES下的ffmpeg文件复制到/usr/local/ffmpeg/bin/目录下cp -rf %{_sourcedir}/ffmpeg %{buildroot}/usr/local/ffmpeg/bin/

#文件说明字段,声明多余或者缺少都将可能出错%files#声明/usr/local/ffmpeg将出现在软件包中/usr/local/ffmpeg/bin/ffmpeg

查看支持的平台

#查看支持编译的平台  这里查看是否有 aarch#cat /usr/lib/rpm/rpmrc |grep aarchcat /usr/lib/rpm/rpmrc

编译rpm包

这里偷懒,直接使用了ARM平台编译后的文件,不用再编译了.
https://github.com/a-schild/jave2 这个项目里有已经编译的ffmpeg版本,根据需要下载.这里是下载了arm 64位版本

#把文件拷贝到rpmbuild源码目录,或者在spec文件中wget下载源码.cp -rf /root/ffmpeg /root/rpmbuild/SOURCES/
#把ffmpeg.spec文件拷贝到SPEC目录cp -rf /root/ffmpeg.spec /root/rpmbuild/SEPCS/
#进入rpmbuild目录cd /root/rpmbuild

#编译rpm包,会生成到 RPMS目录下# -bb 只编译二进制包,-bs 只编译源码包,-ba 二进制包和源码包都编译#默认当前的编译环境 x86_64,cat /usr/lib/rpm/rpmrc查看支持的平台rpmbuild -bb ./SPECS/ffmpeg.spec# --target 指定运行的平台,这里指定ARM的aarch64rpmbuild -bb --target aarch64 ./SPECS/ffmpeg.spec


源码样式不太友好,影响阅读体验,建议访问原文地址或者点击 [阅读原文]

https://www.jiagou.com/post/61-make-cross-rpm

本文分享自微信公众号 - 架构经验(gh_1e5343e31369)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部