准备打RPM包的环境
#安装打包软件
yum -y install rpm-build
rpmdevtools
#生成rpm包的目录结构
rpmdev-setuptree #会在用户家目录下生成一个rpmbuild目录
目录解析
- BUILD 目录:用于临时存放构建过程中生成的文件。
- RPMS 目录:用于存放生成的 RPM 软件包。
- SOURCES 目录:用于存放软件包的源代码。
- SPECS 目录:用于存放软件包的规范文件(.spec 文件),其中包含了软件包的详细信息,如名称、版本、依赖关系等。
- SRPMS 目录:用于存放生成的源代码 RPM 软件包。
编写SPEC文件:
- SPEC文件是描述如何构建和打包 RPM 的文本文件,它包含软件的元数据、构建指令和依赖关系等信息。
- 在
SPECS
目录下创建一个以.spec结尾
的文件
spec文件详解
================================================================
Name: docs #软件名称
Version: 4.2 #版本号
Release: 1 #rpm的发行号
Summary: This is a script for building docs services #摘要
License: GPL #声明版权信息
%description #描述
This is a script for building docs services
# 指定构建rpm包所需的依赖
BuildRequires: java-devel >= 1.8
# 指定运行rpm包所需的依赖
Requires: java-1.8.0-openjdk
BuildArch: aarch64
# 设置为nil构建过程对 JAR 包不进行特殊处理,如解压、修改、重新打包 JAR 文件等操作
%define debug_package %{nil}
%define __jar_repack %{nil}
#build阶段此时会进入到/rpmbuild/BUILD/目录中
%build#安装前要做的操作
%pre
#安装rpm包时执行的操作
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/data/yozo/apps/
mkdir -p %{buildroot}/etc/systemd/system
cp -r %{_sourcedir}/docs/ %{buildroot}/data/yozo/apps/
#cp -r %{_sourcedir}/epauth-4.2.1.jar %{buildroot}/data/yozo/apps/docs/epauth/
#cp -r %{_sourcedir}/logback-spring.xml %{buildroot}/data/yozo/apps/docs/logback/
#cp -r %{_sourcedir}/openjdk-8u352-b08.tar.gz %{buildroot}/data/yozo/apps/docs/jdk/
cp -r %{_sourcedir}/system/* %{buildroot}/etc/systemd/system/
#安装完成后操作
%post
#chmod 777 /opt/yozo/docs/epauth/epauth.sh
#systemctl enable epauth.service
tar xvzf /data/yozo/apps/docs/jdk/openjdk-8u352-b08.tar.gz -C /data/yozo/apps/docs/jdk/
%preun
# 在卸载RPM包之前执行的操作,例如停用服务
systemctl stop comment
systemctl stop converter
systemctl stop docinit
sleep 3
systemctl disable epauth.service
systemctl disable comment.service
systemctl disable converter.service
systemctl disable docinit.service
systemctl daemon-reload
#构建完成后删除/rpmbuild/BUILDROOT/中的打包过程文件
%clean
rm -rf $RPM_BUILD_ROOT
%files
# 检查RPM包中的文件列表,也就是安装后存放相关资源的的文件路径
%defattr(-,yozo,docker,-)
%attr(755,yozo,docker)
/data/yozo/apps/docs/
/etc/systemd/system/epauth.service
/etc/systemd/system/comment.service
/etc/systemd/system/converter.service
/etc/systemd/system/docinit.service
#打包日志
%changelog
编写service文件便于system管理
[Unit]
Description=epauth #服务名称
After=network.target #依赖关系[Service]
Type=simple #服务类型#Type=oneshot #只启动一次
#可以引用外部变量文件
#EnvironmentFile=/data/yozo/flyway/env.sh
#启动命令
ExecStart=/data/jdk8u352-b08/bin/java -server -jar /data/yozo/apps/docs/epauth/yozo-epauth-4.0.0-SNAPSHOT.jar > /dev/null 2>&1#停止命令,标准写法
ExecStop=/usr/bin/kill -15 $MAINPID#创建一个私有的临时目录,例如用于存储临时文件
PrivateTmp=true
#服务启动失败,自动重启
Restart=always #设为Type=oneshot时需要改为no#成功退出状态码
SuccessExitStatus=143#服务工作目录
WorkingDirectory=/data/yozo/apps/docs/epauth/[Install]
#多用户运行级别,服务可用。
WantedBy=multi-user.target#服务别名
Alias=epauth.service
rpm打包阶段
-bp #只执行spec的%pre段(解开源码包并打补丁,即只做准备)
-bc #执行spec的%pre和%build段(准备并编译)
-bi #执行spec中%pre,%build与%install(准备,编译并安装)
-bl #检查spec中的%file段(查看文件是否齐全)
-ba #建立源码与二进制包
-bb #只建立二进制包
-bs #只建立源码包-vv #详细展示打包过程
例如:rpmbuild -bb -vv docs.spec