一、 安装必要工具
yum install make
yum install gcc
简单一点就是
yum install rpmbuild
如果出现执行后提示说找不到这个包,搜索rpm
yum search rpm
出现很多包,找到以下包,就是rpm
yum install -y rpm-build.x86_64
二、创建制作rpm的工作目录
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
各个目录的一般用途如下简介:
BUILD 编译rpm包的临时目录
BUILDROOT 编译后生成的软件临时安装目录
RPMS 最终生成的可安装rpm包的所在目录
SOURCES 所有源代码和补丁文件的存放目录
SPECS 存放SPEC文件的目录(重要)
SRPMS 软件最终的rpm源码格式存放路径
三、打包源文件
进入要打包文件的目录:
cd /home/state
打包:
tar -zcv -f Documents-0.1.tar.gz Documents
⚠️注意:这里我打包的tar.gz一定要带上版本号,x-0.1,还有Documents-0.1.tar.gz和后面的Documents 最好名字一致,都带上版本,后续的spec文件可能会不同。
cp Documents-0.1.tar.gz ~/rpmbuild/SOURCES
四、新建*.spec的设置文件
cd ~/rpmbuild/SPECS
vim Documents.spec
spec文件
1.name是名字
2.version 是版本
3.release、summary、license、url都照着写
4.为避免自动扫描依赖包,增加下面的配置
AutoReqProv: no
5.因为之前Documents-0.1.tar.gz和后面的Documents 名字不一致,报如下错误:
解决方法:
%setup -n Documents
6.为避免去除符号链接和jar文件重新打包,设置参数如下:
%define debug_package %{nil}
%define __jar_repack 0
7.%build目录下的东西删除,因为不需要make和configure,不然会报如下错误:
8.直接install资源文件到对应目录:
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}
cp -rf * %{buildroot}
定义安装包中的所有文件:
%files
根据自己的目录设定
最开始我设定了/home/state/Documents
报如下错误:
解决方法:
cd /root/rpmbuild/BUILDROOT/Documents-0.1-1.el7.x86_64
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: 编译参数 ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx/……
%install: 安装步骤,此时需要指定安装路径,创建编译时自动生成目录,复制配置文件至所对应的目录中(这一步比较重要!)
%pre: 安装前需要做的任务,如:创建用户
%post: 安装后需要做的任务 如:自动启动的任务
%preun: 卸载前需要做的任务 如:停止任务
%postun: 卸载后需要做的任务 如:删除用户,删除/备份业务数据
%clean: 清除上次编译生成的临时文件,就是上文提到的虚拟目录
%files: 设置文件属性,包含编译文件需要生成的目录、文件以及分配所对应的权限
%changelog: 修改历史
五、编译成为RPM和SRPM
rpmbuild -ba Documents.spec
出现exit 0就成功了!!!
六、安装和测试
rpm -ivh ~/rpmbuild/RPMS/x86_64/Documents-0.1-1.el7.x86_64.rpm
查看具体信息:
rpm -ql Documents
rpm -qi Documents
具体参考:https://blog.csdn.net/u010384744/article/details/80929319/