From c68bca997ea5d6e5721fad79ccbb0ce7a30b99c2 Mon Sep 17 00:00:00 2001 From: Christopher Troup Date: Wed, 8 Feb 2017 17:51:44 -0500 Subject: [PATCH] Add build/support for CentOS 5 CentOS 5 doesn't have support for epoll_create1(), so I've defined a macro to fall back on epoll_create() in that case. Note that the `1` argument to epoll_create() is actually ignored, and is only there to conform to the requirement that it be larger than 0. --- Makefile | 49 ++++++++++++- .../proxysql/centos5-build/proxysql.spec | 73 +++++++++++++++++++ .../images/proxysql/centos5-build/rpmmacros | 2 + lib/MySQL_Thread.cpp | 8 +- 4 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 docker/images/proxysql/centos5-build/proxysql.spec create mode 100644 docker/images/proxysql/centos5-build/rpmmacros diff --git a/Makefile b/Makefile index abb344090..ae263bffa 100644 --- a/Makefile +++ b/Makefile @@ -54,9 +54,14 @@ clean: cd lib && ${MAKE} clean cd src && ${MAKE} clean -packages: centos6.7 centos7 centos6.7-dbg centos7-dbg ubuntu12 ubuntu14 debian7 debian8 ubuntu12-dbg ubuntu14-dbg debian7-dbg debian8-dbg ubuntu16 ubuntu16-dbg fedora24 fedora24-dbg +packages: centos6.7 centos7 centos6.7-dbg centos7-dbg centos5 centos5-dbg ubuntu12 ubuntu14 debian7 debian8 ubuntu12-dbg ubuntu14-dbg debian7-dbg debian8-dbg ubuntu16 ubuntu16-dbg fedora24 fedora24-dbg .PHONY: packages +centos5: binaries/proxysql-${CURVER}-1-centos5.x86_64.rpm +.PHONY: centos5 + +centos5-dbg: binaries/proxysql-${CURVER}-1-centos5.x86_64.rpm +.PHONY: centos5-dbg centos6.7: binaries/proxysql-${CURVER}-1-centos67.x86_64.rpm .PHONY: centos6.7 @@ -107,6 +112,48 @@ debian8-dbg: binaries/proxysql_${CURVER}-dbg-debian8_amd64.deb .PHONY: debian8-dbg +binaries/proxysql-${CURVER}-1-centos5.x86_64.rpm: + docker stop centos5_build || true + docker rm centos5_build || true + docker create --name centos5_build renecannao/proxysql:build-centos5 bash -c "while : ; do sleep 10 ; done" + docker start centos5_build + docker exec centos5_build bash -c "cd /opt; git clone -b v${CURVER} https://github.com/sysown/proxysql.git proxysql" + docker exec centos5_build bash -c "cd /opt/proxysql; ${MAKE} clean && ${MAKE} ${MAKEOPT} build_deps && ${MAKE} ${MAKEOPT}" + docker exec -it centos5_build bash -c "cd /opt/proxysql ; mkdir -p proxysql/usr/bin; mkdir -p proxysql/etc; cp src/proxysql proxysql/usr/bin/; cp -a etc proxysql ; mkdir -p proxysql/usr/share/proxysql/tools ; cp -a tools/proxysql_galera_checker.sh tools/proxysql_galera_writer.pl proxysql/usr/share/proxysql/tools ; mv proxysql proxysql-${CURVER} ; tar czvf proxysql-${CURVER}.tar.gz proxysql-${CURVER}" + docker exec -it centos5_build bash -c "mkdir -p /root/rpmbuild/{RPMS,SRPMS,BUILD,SOURCES,SPECS,tmp}" + docker cp docker/images/proxysql/centos5-build/rpmmacros centos5_build:/root/.rpmmacros + docker cp docker/images/proxysql/centos5-build/proxysql.spec centos5_build:/root/rpmbuild/SPECS/proxysql.spec + sleep 2 + docker exec -it centos5_build bash -c "cp /opt/proxysql/proxysql-${CURVER}.tar.gz /root/rpmbuild/SOURCES" + docker exec -it centos5_build bash -c "cd /root/rpmbuild; rpmbuild -ba SPECS/proxysql.spec" + sleep 2 + docker exec -it centos5_build bash -c "cp /root/rpmbuild/RPMS/x86_64/proxysql-${CURVER}-1.x86_64.rpm /root/rpm" + sleep 2 + docker cp centos5_build:/root/rpmbuild/RPMS/x86_64/proxysql-${CURVER}-1.x86_64.rpm ./binaries/proxysql-${CURVER}-1-centos5.x86_64.rpm + docker stop centos5_build + docker rm centos5_build + +binaries/proxysql-${CURVER}-1-dbg-centos5.x86_64.rpm: + docker stop centos5_build || true + docker rm centos5_build || true + docker create --name centos5_build renecannao/proxysql:build-centos5 bash -c "while : ; do sleep 10 ; done" + docker start centos5_build + docker exec centos5_build bash -c "cd /opt; git clone -b v${CURVER} https://github.com/sysown/proxysql.git proxysql" + docker exec centos5_build bash -c "cd /opt/proxysql; ${MAKE} clean && ${MAKE} ${MAKEOPT} build_deps && ${MAKE} ${MAKEOPT} debug" + docker exec -it centos5_build bash -c "cd /opt/proxysql ; mkdir -p proxysql/usr/bin; mkdir -p proxysql/etc; cp src/proxysql proxysql/usr/bin/; cp -a etc proxysql ; mkdir -p proxysql/usr/share/proxysql/tools ; cp -a tools/proxysql_galera_checker.sh tools/proxysql_galera_writer.pl proxysql/usr/share/proxysql/tools ; mv proxysql proxysql-${CURVER} ; tar czvf proxysql-${CURVER}.tar.gz proxysql-${CURVER}" + docker exec -it centos5_build bash -c "mkdir -p /root/rpmbuild/{RPMS,SRPMS,BUILD,SOURCES,SPECS,tmp}" + docker cp docker/images/proxysql/centos5-build/rpmmacros centos5_build:/root/.rpmmacros + docker cp docker/images/proxysql/centos5-build/proxysql.spec centos5_build:/root/rpmbuild/SPECS/proxysql.spec + sleep 2 + docker exec -it centos5_build bash -c "cp /opt/proxysql/proxysql-${CURVER}.tar.gz /root/rpmbuild/SOURCES" + docker exec -it centos5_build bash -c "cd /root/rpmbuild; rpmbuild -ba SPECS/proxysql.spec" + sleep 2 + docker exec -it centos5_build bash -c "cp /root/rpmbuild/RPMS/x86_64/proxysql-${CURVER}-1.x86_64.rpm /root/rpm" + sleep 2 + docker cp centos5_build:/root/rpmbuild/RPMS/x86_64/proxysql-${CURVER}-1.x86_64.rpm ./binaries/proxysql-${CURVER}-1-dbg-centos5.x86_64.rpm + docker stop centos5_build + docker rm centos5_build + binaries/proxysql-${CURVER}-1-centos67.x86_64.rpm: docker stop centos67_build || true docker rm centos67_build || true diff --git a/docker/images/proxysql/centos5-build/proxysql.spec b/docker/images/proxysql/centos5-build/proxysql.spec new file mode 100644 index 000000000..0ca966d7e --- /dev/null +++ b/docker/images/proxysql/centos5-build/proxysql.spec @@ -0,0 +1,73 @@ +# Don't try fancy stuff like debuginfo, which is useless on binary-only +# packages. Don't strip binary too +# Be sure buildpolicy set to do nothing +%define __spec_install_post %{nil} +%define debug_package %{nil} +%define __os_install_post %{_dbpath}/brp-compress + +Summary: A high-performance MySQL proxy +Name: proxysql +Version: 1.3.0h +Release: 1 +License: GPL+ +Group: Development/Tools +SOURCE0 : %{name}-%{version}.tar.gz +URL: http://www.proxysql.com/ + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root + +%description +%{summary} + +%prep +%setup -q + +%build +# Empty section. + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot} + +# in builddir +cp -a * %{buildroot} + +%clean +rm -rf %{buildroot} + +%post +mkdir /var/run/%{name} +chkconfig --add %{name} + +%postun +rm -rf /var/run/%{name} +chkconfig --del %{name} + +%files +%defattr(-,root,root,-) +%config(noreplace) %{_sysconfdir}/%{name}.cnf +%{_bindir}/* +%{_sysconfdir}/init.d/%{name} +/usr/share/proxysql/tools/proxysql_galera_checker.sh +/usr/share/proxysql/tools/proxysql_galera_writer.pl + +%changelog +* Wed Oct 19 2016 Rene Cannao 1.3.0 +- experimental support for Prepared Statements +- enhanced scalability +* Thu Sep 29 2016 Rene Cannao 1.2.4 +- Forth stable release of 1.2 +* Tue Sep 20 2016 Rene Cannao 1.2.3 +- Third stable release of 1.2 +* Fri Sep 2 2016 Rene Cannao 1.2.2 +- Second stable release of 1.2 +* Tue Aug 2 2016 Rene Cannao 1.2.1 +- First stable release of 1.2 +* Mon Mar 14 2016 Rene Cannao 1.2.0 +- First testing release of 1.2 +* Sat Mar 11 2016 Rene Cannao 1.1.2 +- Upgraded to release 1.1.2 +* Sat Oct 31 2015 Rene Cannao 1.0.1 +- Compiles 1.0.1 +* Wed Sep 9 2015 Andrei Ismail 0.2 +- Added support for automatic packaging on Ubuntu 14.04 and CentOS 7. diff --git a/docker/images/proxysql/centos5-build/rpmmacros b/docker/images/proxysql/centos5-build/rpmmacros new file mode 100644 index 000000000..a1d0f32f0 --- /dev/null +++ b/docker/images/proxysql/centos5-build/rpmmacros @@ -0,0 +1,2 @@ +%_topdir %(echo $HOME)/rpmbuild +%_tmppath %{_topdir}/tmp \ No newline at end of file diff --git a/lib/MySQL_Thread.cpp b/lib/MySQL_Thread.cpp index 5c5c64fc3..e60fce4f8 100644 --- a/lib/MySQL_Thread.cpp +++ b/lib/MySQL_Thread.cpp @@ -8,6 +8,12 @@ MySQL_Session *sess_stopat; #endif +#ifdef epoll_create1 + #define EPOLL_CREATE epoll_create1(0) +#else + #define EPOLL_CREATE epoll_create(1) +#endif + #define PROXYSQL_LISTEN_LEN 1024 #define MIN_THREADS_FOR_MAINTENANCE 8 @@ -1930,7 +1936,7 @@ void MySQL_Thread::run() { if (idle_maintenance_thread) { // we check if it is the first time we are called if (efd==-1) { - efd = epoll_create1(0); + efd = EPOLL_CREATE; int fd=pipefd[0]; struct epoll_event event; memset(&event,0,sizeof(event)); // let's make valgrind happy