赞
踩
yum install rpm-build -y
yum install rpmdevtools -y
[释]: 打包主要用rpm-build,而rpmdevtools工具包里面自带的命令rpmdev-setuptree可以用于快速创建结构目录,比手动创建更快。
[注]: 如果yum下载不了,可参考我的另一篇博文 https://blog.csdn.net/Acegem/article/details/132555841?spm=1001.2014.3001.5501
到官网将离线包下载好。
Centos:https://pkgs.org
麒麟V10:https://update.cs2c.com.cn/NS/V10/V10SP1/os/adv/lic/base/aarch64/Packages/
将 rpm-build.rpm 和 rpmdevtools.rpm下载下来后,安装的时候如果报错缺失依赖,看情况可以考虑用命令忽略依赖强制安装:
rpm -ivh rpm-build.rpm --nodeps --force
rpm -ivh rpmdevtools --nodeps --force
首先要在当前用户的 {$HOME} 下创建目录:rpmbuild
,再在该目录下创建目录:BUILD、RPMS、SOURCES、SPECS、SRPMS
。
整个过程可以借助 rpmdev-setuptree
快速实现。如下:
cd # 到主目录下
rpmdev-setuptree # 创建初始化目录
结果:
[注]: 默认创建位置是 {$HOME},如果想更改位置,可修改 ~/.rpmmacros
配置。配置默认初始内容:
将要打包的内容放到 ~/rpmbuild/SOURCES
目录下。
例:
cd ~/rpmbuild/SPECS
touch mytool.spec
mytool.spec 内容如下:
Name: mytool # 软件名称 Version: 1.0 # 软件版本 Release: 0%{?dist} # RPM版本,发布序列号,用来标明第几次打包 Summary: MyTool Master installer # 描述 # Group: test # 软件组。建议使用 Application/System License: GPLv3+ # 协议 AutoReqProv: no # 忽略依赖。简单粗暴,依个人习惯。 # 例:有时rpm -ivh安装时报错某依赖找不到,可能是打包的时候就找不到依赖包。这个语句可以使得忽略依赖关系。功能类似于:rpm -ivh 软件名 --nodeps BuildRoot: %(mktemp -ud %{_tempath}/%{name}-%{version}-%{release}-XXXXXX) # 临时编译目录 # 详细描述 %description -l zh_CN "The mytool for test" # 安装前准备 %prep echo "do not" # 安装 %install cd %{_sourcedir} # ~/rpmbuild/SOURCE cp -ra * %{buildroot} # 将 ~/rpmbuild/SOURCE 下的内容全都复制到 ~/rpmbuild/BUILDROOT # 定义打包文件列表 %files /usr/local/MQ /opt/QQ # 卸载后执行的指令 %postun rm -rf /usr/local/MQ rm -rf /opt/QQ
附:
spec常用参数
# 自定义宏 %define Name MyTool %define Version 1.0 # 软件包 Name: %{Name} # 引用宏 Version: %{Version} # 引用宏 Release: 1%{?dist} # 引用宏(自带宏) Summary: 一段软件简概 # 简单描述 License: GPLv3+ # 协议 URL: 地址 buildroot: %{_topdir}/BUILDROOT # 生成车间,即编译根目录。 Source0: %{Name}-%{Version}.tar.gz # 指定源码编译的文件,默认路径:%{_topdir}/SOURCES SOURCE1: 支持多个 BuildRequires: gcc, make, automake, binutils # 软件依赖信息 Requires: bash >=2.0 # 软件依赖, >= 或 <= 表大于或小于特定版本 # 详细描述 %description -l zh_CN # 其中 -l zh_CN是参数,可省略 这是一段软件的详细描述 # 安装前。如:执行脚本 %pre useradd %{Name} -s /sbin/nologin # 安装前。默认将Source目录内源码包解压到BUILD目录,并在其目录下创建 %{Name}-%{Version}目录。 %prep %setup -q -n %{Name}-%{Version} # 编译 %build 自定义命令 # 安装 %install 自定义命令 # 文件 %files # 清理制作时产生的缓存 %clean rm -rf %{buildroot} # 安装后。 %post 自定义命令 # 卸载前。 %preun 自定义命令 # 卸载后 %postun 自定义命令 # 日志 %changelog 自定义命令
代表路径的宏列表
%{_sysconfdir} /etc %{_prefix} /usr %{_exec_prefix} %{_prefix} %{_bindir} %{_exec_prefix}/bin %{_libdir} %{_exec_prefix}/%{_lib} %{_libexecdir} %{_exec_prefix}/libexec %{_sbindir} %{_exec_prefix}/sbin %{_sharedstatedir} /var/lib %{_datarootdir} %{_prefix}/share %{_datadir} %{_datarootdir} %{_includedir} %{_prefix}/include %{_infodir} /usr/share/info %{_mandir} /usr/share/man %{_localstatedir} /var %{_initddir} %{_sysconfdir}/rc.d/init.d %{_var} /var %{_tmppath} %{_var}/tmp %{_usr} /usr %{_usrsrc} %{_usr}/src %{_lib} lib (lib64 on 64bit multilib systems) %{_docdir} %{_datadir}/doc %{buildroot} %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch} $RPM_BUILD_ROOT %{buildroot}
cd ~/rpmbuild/SPECS/
rpmbuild -bb mytool.spec
未报错的日志结尾会出现 exit 0
,具体信息如下:
此时,会在 ~/rpmbuild/RPMS/
目录下生成 rpm
包文件。如下:
注: 可输入
rpm -qpl mytool-1.0-0.ky10.ky10.x86_64.rpm
来查看rpm包的内容:
说明包是没问题的。
rpm -ivh mytool-1.0-0.ky10.ky10.x86_64.rpm
可看到rpm包中的MQ和QQ被成功安装在了 /usr/local 和 /opt 下。
附:
# 查找软件的安装路径
rpm -ql 软件名
# 查找软件的相关信息
rpm -qi 软件名
一般,如果被打包的内容存在代码错误,会导致打包失败。如有的python代码存在错误时也能运行,如果要忽略代码错误打包。可以在 .spec
文件前加上如下参数:
%global _enable_debug_package 0
%global debug_package %{nil}
%global __os_install_post /usr/lib/rpm/brp-compress %{nil}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。