RPM简介
Linux rpm 命令用于管理套件。 rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。
- 更多RPM相关学习如下链接:www.runoob.com/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
安装完后查看文件位置
- 文件位置一般会在系统的更目录下如下图