diff --git a/GreatSQL-Build/README.md b/GreatSQL-Build/README.md index de3fa1d0a79a9d5e1d0e47e329a4f2790d1d4baf..ae90e4fe1c1a60b3c6ce12749bf9ce2b46de80b2 100644 --- a/GreatSQL-Build/README.md +++ b/GreatSQL-Build/README.md @@ -3,14 +3,22 @@ 全自动编译GreatSQL源码,生成二进制包。 -适用于CentOS 8 x86_64/aarch64 环境,更多环境适配请自行修改Dockerfile及相关脚本中的参数。 +适用于CentOS 7/8 x86_64/aarch64 环境,更多环境适配请自行修改Dockerfile及相关脚本中的参数。 ## 1. GreatSQL Build Docker镜像构建 ```shell -$ docker build -t greatsql/greatsql_build . +$ git clone https://gitee.com/GreatSQL/GreatSQL-Docker.git + +centos7: +$ cd GreatSQL-Docker/GreatSQL-Build/centos7 +$ docker build -t greatsql/greatsql_build7 . + +centos8: +$ cd GreatSQL-Docker/GreatSQL-Build/centos8 +$ docker build -t greatsql/greatsql_build8 . ``` -上述命令会查找当前目录下的 `Dockerfile` 文件,并构建名为 `greatsql/greatsql_build` 的Docker镜像。 +上述命令会查找当前目录下的 `Dockerfile` 文件,并构建名为 `greatsql/greatsql_build7/8` 的Docker镜像。 在构建镜像时,会自动从服务器上下载相应的源码包文件、初始化脚本等文件,并全自动化方式完成镜像构建工作。 @@ -18,10 +26,18 @@ $ docker build -t greatsql/greatsql_build . ```shell # 创建新容器 -$ docker run -itd --hostname greatsql_build --name greatsql_build greatsql/greatsql_build bash +centos7: +$ docker run -itd --hostname greatsql_build7 --name greatsql_build7 greatsql/greatsql_build7 bash + +centos8: +$ docker run -itd --hostname greatsql_build8 --name greatsql_build8 greatsql/greatsql_build8 bash # 查看自动编译进展 -$ docker logs greatsql_build +centos7: +$ docker logs greatsql_build7 + +centos8: +$ docker logs greatsql_build8 0. touch logfile /tmp/greatsql-automake.log @@ -37,18 +53,29 @@ $ docker logs greatsql_build 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) +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) + + 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/ +centos7: +$ docker cp greatsql_build7:/opt/GreatSQL-8.0.32-25-Linux-el7-glibc2.17-x86_64.tar.gz /usr/local/ + +centos8: +$ docker cp greatsql_build8:/opt/GreatSQL-8.0.32-25-Linux-el8-glibc2.28-x86_64.tar.gz /usr/local/ ``` -如果宿主机环境也是CentOS 8 x86_64的话,这就可以在宿主机环境下直接使用该二进制文件包了。 +如果宿主机环境也是CentOS 7/8 x86_64的话,这就可以在宿主机环境下直接使用该二进制文件包了。 ## 文件介绍 - CHANGELOG.md,更新历史 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..5e4acf658a514a69d495005060d74117a38d5b4b --- /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..b15aa2a20c1a6baf5b5f2dc71d76e41debb5f00a --- /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_MAKESH_DOWNLOAD_URL="https://gitee.com/GreatSQL/GreatSQL-Docker/raw/greatsql-8.0.32-25/GreatSQL-Build/centos7" +ARG GREATSQL_ENV="greatsql-setenv.sh" +ARG ENTRYPOINT="docker-entrypoint.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.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 curl -o ${OPT_DIR}/${GREATSQL_ENV} ${GREATSQL_MAKESH_DOWNLOAD_URL}/${GREATSQL_ENV} > /dev/null 2>&1 && \ +curl -o /${ENTRYPOINT} ${GREATSQL_MAKESH_DOWNLOAD_URL}/${ENTRYPOINT} > /dev/null 2>&1 + +#COPY ${GREATSQL_ENV} ${OPT_DIR}/${GREATSQL_ENV} +#COPY ${ENTRYPOINT} /${ENTRYPOINT} + + +RUN chmod +x /*sh ${OPT_DIR}/*sh + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["bash"] + + + + diff --git a/GreatSQL-Build/centos7/docker-entrypoint.sh b/GreatSQL-Build/centos7/docker-entrypoint.sh new file mode 100644 index 0000000000000000000000000000000000000000..213000cbd9d14d9f3850f3c222fa078077be1171 --- /dev/null +++ b/GreatSQL-Build/centos7/docker-entrypoint.sh @@ -0,0 +1,39 @@ +#!/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 ${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 ${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/centos7/greatsql-automake.sh b/GreatSQL-Build/centos7/greatsql-automake.sh new file mode 100644 index 0000000000000000000000000000000000000000..29a7cc1723742969ee51e7d02d08e5ab092159a2 --- /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 +} + +rm -fr ${MAKELOG} + +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 +} +# 如果想生成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} +} +#如果要打包完整压缩,就把下面行注释去掉 +echo " 3.5 make normal tar for GreatSQL" +tar_all + +echo "4. greatsql build completed!" diff --git a/GreatSQL-Build/centos7/greatsql-setenv.sh b/GreatSQL-Build/centos7/greatsql-setenv.sh new file mode 100644 index 0000000000000000000000000000000000000000..45533ccc64856c880cdeaa51c935252fb70c8fa1 --- /dev/null +++ b/GreatSQL-Build/centos7/greatsql-setenv.sh @@ -0,0 +1,40 @@ +#!/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=`uname -r|tr -s '.' '\n'|grep el` +GREATSQL=GreatSQL-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE}-${OS}-${OSPATCH}-glibc${GLIBC}-${ARCH} +MAKELOG=/tmp/greatsql-automake.log +MYSQL_USER=mysql +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/centos7" +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" +RPCGEN="" +CMAKE_EXE_LINKER_FLAGS="" +if [ ${ARCH} = "x86_64" ] ; then + CMAKE_EXE_LINKER_FLAGS=" -ljemalloc " +fi diff --git a/GreatSQL-Build/Dockerfile b/GreatSQL-Build/centos8/Dockerfile similarity index 100% rename from GreatSQL-Build/Dockerfile rename to GreatSQL-Build/centos8/Dockerfile diff --git a/GreatSQL-Build/docker-entrypoint.sh b/GreatSQL-Build/centos8/docker-entrypoint.sh old mode 100755 new mode 100644 similarity index 100% rename from GreatSQL-Build/docker-entrypoint.sh rename to GreatSQL-Build/centos8/docker-entrypoint.sh diff --git a/GreatSQL-Build/greatsql-automake.sh b/GreatSQL-Build/centos8/greatsql-automake.sh old mode 100755 new mode 100644 similarity index 90% rename from GreatSQL-Build/greatsql-automake.sh rename to GreatSQL-Build/centos8/greatsql-automake.sh index 3aa65d942b2b910dc450540dea5a2931fab1bf7a..e0f2e7db96517e71ba840057f9ce1fd2be26527f --- a/GreatSQL-Build/greatsql-automake.sh +++ b/GreatSQL-Build/centos8/greatsql-automake.sh @@ -182,26 +182,30 @@ 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 +} +# 如果想生成minial包,就把下面行注释去掉 +tar_minimal + +function tar_all { + minimal=false + ( + cd ${DEST_DIR} + link >> ${MAKELOG} 2>&1 + ) + 如果要打包完整压缩,就把下面行注释去掉 + tar -czf ${DEST_DIR}.tar.gz ${DEST_DIR} +} +#如果要打包完整压缩,就把下面行注释去掉 +tar_all diff --git a/GreatSQL-Build/greatsql-setenv.sh b/GreatSQL-Build/centos8/greatsql-setenv.sh old mode 100755 new mode 100644 similarity index 87% rename from GreatSQL-Build/greatsql-setenv.sh rename to GreatSQL-Build/centos8/greatsql-setenv.sh index e8b0ee7d27a5348cf64e3432d13c97a931f1d1de..a6053fcf5c4e7bdd5114ba335be03155e89e32cc --- a/GreatSQL-Build/greatsql-setenv.sh +++ b/GreatSQL-Build/centos8/greatsql-setenv.sh @@ -1,4 +1,4 @@ -#/bin/bash +#!/bin/bash . ~/.bash_profile @@ -17,8 +17,10 @@ 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=`uname -r|tr -s '.' '\n'|grep el` +GREATSQL=GreatSQL-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${RELEASE}-${OS}-${OSPATCH}-glibc${GLIBC}-${ARCH} MAKELOG=/tmp/greatsql-automake.log MYSQL_USER=mysql DEST_DIR=${OPT_DIR}/${GREATSQL} diff --git a/GreatSQL-Shell-Build/README.md b/GreatSQL-Shell-Build/README.md index 45d77ad87dcafbc6d07d34507d7f05992b651cbd..519395253d02d49704df8421e6d1fe5705d44a66 100644 --- a/GreatSQL-Shell-Build/README.md +++ b/GreatSQL-Shell-Build/README.md @@ -4,7 +4,7 @@ 本项目用于构建MySQL Shell for GreatSQL编译环境Docker镜像。 -适用于CentOS 8 x86_64/aarch64 环境,更多环境适配请自行修改Dockerfile及相关脚本中的参数。 +适用于CentOS 7/8 x86_64/aarch64 环境,更多环境适配请自行修改Dockerfile及相关脚本中的参数。 ## 基本信息 - 维护者: GreatSQL(greatsql@greatdb.com) @@ -20,8 +20,26 @@ ## 如何使用GreatSQL-Shell-Build 例如: + +## 1. GreatSQL Build Docker镜像构建 + +```shell +$ git clone https://gitee.com/earl86/GreatSQL-Docker.git + +centos7: +$ cd GreatSQL-Docker/GreatSQL-Shell-Build/centos7 +$ docker build -t greatsql/greatsqlsh_build7 . + +centos8: +$ cd GreatSQL-Docker/GreatSQL-Shell-Build/centos8 +$ docker build -t greatsql/greatsqlsh_build8 . +``` +上述命令会查找当前目录下的 `Dockerfile` 文件,并构建名为 `greatsql/greatsql_build7/8` 的Docker镜像。 + + ```shell -$ docker run -itd --hostname greatsqlsh --name greatsqlsh greatsql/greatsql_shell_build:8.0.32-25 bash +$ docker run -itd --hostname greatsqlsh_build7 --name greatsqlsh_build7 greatsql/greatsqlsh_build7 bash +$ docker run -itd --hostname greatsqlsh_build8 --name greatsqlsh_build8 greatsql/greatsqlsh_build8 bash ``` 执行上述命令后,会创建一个GreatSQL-Shell编译环境容器,并在容器中自动完成GreatSQL-Shell编译工作。 @@ -51,25 +69,43 @@ $ docker logs greatsqlsh | tail 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) + 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: +/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) + 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 + centos7: +-rw-r--r-- 1 root root 19956168 Feb 21 02:56 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64.tar.xz + +centos8: +-rw-r--r-- 1 root root 19956168 Feb 21 02:56 /opt/greatsql-shell-8.0.32-25-Linux-el8-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/ +centos7: +$ docker cp greatsqlsh_build7:/opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64.tar.xz /usr/local/ + +centos8: +$ docker cp greatsqlsh_build8:/opt/greatsql-shell-8.0.32-25-Linux-el8-glibc2.28-x86_64.tar.xz /usr/local/ ``` 然后解压缩,就可以在宿主机环境下使用了,例如: ```shell # 先安装几个必要的依赖包 -$ dnf install -y ibssh python38 python38-libs python38-pyyaml +$ yum 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 +centos7: +$ /usr/local/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/bin/mysqlsh + +centos8: +$ /usr/local/greatsql-shell-8.0.32-25-Linux-el8-glibc2.28-x86_64/bin/mysqlsh + MySQL Shell 8.0.32 ... Type '\help' or '\?' for help; '\quit' to exit. @@ -80,7 +116,7 @@ Bye! 如果是在aarch64环境中,则修改Dockerfile的前几行,改成适用于aarch64的镜像,例如 ```shell -#FROM centos:8 +#FROM centos:7/8 FROM docker.io/arm64v8/centos ``` diff --git a/GreatSQL-Shell-Build/centos7/CentOS-Base.repo b/GreatSQL-Shell-Build/centos7/CentOS-Base.repo new file mode 100644 index 0000000000000000000000000000000000000000..5e4acf658a514a69d495005060d74117a38d5b4b --- /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..7e25ef1c653e2b5844ee0b0549ec086e167f8a6c --- /dev/null +++ b/GreatSQL-Shell-Build/centos7/Dockerfile @@ -0,0 +1,75 @@ +FROM centos:7 + +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 +ARG MYSQL_UID=3306 +ARG MYSQL_USER=mysql +ARG DEPS="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-config libssh-devel libffi libffi-devel libxml2-devel libxml2 \ +libtirpc-devel libudev-devel libuuid libuuid-devel m4 ncurses-devel openssl openssl-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-devtoolset 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 +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} + +#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..964d88aca650b79d4c4586aa9073ddffe834272a --- /dev/null +++ b/GreatSQL-Shell-Build/centos7/copy_so.sh @@ -0,0 +1,51 @@ + +#!/bin/bash + +#copy so to lib dir +\cp /usr/local/lib/libprotobuf.so.30 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /usr/local/lib64/libssh.so.4 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libpthread.so.0 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libdl.so.2 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libssl.so.10 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libcrypto.so.10 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libresolv.so.2 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/librt.so.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libssh.so.4 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libutil.so.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libcurl.so.4 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libnode.so.93 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libm.so.6 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libstdc++.so.6 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libgcc_s.so.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libc.so.6 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/ld-linux-x86-64.so.2 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libgssapi_krb5.so.2 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libkrb5.so.3 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libcom_err.so.2 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libk5crypto.so.3 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libz.so.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libidn.so.11 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libssh2.so.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libssl3.so /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libsmime3.so /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libnss3.so /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libnssutil3.so /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libplds4.so /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libplc4.so /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libnspr4.so /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/liblber-2.4.so.2 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libldap-2.4.so.2 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libuv.so.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libbrotlidec.so.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libbrotlienc.so.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libcrypto.so.1.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libssl.so.1.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libcrypt.so.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libuuid.so.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libkrb5support.so.0 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libkeyutils.so.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libsasl2.so.3 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libbrotlicommon.so.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libfreebl3.so /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libselinux.so.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/lib/mysqlsh/ +\cp /lib64/libpcre.so.1 /opt/greatsql-shell-8.0.32-25-Linux-el7-glibc2.17-x86_64/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..5aeb16e955007aff265af57cfac3428f1959be76 --- /dev/null +++ b/GreatSQL-Shell-Build/centos7/docker-entrypoint.sh @@ -0,0 +1,76 @@ +#!/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 >> ${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} && \ +mkdir build && \ +cd build && \ +cmake3 ../ >> ${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} && \ +./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 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 && \ +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..a1caaa9571a6603b2a43d06cd7bbb1000d9a10e0 --- /dev/null +++ b/GreatSQL-Shell-Build/centos7/greatsqlsh-automake.sh @@ -0,0 +1,37 @@ +#!/bin/bash +. /opt/greatsqlsh-setenv.sh + +echo " 5.1 compiling mysqlclient and mysqlxclient" && \ +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_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 && \ +echo " 5.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/ \ +-DWITH_PROTOBUF=bundled \ +-DBUILD_SOURCE_PACKAGE=0 \ +-DBUNDLED_ANTLR_DIR=/usr/local/antlr4/ \ +-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 -j${MAKE_JOBS} install >> ${MAKELOG} 2>&1 && \ +sh /opt/copy_co.sh >> ${MAKELOG} 2>&1 diff --git a/GreatSQL-Shell-Build/centos7/greatsqlsh-setenv.sh b/GreatSQL-Shell-Build/centos7/greatsqlsh-setenv.sh new file mode 100644 index 0000000000000000000000000000000000000000..33b45817df8965579051a6fd3f794158cb398906 --- /dev/null +++ b/GreatSQL-Shell-Build/centos7/greatsqlsh-setenv.sh @@ -0,0 +1,42 @@ +#!/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=`uname -r|tr -s '.' '\n'|grep el` + +MAKELOG=/tmp/greatsqlsh-automake.log +MYSQL_USER=mysql +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" +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" +PROTOBUF="protobuf-3.19.4" +GREATSQLSH_PATCH="mysqlsh-for-greatsql-8.0.32.patch" +GREATSQLSH_MAKESH="greatsqlsh-automake.sh" +GREATSQLSH_ENV="greatsqlsh-setenv.sh" +RPCGEN="" diff --git a/GreatSQL-Shell-Build/centos7/requirements.txt b/GreatSQL-Shell-Build/centos7/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..bef8f59d4ff77e1967c19208767a267ba022bf16 --- /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==42.0.5 +oci==2.124.0 +paramiko==3.4.0 +pyClamd==0.4.0 +pycparser==2.21 +PyNaCl==1.5.0 +pyOpenSSL==24.1.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 100% rename from GreatSQL-Shell-Build/Dockerfile rename to GreatSQL-Shell-Build/centos8/Dockerfile 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 100% rename from GreatSQL-Shell-Build/docker-entrypoint.sh rename to GreatSQL-Shell-Build/centos8/docker-entrypoint.sh 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 100% rename from GreatSQL-Shell-Build/greatsqlsh-automake.sh rename to GreatSQL-Shell-Build/centos8/greatsqlsh-automake.sh diff --git a/GreatSQL-Shell-Build/greatsqlsh-setenv.sh b/GreatSQL-Shell-Build/centos8/greatsqlsh-setenv.sh old mode 100755 new mode 100644 similarity index 100% rename from GreatSQL-Shell-Build/greatsqlsh-setenv.sh rename to GreatSQL-Shell-Build/centos8/greatsqlsh-setenv.sh diff --git a/GreatSQL-Shell-Build/mysqlsh-for-greatsql-8.0.32.patch b/GreatSQL-Shell-Build/mysqlsh-for-greatsql-8.0.32.patch index 00d96dcb3065dbfb255e7ffd658e65631aa94091..2b989a812c73d1f48516184184557a160e3bffc5 100644 --- a/GreatSQL-Shell-Build/mysqlsh-for-greatsql-8.0.32.patch +++ b/GreatSQL-Shell-Build/mysqlsh-for-greatsql-8.0.32.patch @@ -27,9 +27,21 @@ 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/mysqlshdk/scripting/jscript_context.cc +index 5f46751..0e7ff1e 100644 +--- a/mysqlshdk/scripting/jscript_context.cc ++++ b/mysqlshdk/scripting/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()); + }