制作rpm安装包文件¶
这里假设有一些二进制文件和相关Shell脚本,想打包为rpm格式实现一键自动安装。
- 安装工具包
- 创建工作目录
$ rpmdev-setuptree # 默认创建~/rpmbuild/
$ tree ~/rpmbuild/
~/rpmbuild/
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS
如果更改一些默认设置,直接修改文件 ~/.rpmmacros
:
%_topdir %(echo $HOME)/rpmbuild
%_smp_mflags %( \
[ -z "$RPM_BUILD_NCPUS" ] \\\
&& RPM_BUILD_NCPUS="`/usr/bin/nproc 2>/dev/null || \\\
/usr/bin/getconf _NPROCESSORS_ONLN`"; \\\
if [ "$RPM_BUILD_NCPUS" -gt 16 ]; then \\\
echo "-j16"; \\\
elif [ "$RPM_BUILD_NCPUS" -gt 3 ]; then \\\
echo "-j$RPM_BUILD_NCPUS"; \\\
else \\\
echo "-j3"; \\\
fi )
%__arch_install_post \
[ "%{buildarch}" = "noarch" ] || QA_CHECK_RPATHS=1 ; \
case "${QA_CHECK_RPATHS:-}" in [1yY]*) /usr/lib/rpm/check-rpaths ;; esac \
/usr/lib/rpm/check-buildroot
准备软件源文件¶
$ tree ~/rpmbuild/SOURCES/
~/rpmbuild/SOURCES/
├── test-1.0.0
│ ├── Makefile
│ └── test.exe
└── test-1.0.0.tar.gz
主要文件是 ~/rpmbuild/SOURCES/test-1.0.0/Makefile
规定了如何执行安装步骤:
ifdef DESTDIR
destDir=$(DESTDIR)/usr/local/Test/bin
else
destDir=~/Test/bin
endif
install: test.exe
test -d $(destDir) || mkdir -p $(destDir)
cp test.exe $(destDir)/test.exe
.PHONY: clean
clean:
rm -f $(destDir)/test.exe
之后将软件源文件目录打包为 *.tar.gz
格式文件。
创建SPEC文件¶
使用 vim
打开 *.spec
后缀文件时会自动加载模板,源自于读取了模板文件 /usr/share/vim/vimfiles/template.spec
.
如果自己要添加新模板则:
$ vim /etc/vimrc
autocmd BufNewFile *.spec 0r /usr/share/vim/vimfiles/template.spec # 自带的模板规则
autocmd BufNewFile *.test 0r /usr/share/vim/vimfiles/template.test # 自定义的新增模板规则
~/rpmbuild/SPECS/test.spec
内容:
#
# 以#符号开头的行是注释行
# 2022-10-21
# Author: LeslieZhu
# 会创建目录: rpmbuild/BUILDROOT/%%(name)-%%(version)-%%(release).%%(arch)
Name: test
# 版本号
Version: 1.0.0
# 发布次数
Release: 2
Summary: A Test Program
Group: TestTeam
License: GPLv3
# N/A: 表示没有
URL: N/A
# 构建目标架构
BuildArch: x86_64
# 用来构建RPM文件的源文件,如果不提供则使用下方的%files
Source0: %{name}-%{version}.tar.gz
# 构建的时候依赖的软件包
BuildRequires: gcc,vim
# 软件运行时需要的软件包
Requires: gcc,vim
%description
This is a test program.
# 测试安装目录
BuildRoot: %_topdir/BUILDROOT
# 构建软件包之前要做的事情
%prep
# 解压并cd,将%_sourcedir内容解压到%_builddir
%setup -q
%build
# 如果有源码编译则一般是 ./configure %{?_smp_mflags}
# make %{?_smp_mflags}
%install
make DESTDIR=%{buildroot} install
%pre
# rpm文件安装前
echo install start....
%post
# rpm文件安装后
echo install done
%preun
# 卸载前
echo uninstall start...
%postun
# 卸载后
echo uninstall done
%clean
# 清理
echo clean start...
make DESTDIR=%{buildroot} clean
echo clean done...
%files
# /path/to/ 如果是某个目录则直接把目录写到这里即可
/usr/local/Test/bin/test.exe
%doc
# /path/to/docfile 文档路径
此时目录结构:
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
│ ├── test-1.0.0
│ │ ├── Makefile
│ │ └── test.exe
│ └── test-1.0.0.tar.gz
├── SPECS
│ └── test.spec
└── SRPMS
构建RPM文件¶
$ rpmbuild -ba SPECS/test.spec # 二进制和src rpm文件
$ rpmbuild -bb SPECS/test.spec # 只生成二进制rpm文件
$ rpmbuild -bs SPECS/test.spec # 只生成src rpm文件
目录文件:
├── BUILD
│ └── test-1.0.0
│ ├── debugfiles.list
│ ├── debuglinks.list
│ ├── debugsources.list
│ ├── elfbins.list
│ ├── Makefile
│ └── test.exe
├── BUILDROOT
│ └── test-1.0.0-2.x86_64
│ └── usr
│ └── local
│ └── Test
│ └── bin
├── RPMS
│ └── x86_64
│ ├── test-1.0.0-2.x86_64.rpm
│ └── test-debuginfo-1.0.0-2.x86_64.rpm
├── SOURCES
│ ├── test-1.0.0
│ │ ├── Makefile
│ │ └── test.exe
│ └── test-1.0.0.tar.gz
├── SPECS
│ └── test.spec
└── SRPMS
安装软件包¶
$ sudo rpm -ivh RPMS/x86_64/test-1.0.0-2.x86_64.rpm
Preparing... ################################# [100%]
install start....
Updating / installing...
1:test-1.0.0-2 ################################# [100%]
install done
$ ls /usr/local/Test/bin/test.exe
/usr/local/Test/bin/test.exe
卸载软件包¶
资源¶
- 微信搜索: 「 MinYiLife 」, 关注公众号!
- 本文链接: https://www.lesliezhu.com/blog/2023/01/30/yum_rpm/
- 版权声明: 原创文章,如需转载请注明文章作者和出处。谢谢!