X86_64 Centos7(1708)制作RPM包

733 阅读4分钟

RPM简介

Linux rpm 命令用于管理套件。 rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。

物理环境

  • 操作系统 CentOS-7-x86_64-Minimal-1708
  • RAM 11GB、硬盘40GB、CPU两核

Centos7制作RPM步骤如下

安装RPM打包工具

yum -y install rpmdevtools

制作RPM的工作目录

mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
  • 制作完共目录如下图

各个目录用途详细解释

BUILD 	    编译rpm包的临时目录 	
BUILDROOT   编译后生成的软件临时安装目录
RPMS 	      最终生成的可安装rpm包的所在目录
SOURCES     所有源代码和补丁文件的存放目录
SPECS 	    存放SPEC文件的目录(重要)
SRPMS 	    软件最终的rpm源码格式存放路径

打包源文件

进入文件目录

cd /home/use

打为tar包

  • 打tar包时必须要打文件夹,不能直接打文件(当初在这踩坑),如下图。

  • 打tar包注意要加上版本号比如现在的版本是0.1.0,因为在后后面spec文件中需要版本号。
tar -zcv -f Preprocess-0.1.0.tar.gz  Preprocess
  • 打为tar包后如下:

拷贝tar包进入rpm的源代码目录

cp Preprocess-0.1.0.tar.gz /root/rpmbuild/SOURCES/
  • 拷贝成功后如下图

新建*.spec的设置文件

cd ~/rpmbuild/SPECS
vi Preprocess.spec

spec文件内容如下

Name: Preprocess
Version:       0.1.0
Release:       1%{?dist}
Summary:       Preprocess System

License:       GPL
URL:           https://wwww.bestsec.cn
Source0:       Preprocess-0.1.0.tar.gz
AutoReqProv:   no

%description
This package will install Preprocess System on your server

%prep

%define debug_package %{nil}
%define __jar_repack 0

%build

%install
rm -rf %{buildroot}
mkdir -p %{buildroot}
cp -rf * %{buildroot}

%files
/Preprocess    # 在/root/rpmbuild/BUILD中添加同样的Preprocess文件夹

%changelog
* Monday Mar 14 2022 VBuild Mianyang <service@bestsec.cn> 0.1.0
- Build the program

spec 关键字解释如下

Name: 软件包的名称,在后面的变量中即可使用%{name}的方式引用
Summary: 软件包的内容
Version: 软件的实际版本号,例如:1.12.1等,后面可使用%{version}引用
Release: 发布序列号,例如:1%{?dist},标明第几次打包,后面可使用%{release}引用
Group: 软件分组,建议使用:Applications/System
License: 软件授权方式GPLv2
Source: 源码包,可以带多个用Source1、Source2等源,后面也可以用%{source1}、%{source2}引用
BuildRoot: 这个是安装或编译时使用的临时目录,即模拟安装完以后生成的文件目录:%_topdir/BUILDROOT 后面可使用$RPM_BUILD_ROOT 方式引用。
URL: 软件的URI
Vendor: 打包组织或者人员
Patch: 补丁源码,可使用Patch1、Patch2等标识多个补丁,使用%patch0或%{patch0}引用
Prefix: %{_prefix} 这个主要是为了解决今后安装rpm包时,并不一定把软件安装到rpm中打包的目录的情况。这样,必须在这里定义该标识,并在编写%install脚本的时候引用,才能实现rpm安装时重新指定位置的功能
Prefix: %{_sysconfdir} 这个原因和上面的一样,但由于%{_prefix}指/usr,而对于其他的文件,例如/etc下的配置文件,则需要用%{_sysconfdir}标识
Requires: 该rpm包所依赖的软件包名称,可以用>=或<=表示大于或小于某一特定版本,例如:
libxxx-devel >= 1.1.1 openssl-devel 。 注意:“>=”号两边需用空格隔开,而不同软件名称也用空格分开

%description: 软件的详细说明
%define: 预定义的变量,例如定义日志路径: _logpath /var/log/weblog
%prep: 预备参数,通常为 %setup -q
%build: 编译参数 
%install: 安装步骤,此时需要指定安装路径,创建编译时自动生成目录,复制配置文件至所对应的目录中(这一步比较重要!)
%pre: 安装前需要做的任务,如:创建用户
%post: 安装后需要做的任务 如:自动启动的任务
%preun: 卸载前需要做的任务 如:停止任务
%postun: 卸载后需要做的任务 如:删除用户,删除/备份业务数据
%clean: 清除上次编译生成的临时文件,就是上文提到的虚拟目录
%files: 设置文件属性,包含编译文件需要生成的目录、文件以及分配所对应的权限
%changelog: 修改历史

新建目录文件并拷贝原文件

cd BUILD
mkdir Preprocess

拷贝文件

 cp preprocess-0.1.0.jar  /root/rpmbuild/BUILD/Preprocess/

执行spec文件并运行rpm文件

cd /root/rpmbuild/SPECS/
rpmbuild -ba Preprocess.spec
  • 执行日志及其结果如下,日志中出现exit 0表明制作rpm包成功

  • rpm包制作完成后在/root/rpmbuild/RPMS/x86_64文件下最终生成的可安装rpm包的所在目录,/root/rpmbuild/SRPMS 是软件最终的rpm源码格式存放路径

安装rpm包

rpm -ivh Preprocess-0.1.0-1.el7.centos.x86_64.rpm

安装完成后如下图

安装完后查看信息

rpm -ql Documents
rpm -qi Documents

安装完后查看文件位置

  • 文件位置一般会在系统的更目录下如下图