代码拉取完成,页面将自动刷新
开始之前,请先了解 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
开始编译之前,建议先配置好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
安装docker,并启动docker进程。
[root@c8ci]# yum install -y docker
[root@c8ci]# systemctl start 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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。