福州 福马路 网站建设字画网站建设
文章目录
 rpm打包  
 
1. rpm打包步骤
0)准备工作:安装打包工具rpm-build和rpmdevtools
(1)在线安装
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
(2)离线安装
到官网将离线包下载好。
 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
 
1)创建初始化目录
首先要在当前用户的 {$HOME} 下创建目录:rpmbuild,再在该目录下创建目录:BUILD、RPMS、SOURCES、SPECS、SRPMS。
 整个过程可以借助 rpmdev-setuptree 快速实现。如下:
cd # 到主目录下
rpmdev-setuptree # 创建初始化目录
 
结果:
 
 [注]: 默认创建位置是 {$HOME},如果想更改位置,可修改 ~/.rpmmacros 配置。配置默认初始内容:

2)准备打包内容
将要打包的内容放到 ~/rpmbuild/SOURCES 目录下。
 例:
 
3)编写打包脚本 spec文件
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 软件名 --nodepsBuildRoot: %(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}
 
4)打包
cd ~/rpmbuild/SPECS/
rpmbuild -bb mytool.spec
 
未报错的日志结尾会出现 exit 0,具体信息如下:
 
此时,会在 ~/rpmbuild/RPMS/ 目录下生成 rpm 包文件。如下:
 
 注: 可输入
rpm -qpl mytool-1.0-0.ky10.ky10.x86_64.rpm
 
来查看rpm包的内容:
 
 说明包是没问题的。
5)安装
rpm -ivh mytool-1.0-0.ky10.ky10.x86_64.rpm
 

可看到rpm包中的MQ和QQ被成功安装在了 /usr/local 和 /opt 下。
 
 附:
# 查找软件的安装路径
rpm -ql 软件名
# 查找软件的相关信息
rpm -qi 软件名
 

