%define zlib_name zlib %define zlib_version 1.2.12 %define krb5_name krb5 %define krb5_version 1.18.3-final %define xgboost_name xgboost %define xgboost_version 1.4.1 %define dmlc_name dmlc-core %define dmlc_version 0.5 %define port 7654 %define datapath /var/lib/opengauss %define apppath %{_prefix}/local/opengauss %define tmppath /var/lib/opengauss/pkg_6.0.0 Name: opengauss Version: 6.0.0 Release: 24 Summary: openGauss is an open source relational database management system License: MulanPSL-2.0 and MIT and BSD and zlib and TCL and Apache-2.0 and BSL-1.0 URL: https://gitee.com/opengauss/openGauss-server Source0: openGauss-server-%{version}.tar.gz Source1: %{zlib_name}-%{zlib_version}.tar.gz Source2: %{krb5_name}-%{krb5_version}.tar.gz Source3: %{dmlc_name}-v%{dmlc_version}.tar.gz Source4: %{xgboost_name}-v%{xgboost_version}.tar.gz Source20: opengauss-bashprofile Source21: opengauss.service Source22: autostart.sh Source23: version.cfg Source24: opengauss_upgrade_start.sh Source25: opengauss_upgrade_common.sh Source26: opengauss_upgrade_config.sh Source27: opengauss_upgrade_errorcode.sh Source28: upgrade.sh Source29: krb-configure Patch0: og-cmake.patch Patch1: og-delete-obs.patch Patch2: og-openssl3-adptor.patch Patch3: og-security.patch Patch4: og-syntax.patch Patch5: og-riscv64-support.patch Patch6: og-dolphin.patch Patch11: zlib.patch Patch12: zlib-CVE-2022-37434.patch Patch21: krb5-backport-Add-a-simple-DER-support-header.patch Patch22: krb5-backport-CVE-2024-37370-CVE-2024-37371-Fix-vulnerabilities-in-GSS-message-token-handling.patch Patch23: krb5-cve-2022-42898.patch Patch24: krb5-CVE-2023-36054.patch Patch25: krb5.patch Patch26: xgboost-cmake-3.13.patch Patch27: dmlc-core-port-to-newer-cmake.patch BuildRequires: cmake gcc gcc-c++ openssl-devel python tar BuildRequires: lz4-devel zstd-devel boost-devel cjson-devel BuildRequires: libcgroup-devel libcurl-devel unixODBC-devel jemalloc-devel BuildRequires: java-1.8.0-openjdk-devel libedit-devel libaio-devel BuildRequires: bison flex, DCF >= 6 BuildRequires: numactl-devel libxml2-devel xerces-c-devel pkgconfig(aws-cpp-sdk-core) BuildRequires: libatomic autoconf %global _privatelibs lib(krb5_gauss|ecpg|z|pg|pq)\\.so* %global __provides_exclude %{_privatelibs} %global __requires_exclude %{_privatelibs} Requires: lz4-devel zstd-devel boost-devel cjson-devel tar Requires: libcgroup-devel libcurl-devel unixODBC-devel jemalloc-devel Requires: java-1.8.0-openjdk-devel libedit-devel libaio-devel Requires: DCF >= 6, lsof Requires: numactl-devel libxml2-devel xerces-c-devel pkgconfig(aws-cpp-sdk-core) %description openGauss kernel : openGauss is an open source relational database management system. %global debug_package %{nil} %prep %setup -q -c -n %{name}-%{version} %setup -q -D -T -a 1 %setup -q -D -T -a 2 %setup -q -D -T -a 3 %setup -q -D -T -a 4 pushd openGauss-server-%{version} %patch -P0 -p1 %patch -P1 -p1 %patch -P2 -p1 %patch -P3 -p1 %patch -P4 -p1 %patch -P5 -p1 %patch -P6 -p1 popd pushd %{zlib_name}-%{zlib_version} %patch -P11 -p1 %patch -P12 -p1 popd pushd %{krb5_name}-%{krb5_name}-%{krb5_version} %patch -P21 -p1 %patch -P22 -p1 %patch -P23 -p1 %patch -P24 -p1 %patch -P25 -p1 popd pushd %{xgboost_name}-%{xgboost_version} %patch -P26 -p1 popd pushd %{dmlc_name}-%{dmlc_version} %patch -P27 -p1 popd %build build_target=$(pwd)/binarylibs/kernel/dependency ########### build krb5 ########### pushd %{krb5_name}-%{krb5_name}-%{krb5_version} krb5_dir=${build_target}/kerberos/comm cd src rm -rf configure; cp %{SOURCE29} ./configure autoheader; chmod +x configure; sed -i 's/lcom_err/lcom_err_gauss/g' configure ./configure --prefix=${krb5_dir} LDFLAGS='-Wl,-z,relro,-z,now' CFLAGS='-fstack-protector-strong -fPIC' --disable-rpath --disable-pkinit --with-system-verto=no make -s %{?_smp_mflags} make install -s %{?_smp_mflags} rm -rf ${krb5_dir}/lib/pkgconfig rm -rf ${krb5_dir}/share rm -rf ${krb5_dir}/var popd ########### build zlib ########### pushd %{zlib_name}-%{zlib_version} zlib_dir=${build_target}/zlib1.2.11/comm CONFIGURE_EXTRA_FLAG="--64" %ifarch aarch64 CONFIGURE_EXTRA_FLAG="" %endif %ifarch sw_64 CONFIGURE_EXTRA_FLAG="" %endif %ifarch riscv64 CONFIGURE_EXTRA_FLAG="" %endif ./configure ${CONFIGURE_EXTRA_FLAG} --prefix=${zlib_dir} sed -i '21a CFLAGS += -fPIC' Makefile MAKE_EXTRA_FLAG="-m64" %ifarch aarch64 MAKE_EXTRA_FLAG="" %endif %ifarch sw_64 MAKE_EXTRA_FLAG="" %endif %ifarch riscv64 MAKE_EXTRA_FLAG="" %endif make CFLAGS="-fPIE -fPIC" SFLAGS="-O2 -fPIC -fstack-protector-strong -Wl,-z,noexecstack -Wl,-z,relro,-z,now ${MAKE_EXTRA_FLAG} -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN" %{?_smp_mflags} make install cd contrib/minizip/ make CFLAGS="-O3 -fPIC -I../.." -f Makefile %{?_smp_mflags} mv libminiz.a libminiunz.a cp ioapi.h ${zlib_dir}/include/ cp unzip.h ${zlib_dir}/include/ cp libminiunz.a ${zlib_dir}/lib/ chmod 644 ${zlib_dir}/include/ioapi.h ${zlib_dir}/include/unzip.h ${zlib_dir}/lib/libminiunz.a cp -r ${zlib_dir} ${build_target}/zlib1.2.11/llt popd ########### build xgboost ########### pushd %{xgboost_name}-%{xgboost_version} xgboost_dir=${build_target}/xgboost/comm sed -i '9a set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,-z,now -fPIE -fPIC -fstack-protector-strong")' ./CMakeLists.txt sed -i '10a set (CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -Wl,-z,now -fPIE -fPIC -fstack-protector-strong")' ./CMakeLists.txt sed -i '11a set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-z,now -fPIE -fPIC -fstack-protector-strong")' ./CMakeLists.txt rm -rf dmlc-core cp -r ../dmlc-core-%{dmlc_version}/ ./dmlc-core rm -rf build_install mkdir build_install && cd build_install cmake .. -DCMAKE_INSTALL_PREFIX=${xgboost_dir} make %{?_smp_mflags} make install cp -r ${xgboost_dir} ${build_target}/xgboost/llt popd ########### build opengauss ########### %ifarch riscv64 CMAKE_EXTRA_FLAG="-DENABLE_BBOX=OFF" rm -rf openGauss-server-%{version}/contrib/dolphin %endif pushd openGauss-server-%{version} opengauss_source_dir=$(pwd) export BUILD_TUPLE=$(uname -m) export DEBUG_TYPE=release export THIRD_BIN_PATH=${build_target}/../../../binarylibs export LD_LIBRARY_PATH=$THIRD_BIN_PATH/kernel/dependency/zlib1.2.11/comm/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$THIRD_BIN_PATH/kernel/dependency/kerberos/comm/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$THIRD_BIN_PATH/kernel/dependency/xgboost/comm/lib:$LD_LIBRARY_PATH export PREFIX_HOME=${opengauss_source_dir}/mppdb_temp_install mkdir -p tmp_build cd tmp_build cmake .. -DENABLE_MULTIPLE_NODES=OFF -DENABLE_THREAD_SAFETY=ON -DWITH_OPENEULER_OS=ON -DENABLE_OPENEULER_MAJOR=ON \ -DENABLE_LLVM_COMPILE=OFF -DENABLE_OBS=OFF -DENABLE_OPENSSL3=ON ${CMAKE_EXTRA_FLAG} make %{?_smp_mflags} make install # clean build root rm -rf %{buildroot}/* mkdir -p %{buildroot}/var/lib/opengauss/data mkdir -p %{buildroot}%{apppath}/script mkdir -p %{buildroot}%{tmppath}/script # separate_debug_symbol.sh dir cd ${opengauss_source_dir}/build/script chmod +x ./separate_debug_information.sh sed -i '/"$BIN_DIR\/gaussdb\.map"/d' ./separate_debug_information.sh ./separate_debug_information.sh rm -rf ${opengauss_source_dir}/mppdb_temp_install/packages rm -rf ${opengauss_source_dir}/mppdb_temp_install/symbols # package os_name=$(cat /etc/os-release | grep -w NAME | awk -F '"' '{print $2}') if [[ -f "/etc/openEuler-release" ]]; then os_name="openEuler" elif [[ -f "/etc/euleros-release" ]]; then os_name="EulerOS" elif [[ -f "/etc/centos-release" ]]; then os_name="CentOS" elif [[ -f "/etc/FusionOS-release" ]]; then os_name="FusionOS" elif [[ -f "/etc/kylin-release" ]]; then os_name="Kylin" elif [[ -f "/etc/asianux-release" ]]; then os_name="Asianux" elif [[ -f "/etc/CSIOS-release" ]]; then os_name="CSIOS" else os_name=$(lsb_release -d | awk -F ' ' '{print $2}'| tr A-Z a-z | sed 's/.*/\L&/; s/[a-z]*/\u&/g') fi os_version=$(cat /etc/os-release | grep -w VERSION_ID | awk -F '"' '{print $2}') platform_arch=$(uname -m) kernel_package_name=openGauss-Server-%{version}-${os_name}-${os_version}-${platform_arch} cd ${opengauss_source_dir}/mppdb_temp_install tar -zcf ${kernel_package_name}.tar.bz2 * sha256sum ${kernel_package_name}.tar.bz2 | awk '{print $1}' > ${kernel_package_name}.sha256 # copy binarylibs packages to %{tmppath} cp -r ${opengauss_source_dir}/mppdb_temp_install/* %{buildroot}%{tmppath} # make package upgrade sql cd ${opengauss_source_dir}/tmp_build cp -r ${opengauss_source_dir}/src/include/catalog/upgrade_sql ./upgrade_sql tar -zcf upgrade_sql.tar.gz ./upgrade_sql rm -rf ./upgrade_sql > /dev/null 2>&1 sha256sum upgrade_sql.tar.gz | awk '{print $1}' > upgrade_sql.sha256 if [ $? -ne 0 ]; then echo "Generate upgrade_sql.sha256 failed." exit 1 fi cp -r upgrade_sql.tar.gz %{buildroot}%{tmppath} cp -r upgrade_sql.sha256 %{buildroot}%{tmppath} # opengauss datanode dir. install -d -m 700 $RPM_BUILD_ROOT%{?_localstatedir}/lib/opengauss/data # opengauss .bash_profile install -m 644 %{SOURCE20} $RPM_BUILD_ROOT%{?_localstatedir}/lib/opengauss/.bash_profile # auto start files install -m 644 %{SOURCE21} %{buildroot}%{tmppath}/script/opengauss.service install -m 644 %{SOURCE22} %{buildroot}%{tmppath}/script/autostart.sh # upgrade script install -m 644 %{SOURCE23} %{buildroot}%{tmppath}/version.cfg install -m 644 %{SOURCE24} %{buildroot}%{tmppath}/opengauss_upgrade_start.sh install -m 644 %{SOURCE25} %{buildroot}%{tmppath}/opengauss_upgrade_common.sh install -m 644 %{SOURCE26} %{buildroot}%{tmppath}/opengauss_upgrade_config.sh install -m 644 %{SOURCE27} %{buildroot}%{tmppath}/opengauss_upgrade_errorcode.sh install -m 644 %{SOURCE28} %{buildroot}%{tmppath}/upgrade.sh popd %pre # add opengauss user /usr/sbin/groupadd -r opengauss >/dev/null 2>&1 || : /usr/sbin/useradd -M -N -g opengauss -r -d %{datapath} -s /bin/bash -c "openGauss Server" opengauss >/dev/null 2>&1 || : # for install step # 1:install 2:upgrade if [ $1 -eq 1 ]; then echo "Preparing for install" portinfo=$(lsof -i:%{port}) if [ "${portinfo}" != "" ]; then echo "Error: The port[%{port}] is occupied. Please use command 'lsof -i:%{port} to check it.'" fi if [ -d /var/lib/opengauss/data ]; then if [ "`ls -A /var/lib/opengauss/data`" != "" ]; then echo "Datanode dir(/var/lib/opengauss/data) is not empty." echo "Please delete dir and reinstall opengauss." exit 1 fi process_id=$(ps -ef | grep /var/lib/opengauss/data | grep -v grep | awk '{print $2}') if [ "$process_id" != "" ]; then echo "A process of opengauss already exists. Use command (ps -ef | grep /var/lib/opengauss/data) to confirm." echo "Please kill the process and reinstall opengauss." exit 1 fi fi elif [ $1 -eq 2 ]; then echo "Preparing for upgrade" old_version=$(rpm -qi opengauss | grep -i version | awk -F':' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//') if [ "$(printf '%s\n' "%{version}" "$old_version" | sort -V | head -n1)" == "%{version}" ]; then echo "Error: New version (%{version}) must be greater than the old version ($old_version)." exit 1 fi if [[ "${old_version}" == "2.1.0" && %{version} == "6.0.0" ]]; then echo "The opengauss do not support upgrade from 2.1.0 to 6.0.0." exit 1 fi fi %post start_opengauss(){ result=$(su - opengauss -c "source ~/.bash_profile; gs_initdb -D /var/lib/opengauss/data -U opengauss --nodename=single_node") if [ $? -ne 0 ]; then echo "Init openGauss database failed." exit $result else echo "Init openGauss database success." fi } add_service(){ cp %{apppath}/script/opengauss.service /usr/lib/systemd/system/ systemctl daemon-reload } remove_service(){ service_name=/usr/lib/systemd/system/opengauss.service if [ -f $service_name ]; then systemctl disable opengauss.service rm $service_name fi } create_dir() { if [ -d /usr/local/opengauss ]; then rm -rf /usr/local/opengauss fi mkdir -p /usr/local/opengauss cp -r /var/lib/opengauss/pkg_%{version}/* /usr/local/opengauss chmod -R 755 /usr/local/opengauss chown -R opengauss:opengauss /usr/local/opengauss } upgrade_create_dir() { rm -rf /var/lib/opengauss/opengauss_upgrade/pkg_%{version} rm -rf /var/lib/opengauss/opengauss_upgrade/bak rm -rf /var/lib/opengauss/opengauss_upgrade/tmp mkdir -p /var/lib/opengauss/opengauss_upgrade/pkg_%{version} mkdir -p /var/lib/opengauss/opengauss_upgrade/bak mkdir -p /var/lib/opengauss/opengauss_upgrade/tmp chown -R opengauss:opengauss /var/lib/opengauss } # for install step # 1:install 2:upgrade if [ $1 -eq 1 ]; then echo "install" > /var/lib/opengauss/recode_install_flag create_dir start_opengauss add_service elif [ $1 -eq 2 ]; then echo "upgrade" > /var/lib/opengauss/recode_install_flag echo "start upgrade..." upgrade_create_dir cmd="source ~/.bash_profile; cd /var/lib/opengauss/pkg_%{version}; sh upgrade.sh" result=$(su - opengauss -c "$cmd") if [ $? -ne 0 ]; then echo "Upgrade failed." echo "$result, Please cat the log information: cat /var/lib/opengauss/opengauss_upgrade/opengauss_upgrade.log" echo "failed" > /var/lib/opengauss/upgrade_result exit 1 else echo "Upgrade success." echo "success" > /var/lib/opengauss/upgrade_result fi remove_service add_service fi %preun remove_service(){ service_name=/usr/lib/systemd/system/opengauss.service if [ -f $service_name ]; then systemctl disable opengauss.service rm $service_name fi } # 0: uninstall 1:upgrade if [ $1 -eq 0 ]; then echo "remove opengauss service" remove_service fi %postun clear_database(){ pid=$(ps -ef | grep /var/lib/opengauss/data | grep -v grep | awk '{print $2}') if [ "$pid" != "" ]; then kill -9 $pid fi if [ -d /usr/local/opengauss ]; then rm -rf /usr/local/opengauss fi if [ -d /usr/local/opengauss_%{version} ]; then rm -rf /usr/local/opengauss_%{version} fi if [ -f /var/lib/opengauss/recode_install_flag ]; then rm -rf /var/lib/opengauss/recode_install_flag fi if [ -f /var/lib/opengauss/upgrade_result ]; then rm -rf /var/lib/opengauss/upgrade_result fi if [ -d /var/lib/opengauss/pkg_%{version} ]; then rm -rf /var/lib/opengauss/pkg_%{version} fi if [ -d /var/lib/opengauss/opengauss_upgrade ]; then rm -rf /var/lib/opengauss/opengauss_upgrade fi } # 0: uninstall if [ $1 -eq 0 ]; then echo "clean database" clear_database fi %posttrans flag=$(cat /var/lib/opengauss/recode_install_flag) if [ $flag = "install" ]; then echo "opengauss install successfully!" echo "Please run: systemctl start opengauss.service" else echo "upgrade posttrans" if [ -d "/usr/local/opengauss" ] && [ "$(ls -A /usr/local/opengauss)" ]; then rm -rf /usr/local/opengauss fi mkdir -p /usr/local/opengauss upgrade_file=/var/lib/opengauss/upgrade_result if [[ -f ${upgrade_file} && $(cat $upgrade_file) = "success" ]]; then echo "opengauss upgrade successfully" cp -rf /var/lib/opengauss/opengauss_upgrade/pkg_%{version}/* /usr/local/opengauss else echo "opengauss upgrade failed, rollback in progress" cp -rf /var/lib/opengauss/opengauss_upgrade/bak/* /usr/local/opengauss fi chown -R opengauss:opengauss /usr/local/opengauss chmod -R 755 /usr/local/opengauss chmod -R 700 /var/lib/opengauss/data systemctl restart opengauss.service fi %files %doc %defattr (755,opengauss,opengauss) %{apppath} %defattr (700,opengauss,opengauss) %{?_localstatedir}/lib/opengauss %changelog * Wed Mar 12 2025 Funda Wang - 6.0.0-24 - fix build with cmake 4.0 * Sat Dec 28 2024 liuheng - 6.0.0-23 - Fix bugs: upgrade failed * Sat Dec 14 2024 liuheng - 6.0.0-22 - Fix bugs: when upgrading, the new version cannot be lower than the old version * Sat Dec 14 2024 liuheng - 6.0.0-21 - Fix different versions of autoconf and resolve exceptions * Fri Dec 13 2024 liuheng - 6.0.0-20 - Fix bugs: #IBB3VO * Tue Dec 10 2024 liuheng - 6.0.0-19 - Fix bugs: #IBAAVY * Thu Dec 5 2024 xiaofan - 6.0.0-18 - Support riscv64 * Mon Dec 2 2024 liuheng - 6.0.0-17 - Adaptation upgrade * Thu Nov 14 2024 liuheng - 6.0.0-16 - Update version to 6.0.0 * Thu Jun 20 2024 liuheng - 5.0.1-15 - Fix bugs: Initialize Remove Password * Wed Jun 12 2024 liuheng - 5.0.1-14 - Fix bugs: #IA4KLQ #IA4PTU * Fri May 24 2024 zhangzhihui - 5.0.1-13 - upgrade function * Mon May 6 2024 liuheng - 5.0.1-12 - Update version to 5.0.1 * Fri Aug 18 2023 panchenbo - 2.1.0-11 - add sw_64 support * Mon Aug 14 2023 zhangxubo - 2.1.0-10 - Fix bugs: #I7QJRO * Tue Jun 6 2023 dillon chen - 2.1.0-9 - Fix bugs: #I677QX; add lsof * Mon Apr 10 2023 panchenbo - 2.1.0-8 - add /etc/kylinsec-release support for KylinSec * Sat Feb 11 2023 zhangxubo - 2.1.0-7 - Fix bugs: #I6ED94 * Wed Mar 30 2022 ouyangminxiang - 2.1.0-6 - add kylinsec platform * Sat Mar 12 2022 zhangxubo - 2.1.0-5 - Fix bugs: #I4VDYQ #I4V624 #I4UOUU #I4TCDB #I4TCB8 * Thu Jan 27 2022 zhangxubo - 2.1.0-4 - Fix bugs: #I4SDWX * Sat Jan 22 2022 zhangxubo - 2.1.0-3 - Fix bugs: #I4RVNX * Mon Dec 13 2021 zhangxubo - 2.1.0-2 - Fix bugs: Mask dependencies acquired during installation * Wed Dec 1 2021 zhangxubo - 2.1.0-1 - Package init