From 76deb553fc0356347d727174c17dfd856aaeef1e Mon Sep 17 00:00:00 2001 From: Illia P Date: Thu, 23 Jul 2020 15:02:45 +0300 Subject: [PATCH] PG-119: Add version control --- percona-packaging/debian/control | 4 +- percona-packaging/debian/control.in | 4 +- percona-packaging/debian/rules | 2 +- percona-packaging/rpm/pg-stat-monitor.spec | 16 +- .../scripts/pg_stat_monitor_builder.sh | 234 +++++++++--------- 5 files changed, 132 insertions(+), 128 deletions(-) diff --git a/percona-packaging/debian/control b/percona-packaging/debian/control index d7390cc..19722c4 100644 --- a/percona-packaging/debian/control +++ b/percona-packaging/debian/control @@ -6,10 +6,10 @@ Build-Depends: debhelper (>= 9), percona-postgresql-server-dev-all (>= 153~), -Package: percona-pg-stat-monitor +Package: percona-pg-stat-monitor@@PG_REL@@ Architecture: any Depends: - percona-postgresql-11, + percona-postgresql-@@PG_REL@@, ${misc:Depends}, ${shlibs:Depends}, Description: The pg_stat_monitor is statistics collector tool diff --git a/percona-packaging/debian/control.in b/percona-packaging/debian/control.in index d7390cc..19722c4 100644 --- a/percona-packaging/debian/control.in +++ b/percona-packaging/debian/control.in @@ -6,10 +6,10 @@ Build-Depends: debhelper (>= 9), percona-postgresql-server-dev-all (>= 153~), -Package: percona-pg-stat-monitor +Package: percona-pg-stat-monitor@@PG_REL@@ Architecture: any Depends: - percona-postgresql-11, + percona-postgresql-@@PG_REL@@, ${misc:Depends}, ${shlibs:Depends}, Description: The pg_stat_monitor is statistics collector tool diff --git a/percona-packaging/debian/rules b/percona-packaging/debian/rules index 2ae2c24..2667c7f 100755 --- a/percona-packaging/debian/rules +++ b/percona-packaging/debian/rules @@ -18,7 +18,7 @@ override_dh_auto_test: # nothing to do here override_dh_auto_install: - +pg_buildext install build-%v percona-pg-stat-monitor + +pg_buildext install build-%v percona-pg-stat-monitor@@PG_REL@@ override_dh_installdocs: dh_installdocs --all README.* diff --git a/percona-packaging/rpm/pg-stat-monitor.spec b/percona-packaging/rpm/pg-stat-monitor.spec index 1b93e33..d41f3b6 100644 --- a/percona-packaging/rpm/pg-stat-monitor.spec +++ b/percona-packaging/rpm/pg-stat-monitor.spec @@ -1,17 +1,19 @@ %global sname percona-pg-stat-monitor -%global pginstdir /usr/pgsql-11/ +%global pgrel @@PG_REL@@ +%global rpm_release @@RPM_RELEASE@@ +%global pginstdir /usr/pgsql-@@PG_REL@@/ %global pgstatmonmajver 1 %global pgstatmonmidver 0 %global pgstatmonminver 0 Summary: Statistics collector for PostgreSQL -Name: %{sname} +Name: %{sname}%{pgrel} Version: %{pgstatmonmajver}.%{pgstatmonmidver}.%{pgstatmonminver} -Release: 1%{?dist} +Release: %{rpm_release}%{?dist} License: Apache 2.0 -Source0: %{sname}-%{pgstatmonmajver}.%{pgstatmonmidver}.%{pgstatmonminver}.tar.gz +Source0: %{sname}%{pgrel}-%{pgstatmonmajver}.%{pgstatmonmidver}.%{pgstatmonminver}.tar.gz URL: https://github.com/Percona-Lab/pg_stat_monitor -BuildRequires: percona-postgresql11-devel +BuildRequires: percona-postgresql%{pgrel}-devel Requires: postgresql-server @@ -25,11 +27,11 @@ It provides all the features of pg_stat_statment plus its own feature set. %prep -%setup -q -n %{sname}-%{pgstatmonmajver}.%{pgstatmonmidver}.%{pgstatmonminver} +%setup -q -n %{sname}%{pgrel}-%{pgstatmonmajver}.%{pgstatmonmidver}.%{pgstatmonminver} %build -sed -i 's:PG_CONFIG = pg_config:PG_CONFIG = /usr/pgsql-11/bin/pg_config:' Makefile +sed -i 's:PG_CONFIG = pg_config:PG_CONFIG = /usr/pgsql-%{pgrel}/bin/pg_config:' Makefile %{__make} USE_PGXS=1 %{?_smp_mflags} diff --git a/percona-packaging/scripts/pg_stat_monitor_builder.sh b/percona-packaging/scripts/pg_stat_monitor_builder.sh index 3946db4..632ac97 100644 --- a/percona-packaging/scripts/pg_stat_monitor_builder.sh +++ b/percona-packaging/scripts/pg_stat_monitor_builder.sh @@ -10,15 +10,19 @@ Usage: $0 [OPTIONS] The following options may be given : --builddir=DIR Absolute path to the dir where all actions will be performed --get_sources Source will be downloaded from github - --build_src_rpm If it is set - src rpm will be built - --build_src_deb If it is set - source deb package will be built - --build_rpm If it is set - rpm will be built - --build_deb If it is set - deb will be built - --install_deps Install build dependencies(root privilages are required) + --build_src_rpm If it is 1 src rpm will be built + --build_source_deb If it is 1 source deb package will be built + --build_rpm If it is 1 rpm will be built + --build_deb If it is 1 deb will be built + --build_tarball If it is 1 tarball will be built + --install_deps Install build dependencies(root previlages are required) --branch Branch for build --repo Repo for build + --rpm_release RPM version( default = 1) + --deb_release DEB version( default = 1) + --pg_release PPG version build on( default = 11) --help) usage ;; -Example $0 --builddir=/tmp/BUILD --get_sources=1 --build_src_rpm=1 --build_rpm=1 +Example $0 --builddir=/tmp/test --get_sources=1 --build_src_rpm=1 --build_rpm=1 EOF exit 1 } @@ -27,7 +31,7 @@ append_arg_to_args () { args="$args "$(shell_quote_string "$1") } -parse_arguments() { + parse_arguments() { pick_args= if test "$1" = PICK-ARGS-FROM-ARGV then @@ -38,15 +42,20 @@ parse_arguments() { for arg do val=$(echo "$arg" | sed -e 's;^--[^=]*=;;') case "$arg" in + # these get passed explicitly to mysqld --builddir=*) WORKDIR="$val" ;; --build_src_rpm=*) SRPM="$val" ;; - --build_src_deb=*) SDEB="$val" ;; + --build_source_deb=*) SDEB="$val" ;; --build_rpm=*) RPM="$val" ;; --build_deb=*) DEB="$val" ;; --get_sources=*) SOURCE="$val" ;; + --build_tarball=*) TARBALL="$val" ;; + --install_deps=*) INSTALL="$val" ;; --branch=*) BRANCH="$val" ;; --repo=*) REPO="$val" ;; - --install_deps=*) INSTALL="$val" ;; + --rpm_release=*) RPM_RELEASE="$val" ;; + --deb_release=*) DEB_RELEASE="$val" ;; + --pg_release=*) PG_RELEASE="$val" ;; --help) usage ;; *) if test -n "$pick_args" @@ -74,34 +83,13 @@ check_workdir(){ } 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/ + if [ ! -f /etc/yum.repos.d/percona-dev.repo ]; then + curl -o /etc/yum.repos.d/percona-dev.repo https://jenkins.percona.com/yum-repo/percona-dev.repo + sed -i 's:$basearch:x86_64:g' /etc/yum.repos.d/percona-dev.repo 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=percona-pg-stat-monitor${PG_RELEASE} PRODUCT_FULL=${PRODUCT}-${VERSION} + + echo "PRODUCT=${PRODUCT}" > pg-stat-monitor.properties echo "PRODUCT_FULL=${PRODUCT_FULL}" >> pg-stat-monitor.properties - echo "VERSION=${PSM_VER}" >> pg-stat-monitor.properties + echo "VERSION=${VERSION}" >> pg-stat-monitor.properties + echo "BRANCH_NAME=$(echo ${BRANCH} | awk -F '/' '{print $(NF)}')" >> pg-stat-monitor.properties echo "BUILD_NUMBER=${BUILD_NUMBER}" >> pg-stat-monitor.properties echo "BUILD_ID=${BUILD_ID}" >> pg-stat-monitor.properties + echo "BRANCH_NAME=$(echo ${BRANCH} | awk -F '/' '{print $(NF)}')" >> pg-stat-monitor.properties + echo "PG_RELEASE=${PG_RELEASE}" >> pg-stat-monitor.properties + echo "RPM_RELEASE=${RPM_RELEASE}" >> pg-stat-monitor.properties + echo "DEB_RELEASE=${DEB_RELEASE}" >> pg-stat-monitor.properties git clone "$REPO" ${PRODUCT_FULL} retval=$? if [ $retval != 0 ] @@ -136,13 +129,20 @@ get_sources(){ rm -rf rpm debian cp -r percona-packaging/rpm ./ cp -r percona-packaging/debian ./ + + EDITFILES="debian/control debian/control.in debian/rules rpm/pg-stat-monitor.spec" + for file in $EDITFILES; do + sed -i "s:@@PG_REL@@:${PG_RELEASE}:g" "$file" + done + + sed -i "s:@@RPM_RELEASE@@:${RPM_RELEASE}:g" rpm/pg-stat-monitor.spec + 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 + echo "UPLOAD=UPLOAD/experimental/BUILDS/${PRODUCT}/${PRODUCT_FULL}/${BRANCH}/${REVISION}/${BUILD_ID}" >> pg-stat-monitor.properties mkdir $WORKDIR/source_tarball mkdir $CURDIR/source_tarball cp ${PRODUCT_FULL}.tar.gz $WORKDIR/source_tarball @@ -154,14 +154,16 @@ get_sources(){ 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" + GLIBC_VER_TMP="$(rpm glibc -qa --qf %{VERSION})" + export RHEL=$(rpm --eval %rhel) + export ARCH=$(echo $(uname -m) | sed -e 's:i686:i386:g') + export OS_NAME="el$RHEL" + export OS="rpm" else - ARCH=$(uname -m) - OS_NAME="$(lsb_release -sc)" - OS="deb" + GLIBC_VER_TMP="$(dpkg-query -W -f='${Version}' libc6 | awk -F'-' '{print $1}')" + export ARCH=$(uname -m) + export OS_NAME="$(lsb_release -sc)" + export OS="deb" fi return } @@ -178,61 +180,66 @@ install_deps() { 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} - + if [ "$OS" == "rpm" ] + then + yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm + add_percona_yum_repo + if [[ ${PG_RELEASE} == "11" ]]; then + percona-release enable ppg-11 release + elif [[ $PG_RELEASE == "12" ]]; then + percona-release enable ppg-12 release + fi + yum -y install git wget + PKGLIST+=" clang-devel git clang llvm-devel rpmdevtools vim wget" + PKGLIST+=" perl binutils gcc gcc-c++" + PKGLIST+=" percona-postgresql-common clang-devel llvm-devel percona-postgresql${PG_RELEASE}-devel git rpm-build rpmdevtools wget gcc make autoconf" + if [[ "${RHEL}" -eq 8 ]]; then + dnf -y module disable postgresql + elif [[ "${RHEL}" -eq 7 ]]; then + PKGLIST+=" llvm-toolset-7-clang llvm-toolset-7-llvm-devel llvm5.0-devel" + until yum -y install epel-release centos-release-scl; do + yum clean all + sleep 1 + echo "waiting" + done + until yum -y makecache; do + yum clean all + sleep 1 + echo "waiting" + done + fi + until yum -y install ${PKGLIST}; do + echo "waiting" + sleep 1 + done 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 + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get -y install lsb-release gnupg git wget + + wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb && dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb + if [[ "${PG_RELEASE}" == "11" ]]; then + percona-release enable ppg-11 release + elif [[ "${PG_RELEASE}" == "12" ]]; then + percona-release enable ppg-12 release + fi + apt-get update + + 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/${OS_NAME}/ llvm-toolchain-${OS_NAME}-7 main" >> /etc/apt/sources.list + echo "deb-src http://apt.llvm.org/${OS_NAME}/ llvm-toolchain-${OS_NAME}-7 main" >> /etc/apt/sources.list + apt-get update + fi + + PKGLIST+=" percona-postgresql-${PG_RELEASE} debconf debhelper clang-7 devscripts dh-exec dh-systemd git wget libkrb5-dev libssl-dev percona-postgresql-common percona-postgresql-server-dev-all" + PKGLIST+=" 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 install ${PKGLIST}; do + sleep 1 + echo "waiting" + done + fi return; } @@ -350,8 +357,8 @@ build_rpm(){ 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/ + export LIBPQ_DIR=/usr/pgsql-${PG_RELEASE}/ + export LIBRARY_PATH=/usr/pgsql-${PG_RELEASE}/lib/:/usr/pgsql-${PG_RELEASE}/include/ rpmbuild --define "_topdir ${WORKDIR}/rpmbuild" --define "dist .$OS_NAME" --define "version ${VERSION}" --rebuild rpmbuild/SRPMS/$SRC_RPM return_code=$? @@ -389,7 +396,7 @@ build_source_deb(){ mv ${TARFILE} percona-pg-stat-monitor_${VERSION}.orig.tar.gz cd ${BUILDDIR} - dch -D unstable --force-distribution -v "${VERSION}-${RELEASE}" "Update to new percona-pg-stat-monitor version ${VERSION}" + dch -D unstable --force-distribution -v "${VERSION}-${DEB_RELEASE}" "Update to new percona-pg-stat-monitor${PG_RELEASE} version ${VERSION}" dpkg-buildpackage -S cd ../ mkdir -p $WORKDIR/source_deb @@ -422,19 +429,17 @@ build_deb(){ 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 "DEBIAN=${OS_NAME}" >> 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' + dch -m -D "${OS_NAME}" --force-distribution -v "1:${VERSION}-${DEB_RELEASE}.${OS_NAME}" 'Update distribution' unset $(locale|cut -d= -f1) dpkg-buildpackage -rfakeroot -us -uc -b mkdir -p $CURDIR/deb @@ -442,10 +447,9 @@ build_deb(){ cp $WORKDIR/*.*deb $WORKDIR/deb cp $WORKDIR/*.*deb $CURDIR/deb } -#main CURDIR=$(pwd) -VERSION_FILE=$CURDIR/pg-stat-monitor.properties +VERSION_FILE=$CURDIR/percona-pg-stat-monitor.properties args= WORKDIR= SRPM=0 @@ -453,21 +457,19 @@ SDEB=0 RPM=0 DEB=0 SOURCE=0 +TARBALL=0 OS_NAME= ARCH= OS= +REVISION=0 +BRANCH="master" INSTALL=0 RPM_RELEASE=1 DEB_RELEASE=1 -REVISION=0 -BRANCH="master" REPO="https://github.com/Percona/pg_stat_monitor.git" -PRODUCT=percona-pg-stat-monitor -DEBUG=0 +VERSION="1.0.0" +PG_RELEASE=11 parse_arguments PICK-ARGS-FROM-ARGV "$@" -VERSION='1.0.0' -RELEASE='1' -PRODUCT_FULL=${PRODUCT}-${VERSION}-${RELEASE} check_workdir get_system