Merge pull request #13 from vorsel/master

Issue - (#14): PG-80 packaging for pg_stat_monitor
pull/15/head
Ibrar Ahmed 2020-01-02 21:03:55 +05:00 committed by GitHub
commit 0e47677552
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 635 additions and 0 deletions

View File

@ -0,0 +1,5 @@
percona-pg-stat-monitor (1.0.0-1) unstable; urgency=medium
* Initial build.
-- Oleksandr Miroshnychenko <alex.miroshnychenko@percona.com> Thu, 19 Dec 2019 19:20:11 +0100

View File

@ -0,0 +1 @@
9

View File

@ -0,0 +1,21 @@
Source: percona-pg-stat-monitor
Section: database
Priority: optional
Maintainer: Percona Development Team <info@percona.com>
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.

View File

@ -0,0 +1,20 @@
Source: percona-pg-stat-monitor
Section: database
Priority: optional
Maintainer: Percona Development Team <info@percona.com>
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.

View File

@ -0,0 +1,2 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/

View File

@ -0,0 +1 @@
9.3+

29
percona-packaging/debian/rules Executable file
View File

@ -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

View File

@ -0,0 +1 @@
3.0 (quilt)

View File

@ -0,0 +1,3 @@
# don't bug people uploading from @work
source: changelog-should-mention-nmu
source: source-nmu-has-incorrect-version-number

View File

@ -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 <alex.miroshnychenko@percona.com> - 1.0.0-1
- Initial build

View File

@ -0,0 +1,487 @@
#!/usr/bin/env bash
shell_quote_string() {
echo "$1" | sed -e 's,\([^a-zA-Z0-9/_.=-]\),\\\1,g'
}
usage () {
cat <<EOF
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)
--branch Branch for build
--repo Repo for build
--help) usage ;;
Example $0 --builddir=/tmp/BUILD --get_sources=1 --build_src_rpm=1 --build_rpm=1
EOF
exit 1
}
append_arg_to_args () {
args="$args "$(shell_quote_string "$1")
}
parse_arguments() {
pick_args=
if test "$1" = PICK-ARGS-FROM-ARGV
then
pick_args=1
shift
fi
for arg do
val=$(echo "$arg" | sed -e 's;^--[^=]*=;;')
case "$arg" in
--builddir=*) WORKDIR="$val" ;;
--build_src_rpm=*) SRPM="$val" ;;
--build_src_deb=*) SDEB="$val" ;;
--build_rpm=*) RPM="$val" ;;
--build_deb=*) DEB="$val" ;;
--get_sources=*) SOURCE="$val" ;;
--branch=*) BRANCH="$val" ;;
--repo=*) REPO="$val" ;;
--install_deps=*) INSTALL="$val" ;;
--help) usage ;;
*)
if test -n "$pick_args"
then
append_arg_to_args "$arg"
fi
;;
esac
done
}
check_workdir(){
if [ "x$WORKDIR" = "x$CURDIR" ]
then
echo >&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 <<EOL
deb http://jenkins.percona.com/apt-repo/ @@DIST@@ main
deb-src http://jenkins.percona.com/apt-repo/ @@DIST@@ main
EOL
sed -i "s:@@DIST@@:$OS_NAME:g" /etc/apt/sources.list.d/percona-dev.list
fi
wget -qO - http://jenkins.percona.com/apt-repo/8507EFA5.pub | apt-key add -
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
dpkg -i percona-release_latest.generic_all.deb
percona-release disable all
rm -f percona-release_latest.generic_all.deb
percona-release enable ppg-11 release
return
}
get_sources(){
cd "${WORKDIR}"
if [ "${SOURCE}" = 0 ]
then
echo "Sources will not be downloaded"
return 0
fi
PRODUCT=percona-pg-stat-monitor
echo "PRODUCT=${PRODUCT}" > 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 <alex.miroshnychenko@percona.com> $(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