20 Star 109 Fork 54

万里数据库/GreatSQL-Doc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
build-greatsql-with-source.md 6.70 KB
一键复制 编辑 原始数据 按行查看 历史

在CentOS环境下源码编译安装GreatSQL

写在前面

开始之前,请先了解 GreatSQL Build Docker镜像,使用它可以实现自动化完成GreatSQL源码编译工作,本文则是全手工操作方式。

本次介绍如何利用Docker来将GreatSQL源码编译成二进制文件。

本文介绍的运行环境是CentOS 8:

[root@c8ci ~]# cat /etc/redhat-release
CentOS Linux release 8.3.2011

[root@c8ci ~]# uname -a
Linux c8ci 4.18.0-305.19.1.el8_4.x86_64 #1 SMP Wed Sep 15 15:39:39 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

1、准备工作

1.1、配置yum源

开始编译之前,建议先配置好yum源,方便安装一些工具。

以阿里云主机为例,可以这样配置:

# 直接替换yum源文件,并替换部分资源
[root@c8ci ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@c8ci ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

# 删除其他无用的yum源文件
[root@c8ci ~]# rm -f /etc/yum.repos.d/CentOS-Linux-*

#替换完后,更新缓存
[root@c8ci ~]# yum clean all
[root@c8ci ~]# yum makecache

1.2、安装docker

安装docker,并启动docker进程。

[root@c8ci]# yum install -y docker
[root@c8ci]# systemctl start docker

1.3、构建docker镜像

用下面这份Dockerfile构建镜像,这里以CentOS 8为例:

FROM centos:8
ENV LANG en_US.utf8

LABEL maintainer="greatsql.cn" \
email="greatsql@greatdb.com" \
forum="https://greatsql.cn/forum.php" \
gitee="https://gitee.com/GreatSQL/GreatSQL-Docker"

ARG MYSQL_UID=3306 \
MYSQL_USER=mysql \
OPT_DIR=/opt \
BOOST_SRC_DOWNLOAD_URL="https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source" \
GREATSQL_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/master/GreatSQL-Build" \
GREATSQL_SRC_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-8.0.32-25" \
GREATSQL_MAKESH="greatsql-automake.sh" \
ENTRYPOINT="docker-entrypoint.sh" \
GREATSQL="greatsql-8.0.32-25.tar.xz" \
PATCHELF="patchelf-0.14.5" \
BOOST="boost_1_77_0.tar.gz" \
RPCGEN="rpcgen-1.3.1-4.el8.x86_64.rpm" \
DEPS="autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \
gcc-toolset-11 gcc-toolset-11-annobin-plugin-gcc jemalloc jemalloc-devel krb5-devel libaio-devel \
libcurl-devel libtirpc-devel libudev-devel m4 make ncurses-devel numactl-devel openldap-devel \
openssl openssl-devel pam-devel readline-devel zlib-devel wget"

RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*; \
rm -f /etc/yum.repos.d/CentOS-Linux-* ; \
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo > /dev/null 2>&1 && \
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo > /dev/null 2>&1 && \
rm -f /etc/yum.repos.d/CentOS-Linux-* ; \
dnf clean all > /dev/null 2>&1 && \
dnf makecache > /dev/null 2>&1 && \
dnf update -y > /dev/null 2>&1 && \
rm -f /etc/yum.repos.d/CentOS-Linux-* ; \
dnf install -y epel-release > /dev/null 2>&1 && \
dnf install -y ${DEPS} > /dev/null 2>&1 && \
source /opt/rh/gcc-toolset-11/enable > /dev/null 2>&1 && \
echo 'source /opt/rh/gcc-toolset-11/enable' >> /root/.bash_profile; \
/usr/sbin/groupadd -g ${MYSQL_UID} ${MYSQL_USER} && \
/usr/sbin/useradd -u ${MYSQL_UID} -g ${MYSQL_UID} -s /sbin/nologin ${MYSQL_USER} && \
dnf install -y ${GREATSQL_BUILD_DOWNLOAD_URL}/${RPCGEN} > /dev/null 2>&1 && \
curl -o ${OPT_DIR}/${GREATSQL_MAKESH} ${GREATSQL_BUILD_DOWNLOAD_URL}/${GREATSQL_MAKESH} > /dev/null 2>&1 && \
curl -o /${ENTRYPOINT} ${GREATSQL_BUILD_DOWNLOAD_URL}/${ENTRYPOINT} > /dev/null 2>&1 && \
chmod +x ${OPT_DIR}/${GREATSQL_MAKESH} /${ENTRYPOINT} > /dev/null 2>&1 && \
curl -o ${OPT_DIR}/${PATCHELF}.tar.gz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PATCHELF}.tar.gz > /dev/null 2>&1 && \
tar xf ${OPT_DIR}/${PATCHELF}.tar.gz -C ${OPT_DIR} > /dev/null 2>&1 && \
wget -c -O ${OPT_DIR}/${BOOST} ${BOOST_SRC_DOWNLOAD_URL}/${BOOST} > /dev/null 2>&1 && \
tar xf ${OPT_DIR}/${BOOST} -C /opt > /dev/null 2>&1 && \
curl -o ${OPT_DIR}/${GREATSQL} ${GREATSQL_SRC_DOWNLOAD_URL}/${GREATSQL} > /dev/null 2>&1 && \
tar xf ${OPT_DIR}/${GREATSQL} -C /opt > /dev/null 2>&1 && \
chown -R ${MYSQL_USER}:${MYSQL_USER} ${OPT_DIR} > /dev/null 2>&1 && \
chmod +x /docker-entrypoint.sh

ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["bash"]

开始构建docker镜像

[root@c8ci ~]# docker build -t greatsql/greatsql_build .

创建一个新Docker容器,即可自动完成GreatSQL源码编译工作:

[root@c8ci ~]# docker run -itd --name greatsql_build --hostname=greatsql_build greatsql/greatsql_build bash

查看自动编译进展

[root@c8ci ~]# docker logs greatsql_build

1. compile patchelf
2. entering greatsql automake
3. greatsql automake completed
drwxrwxr-x 13 mysql mysql       293 Feb 18 08:29 GreatSQL-8.0.32-25-centos-glibc2.28-x86_64
/opt/GreatSQL-8.0.32-25-centos-glibc2.28-x86_64/bin/mysqld  Ver 8.0.32-25 for Linux on x86_64 (GreatSQL, Release 25, Revision 79f57097e3f)
4. entering /bin/bash

这就自动完成GreatSQL源码编译工作了。

如果需要自定义编译参数,可以下载 greatsql-automake.sh 脚本自行修改,然后删除 Dockerfile第50行附近,在最后改成 COPY 方式,把在本地修改后的文件拷贝到Docker容器中,类似下面这样:

FROM centos:8
ENV LANG en_US.utf8

...
dnf install -y ${GREATSQL_BUILD_DOWNLOAD_URL}/${RPCGEN} > /dev/null 2>&1 && \
curl -o /${ENTRYPOINT} ${GREATSQL_BUILD_DOWNLOAD_URL}/${ENTRYPOINT} > /dev/null 2>&1 && \
...
chmod +x /docker-entrypoint.sh

#删除curl下载greatsql-automake.sh脚本工作,改成COPY
COPY ${GREATSQL_MAKESH} ${OPT_DIR}

ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["bash"]

延伸阅读

全文完。

Enjoy GreatSQL

Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/GreatSQL/GreatSQL-Doc.git
git@gitee.com:GreatSQL/GreatSQL-Doc.git
GreatSQL
GreatSQL-Doc
GreatSQL-Doc
master

搜索帮助