实验环境:
操作系统:CentOS7 x86_x64
Mariadb:mariadb-server-5.5.64-1.el7.x86_64.rpm及相关依赖包
1. 准备Mariadb Server服务器rpm及相关依赖包,如下图
2. 通过如下命令将所有rpm包进行解压,实验时是根据包的依赖顺序进行解压(应该没有影响)
rpm2cpio mariadb-libs-5.5.64-1.el7.x86_64.rpm | cpio -div
3. 查看rpmbuild命令的打包目录
rpmbuild --showrc | grep topdir
//缺省的_topdir = %{getenv:HOME}/rpmbuild
4. 在rpmbuild对应的_topdir中建立相关目录
mkdir /root/rpmbuild
mkdir -pv /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
目录说明:
BUILD 编译之前,如解压包后存放的路径
BUILDROOT 编译后存放的路径
RPMS 打包完成后rpm包存放的路径
SOURCES 源包所放置的路径
SPECS spec文档放置的路径
SPRMS 源码rpm包放置的路径
因为是生成二进制rpm包,所以只使用到BUILDROOT和SPECS目录
5. 编写spec文件并放置到SPECS目录,参见附中的“mariadb-server-all.spec”
6. BUILDROOT目录内容生成
Name: mariadb-server-all
Version: 5.5.64
Release: 1%{?dist}
以spec文件中Name,Version,Release对应的内容生成一个新的目录,本例为“mariadb-server-all-5.5.64-1.el7.x86_64”,将解压rpm包生成etc,usr以及var目录放置到该目录并将该目录放置到BUILDROOT目录。
7. 在rpmbuild目录执行命令生成rpm包,新生成的包放置在RPMS相应目录下
rpm -bb SPECS/mariadb-server-all.spec
本例产生的rpm包RPMS/x86_64/mariadb-server-all-5.5.64-1.el7.x86_64.rpm
8. 安装rpm包
rpm -ivh mariadb-server-all-5.5.64-1.el7.x86_64.rpm --replacefiles
带最后一个“--replacefiles”参数是因为安装时在准备阶段可能会报与其它rpm冲突的错误,无法继续安装。可以先不带该参数进行安装,如果发现冲突则加上该参数。
9. 启动mariadb服务
systemctl start mariadb
注:Spec文件重要字段说明
%files字段:
其中带的值对应BUILDROOT/mariadb-server-all-5.5.64-1.el7.x86_64目录下所对应的目录和文件(不需要包含子目录的内容)。如果是目录则必须以/结尾,这样rpmbuild工具才能识别为一个目录并将其下所有子目录都进行打包。
%post字段:
对应新生成rpm包安装后所执行的脚本,主要工作是建立mysql用户及组并将相关目录的属主改变为mysql用户。(在x86_64上只需要修改些,arm可根据实际情况调整)
# 增加mysql用户组
groupadd -g 27 mysql
# 增加mysql用户
useradd -d /var/lib/mysql -c "MariaDB Server" -g mysql -u 27 -m -s /sbin/nologin mysql
# 修改mysql用户根目录的属主
chown -R mysql:mysql /var/lib/mysql/
# 修改mariadb日志目录的属主
chown -R mysql:mysql /var/log/mariadb
# 修改mariadb启动时pid文件存放目录的属主
chown -R mysql:mysql /var/run/mariadb
附:mariadb-server-all.spec
# 这个区域定义的Name、Version这些字段对应的值可以在后面
# 通过%{name},%{version}这样的方式来引用,类似于C语言中的宏
# Name制定了软件的名称
Name: mariadb-server-all
# 软件版本
Version: 5.5.64
# 释出号,也就是第几次制作rpm
Release: 1%{?dist}
# 软件的介绍,必须设置,最好不要超过50个字符
Summary: mariadb server with all dependence
# 软件的分组,可以通过/usr/share/doc/rpm-4.8.0/GROUPS文件中选择,也可以
# 在相应的分类下,自己创建一个新的类型,例如这里的Server
Group: Application/Server
# 许可证类型
License: GPLv2
# 软件的源站
URL: http://downloads.mariadb.org
# 制作rpm包的人员信息
Packager: Eric
# 软件的描述,这个可以尽情地写
%description
The MariaDB database server is published as free and open source software under the General Public License version 2.
# %prep指定了在编译软件包之前的准备工作,这里的
# setup宏的作用是静默模式解压并切换到源码目录中,
# 当然你也可以使用tar命令来解压
%prep
# 编译阶段,和直接编译源代码类似,具体的操作或指定的一些参数由configure文件决定。
%build
# 安装前执行的脚本,语法和shell脚本的语法相同
%pre
# 安装后执行的脚本
%post
groupadd -g 27 mysql
useradd -d /var/lib/mysql -c "MariaDB Server" -g mysql -u 27 -m -s /sbin/nologin mysql
chown -R mysql:mysql /var/lib/mysql/
chown -R mysql:mysql /var/log/mariadb
chown -R mysql:mysql /var/run/mariadb
# 卸载前执行的脚本,我这里的做的事情是在卸载前将mariadb服务器停掉
%preun
# systemctl stop mariadb
# 卸载完成后执行的脚本
%postun
#指定要包含的文件
%files
#设置默认权限,如果没有指定,则继承默认的权限
%defattr(-,root,root,0755)
/etc/
/usr/
/var/