diff --git a/percona-packaging/debian/changelog b/percona-packaging/debian/changelog new file mode 100644 index 0000000..0fba357 --- /dev/null +++ b/percona-packaging/debian/changelog @@ -0,0 +1,5 @@ +percona-pg-stat-monitor (1.0.0-1) unstable; urgency=medium + + * Initial build. + + -- Oleksandr Miroshnychenko Thu, 19 Dec 2019 19:20:11 +0100 diff --git a/percona-packaging/debian/compat b/percona-packaging/debian/compat new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/percona-packaging/debian/compat @@ -0,0 +1 @@ +9 diff --git a/percona-packaging/debian/control b/percona-packaging/debian/control new file mode 100644 index 0000000..92b93f4 --- /dev/null +++ b/percona-packaging/debian/control @@ -0,0 +1,21 @@ +Source: percona-pg-stat-monitor +Section: database +Priority: optional +Maintainer: Percona Development Team +Build-Depends: + debhelper (>= 9), + percona-postgresql-server-dev-all (>= 153~), + +Package: percona-pg-stat-monitor +Architecture: any +Depends: + percona-postgresql-11, + ${misc:Depends}, + ${shlibs:Depends}, +Description: The pg_stat_monitor is statistics collector tool + based on PostgreSQL's contrib module "pg_stat_statements". + . + pg_stat_monitor is developed on the basis of pg_stat_statments + as more advanced replacement for pg_stat_statment. + It provides all the features of pg_stat_statment plus its own feature set. + diff --git a/percona-packaging/debian/control.in b/percona-packaging/debian/control.in new file mode 100644 index 0000000..d7390cc --- /dev/null +++ b/percona-packaging/debian/control.in @@ -0,0 +1,20 @@ +Source: percona-pg-stat-monitor +Section: database +Priority: optional +Maintainer: Percona Development Team +Build-Depends: + debhelper (>= 9), + percona-postgresql-server-dev-all (>= 153~), + +Package: percona-pg-stat-monitor +Architecture: any +Depends: + percona-postgresql-11, + ${misc:Depends}, + ${shlibs:Depends}, +Description: The pg_stat_monitor is statistics collector tool + based on PostgreSQL's contrib module "pg_stat_statements". + . + pg_stat_monitor is developed on the basis of pg_stat_statments + as more advanced replacement for pg_stat_statment. + It provides all the features of pg_stat_statment plus its own feature set. diff --git a/percona-packaging/debian/copyright b/percona-packaging/debian/copyright new file mode 100644 index 0000000..ecda62a --- /dev/null +++ b/percona-packaging/debian/copyright @@ -0,0 +1,2 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ + diff --git a/percona-packaging/debian/pgversions b/percona-packaging/debian/pgversions new file mode 100644 index 0000000..8f5523f --- /dev/null +++ b/percona-packaging/debian/pgversions @@ -0,0 +1 @@ +9.3+ diff --git a/percona-packaging/debian/rules b/percona-packaging/debian/rules new file mode 100755 index 0000000..2ae2c24 --- /dev/null +++ b/percona-packaging/debian/rules @@ -0,0 +1,29 @@ +#!/usr/bin/make -f + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# Using pg_buildext +include /usr/share/postgresql-common/pgxs_debian_control.mk + +export USE_PGXS=1 + +%: + dh $@ + +override_dh_auto_build: + +pg_buildext build build-%v + +override_dh_auto_test: + # nothing to do here + +override_dh_auto_install: + +pg_buildext install build-%v percona-pg-stat-monitor + +override_dh_installdocs: + dh_installdocs --all README.* + +override_dh_auto_clean: + +pg_buildext clean build-%v + rm -rf results regression.* + mkdir results diff --git a/percona-packaging/debian/source/format b/percona-packaging/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/percona-packaging/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/percona-packaging/debian/source/lintian-overrides b/percona-packaging/debian/source/lintian-overrides new file mode 100644 index 0000000..4076145 --- /dev/null +++ b/percona-packaging/debian/source/lintian-overrides @@ -0,0 +1,3 @@ +# don't bug people uploading from @work +source: changelog-should-mention-nmu +source: source-nmu-has-incorrect-version-number diff --git a/percona-packaging/rpm/pg-stat-monitor.spec b/percona-packaging/rpm/pg-stat-monitor.spec new file mode 100644 index 0000000..1b93e33 --- /dev/null +++ b/percona-packaging/rpm/pg-stat-monitor.spec @@ -0,0 +1,65 @@ +%global sname percona-pg-stat-monitor +%global pginstdir /usr/pgsql-11/ +%global pgstatmonmajver 1 +%global pgstatmonmidver 0 +%global pgstatmonminver 0 + +Summary: Statistics collector for PostgreSQL +Name: %{sname} +Version: %{pgstatmonmajver}.%{pgstatmonmidver}.%{pgstatmonminver} +Release: 1%{?dist} +License: Apache 2.0 +Source0: %{sname}-%{pgstatmonmajver}.%{pgstatmonmidver}.%{pgstatmonminver}.tar.gz +URL: https://github.com/Percona-Lab/pg_stat_monitor +BuildRequires: percona-postgresql11-devel +Requires: postgresql-server + + +%description +The pg_stat_monitor is statistics collector tool +based on PostgreSQL's contrib module "pg_stat_statements". +. +pg_stat_monitor is developed on the basis of pg_stat_statments +as more advanced replacement for pg_stat_statment. +It provides all the features of pg_stat_statment plus its own feature set. + + +%prep +%setup -q -n %{sname}-%{pgstatmonmajver}.%{pgstatmonmidver}.%{pgstatmonminver} + + +%build +sed -i 's:PG_CONFIG = pg_config:PG_CONFIG = /usr/pgsql-11/bin/pg_config:' Makefile +%{__make} USE_PGXS=1 %{?_smp_mflags} + + +%install +%{__rm} -rf %{buildroot} +%{__make} USE_PGXS=1 %{?_smp_mflags} install DESTDIR=%{buildroot} +%{__install} -d %{buildroot}%{pginstdir}/share/extension +%{__install} -m 755 README.md %{buildroot}%{pginstdir}/share/extension/README-pg_stat_monitor + + +%clean +%{__rm} -rf %{buildroot} + + +%post -p /sbin/ldconfig + + +%postun -p /sbin/ldconfig + + +%files +%defattr(755,root,root,755) +%doc %{pginstdir}/share/extension/README-pg_stat_monitor +%{pginstdir}/lib/pg_stat_monitor.so +%{pginstdir}/share/extension/pg_stat_monitor--*.sql +%{pginstdir}/share/extension/pg_stat_monitor.control +%{pginstdir}/lib/bitcode/pg_stat_monitor*.bc +%{pginstdir}/lib/bitcode/pg_stat_monitor/*.bc + + +%changelog +* Thu Dec 19 2019 Oleksandr Miroshnychenko - 1.0.0-1 +- Initial build diff --git a/percona-packaging/scripts/pg_stat_monitor_builder.sh b/percona-packaging/scripts/pg_stat_monitor_builder.sh new file mode 100644 index 0000000..930ecda --- /dev/null +++ b/percona-packaging/scripts/pg_stat_monitor_builder.sh @@ -0,0 +1,487 @@ +#!/usr/bin/env bash + +shell_quote_string() { + echo "$1" | sed -e 's,\([^a-zA-Z0-9/_.=-]\),\\\1,g' +} + +usage () { + cat <&2 "Current directory cannot be used for building!" + exit 1 + else + if ! test -d "$WORKDIR" + then + echo >&2 "$WORKDIR is not a directory." + exit 1 + fi + fi + return +} + +add_percona_yum_repo(){ + if [ ! -f /etc/yum.repos.d/percona-dev.repo ] + then + wget http://jenkins.percona.com/yum-repo/percona-dev.repo + mv -f percona-dev.repo /etc/yum.repos.d/ + fi + yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm + percona-release disable all + percona-release enable ppg-11 release + return +} + +add_percona_apt_repo(){ + if [ ! -f /etc/apt/sources.list.d/percona-dev.list ]; then + cat >/etc/apt/sources.list.d/percona-dev.list < pg-stat-monitor.properties + + PRODUCT_FULL=${PRODUCT}-${VERSION} + echo "PRODUCT_FULL=${PRODUCT_FULL}" >> pg-stat-monitor.properties + echo "VERSION=${PSM_VER}" >> pg-stat-monitor.properties + echo "BUILD_NUMBER=${BUILD_NUMBER}" >> pg-stat-monitor.properties + echo "BUILD_ID=${BUILD_ID}" >> pg-stat-monitor.properties + git clone "$REPO" ${PRODUCT_FULL} + retval=$? + if [ $retval != 0 ] + then + echo "There were some issues during repo cloning from github. Please retry one more time" + exit 1 + fi + cd ${PRODUCT_FULL} + if [ ! -z "$BRANCH" ] + then + git reset --hard + git clean -xdf + git checkout "$BRANCH" + fi + REVISION=$(git rev-parse --short HEAD) + echo "REVISION=${REVISION}" >> ${WORKDIR}/pg-stat-monitor.properties + rm -rf rpm debian + cp -r percona-packaging/rpm ./ + cp -r percona-packaging/debian ./ + cd ${WORKDIR} + # + source pg-stat-monitor.properties + # + + tar --owner=0 --group=0 --exclude=.* -czf ${PRODUCT_FULL}.tar.gz ${PRODUCT_FULL} + echo "UPLOAD=UPLOAD/experimental/BUILDS/${PRODUCT}/${PRODUCT_FULL}/${PSM_BRANCH}/${REVISION}/${BUILD_ID}" >> pg-stat-monitor.properties + mkdir $WORKDIR/source_tarball + mkdir $CURDIR/source_tarball + cp ${PRODUCT_FULL}.tar.gz $WORKDIR/source_tarball + cp ${PRODUCT_FULL}.tar.gz $CURDIR/source_tarball + cd $CURDIR + rm -rf percona-pg-stat-monitor* + return +} + +get_system(){ + if [ -f /etc/redhat-release ]; then + RHEL=$(rpm --eval %rhel) + ARCH=$(echo $(uname -m) | sed -e 's:i686:i386:g') + OS_NAME="el$RHEL" + OS="rpm" + else + ARCH=$(uname -m) + OS_NAME="$(lsb_release -sc)" + OS="deb" + fi + return +} + +install_deps() { + if [ $INSTALL = 0 ] + then + echo "Dependencies will not be installed" + return; + fi + if [ $( id -u ) -ne 0 ] + then + echo "It is not possible to instal dependencies. Please run as root" + exit 1 + fi + CURPLACE=$(pwd) + + if [ "x$OS" = "xrpm" ]; then + yum -y install wget + add_percona_yum_repo + wget http://jenkins.percona.com/yum-repo/percona-dev.repo + mv -f percona-dev.repo /etc/yum.repos.d/ + yum clean all + RHEL=$(rpm --eval %rhel) + if [ ${RHEL} = 8 ]; then + dnf -y module disable postgresql + dnf config-manager --set-enabled codeready-builder-for-rhel-8-x86_64-rpms + dnf clean all + rm -r /var/cache/dnf + dnf -y upgrade + yum -y install perl + else + until yum -y install centos-release-scl; do + echo "waiting" + sleep 1 + done + yum -y install epel-release + INSTALL_LIST="llvm-toolset-7-clang llvm5.0-devel" + yum -y install ${INSTALL_LIST} + source /opt/rh/devtoolset-7/enable + source /opt/rh/llvm-toolset-7/enable + INSTALL_LIST="clang-devel git clang llvm-devel rpmdevtools vim wget" + yum -y install ${INSTALL_LIST} + yum -y install binutils gcc gcc-c++ + fi + INSTALL_LIST="percona-postgresql-common clang-devel llvm-devel percona-postgresql11-devel git rpm-build rpmdevtools wget gcc make autoconf" + yum -y install ${INSTALL_LIST} + + else + export DEBIAN=$(lsb_release -sc) + export ARCH=$(echo $(uname -m) | sed -e 's:i686:i386:g') + apt-get -y install gnupg2 + add_percona_apt_repo + apt-get update || true + LLVM_EXISTS=$(grep -c "apt.llvm.org" /etc/apt/sources.list) + if [ ${LLVM_EXISTS} = 0 ]; then + wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add - + echo "deb http://apt.llvm.org/${DEBIAN}/ llvm-toolchain-${DEBIAN}-7 main" >> /etc/apt/sources.list + echo "deb-src http://apt.llvm.org/${DEBIAN}/ llvm-toolchain-${DEBIAN}-7 main" >> /etc/apt/sources.list + apt-get --allow-unauthenticated update + fi + apt-get update || true + INSTALL_LIST="build-essential percona-postgresql-11 debconf debhelper clang-7 devscripts dh-exec dh-systemd git wget libkrb5-dev libssl-dev percona-postgresql-common percona-postgresql-server-dev-all" + DEBIAN_FRONTEND=noninteractive apt-get -y --allow-unauthenticated install ${INSTALL_LIST} + INSTALL_LIST="build-essential debconf debhelper devscripts dh-exec dh-systemd git wget libxml-checker-perl libxml-libxml-perl libio-socket-ssl-perl libperl-dev libssl-dev libxml2-dev txt2man zlib1g-dev libpq-dev" + until DEBIAN_FRONTEND=noninteractive apt-get -y --allow-unauthenticated install ${INSTALL_LIST}; do + sleep 1 + echo "waiting" + done + apt-get -y --allow-unauthenticated install libmysqlclient-dev || true + apt-get -y --allow-unauthenticated install default-libmysqlclient-dev || true + fi + return; +} + +get_tar(){ + TARBALL=$1 + TARFILE=$(basename $(find $WORKDIR/$TARBALL -name 'percona-pg-stat-monitor*.tar.gz' | sort | tail -n1)) + if [ -z $TARFILE ] + then + TARFILE=$(basename $(find $CURDIR/$TARBALL -name 'percona-pg-stat-monitor*.tar.gz' | sort | tail -n1)) + if [ -z $TARFILE ] + then + echo "There is no $TARBALL for build" + exit 1 + else + cp $CURDIR/$TARBALL/$TARFILE $WORKDIR/$TARFILE + fi + else + cp $WORKDIR/$TARBALL/$TARFILE $WORKDIR/$TARFILE + fi + return +} + +get_deb_sources(){ + param=$1 + echo $param + FILE=$(basename $(find $WORKDIR/source_deb -name "percona-pg-stat-monitor*.$param" | sort | tail -n1)) + if [ -z $FILE ] + then + FILE=$(basename $(find $CURDIR/source_deb -name "percona-pg-stat-monitor*.$param" | sort | tail -n1)) + if [ -z $FILE ] + then + echo "There is no sources for build" + exit 1 + else + cp $CURDIR/source_deb/$FILE $WORKDIR/ + fi + else + cp $WORKDIR/source_deb/$FILE $WORKDIR/ + fi + return +} + +build_srpm(){ + if [ $SRPM = 0 ] + then + echo "SRC RPM will not be created" + return; + fi + if [ "x$OS" = "xdeb" ] + then + echo "It is not possible to build src rpm here" + exit 1 + fi + cd $WORKDIR + get_tar "source_tarball" + rm -fr rpmbuild + ls | grep -v tar.gz | xargs rm -rf + TARFILE=$(find . -name 'percona-pg-stat-monitor*.tar.gz' | sort | tail -n1) + SRC_DIR=${TARFILE%.tar.gz} + # + mkdir -vp rpmbuild/{SOURCES,SPECS,BUILD,SRPMS,RPMS} + tar vxzf ${WORKDIR}/${TARFILE} --wildcards '*/rpm' --strip=1 + # + cp -av rpm/* rpmbuild/SOURCES + cp -av rpm/*.spec rpmbuild/SPECS + # + mv -fv ${TARFILE} ${WORKDIR}/rpmbuild/SOURCES + rpmbuild -bs --define "_topdir ${WORKDIR}/rpmbuild" --define "dist .generic" \ + --define "version ${VERSION}" rpmbuild/SPECS/pg-stat-monitor.spec + mkdir -p ${WORKDIR}/srpm + mkdir -p ${CURDIR}/srpm + cp rpmbuild/SRPMS/*.src.rpm ${CURDIR}/srpm + cp rpmbuild/SRPMS/*.src.rpm ${WORKDIR}/srpm + return +} + +build_rpm(){ + if [ $RPM = 0 ] + then + echo "RPM will not be created" + return; + fi + if [ "x$OS" = "xdeb" ] + then + echo "It is not possible to build rpm here" + exit 1 + fi + SRC_RPM=$(basename $(find $WORKDIR/srpm -name 'percona-pg-stat-monitor*.src.rpm' | sort | tail -n1)) + if [ -z $SRC_RPM ] + then + SRC_RPM=$(basename $(find $CURDIR/srpm -name 'percona-pg-stat-monitor*.src.rpm' | sort | tail -n1)) + if [ -z $SRC_RPM ] + then + echo "There is no src rpm for build" + echo "You can create it using key --build_src_rpm=1" + exit 1 + else + cp $CURDIR/srpm/$SRC_RPM $WORKDIR + fi + else + cp $WORKDIR/srpm/$SRC_RPM $WORKDIR + fi + cd $WORKDIR + rm -fr rpmbuild + mkdir -vp rpmbuild/{SOURCES,SPECS,BUILD,SRPMS,RPMS} + cp $SRC_RPM rpmbuild/SRPMS/ + + cd rpmbuild/SRPMS/ + # + cd $WORKDIR + RHEL=$(rpm --eval %rhel) + ARCH=$(echo $(uname -m) | sed -e 's:i686:i386:g') + if [ -f /opt/rh/devtoolset-7/enable ]; then + source /opt/rh/devtoolset-7/enable + source /opt/rh/llvm-toolset-7/enable + fi + export LIBPQ_DIR=/usr/pgsql-11/ + export LIBRARY_PATH=/usr/pgsql-11/lib/:/usr/pgsql-11/include/ + rpmbuild --define "_topdir ${WORKDIR}/rpmbuild" --define "dist .$OS_NAME" --define "version ${VERSION}" --rebuild rpmbuild/SRPMS/$SRC_RPM + + return_code=$? + if [ $return_code != 0 ]; then + exit $return_code + fi + mkdir -p ${WORKDIR}/rpm + mkdir -p ${CURDIR}/rpm + cp rpmbuild/RPMS/*/*.rpm ${WORKDIR}/rpm + cp rpmbuild/RPMS/*/*.rpm ${CURDIR}/rpm +} + +build_source_deb(){ + if [ $SDEB = 0 ] + then + echo "source deb package will not be created" + return; + fi + if [ "x$OS" = "xrpm" ] + then + echo "It is not possible to build source deb here" + exit 1 + fi + rm -rf percona-pg-stat-monitor* + get_tar "source_tarball" + rm -f *.dsc *.orig.tar.gz *.debian.tar.gz *.changes + # + TARFILE=$(basename $(find . -name 'percona-pg-stat-monitor*.tar.gz' | sort | tail -n1)) + DEBIAN=$(lsb_release -sc) + ARCH=$(echo $(uname -m) | sed -e 's:i686:i386:g') + tar zxf ${TARFILE} + BUILDDIR=${TARFILE%.tar.gz} + # + + mv ${TARFILE} percona-pg-stat-monitor_${VERSION}.orig.tar.gz + cd ${BUILDDIR} + + cd debian + rm -rf changelog + echo "percona-pg-stat-monitor (${VERSION}-${RELEASE}) unstable; urgency=low" >> changelog + echo " * Initial Release." >> changelog + echo " -- Oleksandr Miroshnychenko $(date -R)" >> changelog + + cd ../ + + dch -D unstable --force-distribution -v "${VERSION}-${RELEASE}" "Update to new percona-pg-stat-monitor version ${VERSION}" + dpkg-buildpackage -S + cd ../ + mkdir -p $WORKDIR/source_deb + mkdir -p $CURDIR/source_deb + cp *.debian.tar.* $WORKDIR/source_deb + cp *_source.changes $WORKDIR/source_deb + cp *.dsc $WORKDIR/source_deb + cp *.orig.tar.gz $WORKDIR/source_deb + cp *.debian.tar.* $CURDIR/source_deb + cp *_source.changes $CURDIR/source_deb + cp *.dsc $CURDIR/source_deb + cp *.orig.tar.gz $CURDIR/source_deb +} + +build_deb(){ + if [ $DEB = 0 ] + then + echo "source deb package will not be created" + return; + fi + if [ "x$OS" = "xrmp" ] + then + echo "It is not possible to build source deb here" + exit 1 + fi + for file in 'dsc' 'orig.tar.gz' 'changes' 'debian.tar*' + do + get_deb_sources $file + done + cd $WORKDIR + rm -fv *.deb + # + export DEBIAN=$(lsb_release -sc) + export ARCH=$(echo $(uname -m) | sed -e 's:i686:i386:g') + # + echo "DEBIAN=${DEBIAN}" >> pg-stat-monitor.properties + echo "ARCH=${ARCH}" >> pg-stat-monitor.properties + + # + DSC=$(basename $(find . -name '*.dsc' | sort | tail -n1)) + # + dpkg-source -x ${DSC} + # + cd percona-pg-stat-monitor-${VERSION} + dch -m -D "${DEBIAN}" --force-distribution -v "1:${VERSION}-${RELEASE}.${DEBIAN}" 'Update distribution' + unset $(locale|cut -d= -f1) + dpkg-buildpackage -rfakeroot -us -uc -b + mkdir -p $CURDIR/deb + mkdir -p $WORKDIR/deb + cp $WORKDIR/*.*deb $WORKDIR/deb + cp $WORKDIR/*.*deb $CURDIR/deb +} +#main + +CURDIR=$(pwd) +VERSION_FILE=$CURDIR/pg-stat-monitor.properties +args= +WORKDIR= +SRPM=0 +SDEB=0 +RPM=0 +DEB=0 +SOURCE=0 +OS_NAME= +ARCH= +OS= +INSTALL=0 +RPM_RELEASE=1 +DEB_RELEASE=1 +REVISION=0 +BRANCH="master" +REPO="https://github.com/Percona-Lab/pg_stat_monitor.git" +PRODUCT=percona-pg-stat-monitor +DEBUG=0 +parse_arguments PICK-ARGS-FROM-ARGV "$@" +VERSION='1.0.0' +RELEASE='1' +PRODUCT_FULL=${PRODUCT}-${VERSION}-${RELEASE} + +check_workdir +get_system +install_deps +get_sources +build_srpm +build_source_deb +build_rpm +build_deb