rpm打包
1. rpm打包步骤
0)安装打包工具rpm-build和rpmdevtools
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
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 软件名 --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}
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 软件名