327 lines
10 KiB
RPMSpec
Executable File
327 lines
10 KiB
RPMSpec
Executable File
%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
|
|
|
|
Name: opengauss
|
|
Version: 2.1.0
|
|
Release: 5
|
|
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
|
|
Patch50: openssl3-adptor.patch
|
|
Patch51: compile_2309.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
|
|
|
|
%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
|
|
%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
|
|
|
|
%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
|
|
./configure ${CONFIGURE_EXTRA_FLAG} --prefix=${build_target}/zlib
|
|
sed -i '21a CFLAGS += -fPIC' Makefile
|
|
MAKE_EXTRA_FLAG="-m64"
|
|
%ifarch aarch64
|
|
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}
|
|
chmod +x ./configure
|
|
./configure \
|
|
CC=g++ CFLAGS='-O2' \
|
|
--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 Aug 14 2023 zhangxubo <zhangxubo1@huawei.com> - 2.1.0-7
|
|
- Fix bugs: #I7QJRO
|
|
|
|
* Sat Feb 11 2023 zhangxubo <zhangxubo1@huawei.com> - 2.1.0-6
|
|
- Fix bugs: #I6ED94
|
|
* 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
|