Mariadb服务器二进制依赖包合成为一个RPM安装包

实验环境:

    操作系统:CentOS7 x86_x64

    Mariadb:mariadb-server-5.5.64-1.el7.x86_64.rpm及相关依赖包

1. 准备Mariadb Server服务器rpm及相关依赖包,如下图

Mariadb All 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/

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值