Subject: [alpine-devel] [PATCH] testing/pgagent: new aport

From: Rafał Rzepecki <[email-masked]>
Date: Thu, 20 Nov 2014 16:23:29 -0500

http://www.pgadmin.org/docs/dev/pgagent.html
a job scheduler for PostgreSQL
---
 testing/pgagent/APKBUILD      | 64 +++++++++++++++++++++++++++++++++++++++++++
 testing/pgagent/pgagent.confd | 22 +++++++++++++++
 testing/pgagent/pgagent.initd | 25 +++++++++++++++++
 3 files changed, 111 insertions(+)
 create mode 100644 testing/pgagent/APKBUILD
 create mode 100644 testing/pgagent/pgagent.confd
 create mode 100644 testing/pgagent/pgagent.initd

diff --git a/testing/pgagent/APKBUILD b/testing/pgagent/APKBUILD
new file mode 100644
index 0000000..ae9eaea
--- /dev/null
+++ b/testing/pgagent/APKBUILD
@@ -0,0 +1,64 @@
+# Contributor: Rafal Rzepecki <[email-masked]>
+# Maintainer:
+pkgname=pgagent
+pkgver=3.4.0
+pkgrel=0
+pkgdesc="a job scheduler for PostgreSQL"
+url="http://www.pgadmin.org/docs/dev/pgagent.html"
+arch="all"
+license="POSTGRESQL"
+depends="wxgtk2.8-base postgresql"
+depends_dev="wxgtk2.8-dev postgresql-dev"
+makedepends="$depends_dev cmake"
+install=""
+subpackages="$pkgname-doc"
+source="
+	https://ftp.postgresql.org/pub/pgadmin3/release/pgagent/pgAgent-$pkgver-Source.tar.gz
+	pgagent.initd
+	pgagent.confd
+"
+
+_builddir="$srcdir"/pgAgent-$pkgver-Source
+prepare() {
+	local i
+	cd "$_builddir"
+	for i in $source; do
+		case $i in
+		*.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;
+		esac
+	done
+}
+
+build() {
+	cd "$_builddir"
+	cmake -DCMAKE_INSTALL_PREFIX=/usr -DSTATIC_BUILD:BOOLEAN=FALSE
+	make || return 1
+}
+
+package() {
+	cd "$_builddir"
+
+	make DESTDIR="$pkgdir" install
+
+	# remove useless doc files
+	rm "$pkgdir"/usr/README
+	rm "$pkgdir"/usr/LICENSE
+
+	install -m755 -D "$srcdir"/$pkgname.initd \
+		"$pkgdir"/etc/init.d/$pkgname || return 1
+	install -m644 -D "$srcdir"/$pkgname.confd \
+		"$pkgdir"/etc/conf.d/$pkgname || return 1
+
+	install -Dm644 "$_builddir"/LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE
+	install -Dm644 "$_builddir"/README "$pkgdir"/usr/share/doc/$pkgname/README
+}
+
+md5sums="187caa1843f0d82f6caa1be0f80d6232  pgAgent-3.4.0-Source.tar.gz
+c719d251f7617583864b9b5f7128bf6f  pgagent.initd
+c64e1925e38a93ad66f701d3015ae970  pgagent.confd"
+sha256sums="0da0ac8f453cf34ab6f708eee036bed0fd0e5fa311de283b92d2ff06600bbb3d  pgAgent-3.4.0-Source.tar.gz
+b37ac8a8e95144e19c04cc02fd508515b44ef4ac74b2572e48c55d91b04d679f  pgagent.initd
+2bdf4166ff53c57b382788b89818e6c3298fbaa291092236883bd03e08970d4b  pgagent.confd"
+sha512sums="3b068fc6f5e51ff20604f8cec3e067d04b5b1537229da15ee442000f5fe834697a4eae86be0e9a58b8ee5da24cc985c8c9804d71cb2a50e93ec4cf9a424a4ff0  pgAgent-3.4.0-Source.tar.gz
+e84bf6c3a2bb9d2d8afad2dda7ebcac80ede19a5595ccbe31251731917c3f2337ca3fca68bc47ca8f51bb6e765a0c1e54eabf60466a42d1a6938399d13b71a79  pgagent.initd
+fe9fcdd33225a361cbd007ac5bef439946714da9a990169222b8ba88e63362a753e80490ab9402f146ec6a6782b3457846039cc0ad84bf0cdf0c231deec1c286  pgagent.confd"
diff --git a/testing/pgagent/pgagent.confd b/testing/pgagent/pgagent.confd
new file mode 100644
index 0000000..a85be20
--- /dev/null
+++ b/testing/pgagent/pgagent.confd
@@ -0,0 +1,22 @@
+# Pool time interval
+PGA_POLL="10"
+
+# Retry period
+PGA_RETRY="30"
+
+# Log file
+PGA_LOG="/var/log/pgagent.log"
+
+# Logging verbosity
+# ERROR=0, WARNING=1, DEBUG=2
+PGA_LEVEL="1"
+
+# Server parameters
+# Host address
+PG_HOST="localhost"
+
+# DB name
+PG_DBNAME="postgres"
+
+# Username
+PG_USER="postgres"
diff --git a/testing/pgagent/pgagent.initd b/testing/pgagent/pgagent.initd
new file mode 100644
index 0000000..0e37fcc
--- /dev/null
+++ b/testing/pgagent/pgagent.initd
@@ -0,0 +1,25 @@
+#!/sbin/runscript
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-db/pgagent/files/pgagent.initd,v 1.1 2012/04/28 18:34:11 titanofold Exp $
+
+PGAGENTOPT="-t ${PGA_POLL} -r ${PGA_RETRY} -s ${PGA_LOG} -l ${PGA_LEVEL}"
+
+PGOPT="hostaddr=${PG_HOST} dbname=${PG_DBNAME} user=${PG_USER}"
+
+depend() {
+    use net
+    need postgresql
+}
+
+start() {
+    ebegin "Starting pgagent"
+    start-stop-daemon --start --exec /usr/bin/pgagent -- ${PGAGENTOPT} ${PGOPT}
+    eend $?
+}
+
+stop() {
+    ebegin "Stopping pgagent"
+    start-stop-daemon --stop --name pgagent
+    eend $?
+}
-- 
2.1.3

---
Unsubscribe:  [email-masked]
Help:         [email-masked]
---

---

From: Natanael Copa <[email-masked]>
Date: Fri, 21 Nov 2014 08:33:30 +0100

On Thu, 20 Nov 2014 16:23:29 -0500

>  create mode 100644 testing/pgagent/pgagent.initd

Thanks! I applied it, but I have a few questions below.

> +++ b/testing/pgagent/APKBUILD

What does it need from wxgtk2.8-base that is not pulled in automatic as
SO (shared object) dependency? Normally abuild will automatically add
the dependencies for dynamic libs.

I n this case, abuild will automatically add so:libwx_baseu-2.8.so.0 as
a dependency which (currently) wxgtk2.8-base provides.

I suspect that wxgtk2.8-base can be removed from depends unless I am
missing something.

Does the server really need to run on the same server as the agent? If
not, then we should not have a hard dependency for the postgresql
server.

...

> +++ b/testing/pgagent/pgagent.confd

Having the log file in /var/log means it needs to have root
permissions. Does the agent really need to run as root?

> +++ b/testing/pgagent/pgagent.initd

Does the agent really require that a postgresql server runs on this
host even if the PG_HOST is pointing to some other host?

I suspect that you can actually run the agent on different host than the
postgresql server and in that case, you don't need postgresql. It
should probably say "use postgresql".

> +    start-stop-daemon --stop --name pgagent

-nc

---

---

From: Rafał Rzepecki <[email-masked]>
Date: Fri, 21 Nov 2014 13:40:08 -0500

> Thanks! I applied it, but I have a few questions below.

Thanks! It's my first Alpine package, so I do appreciate the feedback
and will try to fix it.

> not, then we should not have a hard dependency for the postgresql

Yes, you're right; I didn't know what was the established convention
here, the wiki page on creating packages doesn't mention so-deps at
all.

> permissions. Does the agent really need to run as root?

It doesn't and shouldn't; in fact it should run as postgres in the
case the scripts are used verbatim. Frankly I just copied them from
Gentoo without much thought :) Those things probably should get
reported 'upstream' once we converge on the best solution.

Anyway, what's the preferred way to setup logging in this case? A
post-install script that creates a /var/log subdirectory with proper
permissions?

Also, I'm not entirely sure what the user should be. If the agent is
running on a local postgres, it's most practical (even if not the most
secure) if it runs as 'postgres' user so it has superuser on the
database; if it's not running on the local server, the scripts aren't
generic enough to make it work anyway (auth needs to be set up, which
might be done in a number of different ways -- password, kerberos,
ident, ssl, etc.) so an admin would have to modify the init script
anyway.

> should probably say "use postgresql".

Yes, thanks; as mentioned above it's just lifted from Gentoo verbatim.
I agree it should probably have use postgres, but heed the
aforementioned comments about how one would probably modify the script
anyway in anything different than the most common case.

I'm not sure how to approach it best. Ideas are welcome :)

-- 
Rafał Rzepecki

---

---

From: Natanael Copa <[email-masked]>
Date: Tue, 16 Dec 2014 14:47:18 +0100

On Fri, 21 Nov 2014 13:40:08 -0500

...
> ident, ssl, etc.) so an admin would have to modify the init script

I think we can run it as postgresql as default and make the
alternatives configurable.

> I'm not sure how to approach it best. Ideas are welcome :)

Well, you should not need edit the scripts, only the config. Thats why
there is a separate conf.d/ file.

I would just replace the 'need postgresql' with 'use postgresql' and
remove postgresql from depends.

thanks!

-nc

---