制作RPM包

安装rpm-build软件包,编写SPEC配置文件,创建新的RPM软件包。
配置文件中的描述信息如表-2:
制作RPM包_第1张图片
[root@host04 ~]# yum -y install rpm-build #安装rpm-build软件包
生成rpmbuild目录结构
[root@host04 ~]# rpmbuild -ba nginx.spec #会报错,没有文件或目录
错误:stat /root/nginx.spec 失败:没有那个文件或目录
[root@host04 ~]# ls /root/rpmbuild #自动生成的目录结构
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS

BUILD目录:制作车间,二进制tar.gz包的解压后存放的位置,并在此目录进行编译安装
BUILDROOT目录:此目录是在BUILD目录中执行完make install之后生成的目录,里面存放的是编译安装好的文件,他是./configure中—prefix指定path的根目录
RPMS目录:存放制作好的rpm包
SOURCES目录:存放源代码
SPECS目录:存放SPEC文件
SRPMS目录:存放编译好的二进制rpm包

准备工作,将源码软件复制到SOURCES目录
[root@host04 ~]# cp nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/
自定义软件包基本参数:

Name 软件包名字
Version 软件包版本
Release 软件包修订号
Summary 软件包简单描述
Group 软件包所属组。必须是系统定义好的组
License 软件授权方式,通常就是GPL
Vendor 软件包发型厂商
Packager 软件包打包者
URL 软件包的url
Source 定义打包所需的源码包,可以定义多个,后面使用%{SOURCE}调用
Patch 定义补丁文件,后面可以使用%{Patch}调用
BuildRoot 定义打包时的工作目录
BuildRequires 定义打包时依赖的软件包
Requires 定义安装时的依赖包,形式为Package name 或者 Package >= version

Prefix %{_prefix}| %{_sysconfdir} : %{_prefix} 这个主要是为了解决今后安装rpm包时,并不一定把软件安装到rpm中打包的目录的情况。这样,必须在这里定义该标识,并在编写%install脚本的时候引用,才能实现rpm安装时重新指定位置的功能
%{_sysconfdir} 这个原因和上面的一样,但由于%{_prefix}指/usr,而对于其他的文件,例如/etc下的配置文件,则需要用%{_sysconfdir}标识
%package 定义一个子包
%description 详细描述信息

Group:
软件包所属类别,具体类别有:
Amusements/Games (娱乐/游戏)
Amusements/Graphics(娱乐/图形)
Applications/Archiving (应用/文档)
Applications/Communications(应用/通讯)
Applications/Databases (应用/数据库)
Applications/Editors (应用/编辑器)
Applications/Emulators (应用/仿真器)
Applications/Engineering (应用/工程)
Applications/File (应用/文件)
Applications/Internet (应用/因特网)
Applications/Multimedia(应用/多媒体)
Applications/Productivity (应用/产品)
Applications/Publishing(应用/印刷)
Applications/System(应用/系统)
Applications/Text (应用/文本)
Development/Debuggers (开发/调试器)
Development/Languages (开发/语言)
Development/Libraries (开发/函数库)
Development/System (开发/系统)
Development/Tools (开发/工具)
Documentation (文档)
System Environment/Base(系统环境/基础)
System Environment/Daemons (系统环境/守护)
System Environment/Kernel (系统环境/内核)
System Environment/Libraries (系统环境/函数库)
System Environment/Shells (系统环境/接口)
User Interface/Desktops(用户界面/桌面)
User Interface/X (用户界面/X窗口)
User Interface/X Hardware Support (用户界面/X硬件支持)
%setup 的用法
%setup 不加任何选项,仅仅打开源码包
%setup -n newdir 将软件包解压至新目录(重命名解压的包),默认
%setup -c 解压缩之前先产生目录。
%setup -b num 将第num个source文件解压缩。
%setup -T 不使用default的解压缩操作。
%setup -T -b 0 将第0个源代码文件解压缩。
%setup -c -n newdir 指定目录名称newdir,并在此目录产生rpm套件。
%setup -q 解压不输出信息
%Patch用法
先使用Patch{n}定义补丁包,然后使用%patch{n}或者%{patch{n}}来调用打补丁
补丁号命名规则
0-9 Makefile、configure 等的补丁
10-39 指定功能或包含他的文件的补丁
40-59 配置文件的补丁
60-79 字体或字符补丁
80-99 通过 xgettexize 得到的目录情况的补丁
100- 其他补丁
%patch 最简单的补丁方式,自动指定patch level。
%patch 0 使用第0个补丁文件,相当于%patch -p 0。
%patch -s 不显示打补丁时的信息。
%patch -T 将所有打补丁时产生的输出文件删除
%patch -b name 在打补丁之前,将源文件加入name,缺省为.org

%file用法
%defattr (-,root,root) 指定包装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755
%attr(600,work,work) 指定特定的文件目录权限
fattr (-,root,root)
所有的认证如下:
group: 认证文件的组
maj: 认证文件的主设备号
md5: 认证文件的MD5
min: 认证文件的辅设备号
mode: 认证文件的权限
mtime: 认证文件最后修改时间
owner: 认证文件的所有者
size: 认证文件的大小
symlink:认证符号连接

创建并修改SPEC配置文件
[root@host04 ~]# vim /root/rpmbuild/SPECS/nginx.spec
Name:nginx #必须跟拷贝的源码包名字一样
Version:1.12.2 #必须跟源码包的版本号一致
Release: 10 #这里是第几次做rpm包,随便写
Summary:Nginx is a web server software. #rpm包的描述信息,可以敲中文,任意

#Group: #属于那个组包,注释不用

License:GPL #GPL代表任意复制,任意修改,任意发布,开源软件的协议

URL:www.test.com #写一个网站

Source0:nginx-1.12.2.tar.gz #写其中一个要制作的源码包,不能写错

#BuildRequires: #提示依赖
#Requires:

%description #详细描述
nginx [engine x] is an HTTP and reverse proxy server.
%post #后面放执行命令
useradd -s /sbin/nolaogin nginx #创建用户

%prep
%setup -q #自动解压源码包,并cd进去
%build
./configure #后面可以加配置参数
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
%files
%doc
/usr/local/nginx/* #打包/usr/local/nginx/目录中所有的文件
%changelog

你可能感兴趣的:(linux)