opengauss-server/opengauss-server.spec
2024-11-11 17:55:36 +08:00

373 lines
12 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 cjson_name cJSON
%define cjson_version 1.7.13
%define zlib_name zlib
%define zlib_version 1.2.11
%define protobuf_name protobuf
%define protobuf_version 3.11.3
%define orc_name orc-rel-release
%define orc_version 1.6.0
%define port 7654
%define datapath /var/lib/opengauss
%define apppath %{_prefix}/local/opengauss
%define vendor_lowercase %{?_vendor:%(echo %{_vendor} | tr '[:upper:]' '[:lower:]')}%{!?_vendor:openeuler}
Name: opengauss
Version: 2.1.0
Release: 12
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: %{cjson_name}-%{cjson_version}.tar.gz
Source2: %{zlib_name}-%{zlib_version}.tar.gz
Source3: %{protobuf_name}-%{protobuf_version}.tar.gz
Source4: %{orc_name}-%{orc_version}.tar.gz
Source5: opengauss-bashprofile
Source6: opengauss.service
Source7: autostart.sh
Patch0: og-edit.patch
Patch1: 0001-cJSON.patch
Patch20: 0001-zlib.patch
Patch21: 0002-zlib.patch
Patch22: 0003-zlib.patch
Patch23: makefile-miniunz.patch
Patch40: 0001-orc.patch
Patch41: 0002-add-kylinsec-platform.patch
Patch42: 0004-add-custom-platform.patch
Patch50: openssl3-adptor.patch
Patch51: compile_2309.patch
Patch3000: 3000-add-sw_64-support.patch
BuildRequires: cmake gcc gcc-c++ openssl-devel python
BuildRequires: cjson lz4-devel protobuf-devel snappy-devel zstd-devel boost-devel
BuildRequires: libcgroup-devel libcurl-devel unixODBC-devel jemalloc-devel krb5-devel
BuildRequires: java-1.8.0-openjdk-devel libedit-devel libaio-devel
BuildRequires: bison flex DCF
%ifnarch aarch64 %{arm}
BuildRequires: numactl-devel
%endif
%ifarch sw_64
BuildRequires: libatomic
%endif
%global _privatelibs lib(cjson|ecpg|z|pg|pq)\\.so*
%global __provides_exclude %{_privatelibs}
%global __requires_exclude %{_privatelibs}
Requires: lz4-devel protobuf-devel snappy-devel zstd-devel boost-devel
Requires: libcgroup-devel libcurl-devel unixODBC-devel jemalloc-devel
Requires: java-1.8.0-openjdk-devel libedit-devel libaio-devel
Requires: DCF lsof
%ifnarch aarch64 %{arm}
Requires: numactl-devel
%endif
%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}
%patch0 -p1
%patch50 -p1
%patch51 -p1
popd
pushd %{cjson_name}-%{cjson_version}
%patch1 -p1
popd
pushd %{zlib_name}-%{zlib_version}
%patch20 -p1
%patch21 -p1
%patch22 -p1
%patch23 -p1
popd
pushd %{orc_name}-%{orc_version}
%patch40 -p1
popd
%patch41 -p1
# custom vendor
%if "%{_vendor}" != "openEuler"
sed -i 's/CUSTOM_VENDOR_PLACEHOLDER_LOWERCASE/%{vendor_lowercase}/g' %{PATCH42}
sed -i 's/CUSTOM_VENDOR_PLACEHOLDER/%{_vendor}/g' %{PATCH42}
%endif
%patch42 -p1
%ifarch sw_64
%patch3000 -p1
%endif
%build
########### build cjson ###########
build_target=$(pwd)/deps_binarylibs
pushd %{cjson_name}-%{cjson_version}
make
make install PREFIX=${build_target}/cjson
popd
########### build zlib ###########
pushd %{zlib_name}-%{zlib_version}
CONFIGURE_EXTRA_FLAG="--64"
%ifarch aarch64
CONFIGURE_EXTRA_FLAG=""
%endif
%ifarch sw_64
CONFIGURE_EXTRA_FLAG=""
%endif
./configure ${CONFIGURE_EXTRA_FLAG} --prefix=${build_target}/zlib
sed -i '21a CFLAGS += -fPIC' Makefile
MAKE_EXTRA_FLAG="-m64"
%ifarch aarch64
MAKE_EXTRA_FLAG=""
%endif
%ifarch sw_64
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 -f Makefile.miniunz %{?_smp_mflags}
rm -rf ${build_target}/zlib/lib/pkgconfig
make install -f Makefile.miniunz DESTDIR=${build_target}/zlib
popd
########### build protobuf ###########
pushd %{protobuf_name}-%{protobuf_version}/cmake
sed -i '18a set(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -fPIE -fPIC -fstack-protector-all -Wstack-protector -s -Wl,-z,relro,-z,now -D_GLIBCXX_USE_CXX11_ABI=0\")' CMakeLists.txt
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${build_target}/protobuf/ -Dprotobuf_BUILD_TESTS=OFF;
make CFLAGS="-fPIE -fPIC" %{?_smp_mflags}
make install
popd
########### build apache-orc ###########
pushd %{orc_name}-%{orc_version}
cp ${build_target}/protobuf ./c++/libs/protobuf -rp
cp ${build_target}/zlib ./c++/libs/zlib -rp
export PATH=${build_target}/protobuf/bin:$PATH
export LD_LIBRARY_PATH=$(pwd)/c++/libs:$LD_LIBRARY_PATH
export ORC_LIBS=$(pwd)/c++/libs
sed -i \
-e "32a set (PROTOBUF_INCLUDE_DIRS \"$ORC_LIBS/protobuf/include\")" \
-e "32a set (PROTOBUF_LIBRARIES \"$ORC_LIBS/protobuf/lib/libprotobuf.a\")" \
-e "32a set (PROTOBUF_EXECUTABLE `which protoc`)" \
-e "32a set (SNAPPY_INCLUDE_DIRS \"/usr/include\")" \
-e "32a set (SNAPPY_LIBRARIES \"/usr/lib64/libsnappy.a\")" \
-e "32a set (ZLIB_INCLUDE_DIRS \"$ORC_LIBS/zlib/include\")" \
-e "32a set (ZLIB_LIBRARIES \"$ORC_LIBS/zlib/lib/libz.a\")" \
-e "32a set (LZ4_INCLUDE_DIRS \"/usr/include\")" \
-e "32a set (LZ4_LIBRARIES \"/usr/lib64/liblz4.a\")" CMakeLists.txt
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=${build_target}/liborc -DBUILD_JAVA=OFF -DBUILD_SHARED_LIBS=OFF
make %{?_smp_mflags}
make install
cp c++/src/orc_proto.pb.h ${build_target}/liborc/include
cp c++/src/Adaptor.hh ${build_target}/liborc/include/orc/
cp ../c++/src/Exceptions.hh ${build_target}/liborc/include/orc/
popd
########### build opengauss ###########
pushd openGauss-server-%{version}
echo "PRODUCT=openGauss" > build/script/gauss.spec
echo "VERSION=2.1.0" >> build/script/gauss.spec
chmod +x ./configure
./configure \
%ifarch sw_64
CC=g++ CFLAGS='-O0' \
%else
CC=g++ CFLAGS='-O2' \
%endif
--prefix=%{apppath} \
--3rd=${build_target} \
--enable-thread-safety \
--with-readline \
--without-zlib \
--without-gssapi \
--without-krb5 \
--enable-lite-mode \
--with-openeuler-os
%make_build %{?_smp_mflags}
popd
%install
pushd openGauss-server-%{version}
%make_install -s %{?_smp_mflags}
mkdir -p %{buildroot}/var/lib/opengauss/data
mkdir -p %{buildroot}/%{apppath}/script
cp build/script/opengauss_config_file_mini %{buildroot}/%{apppath}/share/postgresql/
popd
# opengauss datanode dir.
install -d -m 700 $RPM_BUILD_ROOT%{?_localstatedir}/lib/opengauss/data
# opengauss .bash_profile
install -m 644 %{SOURCE5} $RPM_BUILD_ROOT%{?_localstatedir}/lib/opengauss/.bash_profile
# auto start files
install -m 644 %{SOURCE6} %{buildroot}/%{apppath}/script/opengauss.service
install -m 700 %{SOURCE7} %{buildroot}/%{apppath}/script/autostart.sh
%pre
/usr/sbin/groupadd opengauss >/dev/null 2>&1 || :
/usr/sbin/useradd -M -N -g opengauss -d %{datapath} -s /bin/bash \
-c "openGauss Server" opengauss >/dev/null 2>&1 || :
# for install step
if [ $1 = 1 ]; then
portinfo=$(lsof -i:%{port})
if [ "${portinfo}" != "" ]; then
echo "The port[%{port}] is occupied. Please use command 'lsof -i:%{port} to check it.'"
exit 1
fi
fi
%post
# set opengauss mini config parameters
set_mini_configparam(){
config_mini_file=%{apppath}/share/postgresql/opengauss_config_file_mini
# set guc parameters
echo "port = %{port}" >> ${config_mini_file}
echo "synchronous_commit = off" >> ${config_mini_file}
echo "listen_addresses = '127.0.0.1'" >> ${config_mini_file}
config_sample_file=%{apppath}/share/postgresql/postgresql.conf.sample
if [[ -f $config_mini_file ]]
then
if [[ ! -f "$config_sample_file" ]]
then
echo "postgresql.conf.sample does not exist"
else
while IFS= read -r line; do
SUBSTRING=$(echo $line | cut -d'=' -f 1)"= "
if grep -q "$SUBSTRING" $config_sample_file ; then
sed -i "/$SUBSTRING/c$line" $config_sample_file
else
echo $line >> $config_sample_file
fi
done < $config_mini_file
fi
fi
}
start_opengauss(){
process_id=$(ps -ef | grep /usr/local/opengauss/bin/gaussdb | 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."
return 0
fi
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."
return 0
fi
result=`su - opengauss -c "source /var/lib/opengauss/.bash_profile; gs_initdb -D /var/lib/opengauss/data -U opengauss --nodename=single_node"`
if [ $? -ne 0 ]; then
echo "Init openGauss database failed."
echo $result
else
echo "Init openGauss database success."
result=`su - opengauss -c "source /var/lib/opengauss/.bash_profile; gs_ctl start -D /var/lib/opengauss/data"`
if [ $? -ne 0 ]; then
echo "Start openGauss database failed."
echo $result
else
echo "Start openGauss database success."
fi
fi
}
add_service(){
cp %{apppath}/script/opengauss.service /usr/lib/systemd/system/
systemctl enable opengauss.service
}
# for install step
if [ $1 = 1 ]; then
set_mini_configparam
add_service
start_opengauss
fi
%postun
remove_service(){
servicename=/usr/lib/systemd/system/opengauss.service
if [ -f $servicename ]; then
systemctl disable opengauss.service
rm $servicename
fi
}
clear_database(){
pid=$(ps -ef | grep /usr/local/opengauss/bin/gaussdb | grep -v grep | awk '{print $2}')
if [ "$pid" != "" ]; then
kill -9 $pid
fi
if [ -d /var/lib/opengauss/data ]; then
rm -rf /var/lib/opengauss/data
fi
}
if [ "$1" = "0" ]; then
remove_service
clear_database
fi
%files
%defattr (-,root,root)
%{apppath}
%doc
%{?_localstatedir}/lib/opengauss
%attr(700,opengauss,opengauss) %dir %{?_localstatedir}/lib/opengauss
%attr(700,opengauss,opengauss) %dir %{?_localstatedir}/lib/opengauss/data
%attr(644,opengauss,opengauss) %config(noreplace) %{?_localstatedir}/lib/opengauss/.bash_profile
%changelog
* Mon Nov 11 2024 xiaochn <xiaochuannan@inspur.com> - 2.1.0-12
- fix build error when custom vendor
* 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