opengauss-server/opengauss-server.spec
2025-05-18 20:20:42 +00:00

556 lines
18 KiB
RPMSpec
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

%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 <fundawang@yeah.net> - 6.0.0-24
- fix build with cmake 4.0
* Sat Dec 28 2024 liuheng <liuheng76@huawei.com> - 6.0.0-23
- Fix bugs: upgrade failed
* Sat Dec 14 2024 liuheng <liuheng76@huawei.com> - 6.0.0-22
- Fix bugs: when upgrading, the new version cannot be lower than the old version
* Sat Dec 14 2024 liuheng <liuheng76@huawei.com> - 6.0.0-21
- Fix different versions of autoconf and resolve exceptions
* Fri Dec 13 2024 liuheng <liuheng76@huawei.com> - 6.0.0-20
- Fix bugs: #IBB3VO
* Tue Dec 10 2024 liuheng <liuheng76@huawei.com> - 6.0.0-19
- Fix bugs: #IBAAVY
* Thu Dec 5 2024 xiaofan <xiaofan@iscas.ac.cn> - 6.0.0-18
- Support riscv64
* Mon Dec 2 2024 liuheng <liuheng76@huawei.com> - 6.0.0-17
- Adaptation upgrade
* Thu Nov 14 2024 liuheng <liuheng76@huawei.com> - 6.0.0-16
- Update version to 6.0.0
* Thu Jun 20 2024 liuheng <liuheng76@huawei.com> - 5.0.1-15
- Fix bugs: Initialize Remove Password
* Wed Jun 12 2024 liuheng <liuheng76@huawei.com> - 5.0.1-14
- Fix bugs: #IA4KLQ #IA4PTU
* Fri May 24 2024 zhangzhihui <zhangzhihui42@huawei.com> - 5.0.1-13
- upgrade function
* Mon May 6 2024 liuheng <liuheng76@huawei.com> - 5.0.1-12
- Update version to 5.0.1
* Fri Aug 18 2023 panchenbo <panchenbo@kylinsec.com.cn> - 2.1.0-11
- add sw_64 support
* Mon Aug 14 2023 zhangxubo <zhangxubo1@huawei.com> - 2.1.0-10
- Fix bugs: #I7QJRO
* Tue Jun 6 2023 dillon chen<dillon.chen@gmail.com> - 2.1.0-9
- Fix bugs: #I677QX add lsof
* Mon Apr 10 2023 panchenbo <panchenbo@kylinsec.com.cn> - 2.1.0-8
- add /etc/kylinsec-release support for KylinSec
* Sat Feb 11 2023 zhangxubo <zhangxubo1@huawei.com> - 2.1.0-7
- Fix bugs: #I6ED94
* Wed Mar 30 2022 ouyangminxiang <ouyangminxiang@kylinsec.com.cn> - 2.1.0-6
- add kylinsec platform
* Sat Mar 12 2022 zhangxubo <zhangxubo1@huawei.com> - 2.1.0-5
- Fix bugs: #I4VDYQ #I4V624 #I4UOUU #I4TCDB #I4TCB8
* Thu Jan 27 2022 zhangxubo <zhangxubo1@huawei.com> - 2.1.0-4
- Fix bugs: #I4SDWX
* Sat Jan 22 2022 zhangxubo <zhangxubo1@huawei.com> - 2.1.0-3
- Fix bugs: #I4RVNX
* Mon Dec 13 2021 zhangxubo <zhangxubo1@huawei.com> - 2.1.0-2
- Fix bugs: Mask dependencies acquired during installation
* Wed Dec 1 2021 zhangxubo <zhangxubo1@huawei.com> - 2.1.0-1
- Package init