zoukankan      html  css  js  c++  java
  • 实战演练: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

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

    点击下图查看更多 ↓

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

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

    请备注:云和恩墨大讲堂

      点个“在看”

    你的喜欢会被看到❤

  • 相关阅读:
    Composite in Javascript
    Model Validation in Asp.net MVC
    HttpRuntime.Cache vs. HttpContext.Current.Cache
    Controller Extensibility in ASP.NET MVC
    The Decorator Pattern in Javascript
    The Flyweight Pattern in Javascript
    Model Binding in ASP.NET MVC
    Asp.net MVC
    jQuery Ajax 实例 全解析
    ASP.NET AJAX入门系列
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13311645.html
Copyright © 2011-2022 走看看