前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实战演练:MySQL RPM包定制化制作全过程

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

作者头像
数据和云
发布2020-06-17 11:06:00
1.5K0
发布2020-06-17 11:06:00
举报
文章被收录于专栏:数据和云数据和云数据和云

墨墨导读:本文详细介绍一键式安装部署,定制化制作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 0
drwxr-xr-x 3 root root 25 Jul 26 20:51 BUILD
drwxr-xr-x 2 root root  6 Jul 26 20:15 BUILDROOT
drwxr-xr-x 2 root root  6 Jul 26 20:15 RPMS
drwxr-xr-x 2 root root 65 Jul 26 20:51 SOURCES
drwxr-xr-x 2 root root 30 Jul 26 20:41 SPECS
drwxr-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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档