• 实战演练:MySQL RPM包定制化制作全过程


    墨墨导读:本文详细介绍一键式安装部署,定制化制作MySQL RPM包的过程,希望可以帮助到读者朋友 。

    在部署MySQL的时候,经常用RPM包简易安装。非常快,也非常有效。
    rpm的全称是Redhat Package Manager,有五种基本的操作功能:安装、卸载、升级、查询和验证。

    linux软件包分为两大类:
    (1)二进制类包,包括rpm安装包(一般分为i386和x86等几种)
    (2)源码类包,源码包和开发包应该归位此类(.src.rpm)。
    通过官网提供rpmbuild工具,可自行打包软件。下面是制作过程。

    1

    安装工具包


    因为需要通过源码编译,需要按照比较多的依赖包

    yum install make gcc rpm-build rpmdevtools -y
    yum install make cmake gcc gcc-c++ bison libaio ncurses-devel perl perl-DBI perl-DBD-MySQL perl-Time-HiRes readline-devel numactl zlib-devel curldevel
    
    2初始化目录结构
    
    
    mkdir -p /opt/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}[root@ss30 ~]# ll rpmbuild/total 0drwxr-xr-x 3 root root 25 Jul 26 20:51 BUILDdrwxr-xr-x 2 root root  6 Jul 26 20:15 BUILDROOTdrwxr-xr-x 2 root root  6 Jul 26 20:15 RPMSdrwxr-xr-x 2 root root 65 Jul 26 20:51 SOURCESdrwxr-xr-x 2 root root 30 Jul 26 20:41 SPECSdrwxr-xr-x 2 root root  6 Jul 26 20:15 SRPM
    3
    下载源码包
    
    
    
    1)下载mysql 源码:
    
    https://downloads.mysql.com/archives/community/
    
    

    把下载源码包 放到/root/rpmbuild/SOURCES & 同时 把 my.cnf文件也要拷贝放到 目录下:

    2)Mysql5.6后都要依赖boost_1_59_0.tar.gz包,所以这里我直接解压到BUILD目录下,不然检测不到;
    下载地址如下:
    https://www.boost.org/users/history/version_1_59_0.html


    4

    配置文件

    [root@CS20190727 SPECS]# cat mysql5.7.26.spec
    Name:       mysql
    Version:    5.7.26
    Release:    1%{?dist}
    License:    GPL
    URL:        http://downloads.mysql.com/archives/get/file/mysql-5.7.26.tar.gz
    Group:       applications/database
    Source:      %{name}-%{version}.tar.gz
    BuildRoot:  %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
    BuildRequires:  cmake
    Packager:    enmo@enmotech.com
    Autoreq:    no
    #Source: %{name}-%{version}.tar.gz
    prefix: /opt/rpm/mysql-%{version}
    Summary: MySQL 5.7.26
    
    
    
    
    %description
    The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
    and robust SQL (Structured Query Language) database server. MySQL Server
    is intended for mission-critical, heavy-load production systems as well
    as for embedding into mass-deployed software.
    
    
    %define MYSQL_USER mysql
    %define MYSQL_GROUP mysql
    
    
    %prep
    %setup -n mysql-%{version}
    
    
    
    
    %build
    
    
    #CFLAGS="-O3 -g -fno-exceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
    #CXX=g++
    #CXXFLAGS="-O3 -g -fno-exceptions -fno-rtti -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
    #export CFLAGS CXX CXXFLAGS
    
    
    cmake 
    -DCMAKE_INSTALL_PREFIX=%{prefix} 
    -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock 
    -DMYSQL_DATADIR=/data/mysql 
    -DMYSQL_TCP_PORT=3310 
    -DSYSCONFDIR=/etc 
    -DDEFAULT_CHARSET=utf8 
    -DDEFAULT_COLLATION=utf8_general_ci 
    -DEXTRA_CHARSETS=all 
    -DWITH_ARCHIVE_STORAGE_ENGINE=1 
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 
    -DWITH_INNOBASE_STORAGE_ENGINE=1 
    -DWITH_FEDERATED_STORAGE_ENGINE=1 
    -DWITH_PARTITION_STORAGE_ENGINE=1 
    -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 
    -DWITH_DEBUG=0 
    -DENABLED_LOCAL_INFILE=1 
    -DWITH_BOOST=../boost_1_59_0  
    -Wno-dev
    
    
    make -j `cat /proc/cpuinfo | grep processor| wc -l`
    
    
    %install
    rm -rf %{buildroot}
    make install DESTDIR=%{buildroot}
    cp %{_sourcedir}/my.cnf $RPM_BUILD_ROOT%{prefix}/
    
    
    
    
    %pre
    groupadd mysql
    useradd -g mysql -s /bin/nologin -M mysql >/dev/null 2>&1
    
    
    mkdir -p /data
    mkdir -p /data/mysql
    mkdir -p /data/mysqltmp
    mkdir -p /data/dbdata
    
    
    chown -R mysql:mysql /data
    chmod 700 /data/mysqltmp
    
    
    %post
    /bin/cp %{prefix}/support-files/mysql.server /etc/init.d/mysql
    /bin/cp %{prefix}/my.cnf %{_sysconfdir}/my.cnf
    chkconfig mysql on
    %{prefix}/bin/mysqld --initialize-insecure --basedir=%{prefix} --datadir=/data/mysql --user=mysql
    service mysql start
    chown -R mysql:mysql /data/mysql
    echo "export PATH=.:$PATH:%{prefix}/bin;" >> ~/.bash_profile
    source ~/.bash_profile
    
    
    %preun
    service mysql stop
    chkconfig --del mysql
    userdel -r mysql >/dev/null 2>&1
    rm -rf %{prefix} >/dev/null 2>&1
    rm -rf /data/mysql >/dev/null 2>&1
    rm -rf /etc/init.d/mysql >/dev/null 2>&1
    
    
    %files
    %defattr(-, %{MYSQL_USER}, %{MYSQL_GROUP})
    %attr(755, %{MYSQL_USER}, %{MYSQL_GROUP}) %{prefix}/*
    
    
    %changelog
    


    Name: 软件包的名称,后面可使用%{name}的方式引用
    Summary: 软件包的内容概要
    Version: 软件的实际版本号,例如:1.0.1等,后面可使用%{version}引用
    Release: 发布序列号,例如:1linuxing等,标明第几次打包,后面可使用%{release}引用
    Group: 软件分组,建议使用标准分组
    License: 软件授权方式,通常就是GPL
    Source: 源代码包,可以带多个用Source1、Source2等源,后面也可以用%{source1}、%{source2}引用
    BuildRoot: 这个是安装或编译时使用的“虚拟目录”
    URL: 软件的主页
    Vendor: 发行商或打包组织的信息,例如RedFlag Co,Ltd
    Disstribution: 发行版标识
    Prefix: %{_prefix} 这个主要是为了解决今后安装rpm包时
    %description 软件的详细说明

    %build 开始构建包
    %install 开始把软件安装到虚拟的根目录中
    %clean 清理临时文件
    %files 定义那些文件或目录会放入rpm中
    %changelog 变更日志

    %setu安装p -n %{name}-%{version} 把源码包解压并放好
    %pre rpm前执行的脚本
    %post rpm安装后执行的脚本
    %preun rpm卸载前执行的脚本
    %postun rpm卸载后执行的脚本

    5

    执行命令打包

    [root@ss30 ~]# cd  /root[root@ss30 ~]# rpmbuild -bb rpmbuild/SPECS/mysql5.7.26.spec
    
    完成后在rpmbuild/RPM目录下就会两个rpm包
    
    
    
    

    6

    rpm安装MySQL

    直接安装,安装完成后会直接启动Mysql:

    7

    参考

    错误处理:
    rpmbuild 构建rpm包时报错解决 error: Installed (but unpackaged) file(s) found:
    解决的办法:
    找到 /usr/lib/rpm/macros 中
    %__check_files     /usr/lib/rpm/check-files %{buildroot}   注释掉

    文档:
    https://wiki.centos.org/HowTos/SetupRpmBuildEnvironment
    https://blog.51cto.com/songhl/2152087
    https://www.58jb.com/html/149.html
    https://docs.fedoraproject.org/en-US/packaging-guidelines/RPMMacros/

    墨天轮原文链接:https://www.modb.pro/db/25614(复制到浏览器中打开或者点击“阅读原文”)

    推荐阅读:144页!分享珍藏已久的数据库技术年刊

    数据和云

    ID:OraNews

    如有收获,请划至底部,点击“在看”,谢谢!

    点击下图查看更多 ↓

    云和恩墨大讲堂 | 一个分享交流的地方

    长按,识别二维码,加入万人交流社群

    请备注:云和恩墨大讲堂

      点个“在看”

    你的喜欢会被看到❤

  • 相关阅读:
    用Python作GIS:择菜篇
    【嵌入式开发技术之串口】Linux下串口主机程序
    1033,2052 是什么意思?
    Telnet协议详解
    生活情景英语:英语国家生存英语精选
    windows下搭建iphone开发环境
    开公司的流程
    解决某物流企业二维码打印问题
    数字黑洞
    InnoSetup 打包代码 检测.netFramework
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13311645.html
Copyright © 2020-2023  润新知