diff --git a/GreatSQL-Build/Dockerfile b/GreatSQL-Build/Dockerfile deleted file mode 100644 index e97200087ac3b81b854c96809e6ce0c3502f6888..0000000000000000000000000000000000000000 --- a/GreatSQL-Build/Dockerfile +++ /dev/null @@ -1,48 +0,0 @@ -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 OPT_DIR=/opt \ -MYSQL_UID=3306 \ -MYSQL_USER=mysql \ -GREATSQL_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.0.32-25/GreatSQL-Build" \ -GREATSQL_ENV="greatsql-setenv.sh" \ -ENTRYPOINT="docker-entrypoint.sh" \ -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 wget zlib-devel" - -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} && \ -curl -o ${OPT_DIR}/${GREATSQL_ENV} ${GREATSQL_BUILD_DOWNLOAD_URL}/${GREATSQL_ENV} > /dev/null 2>&1 && \ -curl -o /${ENTRYPOINT} ${GREATSQL_BUILD_DOWNLOAD_URL}/${ENTRYPOINT} > /dev/null 2>&1 && \ -chmod +x /*sh ${OPT_DIR}/*sh - -ENTRYPOINT ["/docker-entrypoint.sh"] -CMD ["bash"] diff --git a/GreatSQL-Build/README.md b/GreatSQL-Build/README.md index de3fa1d0a79a9d5e1d0e47e329a4f2790d1d4baf..b709303dbfa47ea83c6a831d9300cdafd6a6f569 100644 --- a/GreatSQL-Build/README.md +++ b/GreatSQL-Build/README.md @@ -1,63 +1,131 @@ -# GreatSQL-Build Docker ---- - -全自动编译GreatSQL源码,生成二进制包。 - -适用于CentOS 8 x86_64/aarch64 环境,更多环境适配请自行修改Dockerfile及相关脚本中的参数。 - -## 1. GreatSQL Build Docker镜像构建 - -```shell -$ docker build -t greatsql/greatsql_build . -``` -上述命令会查找当前目录下的 `Dockerfile` 文件,并构建名为 `greatsql/greatsql_build` 的Docker镜像。 - -在构建镜像时,会自动从服务器上下载相应的源码包文件、初始化脚本等文件,并全自动化方式完成镜像构建工作。 - -## 2. GreatSQL Build Docker镜像使用 - -```shell -# 创建新容器 -$ docker run -itd --hostname greatsql_build --name greatsql_build greatsql/greatsql_build bash - -# 查看自动编译进展 -$ docker logs greatsql_build - -0. touch logfile /tmp/greatsql-automake.log - -1. downloading sourcecode tarballs and extract - 1.1 downloading sourcecode tarballs ... - 1.2 extract tarballs ... - -2. compile patchelf - -3. compile GreatSQL - 3.1 compiling GreatSQL - 3.2 remove mysql-test from GreatSQL - 3.3 make dynamic link for GreatSQL - -4. greatsql build completed! -drwxrwxr-x 13 mysql mysql 293 Feb 22 01:33 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) - -5. remove files and clean up -``` - -可以看到已经完成编译,如果需要的话,可以将Docker容器中的二进制包文件拷贝到宿主机上,例如: -```shell -$ docker cp greatsql_build:/opt/GreatSQL-8.0.32-25-centos-glibc2.28-x86_64 /usr/local/ -``` - -如果宿主机环境也是CentOS 8 x86_64的话,这就可以在宿主机环境下直接使用该二进制文件包了。 - -## 文件介绍 -- CHANGELOG.md,更新历史 -- docker-entrypoint.sh,镜像初始化脚本,该脚本中再调用greatsql-automake.sh实现自动编译。 -- Dockerfile,用于构建GreatSQL编译环境 -- greatsql-automake.sh,GreatSQL自动编译脚本 -- greatsql-setenv.sh,通用环境变量设置脚本 - -## 联系我们 -扫码关注微信公众号 - -![GreatSQL社区微信公众号二维码](https://images.gitee.com/uploads/images/2021/0802/143402_f9d6cb61_8779455.jpeg "greatsql社区-wx-qrcode-0.5m.jpg") +# GreatSQL-Build Docker +--- + +全自动编译GreatSQL源码,生成二进制包。 + +适用于[CentOS 7 x86_64], [CentOS8 x86_64/aarch64] [RockyLinux9 x86_64/aarch64] [RHRL9 x86_64/aarch64] [AlmaLinux9 x86_64/aarch64] 环境,更多环境适配请自行修改Dockerfile及相关脚本中的参数。 + +## 1. GreatSQL Build Docker镜像构建 + +```shell +$ git clone + +centos7: +$ cd GreatSQL-Docker/GreatSQL-Build/centos7 +$ docker build -t greatsql/greatsql_centos7 . + +centos8: +$ cd GreatSQL-Docker/GreatSQL-Build/centos8 +$ docker build -t greatsql/greatsql_centos8 . + +rocky9: +$ cd GreatSQL-Docker/GreatSQL-Build/rocky9 +$ docker build -t greatsql/greatsql_rocky9 . + +rhel9: +$ cd GreatSQL-Docker/GreatSQL-Build/rhel9 +$ docker build -t greatsql/greatsql_rhel9 . + +alma9: +$ cd GreatSQL-Docker/GreatSQL-Build/alma9 +$ docker build -t greatsql/greatsql_alma9 . +``` +上述命令会查找当前目录下的 `Dockerfile` 文件,并构建名为 `greatsql/greatsql_[centos7/centos8/rocky9] ` 的Docker镜像。 + +在构建镜像时,会自动从服务器上下载相应的源码包文件、初始化脚本等文件,并全自动化方式完成镜像构建工作。 + +## 2. GreatSQL Build Docker镜像使用 + +```shell +# 创建新容器 +centos7: +$ docker run -itd --hostname greatsql_centos7 --name greatsql_centos7 greatsql/greatsql_centos7 bash + +centos8: +$ docker run -itd --hostname greatsql_centos8 --name greatsql_centos8 greatsql/greatsql_centos8 bash + +rocky9: +$ docker run -itd --hostname greatsql_rocky9 --name greatsql_rocky9 greatsql/greatsql_rocky9 bash + +rhel9: +$ docker run -itd --hostname greatsql_rhel9 --name greatsql_rhel9 greatsql/greatsql_rhel9 bash + +alma9: +$ docker run -itd --hostname greatsql_alma9 --name greatsql_alma9 greatsql/greatsql_alma9 bash + +# 查看自动编译进展 +centos7: +$ docker logs greatsql_centos7 + +centos8: +$ docker logs greatsql_centos8 + +rocky9: +$ docker logs greatsql_rocky9 + +rhel9: +$ docker logs greatsql_rhel9 + +alma9: +$ docker logs greatsql_alma9 + +0. touch logfile /tmp/greatsql-automake.log + +1. downloading sourcecode tarballs and extract + 1.1 downloading sourcecode tarballs ... + 1.2 extract tarballs ... + +2. compile patchelf + +3. compile GreatSQL + 3.1 compiling GreatSQL + 3.2 remove mysql-test from GreatSQL + 3.3 make dynamic link for GreatSQL + +4. greatsql build completed! +centos7: +drwxrwxr-x 13 mysql mysql 293 Feb 22 01:33 GreatSQL-8.0.32-25-Linux-el7-glibc2.17-x86_64 +/opt/GreatSQL-8.0.32-25-Linux-el7-glibc2.17-x86_64/bin/mysqld Ver 8.0.32-25 for Linux on x86_64 (GreatSQL, Release 25, Revision 79f57097e3f) + +centos8: +drwxrwxr-x 13 mysql mysql 293 Feb 22 01:33 GreatSQL-8.0.32-25-Linux-el8-glibc2.28-x86_64 +/opt/GreatSQL-8.0.32-25-Linux-el8-glibc2.28-x86_64/bin/mysqld Ver 8.0.32-25 for Linux on x86_64 (GreatSQL, Release 25, Revision 79f57097e3f) + +rhel9/rocky9/alma9: +drwxrwxr-x 13 root root 293 Mar 22 08:12 GreatSQL-8.0.32-25-Linux-el9-glibc2.34-x86_64 +/opt/GreatSQL-8.0.32-25-Linux-el9-glibc2.34-x86_64-minimal/bin/mysqld Ver 8.0.32-25 for Linux on x86_64 (GreatSQL, Release 25, Revision 79f57097e3f) + +5. remove files and clean up +``` + +可以看到已经完成编译,如果需要的话,可以将Docker容器中的二进制包文件拷贝到宿主机上,例如: +```shell +centos7: +$ docker cp greatsql_centos7:/opt/GreatSQL-8.0.32-25-Linux-el7-glibc2.17-x86_64.tar.gz /usr/local/ + +centos8: +$ docker cp greatsql_centos8:/opt/GreatSQL-8.0.32-25-Linux-el8-glibc2.28-x86_64.tar.gz /usr/local/ + +rocky9: +$ docker cp greatsql_rocky9:/opt/GreatSQL-8.0.32-25-Linux-el9-glibc2.34-x86_64.tar.gz /usr/local/ + +rhel9: +$ docker cp greatsql_rhel9:/opt/GreatSQL-8.0.32-25-Linux-el9-glibc2.34-x86_64.tar.gz /usr/local/ + +alma9: +$ docker cp greatsql_alma9:/opt/GreatSQL-8.0.32-25-Linux-el9-glibc2.34-x86_64.tar.gz /usr/local/ +``` + +如果宿主机环境也是CentOS 7/8 x86_64的话,这就可以在宿主机环境下直接使用该二进制文件包了。 + +## 文件介绍 +- CHANGELOG.md,更新历史 +- docker-entrypoint.sh,镜像初始化脚本,该脚本中再调用greatsql-automake.sh实现自动编译。 +- Dockerfile,用于构建GreatSQL编译环境 +- greatsql-automake.sh,GreatSQL自动编译脚本 +- greatsql-setenv.sh,通用环境变量设置脚本 + +## 联系我们 +扫码关注微信公众号 + +![GreatSQL社区微信公众号二维码](https://images.gitee.com/uploads/images/2021/0802/143402_f9d6cb61_8779455.jpeg "greatsql社区-wx-qrcode-0.5m.jpg") diff --git a/GreatSQL-Build/alma9/Dockerfile b/GreatSQL-Build/alma9/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..6bf5682ae842069b0a517be1d76708fdb640a2e9 --- /dev/null +++ b/GreatSQL-Build/alma9/Dockerfile @@ -0,0 +1,30 @@ +FROM almalinux:9 +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 OPT_DIR=/opt +ARG MYSQL_UID=3306 +ARG MYSQL_USER=mysql + +ARG GREATSQL_ENV="greatsql-setenv.sh" +ARG ENTRYPOINT="docker-entrypoint.sh" +ARG GREATSQL_AUTOMAKE="greatsql-automake.sh" + +RUN /usr/sbin/groupadd -g ${MYSQL_UID} ${MYSQL_USER} && \ +/usr/sbin/useradd -u ${MYSQL_UID} -g ${MYSQL_UID} -s /sbin/nologin ${MYSQL_USER} + +RUN mkdir -p ${OPT_DIR} +COPY greatsql-setenv.sh ${OPT_DIR}/${GREATSQL_ENV} +COPY docker-entrypoint.sh ${OPT_DIR}/${ENTRYPOINT} +COPY greatsql-automake.sh ${OPT_DIR}/${GREATSQL_AUTOMAKE} + + +RUN chmod +x ${OPT_DIR}/*sh + +ENTRYPOINT ["/opt/docker-entrypoint.sh"] + +CMD ["bash"] diff --git a/GreatSQL-Build/alma9/docker-entrypoint.sh b/GreatSQL-Build/alma9/docker-entrypoint.sh new file mode 100644 index 0000000000000000000000000000000000000000..f9f4b97eab7f9dd57c9bbe19efc6a4b48147a952 --- /dev/null +++ b/GreatSQL-Build/alma9/docker-entrypoint.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +. /opt/greatsql-setenv.sh + +echo "0. touch logfile ${MAKELOG}" +echo "0.1 touch logfile ${MAKELOG}" +touch ${MAKELOG} && \ +chown ${MYSQL_USER}:${MYSQL_USER} ${MAKELOG} && \ +chmod 0777 ${MAKELOG} && \ +echo "0.2 install all DEPS(autoconf, gcc ...)" && \ +dnf install -y epel-release almalinux-release-devel >> ${MAKELOG} 2>&1 && \ +dnf config-manager --enable plus devel crb && \ +dnf install -y ${DEPS} --nobest --allowerasing >> ${MAKELOG} 2>&1 && \ +echo "1. downloading sourcecode tarballs and extract" && \ +echo "1. downloading sourcecode tarballs and extract" >> ${MAKELOG} 2>&1 && \ +echo && \ +echo "1. downloading sourcecode tarballs and extract" +cd ${OPT_DIR} && \ +echo " 1.1 downloading sourcecode tarballs ..." && \ +wget -c -O ${PATCHELF}.tar.gz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PATCHELF}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${BOOST}.tar.gz ${BOOST_SRC_DOWNLOAD_URL}/${BOOST}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${GREATSQL_SRC}.tar.xz ${GREATSQL_SRC_DOWNLOAD_URL}/${GREATSQL_SRC}.tar.xz >> ${MAKELOG} 2>&1 && \ +echo " 1.2 extract tarballs ..." && \ +tar xf ${OPT_DIR}/${PATCHELF}*z && \ +tar xf ${OPT_DIR}/${BOOST}*z && \ +tar xf ${OPT_DIR}/${GREATSQL_SRC}*z && \ +chown -R ${MYSQL_USER}:${MYSQL_USER} ${OPT_DIR} && \ +chmod +x ${OPT_DIR}/*sh && \ +echo && \ +echo "2. compile patchelf"; \ +cd ${OPT_DIR}/${PATCHELF} && ./bootstrap.sh >> ${MAKELOG} > /dev/null 2>&1 && \ +./configure >> ${MAKELOG} > /dev/null 2>&1 && \ +make >> ${MAKELOG} > /dev/null 2>&1 && \ +make install >> ${MAKELOG} > /dev/null 2>&1 && \ +echo && \ +echo "3. compile GreatSQL"; \ +su - ${MYSQL_USER} -s /bin/bash -c "cd /opt; /bin/sh /opt/greatsql-automake.sh" && \ +echo && \ +echo "4. greatsql build completed!" ; \ +ls -la ${OPT_DIR} | grep GreatSQL.*glibc.* && ${OPT_DIR}/GreatSQL*glibc*/bin/mysqld --verbose --version && \ +echo && \ +echo "5. remove files and clean up" ;\ +cd ${OPT_DIR} && rm -rf ${BOOST} ${GREATSQL_SRC} ${PATCHELF} +/bin/bash diff --git a/GreatSQL-Build/greatsql-automake.sh b/GreatSQL-Build/alma9/greatsql-automake.sh old mode 100755 new mode 100644 similarity index 89% rename from GreatSQL-Build/greatsql-automake.sh rename to GreatSQL-Build/alma9/greatsql-automake.sh index 3aa65d942b2b910dc450540dea5a2931fab1bf7a..8485097d9100ea72fdbe742bde203b3e39df0c6e --- a/GreatSQL-Build/greatsql-automake.sh +++ b/GreatSQL-Build/alma9/greatsql-automake.sh @@ -33,7 +33,7 @@ function gather_libs { if [ ! -f "lib/private/${lib_realpath_basename}" ] && [ ! -L "lib/private/${lib_realpath_basename}" ]; then - + echo "Copying lib ${lib_realpath_basename}" cp ${lib_realpath} lib/private @@ -130,8 +130,6 @@ function link { done } -rm -fr ${MAKELOG} - cd ${OPT_DIR}/${GREATSQL_SRC} && \ rm -fr bld && \ mkdir bld && \ @@ -182,26 +180,31 @@ echo " 3.2 remove mysql-test from GreatSQL" rm -fr ${DEST_DIR}/mysql-test 2 > /dev/null echo " 3.3 make dynamic link for GreatSQL" -# strip binaries to get minimal package -# 如果想生成minial包,就取消195-204行注释 -#minimal=true -#echo "minimal = ${minimal}" >> ${MAKELOG} 2>&1 -#echo "link ${DEST_DIR}-minimal" >> ${MAKELOG} 2>&1 -#( -# cp -rp ${DEST_DIR} ${DEST_DIR}-minimal -# cd ${DEST_DIR}-minimal -# find . -type f -exec file '{}' \; | grep ': ELF ' | cut -d':' -f1 | xargs strip --strip-unneeded -# link >> ${MAKELOG} 2>&1 -#) -#如果要打包压缩,就把下面两行注释去掉 -#tar -cf ${DEST_DIR}-minimal.tar ${DEST_DIR}-minimal -#xz -9 -f -T${MAKE_JOBS} ${DEST_DIR}-minimal.tar ${DEST_DIR}-minimal - -minimal=false -( - cd ${DEST_DIR} - link >> ${MAKELOG} 2>&1 -) -#如果要打包压缩,就把下面两行注释去掉 -#tar -cf ${DEST_DIR}.tar ${DEST_DIR} -#xz -9 -f -T${MAKE_JOBS} ${DEST_DIR}.tar.xz ${DEST_DIR} +# strip binaries to get minimal/all package +function tar_minimal { + minimal=true + echo "minimal = ${minimal}" >> ${MAKELOG} 2>&1 + echo "link ${DEST_DIR}-minimal" >> ${MAKELOG} 2>&1 + ( + cp -rp ${DEST_DIR} ${DEST_DIR}-minimal + cd ${DEST_DIR}-minimal + find . -type f -exec file '{}' \; | grep ': ELF ' | cut -d':' -f1 | xargs strip --strip-unneeded + link >> ${MAKELOG} 2>&1 + ) + tar -czf ${DEST_DIR}-minimal.tar.gz ${DEST_DIR}-minimal + ls -lsh ${DEST_DIR}-minimal.tar.gz +} +# 如果想生成minial包,就把下面行注释去掉 +tar_minimal + +function tar_all { + minimal=false + ( + cd ${DEST_DIR} + link >> ${MAKELOG} 2>&1 + ) + tar -czf ${DEST_DIR}.tar.gz ${DEST_DIR} + ls -lsh ${DEST_DIR}.tar.gz +} +#如果要打包完整压缩,就把下面行注释去掉 +tar_all diff --git a/GreatSQL-Build/alma9/greatsql-setenv.sh b/GreatSQL-Build/alma9/greatsql-setenv.sh new file mode 100644 index 0000000000000000000000000000000000000000..fe4c7ddd5ca195f6a70a8130023e666c8b161cdd --- /dev/null +++ b/GreatSQL-Build/alma9/greatsql-setenv.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +. ~/.bash_profile + +MAKE_JOBS=`lscpu | grep '^CPU(s)'|awk '{print $NF}'` +if [ ${MAKE_JOBS} -ge 16 ] ; then + MAKE_JOBS=`expr ${MAKE_JOBS} - 4` +else + MAKE_JOBS=`expr ${MAKE_JOBS} - 1` +fi + +MAJOR_VERSION=8 +MINOR_VERSION=0 +PATCH_VERSION=32 +RELEASE=25 +REVISION=79f57097e3f +OPT_DIR=/opt +GLIBC=`ldd --version | head -n 1 | awk '{print $NF}'` +ARCH=`uname -p` +#OS=`grep '^ID=' /etc/os-release | sed 's/.*"\(.*\)".*/\1/ig'` +OS=Linux +OSPATCH="el9" +GREATSQL=GreatSQL-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE}-${OS}-${OSPATCH}-glibc${GLIBC}-${ARCH} +MAKELOG=/tmp/greatsql-automake.log +MYSQL_USER=root +DEST_DIR=${OPT_DIR}/${GREATSQL} +GREATSQL_SRC=greatsql-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE} +GREATSQL_BUILD_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-Docker/deppkgs" +GREATSQL_SRC_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-8.0.32-25" +BOOST_SRC_DOWNLOAD_URL="https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source" +BOOST="boost_1_77_0" +PATCHELF="patchelf-0.14.5" + +DEPS="less file file-libs autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ +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 wget zlib-devel \ +iputils tar gzip xz wget langpacks-en glibc-langpack-en libmodulemd autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ +libffi libffi-devel libxml2-devel libxml2 libyaml bzip2 bzip2-libs bzip2-devel \ +libcurl-devel libssh libssh-config libssh-devel \ +libtirpc libtirpc-devel libuuid libuuid-devel m4 make ncurses-devel openssl openssl-devel \ +patch uuid wget zlib-devel \ +python3 python3-devel python3-libs python3-pyyaml \ +git numactl-devel rpm-build gcc gcc-c++ gcc-plugin-annobin gperf ncurses-devel readline-devel openssl-devel jemalloc zstd \ +time zlib-devel libaio-devel bison cmake3 cmake pam-devel libeatmydata jemalloc-devel pkg-config \ +libcurl-devel openldap-devel unzip wget libcurl-devel patchelf systemd-devel \ +perl perl-Time-HiRes perl-Env perl-Data-Dumper perl-JSON perl-Digest perl-Digest-MD5 perl-Digest-Perl-MD5 \ +binutils gcc gcc-c++ tar rpm-build rsync bison glibc glibc-devel libstdc++-devel make openssl-devel pam-devel perl perl-JSON perl-Memoize pkg-config \ +automake autoconf cmake cmake3 jemalloc jemalloc-devel \ +libaio-devel ncurses-devel numactl-devel readline-devel time \ +rpcgen \ +libzstd libzstd-devel \ +cyrus-sasl-devel cyrus-sasl-scram krb5-devel" + +CMAKE_EXE_LINKER_FLAGS="" +if [ ${ARCH} = "x86_64" ] ; then + CMAKE_EXE_LINKER_FLAGS=" -ljemalloc " +fi diff --git a/GreatSQL-Build/centos7/CentOS-Base-tencent.repo b/GreatSQL-Build/centos7/CentOS-Base-tencent.repo new file mode 100644 index 0000000000000000000000000000000000000000..7efd0e704c615f074c1cd72ca45c7087794e8866 --- /dev/null +++ b/GreatSQL-Build/centos7/CentOS-Base-tencent.repo @@ -0,0 +1,53 @@ +# CentOS-Base.repo +# +# The mirror system uses the connecting IP address of the client and the +# update status of each mirror to pick mirrors that are updated to and +# geographically close to the client. You should use this for CentOS updates +# unless you are manually picking other mirrors. +# +# If the mirrorlist= does not work for you, as a fall back you can try the +# remarked out baseurl= line instead. +# +# + +[os] +name=Qcloud centos os - $basearch +baseurl=http://mirrors.cloud.tencent.com/centos/$releasever/os/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://mirrors.cloud.tencent.com/centos/RPM-GPG-KEY-CentOS-7 + +[updates] +name=Qcloud centos updates - $basearch +baseurl=http://mirrors.cloud.tencent.com/centos/$releasever/updates/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://mirrors.cloud.tencent.com/centos/RPM-GPG-KEY-CentOS-7 + +[centosplus] +name=Qcloud centosplus - $basearch +baseurl=http://mirrors.cloud.tencent.com/centos/$releasever/centosplus/$basearch/ +enabled=0 +gpgcheck=1 +gpgkey=http://mirrors.cloud.tencent.com/centos/RPM-GPG-KEY-CentOS-7 + +[cr] +name=Qcloud centos cr - $basearch +baseurl=http://mirrors.cloud.tencent.com/centos/$releasever/cr/$basearch/ +enabled=0 +gpgcheck=1 +gpgkey=http://mirrors.cloud.tencent.com/centos/RPM-GPG-KEY-CentOS-7 + +[extras] +name=Qcloud centos extras - $basearch +baseurl=http://mirrors.cloud.tencent.com/centos/$releasever/extras/$basearch/ +enabled=1 +gpgcheck=1 +gpgkey=http://mirrors.cloud.tencent.com/centos/RPM-GPG-KEY-CentOS-7 + +[fasttrack] +name=Qcloud centos fasttrack - $basearch +baseurl=http://mirrors.cloud.tencent.com/centos/$releasever/fasttrack/$basearch/ +enabled=0 +gpgcheck=1 +gpgkey=http://mirrors.cloud.tencent.com/centos/RPM-GPG-KEY-CentOS-7 diff --git a/GreatSQL-Build/centos7/CentOS-Base.repo b/GreatSQL-Build/centos7/CentOS-Base.repo new file mode 100644 index 0000000000000000000000000000000000000000..6962ae4f54bc39aad8c00e23c846a993303d000d --- /dev/null +++ b/GreatSQL-Build/centos7/CentOS-Base.repo @@ -0,0 +1,44 @@ +# CentOS-Base.repo +# +# The mirror system uses the connecting IP address of the client and the +# update status of each mirror to pick mirrors that are updated to and +# geographically close to the client. You should use this for CentOS updates +# unless you are manually picking other mirrors. +# +# If the mirrorlist= does not work for you, as a fall back you can try the +# remarked out baseurl= line instead. +# +# + +[base] +name=CentOS-7 - Base +mirrorlist=http://mirrorlist.centos.org/?release=7&arch=$basearch&repo=os&infra=$infra +#baseurl=http://mirror.centos.org/centos/7/os/$basearch/ +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 + +#released updates +[updates] +name=CentOS-7 - Updates +mirrorlist=http://mirrorlist.centos.org/?release=7&arch=$basearch&repo=updates&infra=$infra +#baseurl=http://mirror.centos.org/centos/7/updates/$basearch/ +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 + +#additional packages that may be useful +[extras] +name=CentOS-7 - Extras +mirrorlist=http://mirrorlist.centos.org/?release=7&arch=$basearch&repo=extras&infra=$infra +#baseurl=http://mirror.centos.org/centos/7/extras/$basearch/ +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 + +#additional packages that extend functionality of existing packages +[centosplus] +name=CentOS-7 - Plus +mirrorlist=http://mirrorlist.centos.org/?release=7&arch=$basearch&repo=centosplus&infra=$infra +#baseurl=http://mirror.centos.org/centos/7/centosplus/$basearch/ +gpgcheck=1 +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 + diff --git a/GreatSQL-Build/centos7/Dockerfile b/GreatSQL-Build/centos7/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..addba755b9310cc2ff3bc4deb5946a4aeb930f26 --- /dev/null +++ b/GreatSQL-Build/centos7/Dockerfile @@ -0,0 +1,68 @@ +FROM centos:7 +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 OPT_DIR=/opt +ARG MYSQL_UID=3306 +ARG MYSQL_USER=mysql +ARG GREATSQL_ENV="greatsql-setenv.sh" +ARG ENTRYPOINT="docker-entrypoint.sh" +ARG GREATSQL_MAKESH="greatsql-automake.sh" + +ARG DEPS="autoconf binutils krb5-devel libudev-devel m4 devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-annobin-plugin-gcc devtoolset-11-binutils \ +yum-utils wget unzip tar vim file time rpm-* git diffutils net-tools gcc gcc-c++ clang ccache libtool psmisc flex \ +valgrind automake make cmake cmake3 pkgconfig openssl openssl-devel openssl-libs libssh cyrus-sasl-devel cyrus-sasl-scram \ +pam pam-devel openldap-devel openldap-clients readline-devel expat-devel re2-devel bison bison-devel \ +libaio-devel libevent-devel libicu-devel libffi-devel libxml2-devel libtirpc libtirpc-devel \ +libarchive libcurl-devel ncurses-devel ncurses-libs boost-devel numactl numactl-devel numactl-libs \ +gflags-devel gtest-devel libzstd libzstd-devel libzstd-static patchelf \ +perl perl-Env perl-JSON perl-Time-HiRes bzip2 bzip2-devel snappy-devel zlib-devel lz4-devel lz4-static \ +jemalloc jemalloc-devel python-devel redhat-lsb-core centos-release-scl centos-release-scl-rh scl-utils-build glibc-common" + +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/* + +#RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo +#COPY CentOS-Base-tencent.repo /etc/yum.repos.d/CentOS-Base.repo +COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo +RUN yum clean all > /dev/null 2>&1 +#RUN yum makecache > /dev/null 2>&1 + +RUN yum install -y epel-release > /dev/null 2>&1 +RUN yum install -y centos-release-scl centos-release-scl-rh > /dev/null 2>&1 + +RUN yum install -y ${DEPS} > /dev/null 2>&1 + + +#RUN scl enable devtoolset-11 bash + +RUN source /opt/rh/devtoolset-11/enable > /dev/null 2>&1 && \ +echo 'source /opt/rh/devtoolset-11/enable' >> /root/.bash_profile; + +RUN /usr/sbin/groupadd -g ${MYSQL_UID} ${MYSQL_USER} && \ +/usr/sbin/useradd -u ${MYSQL_UID} -g ${MYSQL_UID} -s /sbin/nologin ${MYSQL_USER} + +RUN mkdir -p ${OPT_DIR} +COPY ${GREATSQL_ENV} ${OPT_DIR}/${GREATSQL_ENV} +COPY ${ENTRYPOINT} ${OPT_DIR}/${ENTRYPOINT} +COPY ${GREATSQL_MAKESH} ${OPT_DIR}/${GREATSQL_MAKESH} + + +RUN chmod +x ${OPT_DIR}/*sh + +ENTRYPOINT ["/opt/docker-entrypoint.sh"] +CMD ["bash"] + + + + diff --git a/GreatSQL-Build/docker-entrypoint.sh b/GreatSQL-Build/centos7/docker-entrypoint.sh old mode 100755 new mode 100644 similarity index 81% rename from GreatSQL-Build/docker-entrypoint.sh rename to GreatSQL-Build/centos7/docker-entrypoint.sh index b5fb7348308acc45a0da6d70f127dfc987856248..79a2131893ec311e5bcc49a92df149c41024f1eb --- a/GreatSQL-Build/docker-entrypoint.sh +++ b/GreatSQL-Build/centos7/docker-entrypoint.sh @@ -10,9 +10,6 @@ echo && \ echo "1. downloading sourcecode tarballs and extract" cd ${OPT_DIR} && \ echo " 1.1 downloading sourcecode tarballs ..." && \ -wget -c -O ${GREATSQL_ENV} ${GREATSQL_MAKESH_DOWNLOAD_URL}/${GREATSQL_ENV} >> ${MAKELOG} 2>&1 && \ -wget -c -O ${GREATSQL_MAKESH} ${GREATSQL_MAKESH_DOWNLOAD_URL}/${GREATSQL_MAKESH} >> ${MAKELOG} 2>&1 && \ -wget -c -O ${RPCGEN} ${GREATSQL_BUILD_DOWNLOAD_URL}/${RPCGEN} >> ${MAKELOG} 2>&1 && \ wget -c -O ${PATCHELF}.tar.gz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PATCHELF}.tar.gz >> ${MAKELOG} 2>&1 && \ wget -c -O ${BOOST}.tar.gz ${BOOST_SRC_DOWNLOAD_URL}/${BOOST}.tar.gz >> ${MAKELOG} 2>&1 && \ wget -c -O ${GREATSQL_SRC}.tar.xz ${GREATSQL_SRC_DOWNLOAD_URL}/${GREATSQL_SRC}.tar.xz >> ${MAKELOG} 2>&1 && \ @@ -21,7 +18,6 @@ tar xf ${OPT_DIR}/${PATCHELF}*z && \ tar xf ${OPT_DIR}/${BOOST}*z && \ tar xf ${OPT_DIR}/${GREATSQL_SRC}*z && \ chown -R ${MYSQL_USER}:${MYSQL_USER} ${OPT_DIR} && \ -dnf install -y ${RPCGEN} >> ${MAKELOG} 2>&1 && \ chmod +x ${OPT_DIR}/*sh && \ echo && \ echo "2. compile patchelf"; \ diff --git a/GreatSQL-Build/centos7/greatsql-automake.sh b/GreatSQL-Build/centos7/greatsql-automake.sh new file mode 100644 index 0000000000000000000000000000000000000000..53d48f7d1018d7cbeacfe145f8dd3fd8173b9bba --- /dev/null +++ b/GreatSQL-Build/centos7/greatsql-automake.sh @@ -0,0 +1,220 @@ +#!/bin/bash + +. /opt/greatsql-setenv.sh + +echo " 3.1 compiling GreatSQL" + +if [ ${ARCH} = "loongarch64" ] ; then + cd ${OPT_DIR}/${GREATSQL_SRC} + sed -i 's/\(.*defined.*mips.*\) \\/\1 defined(__loongarch__) || \\/ig' extra/icu/source/i18n/double-conversion-utils.h +fi + +LIBLIST="libcrypto.so libssl.so libreadline.so libtinfo.so libsasl2.so libbrotlidec.so libbrotlicommon.so libgssapi_krb5.so libkrb5.so libkrb5support.so libk5crypto.so librtmp.so libgssapi.so libssl3.so libsmime3.so libnss3.so libnssutil3.so libplc4.so libnspr4.so libssl3.so libplds4.so libncurses.so libjemalloc.so" +DIRLIST="bin lib lib/private lib/plugin lib/mysqlrouter/plugin lib/mysqlrouter/private" + +LIBPATH="" + +function gather_libs { + local elf_path=$1 + for lib in ${LIBLIST}; do + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + IFS=$'\n' + for libfromelf in $(ldd ${elf} | grep ${lib} | awk '{print $3}'); do + lib_realpath="$(readlink -f ${libfromelf})" + lib_realpath_basename="$(basename $(readlink -f ${libfromelf}))" + lib_without_version_suffix=$(echo ${lib_realpath_basename} | awk -F"." 'BEGIN { OFS = "." }{ print $1, $2}') + + # Some libraries may have dependencies on earlier openssl libraries, such as authentication_ldap_simple.so, + # thus we need to treat them specially here, other than stripping version suffix. + if [[ "${lib_realpath_basename}" =~ ^libcrypto.so.1.0.* ]] || [[ "${lib_realpath_basename}" =~ ^libssl.so.1.0.* ]]; + then + lib_without_version_suffix=$(basename ${libfromelf}) + fi + + + if [ ! -f "lib/private/${lib_realpath_basename}" ] && [ ! -L "lib/private/${lib_realpath_basename}" ]; then + + echo "Copying lib ${lib_realpath_basename}" + cp ${lib_realpath} lib/private + + echo "Symlinking lib from ${lib_realpath_basename} to ${lib_without_version_suffix}" + cd lib/ + ln -s private/${lib_realpath_basename} ${lib_without_version_suffix} + cd - + if [ ${lib_realpath_basename} != ${lib_without_version_suffix} ]; then + cd lib/private + ln -s ${lib_realpath_basename} ${lib_without_version_suffix} + cd - + fi + + patchelf --set-soname ${lib_without_version_suffix} lib/private/${lib_realpath_basename} + + LIBPATH+=" $(echo ${libfromelf} | grep -v $(pwd))" + fi + done + unset IFS + done + done +} + +function set_runpath { + # Set proper runpath for bins but check before doing anything + local elf_path=$1 + local r_path=$2 + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + echo "Checking LD_RUNPATH for ${elf}" + if [[ -z $(patchelf --print-rpath ${elf}) ]]; then + echo "Changing RUNPATH for ${elf}" + patchelf --set-rpath ${r_path} ${elf} + fi + if [[ ! -z "${override}" ]] && [[ "${override}" == "true" ]]; then + echo "Overriding RUNPATH for ${elf}" + patchelf --set-rpath ${r_path} ${elf} + fi + done +} + +function replace_libs { + local elf_path=$1 + for libpath_sorted in ${LIBPATH}; do + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + LDD=$(ldd ${elf} | grep ${libpath_sorted}|head -n1|awk '{print $1}') + lib_realpath_basename="$(basename $(readlink -f ${libpath_sorted}))" + lib_without_version_suffix="$(echo ${lib_realpath_basename} | awk -F"." 'BEGIN { OFS = "." }{ print $1, $2}')" + if [[ ! -z $LDD ]] && [[ "${minimal}" == "false" ]]; then + echo "Replacing lib ${lib_realpath_basename} to ${lib_without_version_suffix} for ${elf}" + patchelf --replace-needed ${LDD} ${lib_without_version_suffix} ${elf} + fi + done + done +} + +function check_libs { + local elf_path=$1 + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + if ! ldd ${elf}; then + exit 1 + fi + done +} + +function link { + if [ ! -d lib/private ]; then + mkdir -p lib/private + fi + # Gather libs + for DIR in ${DIRLIST}; do + gather_libs ${DIR} + done + # Set proper runpath + export override=false + set_runpath bin '$ORIGIN/../lib/private/' + set_runpath lib '$ORIGIN/private/' + set_runpath lib/plugin '$ORIGIN/../private/' + set_runpath lib/private '$ORIGIN' + # LIBS MYSQLROUTER + unset override && export override=true && set_runpath lib/mysqlrouter/plugin '$ORIGIN/:$ORIGIN/../private/:$ORIGIN/../../private/' + unset override && export override=true && set_runpath lib/mysqlrouter/private '$ORIGIN/:$ORIGIN/../plugin/:$ORIGIN/../../private/' + # BINS MYSQLROUTER + unset override && export override=true && set_runpath bin/mysqlrouter_passwd '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter_plugin_info '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter_keyring '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + # Replace libs + for DIR in ${DIRLIST}; do + replace_libs ${DIR} + done + # Make final check in order to determine any error after linkage + for DIR in ${DIRLIST}; do + check_libs ${DIR} + done +} + +mkdir -p ${DEST_DIR} +rm -rf ${DEST_DIR}/* + +cd ${OPT_DIR}/${GREATSQL_SRC} && \ +rm -fr bld && \ +mkdir bld && \ +cd bld && \ +cmake3 .. \ +-DBOOST_INCLUDE_DIR=${OPT_DIR}/${BOOST} \ +-DLOCAL_BOOST_DIR=${OPT_DIR}/${BOOST} \ +-DCMAKE_INSTALL_PREFIX=${DEST_DIR} \ +-DWITH_ZLIB=bundled \ +-DWITH_NUMA=ON \ +-DCMAKE_EXE_LINKER_FLAGS="${CMAKE_EXE_LINKER_FLAGS}" \ +-DCMAKE_BUILD_TYPE=RelWithDebInfo \ +-DBUILD_CONFIG=mysql_release \ +-DWITH_TOKUDB=OFF \ +-DWITH_ROCKSDB=OFF \ +-DROCKSDB_DISABLE_AVX2=1 \ +-DROCKSDB_DISABLE_MARCH_NATIVE=1 \ +-DGROUP_REPLICATION_WITH_ROCKSDB=OFF \ +-DALLOW_NO_SSE42=ON \ +-DMYSQL_MAINTAINER_MODE=OFF \ +-DFORCE_INSOURCE_BUILD=1 \ +-DCOMPILATION_COMMENT="GreatSQL, Release ${RELEASE}, Revision ${REVISION}" \ +-DMAJOR_VERSION=${MAJOR_VERSION} -DMINOR_VERSION=${MINOR_VERSION} -DPATCH_VERSION=${PATCH_VERSION} \ +-DWITH_NDB=OFF \ +-DWITH_NDBCLUSTER_STORAGE_ENGINE=OFF \ +-DWITH_NDBCLUSTER=OFF \ +-DWITH_UNIT_TESTS=OFF \ +-DWITH_SSL=system \ +-DWITH_SYSTEMD=ON \ +-DWITH_AUTHENTICATION_LDAP=OFF \ +-DWITH_PAM=1 \ +-DWITH_LIBEVENT=bundled \ +-DWITH_LDAP=system \ +-DWITH_SYSTEM_LIBS=ON \ +-DWITH_LZ4=bundled \ +-DWITH_PROTOBUF=bundled \ +-DWITH_RAPIDJSON=bundled \ +-DWITH_ICU=bundled \ +-DWITH_READLINE=system \ +-DWITH_ZSTD=bundled \ +-DWITH_FIDO=bundled \ +-DWITH_KEYRING_VAULT=ON \ +>> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 + +echo " 3.2 remove mysql-test from GreatSQL" +rm -fr ${DEST_DIR}/mysql-test 2 > /dev/null + +echo " 3.3 make dynamic link for GreatSQL" +# strip binaries to get minimal/all package +function tar_minimal { + minimal=true + echo "minimal = ${minimal}" >> ${MAKELOG} 2>&1 + echo "link ${DEST_DIR}-minimal" >> ${MAKELOG} 2>&1 + ( + rm -rf ${DEST_DIR}-minimal + cp -rp ${DEST_DIR} ${DEST_DIR}-minimal + cd ${DEST_DIR}-minimal + find . -type f -exec file '{}' \; | grep ': ELF ' | cut -d':' -f1 | xargs strip --strip-unneeded + link >> ${MAKELOG} 2>&1 + ) + rm -f ${DEST_DIR}-minimal.tar.gz + tar -czf ${DEST_DIR}-minimal.tar.gz ${DEST_DIR}-minimal + ls -lsh ${DEST_DIR}-minimal.tar.gz +} +# 如果想生成minial包,就把下面行注释去掉 +echo " 3.4 make minimal tar for GreatSQL" +tar_minimal + +function tar_all { + minimal=false + ( + cd ${DEST_DIR} + link >> ${MAKELOG} 2>&1 + ) + rm -f ${DEST_DIR}.tar.gz + tar -czf ${DEST_DIR}.tar.gz ${DEST_DIR} + ls -lsh ${DEST_DIR}.tar.gz +} +#如果要打包完整压缩,就把下面行注释去掉 +echo " 3.5 make normal tar for GreatSQL" +tar_all + +echo "4. greatsql build completed!" diff --git a/GreatSQL-Build/greatsql-setenv.sh b/GreatSQL-Build/centos7/greatsql-setenv.sh old mode 100755 new mode 100644 similarity index 61% rename from GreatSQL-Build/greatsql-setenv.sh rename to GreatSQL-Build/centos7/greatsql-setenv.sh index e8b0ee7d27a5348cf64e3432d13c97a931f1d1de..5be4261aab9811636dec63fff0342280d4df1a12 --- a/GreatSQL-Build/greatsql-setenv.sh +++ b/GreatSQL-Build/centos7/greatsql-setenv.sh @@ -1,4 +1,4 @@ -#/bin/bash +#!/bin/bash . ~/.bash_profile @@ -17,25 +17,19 @@ REVISION=79f57097e3f OPT_DIR=/opt GLIBC=`ldd --version | head -n 1 | awk '{print $NF}'` ARCH=`uname -p` -OS=`grep '^ID=' /etc/os-release | sed 's/.*"\(.*\)".*/\1/ig'` -GREATSQL=GreatSQL-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE}-${OS}-glibc${GLIBC}-${ARCH} +#OS=`grep '^ID=' /etc/os-release | sed 's/.*"\(.*\)".*/\1/ig'` +OS=Linux +OSPATCH="el7" +GREATSQL=GreatSQL-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE}-${OS}-${OSPATCH}-glibc${GLIBC}-${ARCH} MAKELOG=/tmp/greatsql-automake.log -MYSQL_USER=mysql +MYSQL_USER=root DEST_DIR=${OPT_DIR}/${GREATSQL} GREATSQL_SRC=greatsql-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE} -GREATSQL_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.0.32-25/deppkgs" -GREATSQL_MAKESH_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.0.32-25/GreatSQL-Build" +GREATSQL_BUILD_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-Docker/deppkgs" GREATSQL_SRC_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-8.0.32-25" BOOST_SRC_DOWNLOAD_URL="https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source" BOOST="boost_1_77_0" PATCHELF="patchelf-0.14.5" -GREATSQL_ENV="greatsql-setenv.sh" -GREATSQL_MAKESH="greatsql-automake.sh" -if [ "`uname -p`" = "aarch64" ] ; then - RPCGEN="rpcgen-1.3.1-4.el8.aarch64.rpm" -else - RPCGEN="rpcgen-1.3.1-4.el8.x86_64.rpm" -fi CMAKE_EXE_LINKER_FLAGS="" if [ ${ARCH} = "x86_64" ] ; then diff --git a/GreatSQL-Build/centos8/Dockerfile b/GreatSQL-Build/centos8/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..a56b5e671dbb878eb90aa7567cdbf4800e212cac --- /dev/null +++ b/GreatSQL-Build/centos8/Dockerfile @@ -0,0 +1,44 @@ +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 OPT_DIR=/opt +ARG MYSQL_UID=3306 +ARG MYSQL_USER=mysql + +ARG GREATSQL_ENV="greatsql-setenv.sh" +ARG ENTRYPOINT0="docker-entrypoint0.sh" +ARG ENTRYPOINT="docker-entrypoint.sh" +ARG GREATSQL_AUTOMAKE="greatsql-automake.sh" + +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/*; + +RUN /usr/sbin/groupadd -g ${MYSQL_UID} ${MYSQL_USER} && \ +/usr/sbin/useradd -u ${MYSQL_UID} -g ${MYSQL_UID} -s /sbin/nologin ${MYSQL_USER} + +RUN mkdir -p ${OPT_DIR} +COPY greatsql-setenv.sh ${OPT_DIR}/${GREATSQL_ENV} +COPY docker-entrypoint0.sh ${OPT_DIR}/${ENTRYPOINT0} +COPY docker-entrypoint.sh ${OPT_DIR}/${ENTRYPOINT} +COPY greatsql-automake.sh ${OPT_DIR}/${GREATSQL_AUTOMAKE} + + +RUN chmod +x ${OPT_DIR}/*sh + +RUN ["/opt/docker-entrypoint0.sh"] + +ENTRYPOINT ["/opt/docker-entrypoint.sh"] + +CMD ["bash"] diff --git a/GreatSQL-Build/centos8/docker-entrypoint.sh b/GreatSQL-Build/centos8/docker-entrypoint.sh new file mode 100644 index 0000000000000000000000000000000000000000..79a2131893ec311e5bcc49a92df149c41024f1eb --- /dev/null +++ b/GreatSQL-Build/centos8/docker-entrypoint.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +. /opt/greatsql-setenv.sh + +echo "0. touch logfile ${MAKELOG}" +touch ${MAKELOG} && \ +chown ${MYSQL_USER}:${MYSQL_USER} ${MAKELOG} && \ +chmod 0777 ${MAKELOG} && \ +echo && \ +echo "1. downloading sourcecode tarballs and extract" +cd ${OPT_DIR} && \ +echo " 1.1 downloading sourcecode tarballs ..." && \ +wget -c -O ${PATCHELF}.tar.gz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PATCHELF}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${BOOST}.tar.gz ${BOOST_SRC_DOWNLOAD_URL}/${BOOST}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${GREATSQL_SRC}.tar.xz ${GREATSQL_SRC_DOWNLOAD_URL}/${GREATSQL_SRC}.tar.xz >> ${MAKELOG} 2>&1 && \ +echo " 1.2 extract tarballs ..." && \ +tar xf ${OPT_DIR}/${PATCHELF}*z && \ +tar xf ${OPT_DIR}/${BOOST}*z && \ +tar xf ${OPT_DIR}/${GREATSQL_SRC}*z && \ +chown -R ${MYSQL_USER}:${MYSQL_USER} ${OPT_DIR} && \ +chmod +x ${OPT_DIR}/*sh && \ +echo && \ +echo "2. compile patchelf"; \ +cd ${OPT_DIR}/${PATCHELF} && ./bootstrap.sh >> ${MAKELOG} > /dev/null 2>&1 && \ +./configure >> ${MAKELOG} > /dev/null 2>&1 && \ +make >> ${MAKELOG} > /dev/null 2>&1 && \ +make install >> ${MAKELOG} > /dev/null 2>&1 && \ +echo && \ +echo "3. compile GreatSQL"; \ +su - ${MYSQL_USER} -s /bin/bash -c "cd /opt; /bin/sh /opt/greatsql-automake.sh" && \ +echo && \ +echo "4. greatsql build completed!" ; \ +ls -la ${OPT_DIR} | grep GreatSQL.*glibc.* && ${OPT_DIR}/GreatSQL*glibc*/bin/mysqld --verbose --version && \ +echo && \ +echo "5. remove files and clean up" ;\ +cd ${OPT_DIR} && rm -rf ${BOOST} ${GREATSQL_SRC} ${PATCHELF} +/bin/bash diff --git a/GreatSQL-Build/centos8/docker-entrypoint0.sh b/GreatSQL-Build/centos8/docker-entrypoint0.sh new file mode 100644 index 0000000000000000000000000000000000000000..81980365615ef961f525c71b4cf075b4ae093ba6 --- /dev/null +++ b/GreatSQL-Build/centos8/docker-entrypoint0.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +. /opt/greatsql-setenv.sh + +echo "0. init GreatSQL-Build env" && \ +echo "0.1 touch logfile ${MAKELOG}" +touch ${MAKELOG} && \ +chown ${MYSQL_USER}:${MYSQL_USER} ${MAKELOG} && \ +chmod 0777 ${MAKELOG} && \ +echo "0.2 install all DEPS(autoconf, gcc ...)" && \ +echo "0.3 download ${YUM_REPOS}.tar.xz" && \ +mkdir -p ${OPT_DIR}/${V8_DEPS}/${YUM_REPOS} && \ +curl --output ${OPT_DIR}/${V8_DEPS}/${YUM_REPOS}/centos-stream-repos-8-4.el8.noarch.rpm http://mirror.centos.org/centos/8-stream/BaseOS/${ARCH}/os/Packages/centos-stream-repos-8-4.el8.noarch.rpm +curl --output ${OPT_DIR}/${V8_DEPS}/${YUM_REPOS}/centos-gpg-keys-8-4.el8.noarch.rpm http://mirror.centos.org/centos/8-stream/BaseOS/${ARCH}/os/Packages/centos-gpg-keys-8-4.el8.noarch.rpm +curl --output ${OPT_DIR}/${V8_DEPS}/${YUM_REPOS}/centos-stream-release-8.6-1.el8.noarch.rpm http://mirror.centos.org/centos/8-stream/BaseOS/${ARCH}/os/Packages/centos-stream-release-8.6-1.el8.noarch.rpm +cd ${OPT_DIR}/${V8_DEPS} && \ +rpm -e centos-gpg-keys-8-2.el8.noarch centos-linux-repos-8-2.el8.noarch centos-linux-release-8.4-1.2105.el8.noarch --nodeps && \ +dnf install -y ${YUM_REPOS}/centos*noarch.rpm >> ${MAKELOG} 2>&1 && \ +echo "0.6 install DEPS rpm" && \ +dnf install -y epel-release >> ${MAKELOG} 2>&1 && \ +dnf install -y 'dnf-command(config-manager)' >> ${MAKELOG} 2>&1 && \ +dnf config-manager --enable powertools epel-testing epel-modular epel-testing-modular >> ${MAKELOG} 2>&1 && \ +dnf install -y ${DEPS} >> ${MAKELOG} 2>&1 && \ +echo "0.7 enable gcc-toolset-11" && \ +cd /opt/rh/gcc-toolset-11/root/usr/lib/gcc/x86_64-redhat-linux/11/plugin/ && \ +ln -s annobin.so gcc-annobin.so && \ +echo 'source /opt/rh/gcc-toolset-11/enable' >> /root/.bash_profile diff --git a/GreatSQL-Build/centos8/greatsql-automake.sh b/GreatSQL-Build/centos8/greatsql-automake.sh new file mode 100644 index 0000000000000000000000000000000000000000..8485097d9100ea72fdbe742bde203b3e39df0c6e --- /dev/null +++ b/GreatSQL-Build/centos8/greatsql-automake.sh @@ -0,0 +1,210 @@ +#!/bin/bash + +. /opt/greatsql-setenv.sh + +echo " 3.1 compiling GreatSQL" + +if [ ${ARCH} = "loongarch64" ] ; then + cd ${OPT_DIR}/${GREATSQL_SRC} + sed -i 's/\(.*defined.*mips.*\) \\/\1 defined(__loongarch__) || \\/ig' extra/icu/source/i18n/double-conversion-utils.h +fi + +LIBLIST="libcrypto.so libssl.so libreadline.so libtinfo.so libsasl2.so libbrotlidec.so libbrotlicommon.so libgssapi_krb5.so libkrb5.so libkrb5support.so libk5crypto.so librtmp.so libgssapi.so libssl3.so libsmime3.so libnss3.so libnssutil3.so libplc4.so libnspr4.so libssl3.so libplds4.so libncurses.so libjemalloc.so" +DIRLIST="bin lib lib/private lib/plugin lib/mysqlrouter/plugin lib/mysqlrouter/private" + +LIBPATH="" + +function gather_libs { + local elf_path=$1 + for lib in ${LIBLIST}; do + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + IFS=$'\n' + for libfromelf in $(ldd ${elf} | grep ${lib} | awk '{print $3}'); do + lib_realpath="$(readlink -f ${libfromelf})" + lib_realpath_basename="$(basename $(readlink -f ${libfromelf}))" + lib_without_version_suffix=$(echo ${lib_realpath_basename} | awk -F"." 'BEGIN { OFS = "." }{ print $1, $2}') + + # Some libraries may have dependencies on earlier openssl libraries, such as authentication_ldap_simple.so, + # thus we need to treat them specially here, other than stripping version suffix. + if [[ "${lib_realpath_basename}" =~ ^libcrypto.so.1.0.* ]] || [[ "${lib_realpath_basename}" =~ ^libssl.so.1.0.* ]]; + then + lib_without_version_suffix=$(basename ${libfromelf}) + fi + + + if [ ! -f "lib/private/${lib_realpath_basename}" ] && [ ! -L "lib/private/${lib_realpath_basename}" ]; then + + echo "Copying lib ${lib_realpath_basename}" + cp ${lib_realpath} lib/private + + echo "Symlinking lib from ${lib_realpath_basename} to ${lib_without_version_suffix}" + cd lib/ + ln -s private/${lib_realpath_basename} ${lib_without_version_suffix} + cd - + if [ ${lib_realpath_basename} != ${lib_without_version_suffix} ]; then + cd lib/private + ln -s ${lib_realpath_basename} ${lib_without_version_suffix} + cd - + fi + + patchelf --set-soname ${lib_without_version_suffix} lib/private/${lib_realpath_basename} + + LIBPATH+=" $(echo ${libfromelf} | grep -v $(pwd))" + fi + done + unset IFS + done + done +} + +function set_runpath { + # Set proper runpath for bins but check before doing anything + local elf_path=$1 + local r_path=$2 + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + echo "Checking LD_RUNPATH for ${elf}" + if [[ -z $(patchelf --print-rpath ${elf}) ]]; then + echo "Changing RUNPATH for ${elf}" + patchelf --set-rpath ${r_path} ${elf} + fi + if [[ ! -z "${override}" ]] && [[ "${override}" == "true" ]]; then + echo "Overriding RUNPATH for ${elf}" + patchelf --set-rpath ${r_path} ${elf} + fi + done +} + +function replace_libs { + local elf_path=$1 + for libpath_sorted in ${LIBPATH}; do + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + LDD=$(ldd ${elf} | grep ${libpath_sorted}|head -n1|awk '{print $1}') + lib_realpath_basename="$(basename $(readlink -f ${libpath_sorted}))" + lib_without_version_suffix="$(echo ${lib_realpath_basename} | awk -F"." 'BEGIN { OFS = "." }{ print $1, $2}')" + if [[ ! -z $LDD ]] && [[ "${minimal}" == "false" ]]; then + echo "Replacing lib ${lib_realpath_basename} to ${lib_without_version_suffix} for ${elf}" + patchelf --replace-needed ${LDD} ${lib_without_version_suffix} ${elf} + fi + done + done +} + +function check_libs { + local elf_path=$1 + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + if ! ldd ${elf}; then + exit 1 + fi + done +} + +function link { + if [ ! -d lib/private ]; then + mkdir -p lib/private + fi + # Gather libs + for DIR in ${DIRLIST}; do + gather_libs ${DIR} + done + # Set proper runpath + export override=false + set_runpath bin '$ORIGIN/../lib/private/' + set_runpath lib '$ORIGIN/private/' + set_runpath lib/plugin '$ORIGIN/../private/' + set_runpath lib/private '$ORIGIN' + # LIBS MYSQLROUTER + unset override && export override=true && set_runpath lib/mysqlrouter/plugin '$ORIGIN/:$ORIGIN/../private/:$ORIGIN/../../private/' + unset override && export override=true && set_runpath lib/mysqlrouter/private '$ORIGIN/:$ORIGIN/../plugin/:$ORIGIN/../../private/' + # BINS MYSQLROUTER + unset override && export override=true && set_runpath bin/mysqlrouter_passwd '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter_plugin_info '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter_keyring '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + # Replace libs + for DIR in ${DIRLIST}; do + replace_libs ${DIR} + done + # Make final check in order to determine any error after linkage + for DIR in ${DIRLIST}; do + check_libs ${DIR} + done +} + +cd ${OPT_DIR}/${GREATSQL_SRC} && \ +rm -fr bld && \ +mkdir bld && \ +cd bld && \ +cmake .. \ +-DBOOST_INCLUDE_DIR=${OPT_DIR}/${BOOST} \ +-DLOCAL_BOOST_DIR=${OPT_DIR}/${BOOST} \ +-DCMAKE_INSTALL_PREFIX=${DEST_DIR} \ +-DWITH_ZLIB=bundled \ +-DWITH_NUMA=ON \ +-DCMAKE_EXE_LINKER_FLAGS="${CMAKE_EXE_LINKER_FLAGS}" \ +-DCMAKE_BUILD_TYPE=RelWithDebInfo \ +-DBUILD_CONFIG=mysql_release \ +-DWITH_TOKUDB=OFF \ +-DWITH_ROCKSDB=OFF \ +-DROCKSDB_DISABLE_AVX2=1 \ +-DROCKSDB_DISABLE_MARCH_NATIVE=1 \ +-DGROUP_REPLICATION_WITH_ROCKSDB=OFF \ +-DALLOW_NO_SSE42=ON \ +-DMYSQL_MAINTAINER_MODE=OFF \ +-DFORCE_INSOURCE_BUILD=1 \ +-DCOMPILATION_COMMENT="GreatSQL, Release ${RELEASE}, Revision ${REVISION}" \ +-DMAJOR_VERSION=${MAJOR_VERSION} -DMINOR_VERSION=${MINOR_VERSION} -DPATCH_VERSION=${PATCH_VERSION} \ +-DWITH_NDB=OFF \ +-DWITH_NDBCLUSTER_STORAGE_ENGINE=OFF \ +-DWITH_NDBCLUSTER=OFF \ +-DWITH_UNIT_TESTS=OFF \ +-DWITH_SSL=system \ +-DWITH_SYSTEMD=ON \ +-DWITH_AUTHENTICATION_LDAP=OFF \ +-DWITH_PAM=1 \ +-DWITH_LIBEVENT=bundled \ +-DWITH_LDAP=system \ +-DWITH_SYSTEM_LIBS=ON \ +-DWITH_LZ4=bundled \ +-DWITH_PROTOBUF=bundled \ +-DWITH_RAPIDJSON=bundled \ +-DWITH_ICU=bundled \ +-DWITH_READLINE=system \ +-DWITH_ZSTD=bundled \ +-DWITH_FIDO=bundled \ +-DWITH_KEYRING_VAULT=ON \ +>> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 + +echo " 3.2 remove mysql-test from GreatSQL" +rm -fr ${DEST_DIR}/mysql-test 2 > /dev/null + +echo " 3.3 make dynamic link for GreatSQL" +# strip binaries to get minimal/all package +function tar_minimal { + minimal=true + echo "minimal = ${minimal}" >> ${MAKELOG} 2>&1 + echo "link ${DEST_DIR}-minimal" >> ${MAKELOG} 2>&1 + ( + cp -rp ${DEST_DIR} ${DEST_DIR}-minimal + cd ${DEST_DIR}-minimal + find . -type f -exec file '{}' \; | grep ': ELF ' | cut -d':' -f1 | xargs strip --strip-unneeded + link >> ${MAKELOG} 2>&1 + ) + tar -czf ${DEST_DIR}-minimal.tar.gz ${DEST_DIR}-minimal + ls -lsh ${DEST_DIR}-minimal.tar.gz +} +# 如果想生成minial包,就把下面行注释去掉 +tar_minimal + +function tar_all { + minimal=false + ( + cd ${DEST_DIR} + link >> ${MAKELOG} 2>&1 + ) + tar -czf ${DEST_DIR}.tar.gz ${DEST_DIR} + ls -lsh ${DEST_DIR}.tar.gz +} +#如果要打包完整压缩,就把下面行注释去掉 +tar_all diff --git a/GreatSQL-Build/centos8/greatsql-setenv.sh b/GreatSQL-Build/centos8/greatsql-setenv.sh new file mode 100644 index 0000000000000000000000000000000000000000..eaee8374bb1fa3b9e79f626b5ddaa0683e82edcc --- /dev/null +++ b/GreatSQL-Build/centos8/greatsql-setenv.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +. ~/.bash_profile + +MAKE_JOBS=`lscpu | grep '^CPU(s)'|awk '{print $NF}'` +if [ ${MAKE_JOBS} -ge 16 ] ; then + MAKE_JOBS=`expr ${MAKE_JOBS} - 4` +else + MAKE_JOBS=`expr ${MAKE_JOBS} - 1` +fi + +MAJOR_VERSION=8 +MINOR_VERSION=0 +PATCH_VERSION=32 +RELEASE=25 +REVISION=79f57097e3f +OPT_DIR=/opt +GLIBC=`ldd --version | head -n 1 | awk '{print $NF}'` +ARCH=`uname -p` +#OS=`grep '^ID=' /etc/os-release | sed 's/.*"\(.*\)".*/\1/ig'` +OS=Linux +OSPATCH="el8" +GREATSQL=GreatSQL-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE}-${OS}-${OSPATCH}-glibc${GLIBC}-${ARCH} +MAKELOG=/tmp/greatsql-automake.log +MYSQL_USER=root +DEST_DIR=${OPT_DIR}/${GREATSQL} +GREATSQL_SRC=greatsql-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE} +GREATSQL_BUILD_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-Docker/deppkgs" +GREATSQL_SRC_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-8.0.32-25" +BOOST_SRC_DOWNLOAD_URL="https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source" +BOOST="boost_1_77_0" +PATCHELF="patchelf-0.14.5" +V8_DEPS="deps-v8" +YUM_REPOS="yum-repos" + +DEPS="file file-libs autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ +gcc-toolset-11 gcc-toolset-11-gcc gcc-toolset-11-gcc-c++ gcc-toolset-11-binutils gcc-toolset-11-annobin-annocheck 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 wget zlib-devel rpcgen" + +CMAKE_EXE_LINKER_FLAGS="" +if [ ${ARCH} = "x86_64" ] ; then + CMAKE_EXE_LINKER_FLAGS=" -ljemalloc " +fi diff --git a/GreatSQL-Build/rhel9/Dockerfile b/GreatSQL-Build/rhel9/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..ce40f633505d4298fa25409b880592994b90abbb --- /dev/null +++ b/GreatSQL-Build/rhel9/Dockerfile @@ -0,0 +1,30 @@ +FROM redhat/ubi9:9.3 +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 OPT_DIR=/opt +ARG MYSQL_UID=3306 +ARG MYSQL_USER=mysql + +ARG GREATSQL_ENV="greatsql-setenv.sh" +ARG ENTRYPOINT="docker-entrypoint.sh" +ARG GREATSQL_AUTOMAKE="greatsql-automake.sh" + +RUN /usr/sbin/groupadd -g ${MYSQL_UID} ${MYSQL_USER} && \ +/usr/sbin/useradd -u ${MYSQL_UID} -g ${MYSQL_UID} -s /sbin/nologin ${MYSQL_USER} + +RUN mkdir -p ${OPT_DIR} +COPY greatsql-setenv.sh ${OPT_DIR}/${GREATSQL_ENV} +COPY docker-entrypoint.sh ${OPT_DIR}/${ENTRYPOINT} +COPY greatsql-automake.sh ${OPT_DIR}/${GREATSQL_AUTOMAKE} + + +RUN chmod +x ${OPT_DIR}/*sh + +ENTRYPOINT ["/opt/docker-entrypoint.sh"] + +CMD ["bash"] diff --git a/GreatSQL-Build/rhel9/docker-entrypoint.sh b/GreatSQL-Build/rhel9/docker-entrypoint.sh new file mode 100644 index 0000000000000000000000000000000000000000..0364366309831dc42c3e64e4f4961d4d6fe2266a --- /dev/null +++ b/GreatSQL-Build/rhel9/docker-entrypoint.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +. /opt/greatsql-setenv.sh + +echo "0. touch logfile ${MAKELOG}" +echo "0.1 touch logfile ${MAKELOG}" +touch ${MAKELOG} && \ +chown ${MYSQL_USER}:${MYSQL_USER} ${MAKELOG} && \ +chmod 0777 ${MAKELOG} && \ +echo "0.2 install all DEPS(autoconf, gcc ...)" && \ +mkdir -p /opt/rpm/ +curl --output /opt/rpm/rocky-repos-9.3-1.2.el9.noarch.rpm https://dl.rockylinux.org/pub/rocky/9/BaseOS/aarch64/os/Packages/r/rocky-repos-9.3-1.2.el9.noarch.rpm >> ${MAKELOG} 2>&1 && \ +curl --output /opt/rpm/rocky-release-9.3-1.2.el9.noarch.rpm https://dl.rockylinux.org/pub/rocky/9/BaseOS/aarch64/os/Packages/r/rocky-release-9.3-1.2.el9.noarch.rpm >> ${MAKELOG} 2>&1 && \ +curl --output /opt/rpm/rocky-gpg-keys-9.3-1.2.el9.noarch.rpm https://dl.rockylinux.org/pub/rocky/9/BaseOS/aarch64/os/Packages/r/rocky-gpg-keys-9.3-1.2.el9.noarch.rpm >> ${MAKELOG} 2>&1 && \ +curl --output /opt/rpm/epel-release-latest-9.noarch.rpm https://download-ib01.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm >> ${MAKELOG} 2>&1 && \ +rpm -e redhat-release-9.3-0.5.el9.x86_64 --nodeps >> ${MAKELOG} 2>&1 && \ +dnf install -y /opt/rpm/*.rpm --nobest --allowerasing >> ${MAKELOG} 2>&1 && \ +dnf config-manager --enable plus devel && \ +dnf install -y ${DEPS} --nobest --allowerasing >> ${MAKELOG} 2>&1 && \ +echo "1. downloading sourcecode tarballs and extract" && \ +echo "1. downloading sourcecode tarballs and extract" >> ${MAKELOG} 2>&1 && \ +echo && \ +echo "1. downloading sourcecode tarballs and extract" +cd ${OPT_DIR} && \ +echo " 1.1 downloading sourcecode tarballs ..." && \ +wget -c -O ${PATCHELF}.tar.gz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PATCHELF}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${BOOST}.tar.gz ${BOOST_SRC_DOWNLOAD_URL}/${BOOST}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${GREATSQL_SRC}.tar.xz ${GREATSQL_SRC_DOWNLOAD_URL}/${GREATSQL_SRC}.tar.xz >> ${MAKELOG} 2>&1 && \ +echo " 1.2 extract tarballs ..." && \ +tar xf ${OPT_DIR}/${PATCHELF}*z && \ +tar xf ${OPT_DIR}/${BOOST}*z && \ +tar xf ${OPT_DIR}/${GREATSQL_SRC}*z && \ +chown -R ${MYSQL_USER}:${MYSQL_USER} ${OPT_DIR} && \ +chmod +x ${OPT_DIR}/*sh && \ +echo && \ +echo "2. compile patchelf"; \ +cd ${OPT_DIR}/${PATCHELF} && ./bootstrap.sh >> ${MAKELOG} > /dev/null 2>&1 && \ +./configure >> ${MAKELOG} > /dev/null 2>&1 && \ +make >> ${MAKELOG} > /dev/null 2>&1 && \ +make install >> ${MAKELOG} > /dev/null 2>&1 && \ +echo && \ +echo "3. compile GreatSQL"; \ +su - ${MYSQL_USER} -s /bin/bash -c "cd /opt; /bin/sh /opt/greatsql-automake.sh" && \ +echo && \ +echo "4. greatsql build completed!" ; \ +ls -la ${OPT_DIR} | grep GreatSQL.*glibc.* && ${OPT_DIR}/GreatSQL*glibc*/bin/mysqld --verbose --version +#echo "5. remove files and clean up" ; +#cd ${OPT_DIR} && rm -rf ${BOOST} ${GREATSQL_SRC} ${PATCHELF} +/bin/bash diff --git a/GreatSQL-Build/rhel9/greatsql-automake.sh b/GreatSQL-Build/rhel9/greatsql-automake.sh new file mode 100644 index 0000000000000000000000000000000000000000..8485097d9100ea72fdbe742bde203b3e39df0c6e --- /dev/null +++ b/GreatSQL-Build/rhel9/greatsql-automake.sh @@ -0,0 +1,210 @@ +#!/bin/bash + +. /opt/greatsql-setenv.sh + +echo " 3.1 compiling GreatSQL" + +if [ ${ARCH} = "loongarch64" ] ; then + cd ${OPT_DIR}/${GREATSQL_SRC} + sed -i 's/\(.*defined.*mips.*\) \\/\1 defined(__loongarch__) || \\/ig' extra/icu/source/i18n/double-conversion-utils.h +fi + +LIBLIST="libcrypto.so libssl.so libreadline.so libtinfo.so libsasl2.so libbrotlidec.so libbrotlicommon.so libgssapi_krb5.so libkrb5.so libkrb5support.so libk5crypto.so librtmp.so libgssapi.so libssl3.so libsmime3.so libnss3.so libnssutil3.so libplc4.so libnspr4.so libssl3.so libplds4.so libncurses.so libjemalloc.so" +DIRLIST="bin lib lib/private lib/plugin lib/mysqlrouter/plugin lib/mysqlrouter/private" + +LIBPATH="" + +function gather_libs { + local elf_path=$1 + for lib in ${LIBLIST}; do + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + IFS=$'\n' + for libfromelf in $(ldd ${elf} | grep ${lib} | awk '{print $3}'); do + lib_realpath="$(readlink -f ${libfromelf})" + lib_realpath_basename="$(basename $(readlink -f ${libfromelf}))" + lib_without_version_suffix=$(echo ${lib_realpath_basename} | awk -F"." 'BEGIN { OFS = "." }{ print $1, $2}') + + # Some libraries may have dependencies on earlier openssl libraries, such as authentication_ldap_simple.so, + # thus we need to treat them specially here, other than stripping version suffix. + if [[ "${lib_realpath_basename}" =~ ^libcrypto.so.1.0.* ]] || [[ "${lib_realpath_basename}" =~ ^libssl.so.1.0.* ]]; + then + lib_without_version_suffix=$(basename ${libfromelf}) + fi + + + if [ ! -f "lib/private/${lib_realpath_basename}" ] && [ ! -L "lib/private/${lib_realpath_basename}" ]; then + + echo "Copying lib ${lib_realpath_basename}" + cp ${lib_realpath} lib/private + + echo "Symlinking lib from ${lib_realpath_basename} to ${lib_without_version_suffix}" + cd lib/ + ln -s private/${lib_realpath_basename} ${lib_without_version_suffix} + cd - + if [ ${lib_realpath_basename} != ${lib_without_version_suffix} ]; then + cd lib/private + ln -s ${lib_realpath_basename} ${lib_without_version_suffix} + cd - + fi + + patchelf --set-soname ${lib_without_version_suffix} lib/private/${lib_realpath_basename} + + LIBPATH+=" $(echo ${libfromelf} | grep -v $(pwd))" + fi + done + unset IFS + done + done +} + +function set_runpath { + # Set proper runpath for bins but check before doing anything + local elf_path=$1 + local r_path=$2 + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + echo "Checking LD_RUNPATH for ${elf}" + if [[ -z $(patchelf --print-rpath ${elf}) ]]; then + echo "Changing RUNPATH for ${elf}" + patchelf --set-rpath ${r_path} ${elf} + fi + if [[ ! -z "${override}" ]] && [[ "${override}" == "true" ]]; then + echo "Overriding RUNPATH for ${elf}" + patchelf --set-rpath ${r_path} ${elf} + fi + done +} + +function replace_libs { + local elf_path=$1 + for libpath_sorted in ${LIBPATH}; do + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + LDD=$(ldd ${elf} | grep ${libpath_sorted}|head -n1|awk '{print $1}') + lib_realpath_basename="$(basename $(readlink -f ${libpath_sorted}))" + lib_without_version_suffix="$(echo ${lib_realpath_basename} | awk -F"." 'BEGIN { OFS = "." }{ print $1, $2}')" + if [[ ! -z $LDD ]] && [[ "${minimal}" == "false" ]]; then + echo "Replacing lib ${lib_realpath_basename} to ${lib_without_version_suffix} for ${elf}" + patchelf --replace-needed ${LDD} ${lib_without_version_suffix} ${elf} + fi + done + done +} + +function check_libs { + local elf_path=$1 + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + if ! ldd ${elf}; then + exit 1 + fi + done +} + +function link { + if [ ! -d lib/private ]; then + mkdir -p lib/private + fi + # Gather libs + for DIR in ${DIRLIST}; do + gather_libs ${DIR} + done + # Set proper runpath + export override=false + set_runpath bin '$ORIGIN/../lib/private/' + set_runpath lib '$ORIGIN/private/' + set_runpath lib/plugin '$ORIGIN/../private/' + set_runpath lib/private '$ORIGIN' + # LIBS MYSQLROUTER + unset override && export override=true && set_runpath lib/mysqlrouter/plugin '$ORIGIN/:$ORIGIN/../private/:$ORIGIN/../../private/' + unset override && export override=true && set_runpath lib/mysqlrouter/private '$ORIGIN/:$ORIGIN/../plugin/:$ORIGIN/../../private/' + # BINS MYSQLROUTER + unset override && export override=true && set_runpath bin/mysqlrouter_passwd '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter_plugin_info '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter_keyring '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + # Replace libs + for DIR in ${DIRLIST}; do + replace_libs ${DIR} + done + # Make final check in order to determine any error after linkage + for DIR in ${DIRLIST}; do + check_libs ${DIR} + done +} + +cd ${OPT_DIR}/${GREATSQL_SRC} && \ +rm -fr bld && \ +mkdir bld && \ +cd bld && \ +cmake .. \ +-DBOOST_INCLUDE_DIR=${OPT_DIR}/${BOOST} \ +-DLOCAL_BOOST_DIR=${OPT_DIR}/${BOOST} \ +-DCMAKE_INSTALL_PREFIX=${DEST_DIR} \ +-DWITH_ZLIB=bundled \ +-DWITH_NUMA=ON \ +-DCMAKE_EXE_LINKER_FLAGS="${CMAKE_EXE_LINKER_FLAGS}" \ +-DCMAKE_BUILD_TYPE=RelWithDebInfo \ +-DBUILD_CONFIG=mysql_release \ +-DWITH_TOKUDB=OFF \ +-DWITH_ROCKSDB=OFF \ +-DROCKSDB_DISABLE_AVX2=1 \ +-DROCKSDB_DISABLE_MARCH_NATIVE=1 \ +-DGROUP_REPLICATION_WITH_ROCKSDB=OFF \ +-DALLOW_NO_SSE42=ON \ +-DMYSQL_MAINTAINER_MODE=OFF \ +-DFORCE_INSOURCE_BUILD=1 \ +-DCOMPILATION_COMMENT="GreatSQL, Release ${RELEASE}, Revision ${REVISION}" \ +-DMAJOR_VERSION=${MAJOR_VERSION} -DMINOR_VERSION=${MINOR_VERSION} -DPATCH_VERSION=${PATCH_VERSION} \ +-DWITH_NDB=OFF \ +-DWITH_NDBCLUSTER_STORAGE_ENGINE=OFF \ +-DWITH_NDBCLUSTER=OFF \ +-DWITH_UNIT_TESTS=OFF \ +-DWITH_SSL=system \ +-DWITH_SYSTEMD=ON \ +-DWITH_AUTHENTICATION_LDAP=OFF \ +-DWITH_PAM=1 \ +-DWITH_LIBEVENT=bundled \ +-DWITH_LDAP=system \ +-DWITH_SYSTEM_LIBS=ON \ +-DWITH_LZ4=bundled \ +-DWITH_PROTOBUF=bundled \ +-DWITH_RAPIDJSON=bundled \ +-DWITH_ICU=bundled \ +-DWITH_READLINE=system \ +-DWITH_ZSTD=bundled \ +-DWITH_FIDO=bundled \ +-DWITH_KEYRING_VAULT=ON \ +>> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 + +echo " 3.2 remove mysql-test from GreatSQL" +rm -fr ${DEST_DIR}/mysql-test 2 > /dev/null + +echo " 3.3 make dynamic link for GreatSQL" +# strip binaries to get minimal/all package +function tar_minimal { + minimal=true + echo "minimal = ${minimal}" >> ${MAKELOG} 2>&1 + echo "link ${DEST_DIR}-minimal" >> ${MAKELOG} 2>&1 + ( + cp -rp ${DEST_DIR} ${DEST_DIR}-minimal + cd ${DEST_DIR}-minimal + find . -type f -exec file '{}' \; | grep ': ELF ' | cut -d':' -f1 | xargs strip --strip-unneeded + link >> ${MAKELOG} 2>&1 + ) + tar -czf ${DEST_DIR}-minimal.tar.gz ${DEST_DIR}-minimal + ls -lsh ${DEST_DIR}-minimal.tar.gz +} +# 如果想生成minial包,就把下面行注释去掉 +tar_minimal + +function tar_all { + minimal=false + ( + cd ${DEST_DIR} + link >> ${MAKELOG} 2>&1 + ) + tar -czf ${DEST_DIR}.tar.gz ${DEST_DIR} + ls -lsh ${DEST_DIR}.tar.gz +} +#如果要打包完整压缩,就把下面行注释去掉 +tar_all diff --git a/GreatSQL-Build/rhel9/greatsql-setenv.sh b/GreatSQL-Build/rhel9/greatsql-setenv.sh new file mode 100644 index 0000000000000000000000000000000000000000..fe4c7ddd5ca195f6a70a8130023e666c8b161cdd --- /dev/null +++ b/GreatSQL-Build/rhel9/greatsql-setenv.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +. ~/.bash_profile + +MAKE_JOBS=`lscpu | grep '^CPU(s)'|awk '{print $NF}'` +if [ ${MAKE_JOBS} -ge 16 ] ; then + MAKE_JOBS=`expr ${MAKE_JOBS} - 4` +else + MAKE_JOBS=`expr ${MAKE_JOBS} - 1` +fi + +MAJOR_VERSION=8 +MINOR_VERSION=0 +PATCH_VERSION=32 +RELEASE=25 +REVISION=79f57097e3f +OPT_DIR=/opt +GLIBC=`ldd --version | head -n 1 | awk '{print $NF}'` +ARCH=`uname -p` +#OS=`grep '^ID=' /etc/os-release | sed 's/.*"\(.*\)".*/\1/ig'` +OS=Linux +OSPATCH="el9" +GREATSQL=GreatSQL-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE}-${OS}-${OSPATCH}-glibc${GLIBC}-${ARCH} +MAKELOG=/tmp/greatsql-automake.log +MYSQL_USER=root +DEST_DIR=${OPT_DIR}/${GREATSQL} +GREATSQL_SRC=greatsql-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE} +GREATSQL_BUILD_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-Docker/deppkgs" +GREATSQL_SRC_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-8.0.32-25" +BOOST_SRC_DOWNLOAD_URL="https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source" +BOOST="boost_1_77_0" +PATCHELF="patchelf-0.14.5" + +DEPS="less file file-libs autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ +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 wget zlib-devel \ +iputils tar gzip xz wget langpacks-en glibc-langpack-en libmodulemd autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ +libffi libffi-devel libxml2-devel libxml2 libyaml bzip2 bzip2-libs bzip2-devel \ +libcurl-devel libssh libssh-config libssh-devel \ +libtirpc libtirpc-devel libuuid libuuid-devel m4 make ncurses-devel openssl openssl-devel \ +patch uuid wget zlib-devel \ +python3 python3-devel python3-libs python3-pyyaml \ +git numactl-devel rpm-build gcc gcc-c++ gcc-plugin-annobin gperf ncurses-devel readline-devel openssl-devel jemalloc zstd \ +time zlib-devel libaio-devel bison cmake3 cmake pam-devel libeatmydata jemalloc-devel pkg-config \ +libcurl-devel openldap-devel unzip wget libcurl-devel patchelf systemd-devel \ +perl perl-Time-HiRes perl-Env perl-Data-Dumper perl-JSON perl-Digest perl-Digest-MD5 perl-Digest-Perl-MD5 \ +binutils gcc gcc-c++ tar rpm-build rsync bison glibc glibc-devel libstdc++-devel make openssl-devel pam-devel perl perl-JSON perl-Memoize pkg-config \ +automake autoconf cmake cmake3 jemalloc jemalloc-devel \ +libaio-devel ncurses-devel numactl-devel readline-devel time \ +rpcgen \ +libzstd libzstd-devel \ +cyrus-sasl-devel cyrus-sasl-scram krb5-devel" + +CMAKE_EXE_LINKER_FLAGS="" +if [ ${ARCH} = "x86_64" ] ; then + CMAKE_EXE_LINKER_FLAGS=" -ljemalloc " +fi diff --git a/GreatSQL-Build/rocky9/Dockerfile b/GreatSQL-Build/rocky9/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..cbb32058d67398614112983646d59545d2d13834 --- /dev/null +++ b/GreatSQL-Build/rocky9/Dockerfile @@ -0,0 +1,30 @@ +FROM rockylinux:9 +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 OPT_DIR=/opt +ARG MYSQL_UID=3306 +ARG MYSQL_USER=mysql + +ARG GREATSQL_ENV="greatsql-setenv.sh" +ARG ENTRYPOINT="docker-entrypoint.sh" +ARG GREATSQL_AUTOMAKE="greatsql-automake.sh" + +RUN /usr/sbin/groupadd -g ${MYSQL_UID} ${MYSQL_USER} && \ +/usr/sbin/useradd -u ${MYSQL_UID} -g ${MYSQL_UID} -s /sbin/nologin ${MYSQL_USER} + +RUN mkdir -p ${OPT_DIR} +COPY greatsql-setenv.sh ${OPT_DIR}/${GREATSQL_ENV} +COPY docker-entrypoint.sh ${OPT_DIR}/${ENTRYPOINT} +COPY greatsql-automake.sh ${OPT_DIR}/${GREATSQL_AUTOMAKE} + + +RUN chmod +x ${OPT_DIR}/*sh + +ENTRYPOINT ["/opt/docker-entrypoint.sh"] + +CMD ["bash"] diff --git a/GreatSQL-Build/rocky9/docker-entrypoint.sh b/GreatSQL-Build/rocky9/docker-entrypoint.sh new file mode 100644 index 0000000000000000000000000000000000000000..074f4c23e4b7829f68f46527a4b3116b2c6558fc --- /dev/null +++ b/GreatSQL-Build/rocky9/docker-entrypoint.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +. /opt/greatsql-setenv.sh + +echo "0. touch logfile ${MAKELOG}" +echo "0.1 touch logfile ${MAKELOG}" +touch ${MAKELOG} && \ +chown ${MYSQL_USER}:${MYSQL_USER} ${MAKELOG} && \ +chmod 0777 ${MAKELOG} && \ +echo "0.2 install all DEPS(autoconf, gcc ...)" && \ +dnf install -y epel-release >> ${MAKELOG} 2>&1 && \ +dnf config-manager --enable plus devel && \ +dnf install -y ${DEPS} --nobest --allowerasing >> ${MAKELOG} 2>&1 && \ +echo "1. downloading sourcecode tarballs and extract" && \ +echo "1. downloading sourcecode tarballs and extract" >> ${MAKELOG} 2>&1 && \ +echo && \ +echo "1. downloading sourcecode tarballs and extract" +cd ${OPT_DIR} && \ +echo " 1.1 downloading sourcecode tarballs ..." && \ +wget -c -O ${PATCHELF}.tar.gz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PATCHELF}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${BOOST}.tar.gz ${BOOST_SRC_DOWNLOAD_URL}/${BOOST}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${GREATSQL_SRC}.tar.xz ${GREATSQL_SRC_DOWNLOAD_URL}/${GREATSQL_SRC}.tar.xz >> ${MAKELOG} 2>&1 && \ +echo " 1.2 extract tarballs ..." && \ +tar xf ${OPT_DIR}/${PATCHELF}*z && \ +tar xf ${OPT_DIR}/${BOOST}*z && \ +tar xf ${OPT_DIR}/${GREATSQL_SRC}*z && \ +chown -R ${MYSQL_USER}:${MYSQL_USER} ${OPT_DIR} && \ +chmod +x ${OPT_DIR}/*sh && \ +echo && \ +echo "2. compile patchelf"; \ +cd ${OPT_DIR}/${PATCHELF} && ./bootstrap.sh >> ${MAKELOG} > /dev/null 2>&1 && \ +./configure >> ${MAKELOG} > /dev/null 2>&1 && \ +make >> ${MAKELOG} > /dev/null 2>&1 && \ +make install >> ${MAKELOG} > /dev/null 2>&1 && \ +echo && \ +echo "3. compile GreatSQL"; \ +su - ${MYSQL_USER} -s /bin/bash -c "cd /opt; /bin/sh /opt/greatsql-automake.sh" && \ +echo && \ +echo "4. greatsql build completed!" ; \ +ls -la ${OPT_DIR} | grep GreatSQL.*glibc.* && ${OPT_DIR}/GreatSQL*glibc*/bin/mysqld --verbose --version && \ +echo && \ +echo "5. remove files and clean up" ;\ +cd ${OPT_DIR} && rm -rf ${BOOST} ${GREATSQL_SRC} ${PATCHELF} +/bin/bash diff --git a/GreatSQL-Build/rocky9/greatsql-automake.sh b/GreatSQL-Build/rocky9/greatsql-automake.sh new file mode 100644 index 0000000000000000000000000000000000000000..8485097d9100ea72fdbe742bde203b3e39df0c6e --- /dev/null +++ b/GreatSQL-Build/rocky9/greatsql-automake.sh @@ -0,0 +1,210 @@ +#!/bin/bash + +. /opt/greatsql-setenv.sh + +echo " 3.1 compiling GreatSQL" + +if [ ${ARCH} = "loongarch64" ] ; then + cd ${OPT_DIR}/${GREATSQL_SRC} + sed -i 's/\(.*defined.*mips.*\) \\/\1 defined(__loongarch__) || \\/ig' extra/icu/source/i18n/double-conversion-utils.h +fi + +LIBLIST="libcrypto.so libssl.so libreadline.so libtinfo.so libsasl2.so libbrotlidec.so libbrotlicommon.so libgssapi_krb5.so libkrb5.so libkrb5support.so libk5crypto.so librtmp.so libgssapi.so libssl3.so libsmime3.so libnss3.so libnssutil3.so libplc4.so libnspr4.so libssl3.so libplds4.so libncurses.so libjemalloc.so" +DIRLIST="bin lib lib/private lib/plugin lib/mysqlrouter/plugin lib/mysqlrouter/private" + +LIBPATH="" + +function gather_libs { + local elf_path=$1 + for lib in ${LIBLIST}; do + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + IFS=$'\n' + for libfromelf in $(ldd ${elf} | grep ${lib} | awk '{print $3}'); do + lib_realpath="$(readlink -f ${libfromelf})" + lib_realpath_basename="$(basename $(readlink -f ${libfromelf}))" + lib_without_version_suffix=$(echo ${lib_realpath_basename} | awk -F"." 'BEGIN { OFS = "." }{ print $1, $2}') + + # Some libraries may have dependencies on earlier openssl libraries, such as authentication_ldap_simple.so, + # thus we need to treat them specially here, other than stripping version suffix. + if [[ "${lib_realpath_basename}" =~ ^libcrypto.so.1.0.* ]] || [[ "${lib_realpath_basename}" =~ ^libssl.so.1.0.* ]]; + then + lib_without_version_suffix=$(basename ${libfromelf}) + fi + + + if [ ! -f "lib/private/${lib_realpath_basename}" ] && [ ! -L "lib/private/${lib_realpath_basename}" ]; then + + echo "Copying lib ${lib_realpath_basename}" + cp ${lib_realpath} lib/private + + echo "Symlinking lib from ${lib_realpath_basename} to ${lib_without_version_suffix}" + cd lib/ + ln -s private/${lib_realpath_basename} ${lib_without_version_suffix} + cd - + if [ ${lib_realpath_basename} != ${lib_without_version_suffix} ]; then + cd lib/private + ln -s ${lib_realpath_basename} ${lib_without_version_suffix} + cd - + fi + + patchelf --set-soname ${lib_without_version_suffix} lib/private/${lib_realpath_basename} + + LIBPATH+=" $(echo ${libfromelf} | grep -v $(pwd))" + fi + done + unset IFS + done + done +} + +function set_runpath { + # Set proper runpath for bins but check before doing anything + local elf_path=$1 + local r_path=$2 + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + echo "Checking LD_RUNPATH for ${elf}" + if [[ -z $(patchelf --print-rpath ${elf}) ]]; then + echo "Changing RUNPATH for ${elf}" + patchelf --set-rpath ${r_path} ${elf} + fi + if [[ ! -z "${override}" ]] && [[ "${override}" == "true" ]]; then + echo "Overriding RUNPATH for ${elf}" + patchelf --set-rpath ${r_path} ${elf} + fi + done +} + +function replace_libs { + local elf_path=$1 + for libpath_sorted in ${LIBPATH}; do + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + LDD=$(ldd ${elf} | grep ${libpath_sorted}|head -n1|awk '{print $1}') + lib_realpath_basename="$(basename $(readlink -f ${libpath_sorted}))" + lib_without_version_suffix="$(echo ${lib_realpath_basename} | awk -F"." 'BEGIN { OFS = "." }{ print $1, $2}')" + if [[ ! -z $LDD ]] && [[ "${minimal}" == "false" ]]; then + echo "Replacing lib ${lib_realpath_basename} to ${lib_without_version_suffix} for ${elf}" + patchelf --replace-needed ${LDD} ${lib_without_version_suffix} ${elf} + fi + done + done +} + +function check_libs { + local elf_path=$1 + for elf in $(find ${elf_path} -maxdepth 1 -exec file {} \; | grep 'ELF ' | cut -d':' -f1); do + if ! ldd ${elf}; then + exit 1 + fi + done +} + +function link { + if [ ! -d lib/private ]; then + mkdir -p lib/private + fi + # Gather libs + for DIR in ${DIRLIST}; do + gather_libs ${DIR} + done + # Set proper runpath + export override=false + set_runpath bin '$ORIGIN/../lib/private/' + set_runpath lib '$ORIGIN/private/' + set_runpath lib/plugin '$ORIGIN/../private/' + set_runpath lib/private '$ORIGIN' + # LIBS MYSQLROUTER + unset override && export override=true && set_runpath lib/mysqlrouter/plugin '$ORIGIN/:$ORIGIN/../private/:$ORIGIN/../../private/' + unset override && export override=true && set_runpath lib/mysqlrouter/private '$ORIGIN/:$ORIGIN/../plugin/:$ORIGIN/../../private/' + # BINS MYSQLROUTER + unset override && export override=true && set_runpath bin/mysqlrouter_passwd '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter_plugin_info '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + unset override && export override=true && set_runpath bin/mysqlrouter_keyring '$ORIGIN/../lib/mysqlrouter/private/:$ORIGIN/../lib/mysqlrouter/plugin/:$ORIGIN/../lib/private/' + # Replace libs + for DIR in ${DIRLIST}; do + replace_libs ${DIR} + done + # Make final check in order to determine any error after linkage + for DIR in ${DIRLIST}; do + check_libs ${DIR} + done +} + +cd ${OPT_DIR}/${GREATSQL_SRC} && \ +rm -fr bld && \ +mkdir bld && \ +cd bld && \ +cmake .. \ +-DBOOST_INCLUDE_DIR=${OPT_DIR}/${BOOST} \ +-DLOCAL_BOOST_DIR=${OPT_DIR}/${BOOST} \ +-DCMAKE_INSTALL_PREFIX=${DEST_DIR} \ +-DWITH_ZLIB=bundled \ +-DWITH_NUMA=ON \ +-DCMAKE_EXE_LINKER_FLAGS="${CMAKE_EXE_LINKER_FLAGS}" \ +-DCMAKE_BUILD_TYPE=RelWithDebInfo \ +-DBUILD_CONFIG=mysql_release \ +-DWITH_TOKUDB=OFF \ +-DWITH_ROCKSDB=OFF \ +-DROCKSDB_DISABLE_AVX2=1 \ +-DROCKSDB_DISABLE_MARCH_NATIVE=1 \ +-DGROUP_REPLICATION_WITH_ROCKSDB=OFF \ +-DALLOW_NO_SSE42=ON \ +-DMYSQL_MAINTAINER_MODE=OFF \ +-DFORCE_INSOURCE_BUILD=1 \ +-DCOMPILATION_COMMENT="GreatSQL, Release ${RELEASE}, Revision ${REVISION}" \ +-DMAJOR_VERSION=${MAJOR_VERSION} -DMINOR_VERSION=${MINOR_VERSION} -DPATCH_VERSION=${PATCH_VERSION} \ +-DWITH_NDB=OFF \ +-DWITH_NDBCLUSTER_STORAGE_ENGINE=OFF \ +-DWITH_NDBCLUSTER=OFF \ +-DWITH_UNIT_TESTS=OFF \ +-DWITH_SSL=system \ +-DWITH_SYSTEMD=ON \ +-DWITH_AUTHENTICATION_LDAP=OFF \ +-DWITH_PAM=1 \ +-DWITH_LIBEVENT=bundled \ +-DWITH_LDAP=system \ +-DWITH_SYSTEM_LIBS=ON \ +-DWITH_LZ4=bundled \ +-DWITH_PROTOBUF=bundled \ +-DWITH_RAPIDJSON=bundled \ +-DWITH_ICU=bundled \ +-DWITH_READLINE=system \ +-DWITH_ZSTD=bundled \ +-DWITH_FIDO=bundled \ +-DWITH_KEYRING_VAULT=ON \ +>> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 + +echo " 3.2 remove mysql-test from GreatSQL" +rm -fr ${DEST_DIR}/mysql-test 2 > /dev/null + +echo " 3.3 make dynamic link for GreatSQL" +# strip binaries to get minimal/all package +function tar_minimal { + minimal=true + echo "minimal = ${minimal}" >> ${MAKELOG} 2>&1 + echo "link ${DEST_DIR}-minimal" >> ${MAKELOG} 2>&1 + ( + cp -rp ${DEST_DIR} ${DEST_DIR}-minimal + cd ${DEST_DIR}-minimal + find . -type f -exec file '{}' \; | grep ': ELF ' | cut -d':' -f1 | xargs strip --strip-unneeded + link >> ${MAKELOG} 2>&1 + ) + tar -czf ${DEST_DIR}-minimal.tar.gz ${DEST_DIR}-minimal + ls -lsh ${DEST_DIR}-minimal.tar.gz +} +# 如果想生成minial包,就把下面行注释去掉 +tar_minimal + +function tar_all { + minimal=false + ( + cd ${DEST_DIR} + link >> ${MAKELOG} 2>&1 + ) + tar -czf ${DEST_DIR}.tar.gz ${DEST_DIR} + ls -lsh ${DEST_DIR}.tar.gz +} +#如果要打包完整压缩,就把下面行注释去掉 +tar_all diff --git a/GreatSQL-Build/rocky9/greatsql-setenv.sh b/GreatSQL-Build/rocky9/greatsql-setenv.sh new file mode 100644 index 0000000000000000000000000000000000000000..0771eb497275e8f4fa6d2fbcdb42fea2c3448643 --- /dev/null +++ b/GreatSQL-Build/rocky9/greatsql-setenv.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +. ~/.bash_profile + +MAKE_JOBS=`lscpu | grep '^CPU(s)'|awk '{print $NF}'` +if [ ${MAKE_JOBS} -ge 16 ] ; then + MAKE_JOBS=`expr ${MAKE_JOBS} - 4` +else + MAKE_JOBS=`expr ${MAKE_JOBS} - 1` +fi + +MAJOR_VERSION=8 +MINOR_VERSION=0 +PATCH_VERSION=32 +RELEASE=25 +REVISION=79f57097e3f +OPT_DIR=/opt +GLIBC=`ldd --version | head -n 1 | awk '{print $NF}'` +ARCH=`uname -p` +#OS=`grep '^ID=' /etc/os-release | sed 's/.*"\(.*\)".*/\1/ig'` +OS=Linux +OSPATCH="el9" +GREATSQL=GreatSQL-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE}-${OS}-${OSPATCH}-glibc${GLIBC}-${ARCH} +MAKELOG=/tmp/greatsql-automake.log +MYSQL_USER=root +DEST_DIR=${OPT_DIR}/${GREATSQL} +GREATSQL_SRC=greatsql-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE} +GREATSQL_BUILD_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-Docker/deppkgs" +GREATSQL_SRC_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-8.0.32-25" +BOOST_SRC_DOWNLOAD_URL="https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source" +BOOST="boost_1_77_0" +PATCHELF="patchelf-0.14.5" + +DEPS="file file-libs autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ +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 wget zlib-devel \ +iputils tar gzip xz wget langpacks-en glibc-langpack-en libmodulemd autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ +libffi libffi-devel libxml2-devel libxml2 libyaml bzip2 bzip2-libs bzip2-devel \ +libcurl-devel libssh libssh-config libssh-devel \ +libtirpc libtirpc-devel libuuid libuuid-devel m4 make ncurses-devel openssl openssl-devel \ +patch uuid wget zlib-devel \ +python3 python3-devel python3-libs python3-pyyaml \ +git numactl-devel rpm-build gcc gcc-c++ gcc-plugin-annobin gperf ncurses-devel readline-devel openssl-devel jemalloc zstd \ +time zlib-devel libaio-devel bison cmake3 cmake pam-devel libeatmydata jemalloc-devel pkg-config \ +libcurl-devel openldap-devel unzip wget libcurl-devel patchelf systemd-devel \ +perl perl-Time-HiRes perl-Env perl-Data-Dumper perl-JSON perl-Digest perl-Digest-MD5 perl-Digest-Perl-MD5 \ +binutils gcc gcc-c++ tar rpm-build rsync bison glibc glibc-devel libstdc++-devel make openssl-devel pam-devel perl perl-JSON perl-Memoize pkg-config \ +automake autoconf cmake cmake3 jemalloc jemalloc-devel \ +libaio-devel ncurses-devel numactl-devel readline-devel time \ +rpcgen \ +libzstd libzstd-devel \ +cyrus-sasl-devel cyrus-sasl-scram krb5-devel" + +CMAKE_EXE_LINKER_FLAGS="" +if [ ${ARCH} = "x86_64" ] ; then + CMAKE_EXE_LINKER_FLAGS=" -ljemalloc " +fi diff --git a/GreatSQL-Shell-Build/README.md b/GreatSQL-Shell-Build/README.md index 45d77ad87dcafbc6d07d34507d7f05992b651cbd..a4d5ff9269cdc1b6f61eba4e3590d227e5262fe6 100644 --- a/GreatSQL-Shell-Build/README.md +++ b/GreatSQL-Shell-Build/README.md @@ -1,100 +1,167 @@ -# GreatSQL-Shell-Build Docker ---- -## 简介 - -本项目用于构建MySQL Shell for GreatSQL编译环境Docker镜像。 - -适用于CentOS 8 x86_64/aarch64 环境,更多环境适配请自行修改Dockerfile及相关脚本中的参数。 - -## 基本信息 -- 维护者: GreatSQL(greatsql@greatdb.com) -- 联系我们: greatsql@greatdb.com -- 最新版本:GreatSQL 8.0.32-25 -- 最后更新时间:2024-02-20 -- 支持CPU架构:x86_64、aarch64 - -## 支持哪些tag -- [latest](https://hub.docker.com/layers/greatsql/greatsql_shell_build/latest/images/sha256-4a658457738231651010bdf9026164e38b4b455496f3d13a32dcac8f1b8e2b93?context=repo), [8.0.32-25](https://hub.docker.com/layers/greatsql/greatsql_shell_build/8.0.32-25/images/sha256-4a658457738231651010bdf9026164e38b4b455496f3d13a32dcac8f1b8e2b93?context=repo) -- [latest-arch64](https://hub.docker.com/layers/greatsql/greatsql_shell_build/latest-aarch64/images/sha256-46826329b1f0a6f201ddc30a47bfb9724afd724b116d7a4323d3db21d9ea46e0?context=repo), [8.0.32-25-aarch64](https://hub.docker.com/layers/greatsql/greatsql_shell_build/8.0.32-25-aarch64/images/sha256-46826329b1f0a6f201ddc30a47bfb9724afd724b116d7a4323d3db21d9ea46e0?context=repo) - -## 如何使用GreatSQL-Shell-Build - -例如: -```shell -$ docker run -itd --hostname greatsqlsh --name greatsqlsh greatsql/greatsql_shell_build:8.0.32-25 bash -``` -执行上述命令后,会创建一个GreatSQL-Shell编译环境容器,并在容器中自动完成GreatSQL-Shell编译工作。 - -在编译过程中,可以执行下面命令查看进度: -```shell -$ docker logs greatsqlsh | tail -``` - -如果看到类似下面的结果,就表明二进制包已编译完成 -```shell -$ docker logs greatsqlsh | tail -0. touch logfile /tmp/greatsqlsh-automake.log - -1. downloading sourcecode tarballs and extract - 1.1 downloading sourcecode tarballs ... - 1.2 extract tarballs ... - -2. compiling antlr4 - -3. compiling patchelf - -4. compiling protobuf - -5. compiling MySQL Shell for GreatSQL - 5.1 compiling mysqlclient and mysqlxclient - 5.2 compiling MySQL Shell for GreatSQL - -6. MySQL Shell for GreatSQL 8.0.32-25 build completed! - 6.1 MySQL Shell for GreatSQL 8.0.32-25 version: -/opt/greatsql-shell-8.0.32-25-centos-glibc2.28-x86_64/bin/mysqlsh Ver 8.0.32 for Linux on x86_64 - for MySQL 8.0.32 (Source distribution) - 6.2 TARBALL file: --rw-r--r-- 1 root root 19956168 Feb 21 02:56 /opt/greatsql-shell-8.0.32-25-centos-glibc2.28-x86_64.tar.xz -``` - -接下来回退到宿主机,将容器中的二进制包拷贝出来 - -```shell -$ docker cp greatsqlsh:/opt/greatsql-shell-8.0.32-25-centos-glibc2.28-x86_64.tar.xz /usr/local/ -``` - -然后解压缩,就可以在宿主机环境下使用了,例如: -```shell -# 先安装几个必要的依赖包 -$ dnf install -y ibssh python38 python38-libs python38-pyyaml -$ pip3.8 install --user certifi pyclamd - -# 测试使用 -$ /usr/local/greatsql-shell-8.0.32-25-centos-glibc2.28-x86_64/bin/mysqlsh -MySQL Shell 8.0.32 -... -Type '\help' or '\?' for help; '\quit' to exit. - MySQL Py > \q -Bye! -``` - -如果是在aarch64环境中,则修改Dockerfile的前几行,改成适用于aarch64的镜像,例如 - -```shell -#FROM centos:8 -FROM docker.io/arm64v8/centos -``` - -然后执行上面创建容器的命令即可。 - -## 文件介绍 -- CHANGELOG.md,更新历史 -- docker-entrypoint.sh,GreatSQL-Shell Docker镜像初始化脚本,处理源码包下载等准备工作 -- Dockerfile,用于构建Docker编译环境 -- greatsqlsh-automake.sh,用于实现在Docker容器中自动化编译的脚本 -- greatsqlsh-setenv.sh,通用环境变量设置脚本 -- mysqlsh-for-greatsql-8.0.32.patch,需要对MySQL Shell打补丁,才能支持GreatSQL中特有的仲裁节点特性 - -## 联系我们 -扫码关注微信公众号 - -![GreatSQL社区微信公众号二维码](https://images.gitee.com/uploads/images/2021/0802/143402_f9d6cb61_8779455.jpeg "greatsql社区-wx-qrcode-0.5m.jpg") +# GreatSQL-Shell-Build Docker +--- +## 简介 + +本项目用于构建MySQL Shell for GreatSQL编译环境Docker镜像。 + +适用于[ CentOS7 x86_64 ] / [ CentOS8/rocky8 x86_64/aarch64 ] [ rocky9 x86_64/aarch64 ] [ openEuler2203 x86_64/aarch64 ] 环境,更多环境适配请自行修改Dockerfile及相关脚本中的参数。 + +## 基本信息 +- 维护者: GreatSQL(greatsql@greatdb.com) +- 联系我们: greatsql@greatdb.com +- 最新版本:GreatSQL 8.0.32-25 +- 最后更新时间:2024-02-20 +- 支持CPU架构:x86_64、aarch64 + +## 支持哪些tag +- [latest](https://hub.docker.com/layers/greatsql/greatsql_shell_build/latest/images/sha256-4a658457738231651010bdf9026164e38b4b455496f3d13a32dcac8f1b8e2b93?context=repo), [8.0.32-25](https://hub.docker.com/layers/greatsql/greatsql_shell_build/8.0.32-25/images/sha256-4a658457738231651010bdf9026164e38b4b455496f3d13a32dcac8f1b8e2b93?context=repo) +- [latest-arch64](https://hub.docker.com/layers/greatsql/greatsql_shell_build/latest-aarch64/images/sha256-46826329b1f0a6f201ddc30a47bfb9724afd724b116d7a4323d3db21d9ea46e0?context=repo), [8.0.32-25-aarch64](https://hub.docker.com/layers/greatsql/greatsql_shell_build/8.0.32-25-aarch64/images/sha256-46826329b1f0a6f201ddc30a47bfb9724afd724b116d7a4323d3db21d9ea46e0?context=repo) + +## 如何使用GreatSQL-Shell-Build + +例如: + +## 1. GreatSQL Build Docker镜像构建 + +```shell +$ git clone 下 + +centos7: +$ cd GreatSQL-Docker/GreatSQL-Shell-Build/centos7 +$ docker build -t greatsql/greatsqlsh_centos7 . + +centos8: +$ cd GreatSQL-Docker/GreatSQL-Shell-Build/centos8 +$ docker build -t greatsql/greatsqlsh_centos8 . + +rocky8: +$ cd GreatSQL-Docker/GreatSQL-Shell-Build/rocky8 +$ docker build -t greatsql/greatsqlsh_rocky8 . + +rocky9: +$ cd GreatSQL-Docker/GreatSQL-Shell-Build/rocky9 +$ docker build -t greatsql/greatsqlsh_rocky9 . + + +openEuler2203: +$ cd GreatSQL-Docker/GreatSQL-Shell-Build/openEuler2203 +$ docker build -t greatsql/greatsqlsh_openeuler2203 . +``` + +``` +上述命令会查找当前目录下的 `Dockerfile` 文件,并构建名为 `greatsql/greatsql_centos7/centos8/rocky8` 的Docker镜像。 + + +```shell +$ docker run -itd --hostname greatsqlsh_centos7 --name greatsqlsh_centos7 greatsql/greatsqlsh_centos7 bash +$ docker run -itd --hostname greatsqlsh_centos8 --name greatsqlsh_centos8 greatsql/greatsqlsh_centos8 bash +$ docker run -itd --privileged=true --hostname greatsqlsh_rocky8 --name greatsqlsh_rocky8 greatsql/greatsqlsh_rocky8 bash +$ docker run -itd --privileged=true --hostname greatsqlsh_rocky9 --name greatsqlsh_rocky9 greatsql/greatsqlsh_rocky9 bash +$ docker run -itd --privileged=true --hostname greatsqlsh_openeuler2203 --name greatsqlsh_openeuler2203 greatsql/greatsqlsh_openeuler2203 bash +``` +执行上述命令后,会创建一个GreatSQL-Shell编译环境容器,并在容器中自动完成GreatSQL-Shell编译工作。 + +在编译过程中,可以执行下面命令查看进度: +```shell +$ docker logs greatsqlsh_centos7 | tail -n 20 +$ docker logs greatsqlsh_centos8 | tail -n 20 +$ docker logs greatsqlsh_rocky8 | tail -n 20 +$ docker logs greatsqlsh_rocky9 | tail -n 20 +$ docker logs greatsqlsh_openeuler2203 | tail -n 20 +``` + +如果看到类似下面的结果,就表明二进制包已编译完成 +```shell +$ docker logs greatsqlsh_centos7 | tail -n 20 +0. touch logfile /tmp/greatsqlsh-automake.log + +1. downloading sourcecode tarballs and extract + 1.1 downloading sourcecode tarballs ... + 1.2 extract tarballs ... +2. compiling antlr4 +3. compiling patchelf +4. compiling protobuf +5. compiling libssh +6. compiling python3.8 +7. compiling MySQL Shell for GreatSQL + 7.1 compiling mysqlclient and mysqlxclient and mysql_config_editor + 7.2 compiling MySQL Shell for GreatSQL +8. MySQL Shell for GreatSQL 8.0.32-25 build completed! + 8.1 MySQL Shell for GreatSQL 8.0.32-25 version: + centos7: +/opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/bin/mysqlsh Ver 8.0.32 for Linux on x86_64 - for MySQL 8.0.32 (Source distribution) + +centos8/rocky8: +/opt/greatsql-shell-8.0.32-25-Linux-el8-glibc2.28-x86_64/bin/mysqlsh Ver 8.0.32 for Linux on x86_64 - for MySQL 8.0.32 (Source distribution) + +rocky9: +/opt/greatsql-shell-8.0.32-25-Linux-el9-glibc2.34-x86_64/bin/mysqlsh Ver 8.0.32 for Linux on x86_64 - for MySQL 8.0.32 (Source distribution) + +openeuler2203: +/opt/greatsql-shell-8.0.32-25-Linux-oe2203-glibc2.34-x86_64/bin/mysqlsh Ver 8.0.32 for Linux on x86_64 - for MySQL 8.0.32 (Source distribution) + + + 8.2 TARBALL file: + centos7: +-rw-r--r-- 1 root root 141485395 Mar 12 07:15 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64.tar.gz + +centos8/rocky8: +-rw-r--r-- 1 root root 141485395 Feb 21 02:56 /opt/greatsql-shell-8.0.32-25-Linux-el8-glibc2.28-x86_64.tar.xz + +rocky9: +-rw-r--r-- 1 root root 141485395 Feb 21 02:56 /opt/greatsql-shell-8.0.32-25-Linux-el9-glibc2.34-x86_64.tar.xz + +openeuler2203: +-rw-r--r-- 1 root root 141485395 Feb 21 02:56 /opt/greatsql-shell-8.0.32-25-Linux-oe2203-glibc2.34-x86_64.tar.xz +``` + +接下来回退到宿主机,将容器中的二进制包拷贝出来 + +```shell +centos7: +$ docker cp greatsqlsh_centos7:/opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64.tar.gz /usr/local/ + +centos8/rocky8: +$ docker cp greatsqlsh_centos8:/opt/greatsql-shell-8.0.32-25-Linux-el8-glibc2.28-x86_64.tar.xz /usr/local/ + +rocky9: +$ docker cp greatsqlsh_centos8:/opt/greatsql-shell-8.0.32-25-Linux-el9-glibc2.34-x86_64.tar.xz /usr/local/ + +openeuler2203: +$ docker cp greatsqlsh_centos8:/opt/greatsql-shell-8.0.32-25-Linux-oe2203-glibc2.34-x86_64.tar.xz /usr/local/ +``` + +然后解压缩,就可以在宿主机环境下使用了,例如: +``` +# 测试使用 +centos7: +$ /usr/local/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/bin/mysqlsh + +centos8/rocky8: +$ /usr/local/greatsql-shell-8.0.32-25-Linux-el8-glibc2.28-x86_64/bin/mysqlsh + +rocky9: +$ /usr/local/greatsql-shell-8.0.32-25-Linux-el9-glibc2.34-x86_64/bin/mysqlsh + +openeuler2203: +$ /usr/local/greatsql-shell-8.0.32-25-Linux-oe2203-glibc2.34-x86_64/bin/mysqlsh + +MySQL Shell 8.0.32 +... +Type '\help' or '\?' for help; '\quit' to exit. + MySQL Py > \q +Bye! +``` + +## 文件介绍 +- CHANGELOG.md,更新历史 +- docker-entrypoint.sh,GreatSQL-Shell Docker镜像初始化脚本,处理源码包下载等准备工作 +- Dockerfile,用于构建Docker编译环境 +- greatsqlsh-automake.sh,用于实现在Docker容器中自动化编译的脚本 +- greatsqlsh-setenv.sh,通用环境变量设置脚本 +- mysqlsh-for-greatsql-8.0.32.patch,需要对MySQL Shell打补丁,才能支持GreatSQL中特有的仲裁节点特性 + +## 联系我们 +扫码关注微信公众号 + +![GreatSQL社区微信公众号二维码](https://images.gitee.com/uploads/images/2021/0802/143402_f9d6cb61_8779455.jpeg "greatsql社区-wx-qrcode-0.5m.jpg") diff --git a/GreatSQL-Shell-Build/centos7/CentOS-Base.repo b/GreatSQL-Shell-Build/centos7/CentOS-Base.repo new file mode 100644 index 0000000000000000000000000000000000000000..6962ae4f54bc39aad8c00e23c846a993303d000d --- /dev/null +++ b/GreatSQL-Shell-Build/centos7/CentOS-Base.repo @@ -0,0 +1,44 @@ +# CentOS-Base.repo +# +# The mirror system uses the connecting IP address of the client and the +# update status of each mirror to pick mirrors that are updated to and +# geographically close to the client. You should use this for CentOS updates +# unless you are manually picking other mirrors. +# +# If the mirrorlist= does not work for you, as a fall back you can try the +# remarked out baseurl= line instead. +# +# + +[base] +name=CentOS-7 - Base +mirrorlist=http://mirrorlist.centos.org/?release=7&arch=$basearch&repo=os&infra=$infra +#baseurl=http://mirror.centos.org/centos/7/os/$basearch/ +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 + +#released updates +[updates] +name=CentOS-7 - Updates +mirrorlist=http://mirrorlist.centos.org/?release=7&arch=$basearch&repo=updates&infra=$infra +#baseurl=http://mirror.centos.org/centos/7/updates/$basearch/ +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 + +#additional packages that may be useful +[extras] +name=CentOS-7 - Extras +mirrorlist=http://mirrorlist.centos.org/?release=7&arch=$basearch&repo=extras&infra=$infra +#baseurl=http://mirror.centos.org/centos/7/extras/$basearch/ +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 + +#additional packages that extend functionality of existing packages +[centosplus] +name=CentOS-7 - Plus +mirrorlist=http://mirrorlist.centos.org/?release=7&arch=$basearch&repo=centosplus&infra=$infra +#baseurl=http://mirror.centos.org/centos/7/centosplus/$basearch/ +gpgcheck=1 +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 + diff --git a/GreatSQL-Shell-Build/centos7/Dockerfile b/GreatSQL-Shell-Build/centos7/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..72461e50faac8936e1241acfa3ffc4cc0eca8551 --- /dev/null +++ b/GreatSQL-Shell-Build/centos7/Dockerfile @@ -0,0 +1,76 @@ +FROM centos:7 +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-Shell-Docker" + +ARG OPT_DIR=/opt +ARG MYSQL_UID=3306 +ARG MYSQL_USER=mysql +ARG DEPS="file which autoconf automake binutils bison make cmake3 cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ +devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-annobin-plugin-gcc devtoolset-11-binutils \ +libcurl-devel libssh libssh-devel libffi libffi-devel libxml2-devel libxml2 libyaml libyaml-devel bzip2 bzip2-libs bzip2-devel \ +libtirpc-devel libudev-devel uuid libuuid libuuid-devel m4 ncurses-devel openssl openssl-devel openssl-libs openssl11 openssl11-devel openssl11-libs \ +libcom_err libcom_err-devel libgcrypt libcurl libcurl-devel \ +patch uuid wget curl gzip tar zlib-devel centos-release-scl centos-release-scl-rh scl-utils-build \ +v8-devel nodejs-libs nodejs nodejs-devel nodejs-packaging" +#v8-devel-9.4.146.26-1.16.20.2.1.el7.x86_64 + +#ARG GREATSQLSH_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.0.32-25/GreatSQL-Shell-Build/centos7" +ARG GREATSQLSH_ENV="greatsqlsh-setenv.sh" +ARG ENTRYPOINT="docker-entrypoint.sh" +ARG COPY_CO="copy_so.sh" +ARG GREATSQLSH_AUTOMAKE="greatsqlsh-automake.sh" + +CMD /bin/bash + +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/*; + + +RUN rm -f /etc/yum.repos.d/CentOS-Linux-* ; +#RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo +COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo + +RUN yum clean all > /dev/null 2>&1 +RUN yum -y update > /dev/null 2>&1 + + +RUN yum install -y epel-release > /dev/null 2>&1 +RUN yum install -y centos-release-scl centos-release-scl-rh > /dev/null 2>&1 +RUN yum install -y ${DEPS} > /dev/null 2>&1 + + +RUN scl enable devtoolset-11 bash && \ +source /opt/rh/devtoolset-11/enable && \ +echo 'source /opt/rh/devtoolset-11/enable' >> /root/.bash_profile; + +RUN /usr/sbin/groupadd -g ${MYSQL_UID} ${MYSQL_USER} && \ +/usr/sbin/useradd -u ${MYSQL_UID} -g ${MYSQL_UID} -s /sbin/nologin ${MYSQL_USER} + +RUN mkdir -p ${OPT_DIR} + +#RUN curl -o ${OPT_DIR}/${GREATSQLSH_ENV} ${GREATSQLSH_BUILD_DOWNLOAD_URL}/${GREATSQLSH_ENV} > /dev/null 2>&1 +#RUN curl -o ${OPT_DIR}/${ENTRYPOINT} ${GREATSQLSH_BUILD_DOWNLOAD_URL}/${ENTRYPOINT} > /dev/null 2>&1 +COPY greatsqlsh-setenv.sh ${OPT_DIR}/${GREATSQLSH_ENV} +COPY docker-entrypoint.sh ${OPT_DIR}/${ENTRYPOINT} +COPY copy_so.sh ${OPT_DIR}/${COPY_CO} +COPY greatsqlsh-automake.sh ${OPT_DIR}/${GREATSQLSH_AUTOMAKE} +COPY requirements.txt ${OPT_DIR}/requirements.txt +COPY mysqlsh-for-greatsql-8.0.32.patch ${OPT_DIR}/mysqlsh-for-greatsql-8.0.32.patch + + +RUN chmod +x ${OPT_DIR}/*sh + +ENTRYPOINT ["/opt/docker-entrypoint.sh"] + +CMD ["bash"] diff --git a/GreatSQL-Shell-Build/centos7/copy_so.sh b/GreatSQL-Shell-Build/centos7/copy_so.sh new file mode 100644 index 0000000000000000000000000000000000000000..01f0f63ac5e6af6d75a4eb98ae60a136a32fa520 --- /dev/null +++ b/GreatSQL-Shell-Build/centos7/copy_so.sh @@ -0,0 +1,52 @@ + +#!/bin/bash + +. /opt/greatsqlsh-setenv.sh + +#copy so to lib dir +unalias cp +cp /usr/local/protobuf/lib/libprotobuf.so.30 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libpthread.so.0 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libdl.so.2 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libssl.so.10 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libcrypto.so.10 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libresolv.so.2 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/librt.so.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libutil.so.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libcurl.so.4 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libnode.so.93 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libm.so.6 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libstdc++.so.6 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libgcc_s.so.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libc.so.6 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/ld-linux-x86-64.so.2 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libgssapi_krb5.so.2 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libkrb5.so.3 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libcom_err.so.2 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libk5crypto.so.3 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libz.so.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libidn.so.11 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libssh2.so.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libssl3.so ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libsmime3.so ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libnss3.so ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libnssutil3.so ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libplds4.so ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libplc4.so ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libnspr4.so ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/liblber-2.4.so.2 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libldap-2.4.so.2 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libuv.so.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libbrotlidec.so.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libbrotlienc.so.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libcrypto.so.1.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libssl.so.1.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libcrypt.so.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libuuid.so.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libkrb5support.so.0 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libkeyutils.so.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libsasl2.so.3 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libbrotlicommon.so.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libfreebl3.so ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libselinux.so.1 ${BASE_DIR}/lib/mysqlsh/ +cp /lib64/libpcre.so.1 ${BASE_DIR}/lib/mysqlsh/ diff --git a/GreatSQL-Shell-Build/centos7/docker-entrypoint.sh b/GreatSQL-Shell-Build/centos7/docker-entrypoint.sh new file mode 100644 index 0000000000000000000000000000000000000000..c138aed604f2f4e1da5f8b2975c906dd1fbd3f19 --- /dev/null +++ b/GreatSQL-Shell-Build/centos7/docker-entrypoint.sh @@ -0,0 +1,81 @@ +#!/bin/bash +. /opt/greatsqlsh-setenv.sh + +echo "0. touch logfile ${MAKELOG}" +touch ${MAKELOG} && \ +chown ${MYSQL_USER}:${MYSQL_USER} ${MAKELOG} && \ +chmod 0777 ${MAKELOG} && \ +echo && \ +echo "1. downloading sourcecode tarballs and extract" +cd ${OPT_DIR} +echo " 1.1 downloading sourcecode tarballs ..." && \ +wget -c -O ${PATCHELF}.tar.gz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PATCHELF}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${PROTOBUF}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PROTOBUF}.tar.xz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${ANTLR}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${ANTLR}.tar.xz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${BOOST}.tar.gz ${BOOST_SRC_DOWNLOAD_URL}/${BOOST}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${LIBSSH}.tar.xz ${LIBSSH_SRC_DOWNLOAD_URL}/${LIBSSH}.tar.xz >> ${MAKELOG} 2>&1 && \ +wget -c -O Python-${PYTHON_VERSION}.tar.xz ${PYTHON_SRC_DOWNLOAD_URL}/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${MYSQLSH}.tar.gz ${MYSQLSH_SRC_DOWNLOAD_URL}/${MYSQLSH}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${MYSQL}.tar.gz ${MYSQL_SRC_DOWNLOAD_URL}/${MYSQL}.tar.gz >> ${MAKELOG} 2>&1 && \ +echo " 1.2 extract tarballs ..." && \ +tar xf ${OPT_DIR}/${PATCHELF}*z && \ +tar xf ${OPT_DIR}/${PROTOBUF}*z && \ +tar xf ${OPT_DIR}/${ANTLR}*z && \ +tar xf ${OPT_DIR}/${BOOST}*z && \ +tar xf ${OPT_DIR}/${LIBSSH}*z && \ +tar xf ${OPT_DIR}/Python-${PYTHON_VERSION}.tar.xz && \ +tar xf ${OPT_DIR}/${MYSQL}*z && \ +tar xf ${OPT_DIR}/${MYSQLSH}*z + +#chown -R ${MYSQL_USER}:${MYSQL_USER} ${OPT_DIR} + +#yum install -y ${RPCGEN} >> ${MAKELOG} 2>&1 + +chmod +x ${OPT_DIR}/*sh + +echo "2. compiling antlr4" && \ +cd ${OPT_DIR}/${ANTLR}/runtime/Cpp/bld && \ +cmake3 .. -DCMAKE_INSTALL_PREFIX=/usr/local/antlr4 >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +echo "3. compiling patchelf" && \ +cd ${OPT_DIR}/${PATCHELF} && \ +./bootstrap.sh >> ${MAKELOG} 2>&1 && \ +./configure >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +echo "4. compiling protobuf" && \ +cd ${OPT_DIR}/${PROTOBUF} && \ +./configure --prefix=/usr/local/protobuf >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +echo "5. compiling libssh" && \ +cd ${OPT_DIR}/${LIBSSH} && \ +rm -rf build && \ +mkdir -p build && \ +cd build && \ +cmake3 .. -DCMAKE_INSTALL_PREFIX=/usr/local/libssh >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make install >> ${MAKELOG} 2>&1 && \ +echo "6. compiling python3.8" && \ +cd ${OPT_DIR}/Python-${PYTHON_VERSION} && \ +mkdir -p /usr/local/soft/python && \ +./configure --prefix=/usr/local/soft/python/${PYTHON_VERSION} --enable-shared >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make install >> ${MAKELOG} 2>&1 && \ +\cp /usr/local/soft/python/${PYTHON_VERSION}/lib/libpython3.8.so /usr/lib64/libpython3.8.so.1.0 >> ${MAKELOG} 2>&1 && \ +/usr/local/soft/python/${PYTHON_VERSION}/bin/pip3 install -r ${OPT_DIR}/requirements.txt -t /usr/local/soft/python/${PYTHON_VERSION}/lib/python3.8/site-packages/ >> ${MAKELOG} 2>&1 && \ +echo "7. compiling MySQL Shell for GreatSQL" && \ +su - ${MYSQL_USER} -s /bin/bash -c "cd ${OPT_DIR}; /bin/sh ${OPT_DIR}/${GREATSQLSH_MAKESH}" && \ +echo "8. MySQL Shell for GreatSQL 8.0.32-25 build completed!" && \ +echo " 8.1 MySQL Shell for GreatSQL 8.0.32-25 version:" && \ +${BASE_DIR}/bin/mysqlsh --version && \ +${BASE_DIR}/bin/mysqlsh --version >> ${MAKELOG} 2>&1 && \ +cd ${BASE_DIR} >> ${MAKELOG} 2>&1 && \ +find . | grep -E "(/__pycache__$|\.pyc$|\.pyo$)" | xargs rm -rf >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR} && \ +tar -czvf ${GREATSQLSH}.tar.gz ${GREATSQLSH} >> ${MAKELOG} 2>&1 && \ +echo " 8.2 TARBALL file:" && \ +ls -la ${OPT_DIR}/${GREATSQLSH}.tar.gz +#cd ${OPT_DIR} && \ +#rm -fr ${ANTLR}* ${BOOST}* ${MYSQL}* ${MYSQLSH}* ${MYSQLSH_PATCH} ${PATCHELF}* ${PROTOBUF}* ${LIBSSH}* ${RPCGEN} +/bin/bash diff --git a/GreatSQL-Shell-Build/centos7/greatsqlsh-automake.sh b/GreatSQL-Shell-Build/centos7/greatsqlsh-automake.sh new file mode 100644 index 0000000000000000000000000000000000000000..9c0c1b4475774830caa99574def61f1299add816 --- /dev/null +++ b/GreatSQL-Shell-Build/centos7/greatsqlsh-automake.sh @@ -0,0 +1,43 @@ +#!/bin/bash +. /opt/greatsqlsh-setenv.sh + +echo " 7.1 compiling mysqlclient and mysqlxclient and mysql_config_editor and authentication_oci_client" && \ +cd ${OPT_DIR}/${MYSQL} && \ +rm -fr bld && \ +mkdir bld && \ +cd bld && \ +cmake3 .. -DBOOST_INCLUDE_DIR=${OPT_DIR}/${BOOST} \ +-DLOCAL_BOOST_DIR=${OPT_DIR}/${BOOST} \ +-DWITH_AUTHENTICATION_CLIENT_PLUGINS=1 \ +-DWITH_SSL=system >> ${MAKELOG} 2>&1 && \ +cmake3 --build . --target mysqlclient -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +cmake3 --build . --target mysqlxclient -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +cmake3 --build . --target mysql_config_editor -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +cmake3 --build . --target authentication_oci_client -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +echo " 7.2 compiling MySQL Shell for GreatSQL" && \ +cd ${OPT_DIR}/${MYSQLSH} && \ +patch -p1 -f < ${OPT_DIR}/${GREATSQLSH_PATCH} >> ${MAKELOG} 2>&1 + +rm -rf bld && \ +mkdir bld && \ +cd bld && \ +cmake3 .. \ +-DCMAKE_INSTALL_PREFIX=${BASE_DIR} \ +-DMYSQL_SOURCE_DIR=${OPT_DIR}/${MYSQL} \ +-DMYSQL_BUILD_DIR=${OPT_DIR}/${MYSQL}/bld/ \ +-DBUNDLED_MYSQL_CONFIG_EDITOR=${OPT_DIR}/${MYSQL}/bld/runtime_output_directory/mysql_config_editor \ +-DCLIENT_PLUGIN_LIB=${OPT_DIR}/${MYSQL}/bld/plugin_output_directory/authentication_oci_client.so \ +-DWITH_PROTOBUF=/usr/local/protobuf \ +-DBUILD_SOURCE_PACKAGE=0 \ +-DBUNDLED_ANTLR_DIR=/usr/local/antlr4/ \ +-DBUNDLED_SSH_DIR=/usr/local/libssh \ +-DHAVE_PYTHON=1 \ +-DBUNDLED_PYTHON_DIR=/usr/local/soft/python/3.8.18/ \ +-DPYTHON_INCLUDE_DIRS=/usr/local/soft/python/3.8.18/include/python3.8 \ +-DPYTHON_LIBRARY=/usr/local/soft/python/3.8.18/lib/libpython3.8.so \ +-DHAVE_V8=1 \ +-DV8_LIBRARY=/usr/lib64/libv8.so \ +-DV8_INCLUDE_DIR=/usr/include \ +-DV8_LIB_DIR=/usr/lib64 >> ${MAKELOG} 2>&1 \ +&& make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && make install >> ${MAKELOG} 2>&1 && \ +sh /opt/copy_so.sh >> ${MAKELOG} 2>&1 diff --git a/GreatSQL-Shell-Build/greatsqlsh-setenv.sh b/GreatSQL-Shell-Build/centos7/greatsqlsh-setenv.sh old mode 100755 new mode 100644 similarity index 70% rename from GreatSQL-Shell-Build/greatsqlsh-setenv.sh rename to GreatSQL-Shell-Build/centos7/greatsqlsh-setenv.sh index 4d97527d9fd41923bbb59abb70eaf96bb4d1d883..60b45aca25184e5bbf36b4ae13e9cf3e11aa5a3f --- a/GreatSQL-Shell-Build/greatsqlsh-setenv.sh +++ b/GreatSQL-Shell-Build/centos7/greatsqlsh-setenv.sh @@ -1,4 +1,4 @@ -#/bin/bash +#!/bin/bash . ~/.bash_profile @@ -14,18 +14,24 @@ MYSQL_VERSTION=8.0.32 RELEASE=25 GLIBC=`ldd --version | head -n 1 | awk '{print $NF}'` ARCH=`uname -p` -OS=`grep '^ID=' /etc/os-release | sed 's/.*"\(.*\)".*/\1/ig'` +#OS=`grep '^ID=' /etc/os-release | sed 's/.*"\(.*\)".*/\1/ig'` +OS=Linux +OSPATCH=el7 + MAKELOG=/tmp/greatsqlsh-automake.log -MYSQL_USER=mysql -GREATSQLSH=greatsql-shell-${MYSQL_VERSTION}-${RELEASE}-${OS}-glibc${GLIBC}-${ARCH} +MYSQL_USER=root +GREATSQLSH=greatsql-shell-${MYSQL_VERSTION}-${RELEASE}-${OS}-${OSPATCH}-glibc${GLIBC}-${ARCH} BASE_DIR=${OPT_DIR}/${GREATSQLSH} GREATSQL_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.0.32-25/deppkgs" -GREATSQLSH_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.0.32-25/GreatSQL-Shell-Build" BOOST_SRC_DOWNLOAD_URL="https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source" MYSQL_SRC_DOWNLOAD_URL="https://downloads.mysql.com/archives/get/p/23/file" MYSQLSH_SRC_DOWNLOAD_URL="https://downloads.mysql.com/archives/get/p/43/file" +LIBSSH_SRC_DOWNLOAD_URL="https://www.libssh.org/files/0.9" +PYTHON_SRC_DOWNLOAD_URL="https://www.python.org/ftp/python" +PYTHON_VERSION="3.8.18" ANTLR="antlr4-4.10" BOOST="boost_1_77_0" +LIBSSH="libssh-0.9.2" MYSQL="mysql-8.0.32" MYSQLSH="mysql-shell-8.0.32-src" PATCHELF="patchelf-0.14.5" @@ -33,8 +39,4 @@ PROTOBUF="protobuf-3.19.4" GREATSQLSH_PATCH="mysqlsh-for-greatsql-8.0.32.patch" GREATSQLSH_MAKESH="greatsqlsh-automake.sh" GREATSQLSH_ENV="greatsqlsh-setenv.sh" -if [ "`uname -p`" = "aarch64" ] ; then - RPCGEN="rpcgen-1.3.1-4.el8.aarch64.rpm" -else - RPCGEN="rpcgen-1.3.1-4.el8.x86_64.rpm" -fi +RPCGEN="" diff --git a/GreatSQL-Shell-Build/mysqlsh-for-greatsql-8.0.32.patch b/GreatSQL-Shell-Build/centos7/mysqlsh-for-greatsql-8.0.32.patch similarity index 68% rename from GreatSQL-Shell-Build/mysqlsh-for-greatsql-8.0.32.patch rename to GreatSQL-Shell-Build/centos7/mysqlsh-for-greatsql-8.0.32.patch index 00d96dcb3065dbfb255e7ffd658e65631aa94091..f3631e549cd9db57f480eb0c7de80543a5a9dbc5 100644 --- a/GreatSQL-Shell-Build/mysqlsh-for-greatsql-8.0.32.patch +++ b/GreatSQL-Shell-Build/centos7/mysqlsh-for-greatsql-8.0.32.patch @@ -27,9 +27,22 @@ index 05dfa54bf..23ccf6a76 100644 @@ -73,7 +73,7 @@ enum class Member_state { MISSING }; - + -enum class Member_role { PRIMARY, SECONDARY, NONE }; +enum class Member_role { PRIMARY, SECONDARY, ARBITRATOR, NONE }; - + enum class Topology_mode { SINGLE_PRIMARY, MULTI_PRIMARY, NONE }; - + +diff --git a/mysqlshdk/scripting/jscript_context.cc b/opt/jscript_context.cc +index 5f46751..0e7ff1e 100644 +--- a/mysqlshdk/scripting/jscript_context.cc ++++ b/opt/jscript_context.cc +@@ -1557,7 +1557,7 @@ v8::Local v8_array_buffer(v8::Isolate *isolate, + + std::string to_string(v8::Isolate *isolate, v8::Local obj) { + const v8::String::Utf8Value utf8{ +- isolate, obj->IsSymbol() ? obj.As()->Name() : obj}; ++ isolate, obj->IsSymbol() ? obj.As()->Description() : obj}; + const auto ptr = *utf8; + return nullptr == ptr ? "" : std::string(ptr, utf8.length()); + } diff --git a/GreatSQL-Shell-Build/centos7/requirements.txt b/GreatSQL-Shell-Build/centos7/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..4b6d2ee59bf90fad0e98b9bae5aa48085037dda0 --- /dev/null +++ b/GreatSQL-Shell-Build/centos7/requirements.txt @@ -0,0 +1,15 @@ +bcrypt==4.1.2 +certifi==2024.2.2 +cffi==1.16.0 +circuitbreaker==1.4.0 +cryptography==37.0.2 +oci==2.85.0 +paramiko==3.4.0 +pyClamd==0.4.0 +pycparser==2.21 +PyNaCl==1.5.0 +pyOpenSSL==22.0.0 +python-dateutil==2.9.0.post0 +pytz==2024.1 +PyYAML==6.0.1 +six==1.16.0 diff --git a/GreatSQL-Shell-Build/Dockerfile b/GreatSQL-Shell-Build/centos8/Dockerfile similarity index 31% rename from GreatSQL-Shell-Build/Dockerfile rename to GreatSQL-Shell-Build/centos8/Dockerfile index 217f9324dd15ee92930c0a442b409e1bc133503e..8143a77b3c5dff0601bcc93b9a706841d072270b 100644 --- a/GreatSQL-Shell-Build/Dockerfile +++ b/GreatSQL-Shell-Build/centos8/Dockerfile @@ -1,24 +1,19 @@ FROM centos:8 -#FROM docker.io/arm64v8/centos +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-Shell-Docker" -ENV LANG en_US.utf8 -ARG OPT_DIR=/opt \ -MYSQL_UID=3306 \ -MYSQL_USER=mysql \ -DEPS="autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ -gcc-toolset-11 gcc-toolset-11-annobin-plugin-gcc libcurl-devel libssh libssh-config libssh-devel \ -libtirpc-devel libudev-devel libuuid libuuid-devel m4 make ncurses-devel openssl openssl-devel \ -patch python38 python38-devel python38-libs python38-pyyaml uuid wget zlib-devel" \ -GREATSQLSH_BUILD_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.0.32-25/GreatSQL-Shell-Build" \ -GREATSQLSH_ENV="greatsqlsh-setenv.sh" \ -ENTRYPOINT="docker-entrypoint.sh" - -CMD /bin/bash +ARG OPT_DIR=/opt +ARG MYSQL_UID=3306 +ARG MYSQL_USER=mysql + +ARG GREATSQLSH_ENV="greatsqlsh-setenv.sh" +ARG ENTRYPOINT0="docker-entrypoint0.sh" +ARG ENTRYPOINT="docker-entrypoint.sh" +ARG GREATSQLSH_AUTOMAKE="greatsqlsh-automake.sh" RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \ systemd-tmpfiles-setup.service ] || rm -f $i; done); \ @@ -28,23 +23,22 @@ 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 && \ -dnf clean all > /dev/null 2>&1 && \ -dnf -y update > /dev/null 2>&1 ; \ -rm -f /etc/yum.repos.d/CentOS-Linux-* ; \ -dnf clean all > /dev/null 2>&1 && \ -rm -f /etc/yum.repos.d/CentOS-Linux-* ; \ -dnf install -y ${DEPS} > /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} && \ -mkdir -p ${OPT_DIR} && \ -curl -o ${OPT_DIR}/${GREATSQLSH_ENV} ${GREATSQLSH_BUILD_DOWNLOAD_URL}/${GREATSQLSH_ENV} > /dev/null 2>&1 && \ -curl -o ${OPT_DIR}/${ENTRYPOINT} ${GREATSQLSH_BUILD_DOWNLOAD_URL}/${ENTRYPOINT} > /dev/null 2>&1 && \ -chmod +x ${OPT_DIR}/*sh +rm -f /lib/systemd/system/anaconda.target.wants/* + +RUN /usr/sbin/groupadd -g ${MYSQL_UID} ${MYSQL_USER} && \ +/usr/sbin/useradd -u ${MYSQL_UID} -g ${MYSQL_UID} -s /sbin/nologin ${MYSQL_USER} + +RUN mkdir -p ${OPT_DIR} +COPY greatsqlsh-setenv.sh ${OPT_DIR}/${GREATSQLSH_ENV} +COPY docker-entrypoint0.sh ${OPT_DIR}/${ENTRYPOINT0} +COPY docker-entrypoint.sh ${OPT_DIR}/${ENTRYPOINT} +COPY greatsqlsh-automake.sh ${OPT_DIR}/${GREATSQLSH_AUTOMAKE} +COPY mysqlsh-for-greatsql-8.0.32.patch ${OPT_DIR}/mysqlsh-for-greatsql-8.0.32.patch +COPY requirements.txt ${OPT_DIR}/requirements.txt + +RUN chmod +x ${OPT_DIR}/*sh + +RUN ["/opt/docker-entrypoint0.sh"] ENTRYPOINT ["/opt/docker-entrypoint.sh"] diff --git a/GreatSQL-Shell-Build/docker-entrypoint.sh b/GreatSQL-Shell-Build/centos8/docker-entrypoint.sh old mode 100755 new mode 100644 similarity index 64% rename from GreatSQL-Shell-Build/docker-entrypoint.sh rename to GreatSQL-Shell-Build/centos8/docker-entrypoint.sh index 1afc8dfca31404c84001a661d797d8b7da048896..1decb924ca5e7c017cc7f71b634f6bf2ff9c25bf --- a/GreatSQL-Shell-Build/docker-entrypoint.sh +++ b/GreatSQL-Shell-Build/centos8/docker-entrypoint.sh @@ -1,18 +1,10 @@ #!/bin/bash . /opt/greatsqlsh-setenv.sh -echo "0. touch logfile ${MAKELOG}" -touch ${MAKELOG} && \ -chown ${MYSQL_USER}:${MYSQL_USER} ${MAKELOG} && \ -chmod 0777 ${MAKELOG} && \ -echo && \ -echo "1. downloading sourcecode tarballs and extract" +echo "1. downloading sourcecode tarballs and extract" && \ +echo "1. downloading sourcecode tarballs and extract" >> ${MAKELOG} 2>&1 && \ cd ${OPT_DIR} && \ -echo " 1.1 downloading sourcecode tarballs ..." && \ -wget -c -O ${GREATSQLSH_ENV} ${GREATSQLSH_BUILD_DOWNLOAD_URL}/${GREATSQLSH_ENV} >> ${MAKELOG} 2>&1 && \ -wget -c -O ${GREATSQLSH_MAKESH} ${GREATSQLSH_BUILD_DOWNLOAD_URL}/${GREATSQLSH_MAKESH} >> ${MAKELOG} 2>&1 && \ -wget -c -O ${GREATSQLSH_PATCH} ${GREATSQLSH_BUILD_DOWNLOAD_URL}/${GREATSQLSH_PATCH} >> ${MAKELOG} 2>&1 && \ -wget -c -O ${RPCGEN} ${GREATSQL_BUILD_DOWNLOAD_URL}/${RPCGEN} >> ${MAKELOG} 2>&1 && \ +echo " 1.1 downloading sourcecode tarballs ..." >> ${MAKELOG} && \ wget -c -O ${PATCHELF}.tar.gz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PATCHELF}.tar.gz >> ${MAKELOG} 2>&1 && \ wget -c -O ${PROTOBUF}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PROTOBUF}.tar.xz >> ${MAKELOG} 2>&1 && \ wget -c -O ${ANTLR}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${ANTLR}.tar.xz >> ${MAKELOG} 2>&1 && \ @@ -27,39 +19,43 @@ tar xf ${OPT_DIR}/${BOOST}*z && \ tar xf ${OPT_DIR}/${MYSQL}*z && \ tar xf ${OPT_DIR}/${MYSQLSH}*z && \ chown -R ${MYSQL_USER}:${MYSQL_USER} ${OPT_DIR} && \ -dnf install -y ${RPCGEN} >> ${MAKELOG} 2>&1 && \ chmod +x ${OPT_DIR}/*sh && \ echo && \ -echo "2. compiling antlr4" +echo "2. compiling antlr4" && \ +echo "2. compiling antlr4" >> ${MAKELOG} 2>&1 && \ cd ${OPT_DIR}/${ANTLR}/runtime/Cpp/bld && \ cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/antlr4 >> ${MAKELOG} 2>&1 && \ make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ echo && \ -echo "3. compiling patchelf" +echo "3. compiling patchelf" && \ +echo "3. compiling patchelf" >> ${MAKELOG} 2>&1 && \ cd ${OPT_DIR}/${PATCHELF} && \ ./bootstrap.sh >> ${MAKELOG} 2>&1 && \ ./configure >> ${MAKELOG} 2>&1 && \ make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ echo && \ -echo "4. compiling protobuf" +echo "4. compiling protobuf" && \ +echo "4. compiling protobuf" >> ${MAKELOG} 2>&1 && \ cd ${OPT_DIR}/${PROTOBUF} && \ ./configure >> ${MAKELOG} 2>&1 && \ make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ echo && \ -echo "5. compiling MySQL Shell for GreatSQL" +echo "5. compiling MySQL Shell for GreatSQL" && \ +echo "5. compiling MySQL Shell for GreatSQL" >> ${MAKELOG} 2>&1 && \ su - ${MYSQL_USER} -s /bin/bash -c "cd ${OPT_DIR}; /bin/sh ${OPT_DIR}/${GREATSQLSH_MAKESH}" && \ echo && \ -echo "6. MySQL Shell for GreatSQL 8.0.32-25 build completed!" -pip3.8 install --user certifi pyclamd >> ${MAKELOG} 2>&1 && \ +echo "6. MySQL Shell for GreatSQL 8.0.32-25 build completed!" && \ +echo "6. MySQL Shell for GreatSQL 8.0.32-25 build completed!" >> ${MAKELOG} 2>&1 && \ echo " 6.1 MySQL Shell for GreatSQL 8.0.32-25 version:" && \ ${BASE_DIR}/bin/mysqlsh --version && \ +${BASE_DIR}/bin/mysqlsh --version >> ${MAKELOG} 2>&1 && \ cd ${OPT_DIR} && \ tar cf ${GREATSQLSH}.tar ${GREATSQLSH} >> ${MAKELOG} 2>&1 && \ xz -9 -f -T${MAKE_JOBS} ${GREATSQLSH}.tar >> ${MAKELOG} 2>&1 && \ echo " 6.2 TARBALL file:" && \ -ls -la ${OPT_DIR}/${GREATSQLSH}.tar.xz && \ -cd ${OPT_DIR} && \ -rm -fr ${ANTLR}* ${BOOST}* ${MYSQL}* ${MYSQLSH}* ${MYSQLSH_PATCH} ${PATCHELF}* ${PROTOBUF}* ${RPCGEN} +ls -la ${OPT_DIR}/${GREATSQLSH}.tar.xz +#rm -fr ${ANTLR}* ${BOOST}* ${MYSQL}* ${MYSQLSH}* ${MYSQLSH_PATCH} ${PATCHELF}* ${PROTOBUF}* ${RPCGEN} + /bin/bash diff --git a/GreatSQL-Shell-Build/centos8/docker-entrypoint0.sh b/GreatSQL-Shell-Build/centos8/docker-entrypoint0.sh new file mode 100644 index 0000000000000000000000000000000000000000..d003dbe3e5c66264bd5e9c7b3456d8298f8451d6 --- /dev/null +++ b/GreatSQL-Shell-Build/centos8/docker-entrypoint0.sh @@ -0,0 +1,33 @@ +#!/bin/bash +. /opt/greatsqlsh-setenv.sh + +echo "0. init GreatSQL-Shell-Build env" && \ +echo "0.1 touch logfile ${MAKELOG}" +touch ${MAKELOG} && \ +chown ${MYSQL_USER}:${MYSQL_USER} ${MAKELOG} && \ +chmod 0777 ${MAKELOG} && \ +echo "0.2 install all DEPS(autoconf, gcc ...)" && \ +echo "0.3 download ${YUM_REPOS}.tar.xz and ${V8_LIBS_PKG}.tar.xz" && \ +mkdir -p ${OPT_DIR}/${V8_DEPS}/${YUM_REPOS} && \ +curl --output ${OPT_DIR}/${V8_DEPS}/${YUM_REPOS}/centos-stream-repos-8-4.el8.noarch.rpm http://mirror.centos.org/centos/8-stream/BaseOS/${ARCH}/os/Packages/centos-stream-repos-8-4.el8.noarch.rpm +curl --output ${OPT_DIR}/${V8_DEPS}/${YUM_REPOS}/centos-gpg-keys-8-4.el8.noarch.rpm http://mirror.centos.org/centos/8-stream/BaseOS/${ARCH}/os/Packages/centos-gpg-keys-8-4.el8.noarch.rpm +curl --output ${OPT_DIR}/${V8_DEPS}/${YUM_REPOS}/centos-stream-release-8.6-1.el8.noarch.rpm http://mirror.centos.org/centos/8-stream/BaseOS/${ARCH}/os/Packages/centos-stream-release-8.6-1.el8.noarch.rpm +curl --output ${OPT_DIR}/${V8_DEPS}/${V8_LIBS_PKG}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${V8_DEPS}/${V8_LIBS_PKG}.tar.xz >> ${MAKELOG} 2>&1 && \ +echo "0.4 tar xf ${YUM_REPOS} and ${V8_LIBS_PKG}" && \ +cd ${OPT_DIR}/${V8_DEPS} && \ +tar xf ${V8_LIBS_PKG}*z -C ${OPT_DIR}/${V8_DEPS} && \ +echo "0.5 install ${YUM_REPOS} and ${V8_LIBS_PKG}" && \ +rpm -e centos-gpg-keys-8-2.el8.noarch centos-linux-repos-8-2.el8.noarch centos-linux-release-8.4-1.2105.el8.noarch --nodeps && \ +dnf install -y ${YUM_REPOS}/centos*noarch.rpm >> ${MAKELOG} 2>&1 && \ +echo "0.6 install DEPS rpm" && \ +dnf install -y epel-release >> ${MAKELOG} 2>&1 && \ +dnf install -y 'dnf-command(config-manager)' >> ${MAKELOG} 2>&1 && \ +dnf config-manager --enable powertools epel-testing epel-modular epel-testing-modular >> ${MAKELOG} 2>&1 && \ +dnf install -y ${DEPS} > /dev/null 2>&1 && \ +echo "0.7 install V8 DEPS rpm" && \ +dnf install -y ${V8_LIBS_PKG}/*rpm >> ${MAKELOG} 2>&1 +echo "0.8 enable gcc-toolset-11" && \ +cd /opt/rh/gcc-toolset-11/root/usr/lib/gcc/x86_64-redhat-linux/11/plugin/ && \ +ln -s annobin.so gcc-annobin.so && \ +echo 'source /opt/rh/gcc-toolset-11/enable' >> /root/.bash_profile && \ +pip3 install -r ${OPT_DIR}/requirements.txt diff --git a/GreatSQL-Shell-Build/greatsqlsh-automake.sh b/GreatSQL-Shell-Build/centos8/greatsqlsh-automake.sh old mode 100755 new mode 100644 similarity index 41% rename from GreatSQL-Shell-Build/greatsqlsh-automake.sh rename to GreatSQL-Shell-Build/centos8/greatsqlsh-automake.sh index f818688dabbb7cff9d14e6b067c23bdc81c06541..fa061cc99410aeafb5e5b0b4379018b873158353 --- a/GreatSQL-Shell-Build/greatsqlsh-automake.sh +++ b/GreatSQL-Shell-Build/centos8/greatsqlsh-automake.sh @@ -1,16 +1,20 @@ #!/bin/bash . /opt/greatsqlsh-setenv.sh -echo " 5.1 compiling mysqlclient and mysqlxclient" && \ +echo " 5.1 compiling mysqlclient and mysqlxclient and mysql_config_editor and authentication_oci_client" && \ cd ${OPT_DIR}/${MYSQL} && \ rm -fr bld && \ mkdir bld && \ cd bld && \ -cmake .. -DBOOST_INCLUDE_DIR=${OPT_DIR}/${BOOST} \ +cmake .. \ -DLOCAL_BOOST_DIR=${OPT_DIR}/${BOOST} \ +-DBOOST_INCLUDE_DIR=${OPT_DIR}/${BOOST} \ +-DWITH_AUTHENTICATION_CLIENT_PLUGINS=1 \ -DWITH_SSL=system >> ${MAKELOG} 2>&1 && \ cmake --build . --target mysqlclient -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 ; \ cmake --build . --target mysqlxclient -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +cmake --build . --target mysql_config_editor -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +cmake --build . --target authentication_oci_client -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ echo " 5.2 compiling MySQL Shell for GreatSQL" && \ cd ${OPT_DIR}/${MYSQLSH} && \ patch -p1 -f < ${OPT_DIR}/${GREATSQLSH_PATCH} >> ${MAKELOG} 2>&1 && \ @@ -21,10 +25,21 @@ cmake .. \ -DCMAKE_INSTALL_PREFIX=${BASE_DIR} \ -DMYSQL_SOURCE_DIR=${OPT_DIR}/${MYSQL} \ -DMYSQL_BUILD_DIR=${OPT_DIR}/${MYSQL}/bld/ \ --DHAVE_PYTHON=1 \ --DWITH_PROTOBUF=bundled \ +-DBUNDLED_MYSQL_CONFIG_EDITOR=${OPT_DIR}/${MYSQL}/bld/runtime_output_directory/mysql_config_editor \ +-DCLIENT_PLUGIN_LIB=${OPT_DIR}/${MYSQL}/bld/plugin_output_directory/authentication_oci_client.so \ +-DWITH_PROTOBUF=system \ -DBUILD_SOURCE_PACKAGE=0 \ -DBUNDLED_ANTLR_DIR=/usr/local/antlr4/ \ --DPYTHON_LIBRARIES=/usr/lib64/python3.8 -DPYTHON_INCLUDE_DIRS=/usr/include/python3.8/ >> ${MAKELOG} 2>&1 \ +-DHAVE_V8=1 \ +-DV8_INCLUDE_DIR=/usr/include \ +-DV8_LIB_DIR=/usr/lib64 \ +-DHAVE_PYTHON=1 \ +-DPYTHON_LIBRARIES=/usr/lib64/python3.8 \ +-DPYTHON_INCLUDE_DIRS=/usr/include/python3.8/ >> ${MAKELOG} 2>&1 \ && make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ -cp /usr/local/lib/libprotobuf.so.30 ${BASE_DIR}/lib/mysqlsh/ +cp /usr/local/lib/libprotobuf.so.30 ${BASE_DIR}/lib/mysqlsh/ && \ +cp /lib64/libnode.so.93 ${BASE_DIR}/lib/mysqlsh/libnode.so.93 && \ +cp /lib64/libbrotlienc.so.1.0.6 ${BASE_DIR}/lib/mysqlsh/libbrotlienc.so.1 && \ +cp /lib64/libbrotlidec.so.1.0.6 ${BASE_DIR}/lib/mysqlsh/libbrotlidec.so.1 && \ +cp /lib64/libuv.so.1.0.0 ${BASE_DIR}/lib/mysqlsh/libuv.so.1 && \ +cp /lib64/libbrotlicommon.so.1.0.6 ${BASE_DIR}/lib/mysqlsh/libbrotlicommon.so.1 diff --git a/GreatSQL-Shell-Build/centos8/greatsqlsh-setenv.sh b/GreatSQL-Shell-Build/centos8/greatsqlsh-setenv.sh new file mode 100644 index 0000000000000000000000000000000000000000..49b6c9311ccfcbb44ad8cf2289a164b35f1a850d --- /dev/null +++ b/GreatSQL-Shell-Build/centos8/greatsqlsh-setenv.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +. ~/.bash_profile + +MAKE_JOBS=$(lscpu | grep '^CPU(s)'|awk '{print $NF}') +if [ ${MAKE_JOBS} -ge 16 ] ; then + MAKE_JOBS=$(expr ${MAKE_JOBS} - 4) +else + MAKE_JOBS=$(expr ${MAKE_JOBS} - 1) +fi + +OPT_DIR=/opt +MYSQL_VERSTION=8.0.32 +RELEASE=25 +GLIBC=$(ldd --version | head -n 1 | awk '{print $NF}') +ARCH=$(uname -p) +#OS=`grep '^ID=' /etc/os-release | sed 's/.*"\(.*\)".*/\1/ig'` +OS=Linux +OSPATCH=el8 + +MAKELOG=/tmp/greatsqlsh-automake.log +MYSQL_USER=root +GREATSQLSH=greatsql-shell-${MYSQL_VERSTION}-${RELEASE}-${OS}-${OSPATCH}-glibc${GLIBC}-${ARCH} +BASE_DIR=${OPT_DIR}/${GREATSQLSH} +GREATSQL_BUILD_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-Docker/deppkgs" +BOOST_SRC_DOWNLOAD_URL="https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source" +MYSQL_SRC_DOWNLOAD_URL="https://downloads.mysql.com/archives/get/p/23/file" +MYSQLSH_SRC_DOWNLOAD_URL="https://downloads.mysql.com/archives/get/p/43/file" + +DEPS="langpacks-en glibc-langpack-en libmodulemd autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ +libffi libffi-devel libxml2-devel libxml2 libyaml bzip2 bzip2-libs bzip2-devel \ +libcurl-devel libssh libssh-config libssh-devel \ +libtirpc-devel libudev-devel libuuid libuuid-devel m4 make ncurses-devel openssl openssl-devel \ +patch python38 python38-devel python38-libs python38-pyyaml uuid wget zlib-devel \ +file git numactl-devel rpm-build gcc-c++ gperf ncurses-devel readline-devel openssl-devel jemalloc zstd \ +time zlib-devel libaio-devel bison cmake3 cmake pam-devel libeatmydata jemalloc-devel pkg-config \ +libcurl-devel openldap-devel unzip wget libcurl-devel patchelf systemd-devel \ +perl perl-Time-HiRes perl-Env perl-Data-Dumper perl-JSON perl-Digest perl-Digest-MD5 perl-Digest-Perl-MD5 \ +binutils gcc gcc-c++ tar rpm-build rsync bison glibc glibc-devel libstdc++-devel make openssl-devel pam-devel perl perl-JSON perl-Memoize pkg-config \ +automake autoconf cmake cmake3 jemalloc jemalloc-devel \ +libaio-devel ncurses-devel numactl-devel readline-devel time \ +rpcgen \ +libzstd libzstd-devel \ +cyrus-sasl-devel cyrus-sasl-scram krb5-devel \ +gcc-toolset-11 gcc-toolset-11-gcc gcc-toolset-11-gcc-c++ gcc-toolset-11-binutils gcc-toolset-11-annobin-annocheck gcc-toolset-11-annobin-plugin-gcc \ +libtirpc-devel" + +#gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc + +ANTLR="antlr4-4.10" +BOOST="boost_1_77_0" +MYSQL="mysql-8.0.32" +MYSQLSH="mysql-shell-8.0.32-src" +PATCHELF="patchelf-0.14.5" +PROTOBUF="protobuf-3.19.4" +GREATSQLSH_PATCH="mysqlsh-for-greatsql-8.0.32.patch" +GREATSQLSH_MAKESH="greatsqlsh-automake.sh" +GREATSQLSH_ENV="greatsqlsh-setenv.sh" +V8_DEPS="deps-v8" +YUM_REPOS="yum-repos" +V8_LIBS_PKG="v8-libs-${ARCH}" diff --git a/GreatSQL-Shell-Build/centos8/mysqlsh-for-greatsql-8.0.32.patch b/GreatSQL-Shell-Build/centos8/mysqlsh-for-greatsql-8.0.32.patch new file mode 100644 index 0000000000000000000000000000000000000000..f3631e549cd9db57f480eb0c7de80543a5a9dbc5 --- /dev/null +++ b/GreatSQL-Shell-Build/centos8/mysqlsh-for-greatsql-8.0.32.patch @@ -0,0 +1,48 @@ +diff --git a/mysqlshdk/libs/mysql/group_replication.cc b/mysqlshdk/libs/mysql/group_replication.cc +index 436a62b15..8f8958ce7 100644 +--- a/mysqlshdk/libs/mysql/group_replication.cc ++++ b/mysqlshdk/libs/mysql/group_replication.cc +@@ -107,6 +107,8 @@ std::string to_string(const Member_role role) { + return "PRIMARY"; + case Member_role::SECONDARY: + return "SECONDARY"; ++ case Member_role::ARBITRATOR: ++ return "ARBITRATOR"; + case Member_role::NONE: + return "NONE"; + } +@@ -118,6 +120,8 @@ Member_role to_member_role(const std::string &role) { + return Member_role::PRIMARY; + } else if (shcore::str_caseeq("SECONDARY", role)) { + return Member_role::SECONDARY; ++ } else if (shcore::str_caseeq("ARBITRATOR", role)) { ++ return Member_role::ARBITRATOR; + } else if (role.empty()) { + return Member_role::NONE; + } else { +diff --git a/mysqlshdk/libs/mysql/group_replication.h b/mysqlshdk/libs/mysql/group_replication.h +index 05dfa54bf..23ccf6a76 100644 +--- a/mysqlshdk/libs/mysql/group_replication.h ++++ b/mysqlshdk/libs/mysql/group_replication.h +@@ -73,7 +73,7 @@ enum class Member_state { + MISSING + }; + +-enum class Member_role { PRIMARY, SECONDARY, NONE }; ++enum class Member_role { PRIMARY, SECONDARY, ARBITRATOR, NONE }; + + enum class Topology_mode { SINGLE_PRIMARY, MULTI_PRIMARY, NONE }; + +diff --git a/mysqlshdk/scripting/jscript_context.cc b/opt/jscript_context.cc +index 5f46751..0e7ff1e 100644 +--- a/mysqlshdk/scripting/jscript_context.cc ++++ b/opt/jscript_context.cc +@@ -1557,7 +1557,7 @@ v8::Local v8_array_buffer(v8::Isolate *isolate, + + std::string to_string(v8::Isolate *isolate, v8::Local obj) { + const v8::String::Utf8Value utf8{ +- isolate, obj->IsSymbol() ? obj.As()->Name() : obj}; ++ isolate, obj->IsSymbol() ? obj.As()->Description() : obj}; + const auto ptr = *utf8; + return nullptr == ptr ? "" : std::string(ptr, utf8.length()); + } diff --git a/GreatSQL-Shell-Build/centos8/requirements.txt b/GreatSQL-Shell-Build/centos8/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..4b6d2ee59bf90fad0e98b9bae5aa48085037dda0 --- /dev/null +++ b/GreatSQL-Shell-Build/centos8/requirements.txt @@ -0,0 +1,15 @@ +bcrypt==4.1.2 +certifi==2024.2.2 +cffi==1.16.0 +circuitbreaker==1.4.0 +cryptography==37.0.2 +oci==2.85.0 +paramiko==3.4.0 +pyClamd==0.4.0 +pycparser==2.21 +PyNaCl==1.5.0 +pyOpenSSL==22.0.0 +python-dateutil==2.9.0.post0 +pytz==2024.1 +PyYAML==6.0.1 +six==1.16.0 diff --git a/GreatSQL-Shell-Build/openEuler2203/Dockerfile b/GreatSQL-Shell-Build/openEuler2203/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..26796cc55493ac04147ddcf67c8f27d2e60016ff --- /dev/null +++ b/GreatSQL-Shell-Build/openEuler2203/Dockerfile @@ -0,0 +1,29 @@ +FROM openeuler/openeuler:22.03-lts +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-Shell-Docker" + +ARG OPT_DIR=/opt +ARG MYSQL_UID=3306 +ARG MYSQL_USER=mysql + +ARG GREATSQLSH_ENV="greatsqlsh-setenv.sh" +ARG ENTRYPOINT="docker-entrypoint.sh" +ARG GREATSQLSH_AUTOMAKE="greatsqlsh-automake.sh" + +RUN mkdir -p ${OPT_DIR} +COPY greatsqlsh-setenv.sh ${OPT_DIR}/${GREATSQLSH_ENV} +COPY docker-entrypoint.sh ${OPT_DIR}/${ENTRYPOINT} +COPY greatsqlsh-automake.sh ${OPT_DIR}/${GREATSQLSH_AUTOMAKE} +COPY mysqlsh-for-greatsql-8.0.32.patch ${OPT_DIR}/mysqlsh-for-greatsql-8.0.32.patch +COPY requirements.txt ${OPT_DIR}/requirements.txt +COPY epel-repo/* /etc/yum.repos.d/ + +RUN chmod +x ${OPT_DIR}/*sh + +ENTRYPOINT ["/opt/docker-entrypoint.sh"] + +CMD ["bash"] diff --git a/GreatSQL-Shell-Build/openEuler2203/docker-entrypoint.sh b/GreatSQL-Shell-Build/openEuler2203/docker-entrypoint.sh new file mode 100644 index 0000000000000000000000000000000000000000..4ed2f18bbd6157578df23e7f917531b0d9130377 --- /dev/null +++ b/GreatSQL-Shell-Build/openEuler2203/docker-entrypoint.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +. /opt/greatsqlsh-setenv.sh + +echo "0. init GreatSQL-Shell-Build env" && \ +echo "0.1 touch logfile ${MAKELOG}" +touch ${MAKELOG} && \ +chown ${MYSQL_USER}:${MYSQL_USER} ${MAKELOG} && \ +chmod 0777 ${MAKELOG} && \ +echo "0.2 install all DEPS(autoconf, gcc ...)" && \ +dnf install -y ${DEPS} --nobest >> ${MAKELOG} 2>&1 && \ +pip3 install -r ${OPT_DIR}/requirements.txt >> ${MAKELOG} 2>&1 && \ +echo "0.3 download ${V8_LIBS_PKG}.tar.xz" && \ +mkdir -p ${OPT_DIR}/${V8_DEPS} && \ +curl --output ${OPT_DIR}/${V8_DEPS}/${V8_LIBS_PKG}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${V8_DEPS}/${V8_LIBS_PKG}.tar.xz >> ${MAKELOG} 2>&1 && \ +echo "0.4 tar xf ${V8_LIBS_PKG}" && \ +cd ${OPT_DIR}/${V8_DEPS} && \ +tar xf ${V8_LIBS_PKG}*z -C ${OPT_DIR}/${V8_DEPS} && \ +echo "0.5 install V8 DEPS rpm" && \ +dnf install -y ${V8_LIBS_PKG}/*rpm --nobest --allowerasing >> ${MAKELOG} 2>&1 && +echo "1. downloading sourcecode tarballs and extract" && \ +echo "1. downloading sourcecode tarballs and extract" >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR} && \ +echo " 1.1 downloading sourcecode tarballs ..." >> ${MAKELOG} && \ +wget -c -O ${PATCHELF}.tar.gz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PATCHELF}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${PROTOBUF}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PROTOBUF}.tar.xz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${ANTLR}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${ANTLR}.tar.xz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${BOOST}.tar.gz ${BOOST_SRC_DOWNLOAD_URL}/${BOOST}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${MYSQLSH}.tar.gz ${MYSQLSH_SRC_DOWNLOAD_URL}/${MYSQLSH}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${MYSQL}.tar.gz ${MYSQL_SRC_DOWNLOAD_URL}/${MYSQL}.tar.gz >> ${MAKELOG} 2>&1 && \ +echo " 1.2 extract tarballs ..." && \ +tar xf ${OPT_DIR}/${PATCHELF}*z && \ +tar xf ${OPT_DIR}/${PROTOBUF}*z && \ +tar xf ${OPT_DIR}/${ANTLR}*z && \ +tar xf ${OPT_DIR}/${BOOST}*z && \ +tar xf ${OPT_DIR}/${MYSQL}*z && \ +tar xf ${OPT_DIR}/${MYSQLSH}*z && \ +chown -R ${MYSQL_USER}:${MYSQL_USER} ${OPT_DIR} && \ +chmod +x ${OPT_DIR}/*sh && \ +echo && \ +echo "2. compiling antlr4" && \ +echo "2. compiling antlr4" >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR}/${ANTLR}/runtime/Cpp/bld && \ +cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/antlr4 >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +echo && \ +echo "3. compiling patchelf" && \ +echo "3. compiling patchelf" >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR}/${PATCHELF} && \ +./bootstrap.sh >> ${MAKELOG} 2>&1 && \ +./configure >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +echo && \ +echo "4. compiling protobuf" && \ +echo "4. compiling protobuf" >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR}/${PROTOBUF} && \ +./configure >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +echo && \ +echo "5. compiling MySQL Shell for GreatSQL" && \ +echo "5. compiling MySQL Shell for GreatSQL" >> ${MAKELOG} 2>&1 && \ +su - ${MYSQL_USER} -s /bin/bash -c "cd ${OPT_DIR}; /bin/sh ${OPT_DIR}/${GREATSQLSH_MAKESH}" && \ +echo && \ +echo "6. MySQL Shell for GreatSQL 8.0.32-25 build completed!" && \ +echo "6. MySQL Shell for GreatSQL 8.0.32-25 build completed!" >> ${MAKELOG} 2>&1 && \ +echo " 6.1 MySQL Shell for GreatSQL 8.0.32-25 version:" && \ +${BASE_DIR}/bin/mysqlsh --version && \ +${BASE_DIR}/bin/mysqlsh --version >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR} && \ +tar cf ${GREATSQLSH}.tar ${GREATSQLSH} >> ${MAKELOG} 2>&1 && \ +xz -9 -f -T${MAKE_JOBS} ${GREATSQLSH}.tar >> ${MAKELOG} 2>&1 && \ +echo " 6.2 TARBALL file:" && \ +ls -la ${OPT_DIR}/${GREATSQLSH}.tar.xz +#rm -fr ${ANTLR}* ${BOOST}* ${MYSQL}* ${MYSQLSH}* ${MYSQLSH_PATCH} ${PATCHELF}* ${PROTOBUF}* ${RPCGEN} + +/bin/bash diff --git a/GreatSQL-Shell-Build/openEuler2203/epel-repo/epel-modular.repo b/GreatSQL-Shell-Build/openEuler2203/epel-repo/epel-modular.repo new file mode 100644 index 0000000000000000000000000000000000000000..1f708ce59143286d32d77674c5437fa64880d9b6 --- /dev/null +++ b/GreatSQL-Shell-Build/openEuler2203/epel-repo/epel-modular.repo @@ -0,0 +1,33 @@ +[epel-modular] +# This repo has been DEPRECATED, see https://pagure.io/epel/issue/198 for more details. +name=Extra Packages for Enterprise Linux Modular 8 - $basearch - DEPRECATED +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place its address here. +baseurl=https://repo.huaweicloud.com/epel/8/Modular/$basearch +#metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-modular-8&arch=$basearch&infra=$infra&content=$contentdir +enabled=1 +gpgcheck=0 +countme=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 + +[epel-modular-debuginfo] +# This repo has been DEPRECATED, see https://pagure.io/epel/issue/198 for more details. +name=Extra Packages for Enterprise Linux Modular 8 - $basearch - Debug - DEPRECATED +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place its address here. +baseurl=https://repo.huaweicloud.com/epel/8/Modular/$basearch/debug +#metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-modular-debug-8&arch=$basearch&infra=$infra&content=$contentdir +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 +gpgcheck=0 + +[epel-modular-source] +# This repo has been DEPRECATED, see https://pagure.io/epel/issue/198 for more details. +name=Extra Packages for Enterprise Linux Modular 8 - $basearch - Source - DEPRECATED +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place it's address here. +baseurl=https://repo.huaweicloud.com/epel/8/Modular/source/tree/ +#metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-modular-source-8&arch=$basearch&infra=$infra&content=$contentdir +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 +gpgcheck=0 diff --git a/GreatSQL-Shell-Build/openEuler2203/epel-repo/epel-testing-modular.repo b/GreatSQL-Shell-Build/openEuler2203/epel-repo/epel-testing-modular.repo new file mode 100644 index 0000000000000000000000000000000000000000..d34d29bacfb098718854d353aa320fd080aa4167 --- /dev/null +++ b/GreatSQL-Shell-Build/openEuler2203/epel-repo/epel-testing-modular.repo @@ -0,0 +1,33 @@ +[epel-testing-modular] +# This repo has been DEPRECATED, see https://pagure.io/epel/issue/198 for more details. +name=Extra Packages for Enterprise Linux Modular 8 - Testing - $basearch - DEPRECATED +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place its address here. +baseurl=https://repo.huaweicloud.com/epel/testing/8/Modular/$basearch +#metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-modular-epel8&arch=$basearch&infra=$infra&content=$contentdir +enabled=1 +gpgcheck=0 +countme=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 + +[epel-testing-modular-debuginfo] +# This repo has been DEPRECATED, see https://pagure.io/epel/issue/198 for more details. +name=Extra Packages for Enterprise Linux Modular 8 - Testing - $basearch - Debug - DEPRECATED +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place its address here. +baseurl=https://repo.huaweicloud.com/epel/testing/8/Modular/$basearch/debug +#metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-modular-debug-epel8&arch=$basearch&infra=$infra&content=$contentdir +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 +gpgcheck=0 + +[epel-testing-modular-source] +# This repo has been DEPRECATED, see https://pagure.io/epel/issue/198 for more details. +name=Extra Packages for Enterprise Linux Modular 8 - Testing - $basearch - Source - DEPRECATED +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place it's address here. +baseurl=https://repo.huaweicloud.com/epel/testing/8/Modular/source/tree/ +#metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-modular-source-epel8&arch=$basearch&infra=$infra&content=$contentdir +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 +gpgcheck=0 diff --git a/GreatSQL-Shell-Build/openEuler2203/epel-repo/epel-testing.repo b/GreatSQL-Shell-Build/openEuler2203/epel-repo/epel-testing.repo new file mode 100644 index 0000000000000000000000000000000000000000..34b34a9b8e336d9a2ca35176d36dd25618c35c18 --- /dev/null +++ b/GreatSQL-Shell-Build/openEuler2203/epel-repo/epel-testing.repo @@ -0,0 +1,30 @@ +[epel-testing] +name=Extra Packages for Enterprise Linux 8 - Testing - $basearch +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place its address here. +baseurl=https://repo.huaweicloud.com/epel/testing/8/Everything/$basearch +#metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-epel8&arch=$basearch&infra=$infra&content=$contentdir +enabled=1 +gpgcheck=0 +countme=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 + +[epel-testing-debuginfo] +name=Extra Packages for Enterprise Linux 8 - Testing - $basearch - Debug +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place its address here. +baseurl=https://repo.huaweicloud.com/epel/testing/8/Everything/$basearch/debug +#metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-debug-epel8&arch=$basearch&infra=$infra&content=$contentdir +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 +gpgcheck=0 + +[epel-testing-source] +name=Extra Packages for Enterprise Linux 8 - Testing - $basearch - Source +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place it's address here. +baseurl=https://repo.huaweicloud.com/epel/testing/8/Everything/source/tree/ +#metalink=https://mirrors.fedoraproject.org/metalink?repo=testing-source-epel8&arch=$basearch&infra=$infra&content=$contentdir +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 +gpgcheck=0 diff --git a/GreatSQL-Shell-Build/openEuler2203/epel-repo/epel.repo b/GreatSQL-Shell-Build/openEuler2203/epel-repo/epel.repo new file mode 100644 index 0000000000000000000000000000000000000000..97edc3399e5eaa730f897992e053e52526cf7b75 --- /dev/null +++ b/GreatSQL-Shell-Build/openEuler2203/epel-repo/epel.repo @@ -0,0 +1,30 @@ +[epel] +name=Extra Packages for Enterprise Linux 8 - $basearch +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place its address here. +baseurl=https://repo.huaweicloud.com/epel/8/Everything/$basearch +#metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=$basearch&infra=$infra&content=$contentdir +enabled=1 +gpgcheck=0 +countme=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 + +[epel-debuginfo] +name=Extra Packages for Enterprise Linux 8 - $basearch - Debug +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place its address here. +baseurl=https://repo.huaweicloud.com/epel/8/Everything/$basearch/debug +#metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-8&arch=$basearch&infra=$infra&content=$contentdir +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 +gpgcheck=0 + +[epel-source] +name=Extra Packages for Enterprise Linux 8 - $basearch - Source +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place it's address here. +baseurl=https://repo.huaweicloud.com/epel/8/Everything/source/tree/ +#metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-8&arch=$basearch&infra=$infra&content=$contentdir +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 +gpgcheck=0 diff --git a/GreatSQL-Shell-Build/openEuler2203/greatsqlsh-automake.sh b/GreatSQL-Shell-Build/openEuler2203/greatsqlsh-automake.sh new file mode 100644 index 0000000000000000000000000000000000000000..8633c3ac1f5d4feb320e49287bade8434ad20eda --- /dev/null +++ b/GreatSQL-Shell-Build/openEuler2203/greatsqlsh-automake.sh @@ -0,0 +1,45 @@ +#!/bin/bash +. /opt/greatsqlsh-setenv.sh + +echo " 5.1 compiling mysqlclient and mysqlxclient and mysql_config_editor and authentication_oci_client" && \ +cd ${OPT_DIR}/${MYSQL} && \ +rm -fr bld && \ +mkdir bld && \ +cd bld && \ +cmake .. \ +-DLOCAL_BOOST_DIR=${OPT_DIR}/${BOOST} \ +-DBOOST_INCLUDE_DIR=${OPT_DIR}/${BOOST} \ +-DWITH_AUTHENTICATION_CLIENT_PLUGINS=1 \ +-DWITH_SSL=system >> ${MAKELOG} 2>&1 && \ +cmake --build . --target mysqlclient -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 ; \ +cmake --build . --target mysqlxclient -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +cmake --build . --target mysql_config_editor -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +cmake --build . --target authentication_oci_client -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +echo " 5.2 compiling MySQL Shell for GreatSQL" && \ +cd ${OPT_DIR}/${MYSQLSH} && \ +patch -p1 -f < ${OPT_DIR}/${GREATSQLSH_PATCH} >> ${MAKELOG} 2>&1 && \ +rm -fr bld && \ +mkdir bld && \ +cd bld && \ +cmake .. \ +-DCMAKE_INSTALL_PREFIX=${BASE_DIR} \ +-DMYSQL_SOURCE_DIR=${OPT_DIR}/${MYSQL} \ +-DMYSQL_BUILD_DIR=${OPT_DIR}/${MYSQL}/bld/ \ +-DBUNDLED_MYSQL_CONFIG_EDITOR=${OPT_DIR}/${MYSQL}/bld/runtime_output_directory/mysql_config_editor \ +-DCLIENT_PLUGIN_LIB=${OPT_DIR}/${MYSQL}/bld/plugin_output_directory/authentication_oci_client.so \ +-DWITH_PROTOBUF=system \ +-DBUILD_SOURCE_PACKAGE=0 \ +-DBUNDLED_ANTLR_DIR=/usr/local/antlr4/ \ +-DHAVE_V8=1 \ +-DV8_INCLUDE_DIR=/usr/include \ +-DV8_LIB_DIR=/usr/lib64 \ +-DHAVE_PYTHON=1 \ +-DPYTHON_LIBRARIES=/usr/lib64/python3.9 \ +-DPYTHON_INCLUDE_DIRS=/usr/include/python3.9/ >> ${MAKELOG} 2>&1 \ +&& make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +cp /usr/local/lib/libprotobuf.so.30 ${BASE_DIR}/lib/mysqlsh/ && \ +cp /lib64/libnode.so.93 ${BASE_DIR}/lib/mysqlsh/libnode.so.93 && \ +cp /lib64/libbrotlienc.so.1.0.9 ${BASE_DIR}/lib/mysqlsh/libbrotlienc.so.1 && \ +cp /lib64/libbrotlidec.so.1.0.9 ${BASE_DIR}/lib/mysqlsh/libbrotlidec.so.1 && \ +cp /lib64/libuv.so.1.0.0 ${BASE_DIR}/lib/mysqlsh/libuv.so.1 && \ +cp /lib64/libbrotlicommon.so.1.0.9 ${BASE_DIR}/lib/mysqlsh/libbrotlicommon.so.1 diff --git a/GreatSQL-Shell-Build/openEuler2203/greatsqlsh-setenv.sh b/GreatSQL-Shell-Build/openEuler2203/greatsqlsh-setenv.sh new file mode 100644 index 0000000000000000000000000000000000000000..bf4ba44621bb358a922fde24cd178e4716cf31f2 --- /dev/null +++ b/GreatSQL-Shell-Build/openEuler2203/greatsqlsh-setenv.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +. ~/.bash_profile + +MAKELOG=/tmp/greatsqlsh-automake.log + +if [ ! -f /usr/bin/lscpu ]; then + dnf install -y util-linux >> ${MAKELOG} 2>&1 +fi + +MAKE_JOBS=$(lscpu | grep '^CPU(s)'|awk '{print $NF}') +if [ ${MAKE_JOBS} -ge 16 ] ; then + MAKE_JOBS=$(expr ${MAKE_JOBS} - 4) +else + MAKE_JOBS=$(expr ${MAKE_JOBS} - 1) +fi + +OPT_DIR=/opt +MYSQL_VERSTION=8.0.32 +RELEASE=25 +GLIBC=$(ldd --version | head -n 1 | awk '{print $NF}') +ARCH=$(uname -p) +#OS=`grep '^ID=' /etc/os-release | sed 's/.*"\(.*\)".*/\1/ig'` +OS=Linux +OSPATCH=oe2203 + + +MYSQL_USER=root +GREATSQLSH=greatsql-shell-${MYSQL_VERSTION}-${RELEASE}-${OS}-${OSPATCH}-glibc${GLIBC}-${ARCH} +BASE_DIR=${OPT_DIR}/${GREATSQLSH} +GREATSQL_BUILD_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-Docker/deppkgs" +BOOST_SRC_DOWNLOAD_URL="https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source" +MYSQL_SRC_DOWNLOAD_URL="https://downloads.mysql.com/archives/get/p/23/file" +MYSQLSH_SRC_DOWNLOAD_URL="https://downloads.mysql.com/archives/get/p/43/file" + + +DEPS="less iputils tar gzip xz wget glibc-langpack-en libmodulemd autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ +libffi libffi-devel libxml2-devel libxml2 libyaml bzip2 bzip2-libs bzip2-devel \ +libcurl-devel libssh libssh-devel \ +libtirpc libtirpc-devel libuuid libuuid-devel m4 make ncurses-devel openssl openssl-devel \ +patch uuid wget zlib-devel \ +python3 python3-devel python3-libs python3-pyyaml python3-pip \ +git numactl-devel rpm-build gcc gcc-c++ gperf ncurses-devel readline-devel openssl-devel jemalloc zstd \ +time zlib-devel libaio-devel bison cmake3 cmake pam-devel libeatmydata jemalloc-devel pkg-config \ +libcurl-devel openldap-devel unzip wget libcurl-devel patchelf systemd-devel \ +perl perl-Time-HiRes perl-Env perl-Data-Dumper perl-JSON perl-Digest perl-Digest-MD5 \ +binutils gcc gcc-c++ tar rpm-build rsync bison glibc glibc-devel libstdc++-devel make openssl-devel pam-devel perl perl-JSON perl-Memoize pkg-config \ +automake autoconf cmake cmake3 jemalloc jemalloc-devel \ +libaio-devel ncurses-devel numactl-devel readline-devel time \ +rpcgen \ +libzstd libzstd-devel \ +cyrus-sasl-devel cyrus-sasl-scram krb5-devel \ +v8-devel nodejs nodejs-devel nodejs-libs libuv libnghttp2" + +#perl-Digest-Perl-MD5 + +ANTLR="antlr4-4.10" +BOOST="boost_1_77_0" +MYSQL="mysql-8.0.32" +MYSQLSH="mysql-shell-8.0.32-src" +PATCHELF="patchelf-0.14.5" +PROTOBUF="protobuf-3.19.4" +GREATSQLSH_PATCH="mysqlsh-for-greatsql-8.0.32.patch" +GREATSQLSH_MAKESH="greatsqlsh-automake.sh" +GREATSQLSH_ENV="greatsqlsh-setenv.sh" +V8_DEPS="deps-v8" +YUM_REPOS="yum-repos" +V8_LIBS_PKG="v8-libs-${ARCH}" diff --git a/GreatSQL-Shell-Build/openEuler2203/mysqlsh-for-greatsql-8.0.32.patch b/GreatSQL-Shell-Build/openEuler2203/mysqlsh-for-greatsql-8.0.32.patch new file mode 100644 index 0000000000000000000000000000000000000000..f3631e549cd9db57f480eb0c7de80543a5a9dbc5 --- /dev/null +++ b/GreatSQL-Shell-Build/openEuler2203/mysqlsh-for-greatsql-8.0.32.patch @@ -0,0 +1,48 @@ +diff --git a/mysqlshdk/libs/mysql/group_replication.cc b/mysqlshdk/libs/mysql/group_replication.cc +index 436a62b15..8f8958ce7 100644 +--- a/mysqlshdk/libs/mysql/group_replication.cc ++++ b/mysqlshdk/libs/mysql/group_replication.cc +@@ -107,6 +107,8 @@ std::string to_string(const Member_role role) { + return "PRIMARY"; + case Member_role::SECONDARY: + return "SECONDARY"; ++ case Member_role::ARBITRATOR: ++ return "ARBITRATOR"; + case Member_role::NONE: + return "NONE"; + } +@@ -118,6 +120,8 @@ Member_role to_member_role(const std::string &role) { + return Member_role::PRIMARY; + } else if (shcore::str_caseeq("SECONDARY", role)) { + return Member_role::SECONDARY; ++ } else if (shcore::str_caseeq("ARBITRATOR", role)) { ++ return Member_role::ARBITRATOR; + } else if (role.empty()) { + return Member_role::NONE; + } else { +diff --git a/mysqlshdk/libs/mysql/group_replication.h b/mysqlshdk/libs/mysql/group_replication.h +index 05dfa54bf..23ccf6a76 100644 +--- a/mysqlshdk/libs/mysql/group_replication.h ++++ b/mysqlshdk/libs/mysql/group_replication.h +@@ -73,7 +73,7 @@ enum class Member_state { + MISSING + }; + +-enum class Member_role { PRIMARY, SECONDARY, NONE }; ++enum class Member_role { PRIMARY, SECONDARY, ARBITRATOR, NONE }; + + enum class Topology_mode { SINGLE_PRIMARY, MULTI_PRIMARY, NONE }; + +diff --git a/mysqlshdk/scripting/jscript_context.cc b/opt/jscript_context.cc +index 5f46751..0e7ff1e 100644 +--- a/mysqlshdk/scripting/jscript_context.cc ++++ b/opt/jscript_context.cc +@@ -1557,7 +1557,7 @@ v8::Local v8_array_buffer(v8::Isolate *isolate, + + std::string to_string(v8::Isolate *isolate, v8::Local obj) { + const v8::String::Utf8Value utf8{ +- isolate, obj->IsSymbol() ? obj.As()->Name() : obj}; ++ isolate, obj->IsSymbol() ? obj.As()->Description() : obj}; + const auto ptr = *utf8; + return nullptr == ptr ? "" : std::string(ptr, utf8.length()); + } diff --git a/GreatSQL-Shell-Build/openEuler2203/requirements.txt b/GreatSQL-Shell-Build/openEuler2203/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..4b6d2ee59bf90fad0e98b9bae5aa48085037dda0 --- /dev/null +++ b/GreatSQL-Shell-Build/openEuler2203/requirements.txt @@ -0,0 +1,15 @@ +bcrypt==4.1.2 +certifi==2024.2.2 +cffi==1.16.0 +circuitbreaker==1.4.0 +cryptography==37.0.2 +oci==2.85.0 +paramiko==3.4.0 +pyClamd==0.4.0 +pycparser==2.21 +PyNaCl==1.5.0 +pyOpenSSL==22.0.0 +python-dateutil==2.9.0.post0 +pytz==2024.1 +PyYAML==6.0.1 +six==1.16.0 diff --git a/GreatSQL-Shell-Build/rocky8/Dockerfile b/GreatSQL-Shell-Build/rocky8/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..755ecb72955829a8670f9543375adb62d06273a1 --- /dev/null +++ b/GreatSQL-Shell-Build/rocky8/Dockerfile @@ -0,0 +1,66 @@ +FROM rockylinux: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-Shell-Docker" + +ARG OPT_DIR=/opt +ARG MYSQL_UID=3306 +ARG MYSQL_USER=mysql + +ARG GREATSQLSH_ENV="greatsqlsh-setenv.sh" +ARG ENTRYPOINT="docker-entrypoint.sh" +ARG GREATSQLSH_AUTOMAKE="greatsqlsh-automake.sh" +ARG DEPS="tar gzip xz curl wget langpacks-en glibc-langpack-en libmodulemd autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ +libffi libffi-devel libxml2-devel libxml2 libyaml bzip2 bzip2-libs bzip2-devel \ +libcurl-devel libssh libssh-config libssh-devel \ +libtirpc-devel libudev-devel libuuid libuuid-devel m4 make ncurses-devel openssl openssl-devel \ +patch uuid wget zlib-devel \ +python38 python38-devel python38-libs python38-pyyaml \ +git numactl-devel rpm-build gcc-c++ gperf ncurses-devel readline-devel openssl-devel jemalloc zstd \ +time zlib-devel libaio-devel bison cmake3 cmake pam-devel libeatmydata jemalloc-devel pkg-config \ +libcurl-devel openldap-devel unzip wget libcurl-devel patchelf systemd-devel \ +perl perl-Time-HiRes perl-Env perl-Data-Dumper perl-JSON perl-Digest perl-Digest-MD5 perl-Digest-Perl-MD5 \ +binutils gcc gcc-c++ tar rpm-build rsync bison glibc glibc-devel libstdc++-devel make openssl-devel pam-devel perl perl-JSON perl-Memoize pkg-config \ +automake autoconf cmake cmake3 jemalloc jemalloc-devel \ +libaio-devel ncurses-devel numactl-devel readline-devel time \ +rpcgen \ +libzstd libzstd-devel \ +cyrus-sasl-devel cyrus-sasl-scram krb5-devel \ +gcc-toolset-11 gcc-toolset-11-gcc gcc-toolset-11-gcc-c++ gcc-toolset-11-binutils gcc-toolset-11-annobin-annocheck gcc-toolset-11-annobin-plugin-gcc \ +libtirpc-devel" + +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/* + +RUN /usr/sbin/groupadd -g ${MYSQL_UID} ${MYSQL_USER} && \ +/usr/sbin/useradd -u ${MYSQL_UID} -g ${MYSQL_UID} -s /sbin/nologin ${MYSQL_USER} + +RUN dnf install -y epel-release; \ + dnf install -y 'dnf-command(config-manager)'; \ + dnf config-manager --enable powertools epel-testing epel-modular epel-testing-modular + +RUN dnf install -y ${DEPS}; \ + echo 'source /opt/rh/gcc-toolset-11/enable' >> /root/.bash_profile; + +RUN mkdir -p ${OPT_DIR} +COPY greatsqlsh-setenv.sh ${OPT_DIR}/${GREATSQLSH_ENV} +COPY docker-entrypoint.sh ${OPT_DIR}/${ENTRYPOINT} +COPY greatsqlsh-automake.sh ${OPT_DIR}/${GREATSQLSH_AUTOMAKE} +COPY mysqlsh-for-greatsql-8.0.32.patch ${OPT_DIR}/mysqlsh-for-greatsql-8.0.32.patch +COPY requirements.txt ${OPT_DIR}/requirements.txt + +RUN chmod +x ${OPT_DIR}/*sh + +ENTRYPOINT ["/opt/docker-entrypoint.sh"] + +CMD ["bash"] diff --git a/GreatSQL-Shell-Build/rocky8/docker-entrypoint.sh b/GreatSQL-Shell-Build/rocky8/docker-entrypoint.sh new file mode 100644 index 0000000000000000000000000000000000000000..27ea8bfd22d56106325b38fb9156162d7c91d0a9 --- /dev/null +++ b/GreatSQL-Shell-Build/rocky8/docker-entrypoint.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +. /opt/greatsqlsh-setenv.sh + +echo "0. init GreatSQL-Shell-Build env" && \ +echo "0.1 touch logfile ${MAKELOG}" +touch ${MAKELOG} && \ +chown ${MYSQL_USER}:${MYSQL_USER} ${MAKELOG} && \ +chmod 0777 ${MAKELOG} && \ +echo "0.2 install all DEPS(autoconf, gcc ...)" && \ +echo "0.3 download ${V8_LIBS_PKG}.tar.xz" && \ +mkdir -p ${OPT_DIR}/${V8_DEPS} && \ +curl --output ${OPT_DIR}/${V8_DEPS}/${V8_LIBS_PKG}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${V8_DEPS}/${V8_LIBS_PKG}.tar.xz >> ${MAKELOG} 2>&1 && \ +echo "0.4 tar xf ${V8_LIBS_PKG}" && \ +cd ${OPT_DIR}/${V8_DEPS} && \ +tar xf ${V8_LIBS_PKG}*z -C ${OPT_DIR}/${V8_DEPS} && \ +echo "0.5 install V8 DEPS rpm" && \ +dnf install -y ${V8_LIBS_PKG}/*rpm >> ${MAKELOG} 2>&1 && +echo "0.6 modify gcc-toolset-11" && \ +cd /opt/rh/gcc-toolset-11/root/usr/lib/gcc/x86_64-redhat-linux/11/plugin/ && \ +ln -s annobin.so gcc-annobin.so && \ +pip3 install -r ${OPT_DIR}/requirements.txt && \ +echo "1. downloading sourcecode tarballs and extract" && \ +echo "1. downloading sourcecode tarballs and extract" >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR} && \ +echo " 1.1 downloading sourcecode tarballs ..." >> ${MAKELOG} && \ +wget -c -O ${PATCHELF}.tar.gz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PATCHELF}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${PROTOBUF}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PROTOBUF}.tar.xz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${ANTLR}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${ANTLR}.tar.xz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${BOOST}.tar.gz ${BOOST_SRC_DOWNLOAD_URL}/${BOOST}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${MYSQLSH}.tar.gz ${MYSQLSH_SRC_DOWNLOAD_URL}/${MYSQLSH}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${MYSQL}.tar.gz ${MYSQL_SRC_DOWNLOAD_URL}/${MYSQL}.tar.gz >> ${MAKELOG} 2>&1 && \ +echo " 1.2 extract tarballs ..." && \ +tar xf ${OPT_DIR}/${PATCHELF}*z && \ +tar xf ${OPT_DIR}/${PROTOBUF}*z && \ +tar xf ${OPT_DIR}/${ANTLR}*z && \ +tar xf ${OPT_DIR}/${BOOST}*z && \ +tar xf ${OPT_DIR}/${MYSQL}*z && \ +tar xf ${OPT_DIR}/${MYSQLSH}*z && \ +chown -R ${MYSQL_USER}:${MYSQL_USER} ${OPT_DIR} && \ +chmod +x ${OPT_DIR}/*sh && \ +echo && \ +echo "2. compiling antlr4" && \ +echo "2. compiling antlr4" >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR}/${ANTLR}/runtime/Cpp/bld && \ +cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/antlr4 >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +echo && \ +echo "3. compiling patchelf" && \ +echo "3. compiling patchelf" >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR}/${PATCHELF} && \ +./bootstrap.sh >> ${MAKELOG} 2>&1 && \ +./configure >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +echo && \ +echo "4. compiling protobuf" && \ +echo "4. compiling protobuf" >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR}/${PROTOBUF} && \ +./configure >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +echo && \ +echo "5. compiling MySQL Shell for GreatSQL" && \ +echo "5. compiling MySQL Shell for GreatSQL" >> ${MAKELOG} 2>&1 && \ +su - ${MYSQL_USER} -s /bin/bash -c "cd ${OPT_DIR}; /bin/sh ${OPT_DIR}/${GREATSQLSH_MAKESH}" && \ +echo && \ +echo "6. MySQL Shell for GreatSQL 8.0.32-25 build completed!" && \ +echo "6. MySQL Shell for GreatSQL 8.0.32-25 build completed!" >> ${MAKELOG} 2>&1 && \ +echo " 6.1 MySQL Shell for GreatSQL 8.0.32-25 version:" && \ +${BASE_DIR}/bin/mysqlsh --version && \ +${BASE_DIR}/bin/mysqlsh --version >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR} && \ +tar cf ${GREATSQLSH}.tar ${GREATSQLSH} >> ${MAKELOG} 2>&1 && \ +xz -9 -f -T${MAKE_JOBS} ${GREATSQLSH}.tar >> ${MAKELOG} 2>&1 && \ +echo " 6.2 TARBALL file:" && \ +ls -la ${OPT_DIR}/${GREATSQLSH}.tar.xz +#rm -fr ${ANTLR}* ${BOOST}* ${MYSQL}* ${MYSQLSH}* ${MYSQLSH_PATCH} ${PATCHELF}* ${PROTOBUF}* ${RPCGEN} + +/bin/bash diff --git a/GreatSQL-Shell-Build/rocky8/greatsqlsh-automake.sh b/GreatSQL-Shell-Build/rocky8/greatsqlsh-automake.sh new file mode 100644 index 0000000000000000000000000000000000000000..fa061cc99410aeafb5e5b0b4379018b873158353 --- /dev/null +++ b/GreatSQL-Shell-Build/rocky8/greatsqlsh-automake.sh @@ -0,0 +1,45 @@ +#!/bin/bash +. /opt/greatsqlsh-setenv.sh + +echo " 5.1 compiling mysqlclient and mysqlxclient and mysql_config_editor and authentication_oci_client" && \ +cd ${OPT_DIR}/${MYSQL} && \ +rm -fr bld && \ +mkdir bld && \ +cd bld && \ +cmake .. \ +-DLOCAL_BOOST_DIR=${OPT_DIR}/${BOOST} \ +-DBOOST_INCLUDE_DIR=${OPT_DIR}/${BOOST} \ +-DWITH_AUTHENTICATION_CLIENT_PLUGINS=1 \ +-DWITH_SSL=system >> ${MAKELOG} 2>&1 && \ +cmake --build . --target mysqlclient -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 ; \ +cmake --build . --target mysqlxclient -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +cmake --build . --target mysql_config_editor -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +cmake --build . --target authentication_oci_client -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +echo " 5.2 compiling MySQL Shell for GreatSQL" && \ +cd ${OPT_DIR}/${MYSQLSH} && \ +patch -p1 -f < ${OPT_DIR}/${GREATSQLSH_PATCH} >> ${MAKELOG} 2>&1 && \ +rm -fr bld && \ +mkdir bld && \ +cd bld && \ +cmake .. \ +-DCMAKE_INSTALL_PREFIX=${BASE_DIR} \ +-DMYSQL_SOURCE_DIR=${OPT_DIR}/${MYSQL} \ +-DMYSQL_BUILD_DIR=${OPT_DIR}/${MYSQL}/bld/ \ +-DBUNDLED_MYSQL_CONFIG_EDITOR=${OPT_DIR}/${MYSQL}/bld/runtime_output_directory/mysql_config_editor \ +-DCLIENT_PLUGIN_LIB=${OPT_DIR}/${MYSQL}/bld/plugin_output_directory/authentication_oci_client.so \ +-DWITH_PROTOBUF=system \ +-DBUILD_SOURCE_PACKAGE=0 \ +-DBUNDLED_ANTLR_DIR=/usr/local/antlr4/ \ +-DHAVE_V8=1 \ +-DV8_INCLUDE_DIR=/usr/include \ +-DV8_LIB_DIR=/usr/lib64 \ +-DHAVE_PYTHON=1 \ +-DPYTHON_LIBRARIES=/usr/lib64/python3.8 \ +-DPYTHON_INCLUDE_DIRS=/usr/include/python3.8/ >> ${MAKELOG} 2>&1 \ +&& make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +cp /usr/local/lib/libprotobuf.so.30 ${BASE_DIR}/lib/mysqlsh/ && \ +cp /lib64/libnode.so.93 ${BASE_DIR}/lib/mysqlsh/libnode.so.93 && \ +cp /lib64/libbrotlienc.so.1.0.6 ${BASE_DIR}/lib/mysqlsh/libbrotlienc.so.1 && \ +cp /lib64/libbrotlidec.so.1.0.6 ${BASE_DIR}/lib/mysqlsh/libbrotlidec.so.1 && \ +cp /lib64/libuv.so.1.0.0 ${BASE_DIR}/lib/mysqlsh/libuv.so.1 && \ +cp /lib64/libbrotlicommon.so.1.0.6 ${BASE_DIR}/lib/mysqlsh/libbrotlicommon.so.1 diff --git a/GreatSQL-Shell-Build/rocky8/greatsqlsh-setenv.sh b/GreatSQL-Shell-Build/rocky8/greatsqlsh-setenv.sh new file mode 100644 index 0000000000000000000000000000000000000000..f47219e36af7691c061b8f571dd97ce1812830f7 --- /dev/null +++ b/GreatSQL-Shell-Build/rocky8/greatsqlsh-setenv.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +. ~/.bash_profile + +MAKE_JOBS=$(lscpu | grep '^CPU(s)'|awk '{print $NF}') +if [ ${MAKE_JOBS} -ge 16 ] ; then + MAKE_JOBS=$(expr ${MAKE_JOBS} - 4) +else + MAKE_JOBS=$(expr ${MAKE_JOBS} - 1) +fi + +OPT_DIR=/opt +MYSQL_VERSTION=8.0.32 +RELEASE=25 +GLIBC=$(ldd --version | head -n 1 | awk '{print $NF}') +ARCH=$(uname -p) +#OS=`grep '^ID=' /etc/os-release | sed 's/.*"\(.*\)".*/\1/ig'` +OS=Linux +OSPATCH=el8 + +MAKELOG=/tmp/greatsqlsh-automake.log +MYSQL_USER=root +GREATSQLSH=greatsql-shell-${MYSQL_VERSTION}-${RELEASE}-${OS}-${OSPATCH}-glibc${GLIBC}-${ARCH} +BASE_DIR=${OPT_DIR}/${GREATSQLSH} +GREATSQL_BUILD_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-Docker/deppkgs" +BOOST_SRC_DOWNLOAD_URL="https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source" +MYSQL_SRC_DOWNLOAD_URL="https://downloads.mysql.com/archives/get/p/23/file" +MYSQLSH_SRC_DOWNLOAD_URL="https://downloads.mysql.com/archives/get/p/43/file" + +DEPS="langpacks-en glibc-langpack-en libmodulemd autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ +libffi libffi-devel libxml2-devel libxml2 libyaml bzip2 bzip2-libs bzip2-devel \ +libcurl-devel libssh libssh-config libssh-devel \ +libtirpc-devel libudev-devel libuuid libuuid-devel m4 make ncurses-devel openssl openssl-devel \ +patch python38 python38-devel python38-libs python38-pyyaml uuid wget zlib-devel \ +git numactl-devel rpm-build gcc-c++ gperf ncurses-devel readline-devel openssl-devel jemalloc zstd \ +time zlib-devel libaio-devel bison cmake3 cmake pam-devel libeatmydata jemalloc-devel pkg-config \ +libcurl-devel openldap-devel unzip wget libcurl-devel patchelf systemd-devel \ +perl perl-Time-HiRes perl-Env perl-Data-Dumper perl-JSON perl-Digest perl-Digest-MD5 perl-Digest-Perl-MD5 \ +binutils gcc gcc-c++ tar rpm-build rsync bison glibc glibc-devel libstdc++-devel make openssl-devel pam-devel perl perl-JSON perl-Memoize pkg-config \ +automake autoconf cmake cmake3 jemalloc jemalloc-devel \ +libaio-devel ncurses-devel numactl-devel readline-devel time \ +rpcgen \ +libzstd libzstd-devel \ +cyrus-sasl-devel cyrus-sasl-scram krb5-devel \ +gcc-toolset-11 gcc-toolset-11-gcc gcc-toolset-11-gcc-c++ gcc-toolset-11-binutils gcc-toolset-11-annobin-annocheck gcc-toolset-11-annobin-plugin-gcc \ +libtirpc-devel" + +#gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc + +ANTLR="antlr4-4.10" +BOOST="boost_1_77_0" +MYSQL="mysql-8.0.32" +MYSQLSH="mysql-shell-8.0.32-src" +PATCHELF="patchelf-0.14.5" +PROTOBUF="protobuf-3.19.4" +GREATSQLSH_PATCH="mysqlsh-for-greatsql-8.0.32.patch" +GREATSQLSH_MAKESH="greatsqlsh-automake.sh" +GREATSQLSH_ENV="greatsqlsh-setenv.sh" +V8_DEPS="deps-v8" +YUM_REPOS="yum-repos" +V8_LIBS_PKG="v8-libs-${ARCH}" diff --git a/GreatSQL-Shell-Build/rocky8/mysqlsh-for-greatsql-8.0.32.patch b/GreatSQL-Shell-Build/rocky8/mysqlsh-for-greatsql-8.0.32.patch new file mode 100644 index 0000000000000000000000000000000000000000..f3631e549cd9db57f480eb0c7de80543a5a9dbc5 --- /dev/null +++ b/GreatSQL-Shell-Build/rocky8/mysqlsh-for-greatsql-8.0.32.patch @@ -0,0 +1,48 @@ +diff --git a/mysqlshdk/libs/mysql/group_replication.cc b/mysqlshdk/libs/mysql/group_replication.cc +index 436a62b15..8f8958ce7 100644 +--- a/mysqlshdk/libs/mysql/group_replication.cc ++++ b/mysqlshdk/libs/mysql/group_replication.cc +@@ -107,6 +107,8 @@ std::string to_string(const Member_role role) { + return "PRIMARY"; + case Member_role::SECONDARY: + return "SECONDARY"; ++ case Member_role::ARBITRATOR: ++ return "ARBITRATOR"; + case Member_role::NONE: + return "NONE"; + } +@@ -118,6 +120,8 @@ Member_role to_member_role(const std::string &role) { + return Member_role::PRIMARY; + } else if (shcore::str_caseeq("SECONDARY", role)) { + return Member_role::SECONDARY; ++ } else if (shcore::str_caseeq("ARBITRATOR", role)) { ++ return Member_role::ARBITRATOR; + } else if (role.empty()) { + return Member_role::NONE; + } else { +diff --git a/mysqlshdk/libs/mysql/group_replication.h b/mysqlshdk/libs/mysql/group_replication.h +index 05dfa54bf..23ccf6a76 100644 +--- a/mysqlshdk/libs/mysql/group_replication.h ++++ b/mysqlshdk/libs/mysql/group_replication.h +@@ -73,7 +73,7 @@ enum class Member_state { + MISSING + }; + +-enum class Member_role { PRIMARY, SECONDARY, NONE }; ++enum class Member_role { PRIMARY, SECONDARY, ARBITRATOR, NONE }; + + enum class Topology_mode { SINGLE_PRIMARY, MULTI_PRIMARY, NONE }; + +diff --git a/mysqlshdk/scripting/jscript_context.cc b/opt/jscript_context.cc +index 5f46751..0e7ff1e 100644 +--- a/mysqlshdk/scripting/jscript_context.cc ++++ b/opt/jscript_context.cc +@@ -1557,7 +1557,7 @@ v8::Local v8_array_buffer(v8::Isolate *isolate, + + std::string to_string(v8::Isolate *isolate, v8::Local obj) { + const v8::String::Utf8Value utf8{ +- isolate, obj->IsSymbol() ? obj.As()->Name() : obj}; ++ isolate, obj->IsSymbol() ? obj.As()->Description() : obj}; + const auto ptr = *utf8; + return nullptr == ptr ? "" : std::string(ptr, utf8.length()); + } diff --git a/GreatSQL-Shell-Build/rocky8/requirements.txt b/GreatSQL-Shell-Build/rocky8/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..4b6d2ee59bf90fad0e98b9bae5aa48085037dda0 --- /dev/null +++ b/GreatSQL-Shell-Build/rocky8/requirements.txt @@ -0,0 +1,15 @@ +bcrypt==4.1.2 +certifi==2024.2.2 +cffi==1.16.0 +circuitbreaker==1.4.0 +cryptography==37.0.2 +oci==2.85.0 +paramiko==3.4.0 +pyClamd==0.4.0 +pycparser==2.21 +PyNaCl==1.5.0 +pyOpenSSL==22.0.0 +python-dateutil==2.9.0.post0 +pytz==2024.1 +PyYAML==6.0.1 +six==1.16.0 diff --git a/GreatSQL-Shell-Build/rocky9/Dockerfile b/GreatSQL-Shell-Build/rocky9/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..83f1bbe815b3e972e7c612a3ddf459454ef48dbb --- /dev/null +++ b/GreatSQL-Shell-Build/rocky9/Dockerfile @@ -0,0 +1,31 @@ +FROM rockylinux:9 +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-Shell-Docker" + +ARG OPT_DIR=/opt +ARG MYSQL_UID=3306 +ARG MYSQL_USER=mysql + +ARG GREATSQLSH_ENV="greatsqlsh-setenv.sh" +ARG ENTRYPOINT="docker-entrypoint.sh" +ARG GREATSQLSH_AUTOMAKE="greatsqlsh-automake.sh" + +RUN /usr/sbin/groupadd -g ${MYSQL_UID} ${MYSQL_USER} && \ +/usr/sbin/useradd -u ${MYSQL_UID} -g ${MYSQL_UID} -s /sbin/nologin ${MYSQL_USER} + +RUN mkdir -p ${OPT_DIR} +COPY greatsqlsh-setenv.sh ${OPT_DIR}/${GREATSQLSH_ENV} +COPY docker-entrypoint.sh ${OPT_DIR}/${ENTRYPOINT} +COPY greatsqlsh-automake.sh ${OPT_DIR}/${GREATSQLSH_AUTOMAKE} +COPY mysqlsh-for-greatsql-8.0.32.patch ${OPT_DIR}/mysqlsh-for-greatsql-8.0.32.patch +COPY requirements.txt ${OPT_DIR}/requirements.txt + +RUN chmod +x ${OPT_DIR}/*sh + +ENTRYPOINT ["/opt/docker-entrypoint.sh"] + +CMD ["bash"] diff --git a/GreatSQL-Shell-Build/rocky9/docker-entrypoint.sh b/GreatSQL-Shell-Build/rocky9/docker-entrypoint.sh new file mode 100644 index 0000000000000000000000000000000000000000..1393db2c06d53379ad7de53d3567c647d460f429 --- /dev/null +++ b/GreatSQL-Shell-Build/rocky9/docker-entrypoint.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +. /opt/greatsqlsh-setenv.sh + +echo "0. init GreatSQL-Shell-Build env" && \ +echo "0.1 touch logfile ${MAKELOG}" +touch ${MAKELOG} && \ +chown ${MYSQL_USER}:${MYSQL_USER} ${MAKELOG} && \ +chmod 0777 ${MAKELOG} && \ +echo "0.2 install all DEPS(autoconf, gcc ...)" && \ +dnf install -y epel-release >> ${MAKELOG} 2>&1 && \ +dnf config-manager --enable plus devel && \ +dnf install -y ${DEPS} --nobest >> ${MAKELOG} 2>&1 && \ +pip3 install -r ${OPT_DIR}/requirements.txt >> ${MAKELOG} 2>&1 && \ +echo "1. downloading sourcecode tarballs and extract" && \ +echo "1. downloading sourcecode tarballs and extract" >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR} && \ +echo " 1.1 downloading sourcecode tarballs ..." >> ${MAKELOG} && \ +wget -c -O ${PATCHELF}.tar.gz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PATCHELF}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${PROTOBUF}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${PROTOBUF}.tar.xz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${ANTLR}.tar.xz ${GREATSQL_BUILD_DOWNLOAD_URL}/${ANTLR}.tar.xz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${BOOST}.tar.gz ${BOOST_SRC_DOWNLOAD_URL}/${BOOST}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${MYSQLSH}.tar.gz ${MYSQLSH_SRC_DOWNLOAD_URL}/${MYSQLSH}.tar.gz >> ${MAKELOG} 2>&1 && \ +wget -c -O ${MYSQL}.tar.gz ${MYSQL_SRC_DOWNLOAD_URL}/${MYSQL}.tar.gz >> ${MAKELOG} 2>&1 && \ +echo " 1.2 extract tarballs ..." && \ +tar xf ${OPT_DIR}/${PATCHELF}*z && \ +tar xf ${OPT_DIR}/${PROTOBUF}*z && \ +tar xf ${OPT_DIR}/${ANTLR}*z && \ +tar xf ${OPT_DIR}/${BOOST}*z && \ +tar xf ${OPT_DIR}/${MYSQL}*z && \ +tar xf ${OPT_DIR}/${MYSQLSH}*z && \ +chown -R ${MYSQL_USER}:${MYSQL_USER} ${OPT_DIR} && \ +chmod +x ${OPT_DIR}/*sh && \ +echo && \ +echo "2. compiling antlr4" && \ +echo "2. compiling antlr4" >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR}/${ANTLR}/runtime/Cpp/bld && \ +cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/antlr4 >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +echo && \ +echo "3. compiling patchelf" && \ +echo "3. compiling patchelf" >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR}/${PATCHELF} && \ +./bootstrap.sh >> ${MAKELOG} 2>&1 && \ +./configure >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +echo && \ +echo "4. compiling protobuf" && \ +echo "4. compiling protobuf" >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR}/${PROTOBUF} && \ +./configure >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +echo && \ +echo "5. compiling MySQL Shell for GreatSQL" && \ +echo "5. compiling MySQL Shell for GreatSQL" >> ${MAKELOG} 2>&1 && \ +su - ${MYSQL_USER} -s /bin/bash -c "cd ${OPT_DIR}; /bin/sh ${OPT_DIR}/${GREATSQLSH_MAKESH}" && \ +echo && \ +echo "6. MySQL Shell for GreatSQL 8.0.32-25 build completed!" && \ +echo "6. MySQL Shell for GreatSQL 8.0.32-25 build completed!" >> ${MAKELOG} 2>&1 && \ +echo " 6.1 MySQL Shell for GreatSQL 8.0.32-25 version:" && \ +${BASE_DIR}/bin/mysqlsh --version && \ +${BASE_DIR}/bin/mysqlsh --version >> ${MAKELOG} 2>&1 && \ +cd ${OPT_DIR} && \ +tar cf ${GREATSQLSH}.tar ${GREATSQLSH} >> ${MAKELOG} 2>&1 && \ +xz -9 -f -T${MAKE_JOBS} ${GREATSQLSH}.tar >> ${MAKELOG} 2>&1 && \ +echo " 6.2 TARBALL file:" && \ +ls -la ${OPT_DIR}/${GREATSQLSH}.tar.xz +#rm -fr ${ANTLR}* ${BOOST}* ${MYSQL}* ${MYSQLSH}* ${MYSQLSH_PATCH} ${PATCHELF}* ${PROTOBUF}* ${RPCGEN} + +/bin/bash diff --git a/GreatSQL-Shell-Build/rocky9/greatsqlsh-automake.sh b/GreatSQL-Shell-Build/rocky9/greatsqlsh-automake.sh new file mode 100644 index 0000000000000000000000000000000000000000..8633c3ac1f5d4feb320e49287bade8434ad20eda --- /dev/null +++ b/GreatSQL-Shell-Build/rocky9/greatsqlsh-automake.sh @@ -0,0 +1,45 @@ +#!/bin/bash +. /opt/greatsqlsh-setenv.sh + +echo " 5.1 compiling mysqlclient and mysqlxclient and mysql_config_editor and authentication_oci_client" && \ +cd ${OPT_DIR}/${MYSQL} && \ +rm -fr bld && \ +mkdir bld && \ +cd bld && \ +cmake .. \ +-DLOCAL_BOOST_DIR=${OPT_DIR}/${BOOST} \ +-DBOOST_INCLUDE_DIR=${OPT_DIR}/${BOOST} \ +-DWITH_AUTHENTICATION_CLIENT_PLUGINS=1 \ +-DWITH_SSL=system >> ${MAKELOG} 2>&1 && \ +cmake --build . --target mysqlclient -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 ; \ +cmake --build . --target mysqlxclient -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +cmake --build . --target mysql_config_editor -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +cmake --build . --target authentication_oci_client -- -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && \ +echo " 5.2 compiling MySQL Shell for GreatSQL" && \ +cd ${OPT_DIR}/${MYSQLSH} && \ +patch -p1 -f < ${OPT_DIR}/${GREATSQLSH_PATCH} >> ${MAKELOG} 2>&1 && \ +rm -fr bld && \ +mkdir bld && \ +cd bld && \ +cmake .. \ +-DCMAKE_INSTALL_PREFIX=${BASE_DIR} \ +-DMYSQL_SOURCE_DIR=${OPT_DIR}/${MYSQL} \ +-DMYSQL_BUILD_DIR=${OPT_DIR}/${MYSQL}/bld/ \ +-DBUNDLED_MYSQL_CONFIG_EDITOR=${OPT_DIR}/${MYSQL}/bld/runtime_output_directory/mysql_config_editor \ +-DCLIENT_PLUGIN_LIB=${OPT_DIR}/${MYSQL}/bld/plugin_output_directory/authentication_oci_client.so \ +-DWITH_PROTOBUF=system \ +-DBUILD_SOURCE_PACKAGE=0 \ +-DBUNDLED_ANTLR_DIR=/usr/local/antlr4/ \ +-DHAVE_V8=1 \ +-DV8_INCLUDE_DIR=/usr/include \ +-DV8_LIB_DIR=/usr/lib64 \ +-DHAVE_PYTHON=1 \ +-DPYTHON_LIBRARIES=/usr/lib64/python3.9 \ +-DPYTHON_INCLUDE_DIRS=/usr/include/python3.9/ >> ${MAKELOG} 2>&1 \ +&& make -j${MAKE_JOBS} >> ${MAKELOG} 2>&1 && make -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +cp /usr/local/lib/libprotobuf.so.30 ${BASE_DIR}/lib/mysqlsh/ && \ +cp /lib64/libnode.so.93 ${BASE_DIR}/lib/mysqlsh/libnode.so.93 && \ +cp /lib64/libbrotlienc.so.1.0.9 ${BASE_DIR}/lib/mysqlsh/libbrotlienc.so.1 && \ +cp /lib64/libbrotlidec.so.1.0.9 ${BASE_DIR}/lib/mysqlsh/libbrotlidec.so.1 && \ +cp /lib64/libuv.so.1.0.0 ${BASE_DIR}/lib/mysqlsh/libuv.so.1 && \ +cp /lib64/libbrotlicommon.so.1.0.9 ${BASE_DIR}/lib/mysqlsh/libbrotlicommon.so.1 diff --git a/GreatSQL-Shell-Build/rocky9/greatsqlsh-setenv.sh b/GreatSQL-Shell-Build/rocky9/greatsqlsh-setenv.sh new file mode 100644 index 0000000000000000000000000000000000000000..0fd4ea7719847c3684b77673f789c19178969582 --- /dev/null +++ b/GreatSQL-Shell-Build/rocky9/greatsqlsh-setenv.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +. ~/.bash_profile + +MAKE_JOBS=$(lscpu | grep '^CPU(s)'|awk '{print $NF}') +if [ ${MAKE_JOBS} -ge 16 ] ; then + MAKE_JOBS=$(expr ${MAKE_JOBS} - 4) +else + MAKE_JOBS=$(expr ${MAKE_JOBS} - 1) +fi + +OPT_DIR=/opt +MYSQL_VERSTION=8.0.32 +RELEASE=25 +GLIBC=$(ldd --version | head -n 1 | awk '{print $NF}') +ARCH=$(uname -p) +#OS=`grep '^ID=' /etc/os-release | sed 's/.*"\(.*\)".*/\1/ig'` +OS=Linux +OSPATCH=el9 + +MAKELOG=/tmp/greatsqlsh-automake.log +MYSQL_USER=root +GREATSQLSH=greatsql-shell-${MYSQL_VERSTION}-${RELEASE}-${OS}-${OSPATCH}-glibc${GLIBC}-${ARCH} +BASE_DIR=${OPT_DIR}/${GREATSQLSH} +GREATSQL_BUILD_DOWNLOAD_URL="https://product.greatdb.com/GreatSQL-Docker/deppkgs" +BOOST_SRC_DOWNLOAD_URL="https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source" +MYSQL_SRC_DOWNLOAD_URL="https://downloads.mysql.com/archives/get/p/23/file" +MYSQLSH_SRC_DOWNLOAD_URL="https://downloads.mysql.com/archives/get/p/43/file" + + +DEPS="iputils tar gzip xz wget langpacks-en glibc-langpack-en libmodulemd autoconf automake binutils bison cmake cyrus-sasl-devel cyrus-sasl-scram gcc-c++ \ +libffi libffi-devel libxml2-devel libxml2 libyaml bzip2 bzip2-libs bzip2-devel \ +libcurl-devel libssh libssh-config libssh-devel \ +libtirpc libtirpc-devel libuuid libuuid-devel m4 make ncurses-devel openssl openssl-devel \ +patch uuid wget zlib-devel \ +python3 python3-devel python3-libs python3-pyyaml \ +git numactl-devel rpm-build gcc gcc-c++ gcc-plugin-annobin gperf ncurses-devel readline-devel openssl-devel jemalloc zstd \ +time zlib-devel libaio-devel bison cmake3 cmake pam-devel libeatmydata jemalloc-devel pkg-config \ +libcurl-devel openldap-devel unzip wget libcurl-devel patchelf systemd-devel \ +perl perl-Time-HiRes perl-Env perl-Data-Dumper perl-JSON perl-Digest perl-Digest-MD5 perl-Digest-Perl-MD5 \ +binutils gcc gcc-c++ tar rpm-build rsync bison glibc glibc-devel libstdc++-devel make openssl-devel pam-devel perl perl-JSON perl-Memoize pkg-config \ +automake autoconf cmake cmake3 jemalloc jemalloc-devel \ +libaio-devel ncurses-devel numactl-devel readline-devel time \ +rpcgen \ +libzstd libzstd-devel \ +cyrus-sasl-devel cyrus-sasl-scram krb5-devel \ +v8-devel nodejs nodejs-devel nodejs-libs libuv libnghttp2" + +ANTLR="antlr4-4.10" +BOOST="boost_1_77_0" +MYSQL="mysql-8.0.32" +MYSQLSH="mysql-shell-8.0.32-src" +PATCHELF="patchelf-0.14.5" +PROTOBUF="protobuf-3.19.4" +GREATSQLSH_PATCH="mysqlsh-for-greatsql-8.0.32.patch" +GREATSQLSH_MAKESH="greatsqlsh-automake.sh" +GREATSQLSH_ENV="greatsqlsh-setenv.sh" diff --git a/GreatSQL-Shell-Build/rocky9/mysqlsh-for-greatsql-8.0.32.patch b/GreatSQL-Shell-Build/rocky9/mysqlsh-for-greatsql-8.0.32.patch new file mode 100644 index 0000000000000000000000000000000000000000..f3631e549cd9db57f480eb0c7de80543a5a9dbc5 --- /dev/null +++ b/GreatSQL-Shell-Build/rocky9/mysqlsh-for-greatsql-8.0.32.patch @@ -0,0 +1,48 @@ +diff --git a/mysqlshdk/libs/mysql/group_replication.cc b/mysqlshdk/libs/mysql/group_replication.cc +index 436a62b15..8f8958ce7 100644 +--- a/mysqlshdk/libs/mysql/group_replication.cc ++++ b/mysqlshdk/libs/mysql/group_replication.cc +@@ -107,6 +107,8 @@ std::string to_string(const Member_role role) { + return "PRIMARY"; + case Member_role::SECONDARY: + return "SECONDARY"; ++ case Member_role::ARBITRATOR: ++ return "ARBITRATOR"; + case Member_role::NONE: + return "NONE"; + } +@@ -118,6 +120,8 @@ Member_role to_member_role(const std::string &role) { + return Member_role::PRIMARY; + } else if (shcore::str_caseeq("SECONDARY", role)) { + return Member_role::SECONDARY; ++ } else if (shcore::str_caseeq("ARBITRATOR", role)) { ++ return Member_role::ARBITRATOR; + } else if (role.empty()) { + return Member_role::NONE; + } else { +diff --git a/mysqlshdk/libs/mysql/group_replication.h b/mysqlshdk/libs/mysql/group_replication.h +index 05dfa54bf..23ccf6a76 100644 +--- a/mysqlshdk/libs/mysql/group_replication.h ++++ b/mysqlshdk/libs/mysql/group_replication.h +@@ -73,7 +73,7 @@ enum class Member_state { + MISSING + }; + +-enum class Member_role { PRIMARY, SECONDARY, NONE }; ++enum class Member_role { PRIMARY, SECONDARY, ARBITRATOR, NONE }; + + enum class Topology_mode { SINGLE_PRIMARY, MULTI_PRIMARY, NONE }; + +diff --git a/mysqlshdk/scripting/jscript_context.cc b/opt/jscript_context.cc +index 5f46751..0e7ff1e 100644 +--- a/mysqlshdk/scripting/jscript_context.cc ++++ b/opt/jscript_context.cc +@@ -1557,7 +1557,7 @@ v8::Local v8_array_buffer(v8::Isolate *isolate, + + std::string to_string(v8::Isolate *isolate, v8::Local obj) { + const v8::String::Utf8Value utf8{ +- isolate, obj->IsSymbol() ? obj.As()->Name() : obj}; ++ isolate, obj->IsSymbol() ? obj.As()->Description() : obj}; + const auto ptr = *utf8; + return nullptr == ptr ? "" : std::string(ptr, utf8.length()); + } diff --git a/GreatSQL-Shell-Build/rocky9/requirements.txt b/GreatSQL-Shell-Build/rocky9/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..4b6d2ee59bf90fad0e98b9bae5aa48085037dda0 --- /dev/null +++ b/GreatSQL-Shell-Build/rocky9/requirements.txt @@ -0,0 +1,15 @@ +bcrypt==4.1.2 +certifi==2024.2.2 +cffi==1.16.0 +circuitbreaker==1.4.0 +cryptography==37.0.2 +oci==2.85.0 +paramiko==3.4.0 +pyClamd==0.4.0 +pycparser==2.21 +PyNaCl==1.5.0 +pyOpenSSL==22.0.0 +python-dateutil==2.9.0.post0 +pytz==2024.1 +PyYAML==6.0.1 +six==1.16.0 diff --git a/deppkgs/rpcgen-1.3.1-4.el8.aarch64.rpm b/deppkgs/rpcgen-1.3.1-4.el8.aarch64.rpm deleted file mode 100644 index 2cf092a956a36df147504928dd34edea2fa81a95..0000000000000000000000000000000000000000 Binary files a/deppkgs/rpcgen-1.3.1-4.el8.aarch64.rpm and /dev/null differ diff --git a/deppkgs/rpcgen-1.3.1-4.el8.x86_64.rpm b/deppkgs/rpcgen-1.3.1-4.el8.x86_64.rpm deleted file mode 100644 index 2202ca1715fd11e67e31314825ed76b59faea035..0000000000000000000000000000000000000000 Binary files a/deppkgs/rpcgen-1.3.1-4.el8.x86_64.rpm and /dev/null differ diff --git a/deppkgs/v89-aarch64.zip b/deppkgs/v89-aarch64.zip new file mode 100644 index 0000000000000000000000000000000000000000..e4edfcfc2adbdb4d973b1f3c4f99ffcc25eb13bb Binary files /dev/null and b/deppkgs/v89-aarch64.zip differ diff --git a/deppkgs/v89-x86-64.zip b/deppkgs/v89-x86-64.zip new file mode 100644 index 0000000000000000000000000000000000000000..0ca35a29952a8e937e1b1f73be39a316325e765b Binary files /dev/null and b/deppkgs/v89-x86-64.zip differ