diff --git a/galera-3-25.3.26.tar.gz b/galera-3-25.3.26.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c37d1883fb08e53c89ba87ceede2e885c7aff099 Binary files /dev/null and b/galera-3-25.3.26.tar.gz differ diff --git a/galera-python3.patch b/galera-python3.patch new file mode 100644 index 0000000000000000000000000000000000000000..59bb4f150326f0cd23a43a434025832d4ff28e60 --- /dev/null +++ b/galera-python3.patch @@ -0,0 +1,17 @@ +Upstream PR: +https://github.com/codership/galera/pull/512 + +diff -up galera-25.3.23/SConstruct.bak galera-25.3.23/SConstruct +--- galera-25.3.23/SConstruct.bak 2018-07-13 15:14:49.059835554 +0200 ++++ galera-25.3.23/SConstruct 2018-07-13 15:19:07.717967794 +0200 +@@ -194,8 +194,8 @@ if link != 'default': + env.Replace(LINK = link) + + # Get compiler name/version, CXX may be set to "c++" which may be clang or gcc +-cc_version = str(read_first_line(env['CC'].split() + ['--version'])) +-cxx_version = str(read_first_line(env['CXX'].split() + ['--version'])) ++cc_version = str(read_first_line(env['CC'].split() + ['--version']).decode()) ++cxx_version = str(read_first_line(env['CXX'].split() + ['--version']).decode()) + + print('Using C compiler executable: ' + env['CC']) + print('C compiler version is: ' + cc_version) diff --git a/galera.spec b/galera.spec new file mode 100644 index 0000000000000000000000000000000000000000..8d047975b505666e12fe48bbba4eaee6db41bcb5 --- /dev/null +++ b/galera.spec @@ -0,0 +1,73 @@ +%global galeradoc %{buildroot}%{_docdir}/galera +Name: galera +Version: 25.3.26 +Release: 2 +Summary: Synchronous multi-master replication library +License: GPLv2 +URL: http://galeracluster.com/ +Source0: http://releases.galeracluster.com/%{name}-3.26/source/%{name}-3-%{version}.tar.gz +Source1: garbd.service +#systemd startup script +Source2: garbd-wrapper + +#Use decode to make the SConstruct Python3 compatible +#https://github.com/codership/galera/commit/71685db8da72b81a0950c19269281d10ae179706.patch +Patch0000: galera-python3.patch + +BuildRequires: asio-devel boost-devel check-devel gcc-c++ openssl-devel python3-scons systemd +Requires: nmap-ncat + +Requires(post,preun,postun): systemd + +%description +This is Galera replication - Codership's implementation of the write set replication (wsrep) interface. + +%prep +%autosetup -n %{name}-3-%{version} -p1 + +%build +%{set_build_flags} + +CPPFLAGS=`echo $CPPFLAGS| sed -e "s|-Wp,-D_GLIBCXX_ASSERTIONS||g" ` +CFLAGS=`echo $CFLAGS| sed -e "s|-Wp,-D_GLIBCXX_ASSERTIONS||g" ` +CXXFLAGS=`echo $CXXFLAGS| sed -e "s|-Wp,-D_GLIBCXX_ASSERTIONS||g" ` +export CPPFLAGS CFLAGS CXXFLAGS + +scons-3 %{?_smp_mflags} strict_build_flags=1 + +%install +install -D -m 644 COPYING %{galeradoc}/COPYING +install -D -m 644 asio/LICENSE_1_0.txt %{galeradoc}/LICENSE.asio +install -D -m 644 chromium/LICENSE %{galeradoc}/LICENSE.chromium +install -D -m 644 www.evanjones.ca/LICENSE %{galeradoc}/LICENSE.crc32 +install -D -m 644 scripts/packages/README %{galeradoc}/README +install -D -m 644 scripts/packages/README-MySQL %{galeradoc}/README-MySQL +install -D -m 644 garb/files/garb.cnf %{buildroot}%{_sysconfdir}/sysconfig/garb +install -D -m 644 %{SOURCE1} %{buildroot}%{_unitdir}/garbd.service +install -D -m 755 %{SOURCE2} %{buildroot}%{_sbindir}/garbd-wrapper +install -D -m 755 garb/garbd %{buildroot}%{_sbindir}/garbd +install -D -m 755 libgalera_smm.so %{buildroot}%{_libdir}/galera/libgalera_smm.so + +%post +/sbin/ldconfig +%systemd_post garbd.service + +%preun +%systemd_preun garbd.service + +%postun +/sbin/ldconfig +%systemd_postun_with_restart garbd.service + +%files +%config(noreplace,missingok) %{_sysconfdir}/sysconfig/garb +%dir %{_docdir}/galera +%doc %{_docdir}/galera/* +%dir %{_libdir}/galera +%{_libdir}/galera/libgalera_smm.so +%{_sbindir}/garbd* +%{_unitdir}/garbd.service + +%changelog +* Thu Mar 4 2020 zhouyihang - 25.3.26-2 +- Pakcage init diff --git a/garbd-wrapper b/garbd-wrapper new file mode 100755 index 0000000000000000000000000000000000000000..ede76f7a9a296e0d5f068794750745cea36ba5a2 --- /dev/null +++ b/garbd-wrapper @@ -0,0 +1,38 @@ +#!/usr/bin/sh +# This script is simple wrapper around garbd, that parses startup configuration. +# Its main purpose is to bridge the differences between initscript and systemd unit file. + +CONFIG_FILE=/etc/sysconfig/garb + +source $CONFIG_FILE + +# Check that node addresses and group name are configured +if [ -z "$GALERA_NODES" ]; then + echo "List of GALERA_NODES is not configured" >&2 + exit 1 +fi +if [ -z "$GALERA_GROUP" ]; then + echo "GALERA_GROUP name is not configured" >&2 + exit 1 +fi + +GALERA_PORT=${GALERA_PORT:-4567} + +# Find a working node +for ADDRESS in ${GALERA_NODES} 0; do + HOST=$(echo $ADDRESS | cut -d \: -f 1) + PORT=$(echo $ADDRESS | cut -s -d \: -f 2) + PORT=${PORT:-$GALERA_PORT} + ncat --send-only --recv-only $HOST $PORT >/dev/null && break +done +if [ ${ADDRESS} == "0" ]; then + echo "None of the nodes in GALERA_NODES is accessible" >&2 + exit 1 +fi + +OPTIONS="-a gcomm://$ADDRESS" +[ -n "$GALERA_GROUP" ] && OPTIONS="$OPTIONS -g $GALERA_GROUP" +[ -n "$GALERA_OPTIONS" ] && OPTIONS="$OPTIONS -o $GALERA_OPTIONS" +[ -n "$LOG_FILE" ] && OPTIONS="$OPTIONS -l $LOG_FILE" + +exec /usr/sbin/garbd $OPTIONS diff --git a/garbd.service b/garbd.service new file mode 100644 index 0000000000000000000000000000000000000000..eebb16a1e48da215e01fff902be6aecb2e5641b6 --- /dev/null +++ b/garbd.service @@ -0,0 +1,10 @@ +[Unit] +Description=Galera Arbitrator(garbd) Daemon +Documentation=https://galeracluster.com/library/documentation/arbitrator.html + +[Service] +ExecStart=/usr/sbin/garbd-wrapper +ExecReload=/bin/kill -HUP $MAINPID + +[Install] +WantedBy=multi-user.target