diff --git a/Makefile b/Makefile index f29a21130..047e8dbb8 100644 --- a/Makefile +++ b/Makefile @@ -187,7 +187,7 @@ clean: packages: amd64-packages arm64-packages .PHONY: packages -amd64-packages: centos6 centos6-dbg centos6.7 centos6.7-dbg centos7 centos7-dbg centos8 centos8-clang centos8-dbg ubuntu14 ubuntu14-dbg ubuntu16 ubuntu16-dbg ubuntu18 ubuntu18-dbg ubuntu20 ubuntu20-clang ubuntu20-dbg debian8 debian8-dbg debian9 debian9-dbg debian10 debian10-dbg debian11 debian11-clang debian11-dbg fedora24 fedora24-dbg fedora27 fedora27-dbg fedora28 fedora28-dbg fedora33 fedora33-dbg fedora34 fedora34-clang fedora34-dbg +amd64-packages: centos6 centos6-dbg centos6.7 centos6.7-dbg centos7 centos7-dbg centos8 centos8-clang centos8-dbg ubuntu14 ubuntu14-dbg ubuntu16 ubuntu16-dbg ubuntu18 ubuntu18-dbg ubuntu20 ubuntu20-clang ubuntu20-dbg debian8 debian8-dbg debian9 debian9-dbg debian10 debian10-dbg debian11 debian11-clang debian11-dbg fedora24 fedora24-dbg fedora27 fedora27-dbg fedora28 fedora28-dbg fedora33 fedora33-dbg fedora34 fedora34-clang fedora34-dbg opensuse15 opensuse15-clang opensuse15-dbg .PHONY: amd64-packages arm64-packages: centos7-arm64 centos8-arm64 debian9-arm64 debian10-arm64 debian11-arm64 ubuntu18-arm64 ubuntu20-arm64 fedora32-arm64 fedora33-arm64 @@ -374,6 +374,16 @@ debian11-dbg: binaries/proxysql_${CURVER}-dbg-debian11_amd64.deb .PHONY: debian11-dbg +opensuse15: binaries/proxysql-${CURVER}-1-opensuse15.x86_64.rpm +.PHONY: opensuse15 + +opensuse15-clang: binaries/proxysql-${CURVER}-1-opensuse15-clang.x86_64.rpm +.PHONY: opensuse15-clang + +opensuse15-dbg: binaries/proxysql-${CURVER}-1-opensuse15-dbg.x86_64.rpm +.PHONY: opensuse15-dbg + + binaries/proxysql-${CURVER}-1-centos5.x86_64.rpm: docker-compose up centos5_build @@ -615,6 +625,19 @@ binaries/proxysql_${CURVER}-dbg-debian11_amd64.deb: docker-compose rm -f +binaries/proxysql-${CURVER}-1-opensuse15.x86_64.rpm: + docker-compose up opensuse15_build + docker-compose rm -f + +binaries/proxysql-${CURVER}-1-opensuse15-clang.x86_64.rpm: + docker-compose up opensuse15_clang_build + docker-compose rm -f + +binaries/proxysql-${CURVER}-1-opensuse15-dbg.x86_64.rpm: + docker-compose up opensuse15_dbg_build + docker-compose rm -f + + .PHONY: cleanall cleanall: diff --git a/deps/Makefile b/deps/Makefile index 6908b3569..2b441693d 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -45,6 +45,7 @@ libinjection/libinjection/src/libinjection.a: ifneq ($(CENTOSVER),6) cd libinjection/libinjection && patch -p1 < ../update-build-py3.diff endif + sed -i 's/CC=/CC?=/' libinjection/libinjection/src/Makefile cd libinjection/libinjection && CC=${CC} CXX=${CXX} ${MAKE} libinjection: libinjection/libinjection/src/libinjection.a diff --git a/docker-compose.yml b/docker-compose.yml index 3c53e1a20..b39fa73f9 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -141,8 +141,6 @@ services: - MAKE - MAKEOPT - CURVER - - CC=clang - - CXX=clang++ - PKG_RELEASE=centos8-clang - PROXYSQL_BUILD_TYPE=clickhouse - PROXYSQL_BUILD_ARCH=x86_64 @@ -367,8 +365,6 @@ services: - MAKE - MAKEOPT - CURVER - - CC=clang - - CXX=clang++ - PKG_RELEASE=fedora34-clang - PROXYSQL_BUILD_TYPE=clickhouse - PROXYSQL_BUILD_ARCH=x86_64 @@ -576,8 +572,6 @@ services: - MAKE - MAKEOPT - CURVER - - CC=clang - - CXX=clang++ - PKG_RELEASE=debian11-clang - PROXYSQL_BUILD_TYPE=clickhouse - PROXYSQL_BUILD_ARCH=amd64 @@ -753,8 +747,6 @@ services: - MAKE - MAKEOPT - CURVER - - CC=clang - - CXX=clang++ - PKG_RELEASE=ubuntu20-clang - PROXYSQL_BUILD_TYPE=clickhouse - PROXYSQL_BUILD_ARCH=amd64 @@ -792,3 +784,51 @@ services: - PROXYSQL_BUILD_ARCH=amd64 command: - /opt/entrypoint/entrypoint.bash + + opensuse15_build: + image: proxysql/packaging:build-opensuse15 + volumes: + - ./docker/images/proxysql/suse-compliant/rpmmacros/:/root/ + - ./docker/images/proxysql/suse-compliant/entrypoint/:/opt/entrypoint/ + - ./:/opt/proxysql/ + environment: + - MAKE + - MAKEOPT + - CURVER + - PKG_RELEASE=opensuse15 + - PROXYSQL_BUILD_TYPE=clickhouse + - PROXYSQL_BUILD_ARCH=x86_64 + command: + - /opt/entrypoint/entrypoint.bash + + opensuse15_clang_build: + image: proxysql/packaging:build-clang-opensuse15 + volumes: + - ./docker/images/proxysql/suse-compliant/rpmmacros/:/root/ + - ./docker/images/proxysql/suse-compliant/entrypoint/:/opt/entrypoint/ + - ./:/opt/proxysql/ + environment: + - MAKE + - MAKEOPT + - CURVER + - PKG_RELEASE=opensuse15-clang + - PROXYSQL_BUILD_TYPE=clickhouse + - PROXYSQL_BUILD_ARCH=x86_64 + command: + - /opt/entrypoint/entrypoint.bash + + opensuse15_dbg_build: + image: proxysql/packaging:build-opensuse15 + volumes: + - ./docker/images/proxysql/suse-compliant/rpmmacros/:/root/ + - ./docker/images/proxysql/suse-compliant/entrypoint/:/opt/entrypoint/ + - ./:/opt/proxysql/ + environment: + - MAKE + - MAKEOPT + - CURVER + - PKG_RELEASE=dbg-opensuse15 + - PROXYSQL_BUILD_TYPE=debug + - PROXYSQL_BUILD_ARCH=x86_64 + command: + - /opt/entrypoint/entrypoint.bash diff --git a/docker/images/proxysql/suse-compliant/entrypoint/entrypoint.bash b/docker/images/proxysql/suse-compliant/entrypoint/entrypoint.bash new file mode 100755 index 000000000..83dd132ef --- /dev/null +++ b/docker/images/proxysql/suse-compliant/entrypoint/entrypoint.bash @@ -0,0 +1,61 @@ +#!/bin/bash +set -eu + +echo "==> Build environment:" +env + +ARCH=$PROXYSQL_BUILD_ARCH +echo "==> $ARCH architecture detected for package" + +echo -e "==> C compiler: ${CC} -> $(readlink -e $(which ${CC}))\n$(${CC} --version)" +echo -e "==> C++ compiler: ${CXX} -> $(readlink -e $(which ${CXX}))\n$(${CXX} --version)" +#echo -e "==> linker version:\n$ ${LD} -> $(readlink -e $(which ${LD}))\n$(${LD} --version)" + +echo "==> Cleaning" +# Delete package if exists +rm -f /opt/proxysql/binaries/proxysql-${CURVER}-1-${PKG_RELEASE}.$ARCH.rpm || true +# Cleanup relic directories from a previously failed build +rm -fr /root/.pki /root/rpmbuild/{BUILDROOT,RPMS,SRPMS,BUILD,SOURCES,tmp} /opt/proxysql/proxysql /opt/proxysql/proxysql-${CURVER} || true + +# Clean and build dependancies and source +echo "==> Building" +cd /opt/proxysql +if [[ -z ${PROXYSQL_BUILD_TYPE:-} ]] ; then + deps_target="build_deps" + build_target="" +else + deps_target="build_deps_$PROXYSQL_BUILD_TYPE" + build_target="$PROXYSQL_BUILD_TYPE" +fi +${MAKE} cleanbuild +${MAKE} ${MAKEOPT} "${deps_target}" + +if [[ -z ${build_target} ]] ; then + ${MAKE} ${MAKEOPT} +else + ${MAKE} ${MAKEOPT} "${build_target}" +fi +touch /opt/proxysql/src/proxysql + +# Prepare package files and build RPM +echo "==> Packaging" +# prepare build root +cd /opt/proxysql +rm -fr /root/.pki /root/rpmbuild/{BUILDROOT,RPMS,SRPMS,BUILD,SOURCES,tmp} ./proxysql-${CURVER} +mkdir -p /root/rpmbuild/{RPMS,SRPMS,BUILD,SOURCES,SPECS,tmp} +mkdir -p proxysql-${CURVER}/usr/bin proxysql-${CURVER}/etc proxysql-${CURVER}/usr/share/proxysql/tools +# prepare files +cp src/proxysql proxysql-${CURVER}/usr/bin/ +cp -a systemd proxysql-${CURVER}/etc/ +cp -a etc/proxysql.cnf proxysql-${CURVER}/etc/ +cp -a etc/logrotate.d proxysql-${CURVER}/etc/ +cp -a tools/proxysql_galera_checker.sh tools/proxysql_galera_writer.pl proxysql-${CURVER}/usr/share/proxysql/tools +tar czvf "proxysql-${CURVER}.tar.gz" proxysql-${CURVER} +mv "/opt/proxysql/proxysql-${CURVER}.tar.gz" /root/rpmbuild/SOURCES +# build package +#cd /root/rpmbuild && rpmbuild -bb SPECS/proxysql.spec --define "version ${CURVER}" +rpmbuild -bb --define "version ${CURVER}" /root/rpmbuild/SPECS/proxysql.spec +mv /root/rpmbuild/RPMS/${ARCH}/proxysql-${CURVER}-1.${ARCH}.rpm .//binaries/proxysql-${CURVER}-1-${PKG_RELEASE}.${ARCH}.rpm +cp ./src/proxysql.sha1 ./binaries/proxysql-${CURVER}-1-${PKG_RELEASE}.${ARCH}.id-hash +# cleanup +rm -fr /root/.pki /root/rpmbuild/{BUILDROOT,RPMS,SRPMS,BUILD,SOURCES,tmp} ./proxysql-${CURVER} diff --git a/docker/images/proxysql/suse-compliant/rpmmacros/.rpmmacros b/docker/images/proxysql/suse-compliant/rpmmacros/.rpmmacros new file mode 100644 index 000000000..a1d0f32f0 --- /dev/null +++ b/docker/images/proxysql/suse-compliant/rpmmacros/.rpmmacros @@ -0,0 +1,2 @@ +%_topdir %(echo $HOME)/rpmbuild +%_tmppath %{_topdir}/tmp \ No newline at end of file diff --git a/docker/images/proxysql/suse-compliant/rpmmacros/rpmbuild/SPECS/proxysql.spec b/docker/images/proxysql/suse-compliant/rpmmacros/rpmbuild/SPECS/proxysql.spec new file mode 100644 index 000000000..c8608cae1 --- /dev/null +++ b/docker/images/proxysql/suse-compliant/rpmmacros/rpmbuild/SPECS/proxysql.spec @@ -0,0 +1,91 @@ +%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: %{version} +Release: 1 +License: GPL+ +Group: Development/Tools +SOURCE0 : %{name}-%{version}.tar.gz +URL: https://proxysql.com/ +Requires: gnutls +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root + +%description +%{summary} + +%prep +%setup -q + +%pre +# Cleanup artifacts +if [ -f /var/lib/%{name}/PROXYSQL_UPGRADE ]; then + rm -fr /var/lib/%{name}/PROXYSQL_UPGRADE +fi + +%build +# Packages are pre-built, nothing to do + +%install +# Clean buildroot and install files +/bin/rm -rf %{buildroot} +/bin/mkdir -p %{buildroot} +/bin/cp -a * %{buildroot} + +%clean +/bin/rm -rf %{buildroot} + +%post +# Create relevant user, directories and configuration files +if [ ! -d /var/run/%{name} ]; then /bin/mkdir /var/run/%{name} ; fi +if [ ! -d /var/lib/%{name} ]; then /bin/mkdir /var/lib/%{name} ; fi +if ! id -u %{name} > /dev/null 2>&1; then useradd -r -U -s /bin/false -d /var/lib/%{name} -c "ProxySQL Server" %{name}; fi +/bin/chown -R %{name}: /var/lib/%{name} /var/run/%{name} +/bin/chown root:%{name} /etc/%{name}.cnf +/bin/chmod 640 /etc/%{name}.cnf +# Configure systemd appropriately. +/bin/systemctl daemon-reload +/bin/systemctl enable %{name}.service +# Notify that a package update is in progress in order to start service. +if [ $1 -eq 2 ]; then /bin/touch /var/lib/%{name}/PROXYSQL_UPGRADE ; fi + +%preun +# When uninstalling always try stop the service, ignore failures +/bin/systemctl stop %{name} || true + +%postun +if [ $1 -eq 0 ]; then + # This is a pure uninstall, systemd unit file removed + # only daemon-reload is needed. + /bin/systemctl daemon-reload +else + # This is an upgrade, ProxySQL should be started. This + # logic works for packages newer than 2.0.7 and ensures + # a faster restart time. + /bin/systemctl start %{name}.service + /bin/rm -fr /var/lib/%{name}/PROXYSQL_UPGRADE +fi + +%posttrans +if [ -f /var/lib/%{name}/PROXYSQL_UPGRADE ]; then + # This is a safeguard to start the service after an update + # which supports legacy "preun" / "postun" logic and will + # only execute for packages before 2.0.7. + /bin/systemctl start %{name}.service + /bin/rm -fr /var/lib/%{name}/PROXYSQL_UPGRADE +fi + +%files +%defattr(-,root,root,-) +%config(noreplace) %{_sysconfdir}/%{name}.cnf +%attr(640,root,%{name}) %{_sysconfdir}/%{name}.cnf +%config(noreplace) %attr(640,root,%{name}) %{_sysconfdir}/logrotate.d/%{name} +%{_bindir}/* +%{_sysconfdir}/systemd/system/%{name}.service +%{_sysconfdir}/systemd/system/%{name}-initial.service +/usr/share/proxysql/tools/proxysql_galera_checker.sh +/usr/share/proxysql/tools/proxysql_galera_writer.pl + +%changelog