环境:contos 8 + java jar
目标,使用RPM把jar和config打成包,让客户用解压即用。
安装RPM
yum install rpm rpm-build rpmdevtools -y
切换普通用户
useradd test1
su - test1
环境变量
在用户根目录下创建.rpmmacros
[test1@shanghai ~]$ pwd
/home/test1
[test1@shanghai ~]$ ll -a
总用量 16
drwx------ 4 test1 test1 112 7月 30 16:47 .
drwxr-xr-x 4 root root 31 7月 30 16:34 ..
-rwxr-xr-x 1 test1 test1 75 1月 10 2020 .bash_logout
-rwxr-xr-x 1 test1 test1 71 3月 19 2020 .bash_profile
-rwxr-xr-x 1 test1 test1 138 1月 10 2020 .bashrc
drwxr-xr-x 4 test1 test1 39 7月 29 22:37 .mozilla
[test1@shanghai ~]$ vim .rpmmacros
%_topdir /home/test1/rpmbuild
创建RPM包目录结构
rpmdev-setuptree会自动生成文件夹
[test1@shanghai ~]$ rpmdev-setuptree
[test1@shanghai ~]$ ll
总用量 0
drwxrwxr-x 7 test1 test1 72 7月 30 16:39 rpmbuild
[test1@shanghai ~]$ cd rpmbuild/
[test1@shanghai rpmbuild]$ ll
总用量 0
drwxrwxr-x 2 test1 test1 6 7月 30 16:39 BUILD
drwxrwxr-x 2 test1 test1 6 7月 30 16:39 RPMS
drwxrwxr-x 2 test1 test1 6 7月 30 16:39 SOURCES
drwxrwxr-x 2 test1 test1 6 7月 30 16:39 SPECS
drwxrwxr-x 2 test1 test1 6 7月 30 16:39 SRPMS
拷贝文件到SOURCES
-rwxr-xr-x 1 test1 test1 361 7月 30 16:42 config.json
-rwxr-xr-x 1 test1 test1 1612982 7月 30 16:42 db-timer-0.1.jar
创建spec
生成一个spec模板
[test1@shanghai SPECS]$ pwd
/home/test1/rpmbuild/SPECS
[test1@shanghai SPECS]$ rpmdev-newspec test.spec
test.spec created; type minimal, rpm version >= 4.15.
[test1@shanghai SPECS]$ cat test.spec
属性介绍,大部分没用
Summary: hellorpm is a test program。
#软件包的名字
Name: hellorpm
#软件包的主版本号
Version: 2.2.6
#软件包的次版本号
Release: 1
#源代码包,默认将在上面提到的SOURCES目录中寻找
Source0: %{name}-%{version}.tar.gz
#授权协议
License: GPL
#定义临时构建目录,这个地址将作为临时安装目录在后面引用
BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root
#软件分类
Group: Development/Tools
#软件包的内容介绍
%description
The hellorpm program is a test.
#表示预操作字段,后面的命令将在源码代码BUILD前执行
%prep
#构建BUILD环境,将解压源码压缩包到BUILD目录
%setup -q
#BUILD字段,将通过直接调用源码目录中自动构建工具完成源码编译操作
%build
#调用源码目录中的configure命令
./configure
#在源码目录中执行自动构建命令make
make
#安装字段
%install
#调用源码中安装执行脚本
make DESTDIR=$RPM_BUILD_ROOT install
#文件说明字段,声明多余或者缺少都将可能出错
%files
#设置文件权限属性
%defattr(-,root,root)
#声明/usr/local/bin/hellorpm将出现在软件包中
/usr/local/bin/hellorpm
#声明并设置文件属性
%doc %attr(0444,root,root) /usr/local/man/man1/hellorpm.1
#同上,声明文档文件
%doc README
重点关心我的配置文件
Name: db-timer
Version: 0.1
Release: 1%{?dist}
Summary: my first rpm
License: GPL
#URL: www.highgo.com
Source0: %{name}-%{version}.jar
sOURCE1: config.json
#BuildRoot:
#BuildRequires: systemd
#Requires: shadow-utils,bash
%description
%define debug_package %{nil}
%define __jar_repack %{nil}
%prep
%build
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}
rpm_app_dir=%{buildroot}/db-timer
#create folder
mkdir -p $rpm_app_dir
#copy files
cp -r %{_topdir}/SOURCES/* $rpm_app_dir
%files
/db-timer/%{name}-%{version}.jar
/db-timer/config.json
%changelog
如果需要安装到指定位置,比如/opt下,修改以下几行
rpm_app_dir=%{buildroot}/opt/db-timer
%files
/db-timer/opt/%{name}-%{version}.jar
/db-timer/opt/config.json
打包
rpmbuild -ba SPECS/test.spec
[test1@shanghai rpmbuild]$ rpmbuild -ba SPECS/test.spec
正在执行(%prep):/bin/sh -e /var/tmp/rpm-tmp.NnC3Aq
...
已写至:/home/test1/rpmbuild/RPMS/x86_64/db-timer-0.1-1.ky10.ky10.x86_64.rpm
...
[test1@shanghai rpmbuild]$
rpm位置拷贝一份:后面测试使用
/home/test1/rpmbuild/RPMS/x86_64/db-timer-0.1-1.ky10.ky10.x86_64.rpm
测试
#RPM 安装命令
rpm -ivh /home/test1/rpmbuild/RPMS/x86_64/db-timer-0.1-1.ky10.ky10.x86_64.rpm
#RPM 查询命令
rpm -qa |grep db-timer
#RPM 卸载命令
rpm -e db-timer
[root@shanghai /]# rpm -ivh /home/test1/rpmbuild/RPMS/x86_64/db-timer-0.1-1.ky10.ky10.x86_64.rpm
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:db-timer-0.1-1.ky10.ky10 ################################# [100%]
[root@shanghai /]# ll
总用量 16
lrwxrwxrwx 1 root root 7 3月 14 2020 bin -> usr/bin
dr-xr-xr-x. 6 root root 4096 7月 29 22:45 boot
drwxrwxrwx 2 root root 6 7月 29 22:42 box
drwxr-xr-x 2 root root 66 7月 30 17:23 db-timer
...
[root@shanghai /]# cd db-timer/
[root@shanghai db-timer]# ll
总用量 1588
-rwxr-xr-x 1 root root 464 7月 30 17:16 config.json
-rwxr-xr-x 1 root root 1613883 7月 30 17:16 db-timer-0.1.jar
[root@shanghai db-timer]# java -jar db-timer-0.1.jar
2021-07-30 17:23:59 [INFO] Main.main:15 - app start...