From 9ddf3e5a94b0848cdf9e6ffcc586576bb614bc13 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 25 Sep 2012 00:23:17 -0700 Subject: Tue Sep 25 00:23:14 PDT 2012 --- extra/postgresql/PKGBUILD | 38 +++++++++++++++---------- extra/postgresql/postgresql-check-db-dir | 49 ++++++++++++++++++++++++++++++++ extra/postgresql/postgresql.install | 10 +++++-- extra/postgresql/postgresql.service | 26 +++++++++++++++++ 4 files changed, 105 insertions(+), 18 deletions(-) create mode 100755 extra/postgresql/postgresql-check-db-dir create mode 100644 extra/postgresql/postgresql.service (limited to 'extra/postgresql') diff --git a/extra/postgresql/PKGBUILD b/extra/postgresql/PKGBUILD index a00160c6b..3813f64e2 100644 --- a/extra/postgresql/PKGBUILD +++ b/extra/postgresql/PKGBUILD @@ -1,17 +1,32 @@ -# $Id: PKGBUILD 160730 2012-06-04 17:58:05Z dan $ +# $Id: PKGBUILD 166983 2012-09-24 14:35:11Z dan $ # Maintainer: Dan McGee pkgbase=postgresql pkgname=('postgresql-libs' 'postgresql-docs' 'postgresql') -pkgver=9.1.4 +pkgver=9.2.1 _majorver=${pkgver%.*} pkgrel=1 arch=('i686' 'x86_64') url="http://www.postgresql.org/" license=('custom:PostgreSQL') makedepends=('krb5' 'libxml2' 'python2' 'perl' 'tcl' 'openssl>=1.0.0') -source=(ftp://ftp.postgresql.org/pub/source/v${pkgver}/postgresql-${pkgver}.tar.bz2 - postgresql.rcd postgresql.confd postgresql.pam postgresql.logrotate) +source=(http://ftp.postgresql.org/pub/source/v${pkgver}/postgresql-${pkgver}.tar.bz2 + postgresql.rcd postgresql.confd postgresql.pam postgresql.logrotate + postgresql.service postgresql-check-db-dir) +md5sums=('c0b4799ea9850eae3ead14f0a60e9418' + '1ddd1df8010549f237e7983bb326025e' + 'a54d09a20ab1672adf08f037df188d53' + '96f82c38f3f540b53f3e5144900acf17' + 'd28e443f9f65a5712c52018b84e27137' + '89b48774b0dae7c37fbb0e907c3c1db8' + '505e0e4abfc746cae9558584d471a03c') +sha256sums=('db61d498105a7d5fe46185e67ac830c878cdd7dc1f82a87f06b842217924c461' + '9f6307b1358892e304f9474a456f0cb9160cfb8812a9da0430abe647f8a9cf45' + '3de5c059eead8816db15c2c5588e6196d6c4b0d704faf1a20912796cf589ba81' + '57dfd072fd7ef0018c6b0a798367aac1abb5979060ff3f9df22d1048bb71c0d5' + '6abb842764bbed74ea4a269d24f1e73d1c0b1d8ecd6e2e6fb5fb10590298605e' + 'c69b614731fdd3f4e127540814f5999f423363523c5209e252e19b1d4362ad68' + '3a3279d290f556bf7a362670e32b491794f47ed218f6b8c6acef366a3291f669') build() { cd "${srcdir}/postgresql-${pkgver}" @@ -122,6 +137,10 @@ package_postgresql() { # install launch script install -D -m755 "${srcdir}/postgresql.rcd" "${pkgdir}/etc/rc.d/postgresql" + install -D -m644 "${srcdir}/postgresql.service" \ + "${pkgdir}/usr/lib/systemd/system/postgresql.service" + install -D -m755 "${srcdir}/postgresql-check-db-dir" \ + "${pkgdir}/usr/bin/postgresql-check-db-dir" # install conf file install -D -m644 ${srcdir}/postgresql.confd \ @@ -133,14 +152,3 @@ package_postgresql() { install -D -m644 ${srcdir}/postgresql.logrotate \ "${pkgdir}/etc/logrotate.d/postgresql" } - -md5sums=('a8035688dba988b782725ac1aec60186' - '1ddd1df8010549f237e7983bb326025e' - 'a54d09a20ab1672adf08f037df188d53' - '96f82c38f3f540b53f3e5144900acf17' - 'd28e443f9f65a5712c52018b84e27137') -sha256sums=('a0795a8eb3ae2d1a2914b63bf143d20182835d90699915ff43567c041d3c9712' - '9f6307b1358892e304f9474a456f0cb9160cfb8812a9da0430abe647f8a9cf45' - '3de5c059eead8816db15c2c5588e6196d6c4b0d704faf1a20912796cf589ba81' - '57dfd072fd7ef0018c6b0a798367aac1abb5979060ff3f9df22d1048bb71c0d5' - '6abb842764bbed74ea4a269d24f1e73d1c0b1d8ecd6e2e6fb5fb10590298605e') diff --git a/extra/postgresql/postgresql-check-db-dir b/extra/postgresql/postgresql-check-db-dir new file mode 100755 index 000000000..542c82209 --- /dev/null +++ b/extra/postgresql/postgresql-check-db-dir @@ -0,0 +1,49 @@ +#!/bin/sh + +# This script verifies that the postgresql data directory has been correctly +# initialized. We do not want to automatically initdb it, because that has +# a risk of catastrophic failure (ie, overwriting a valuable database) in +# corner cases, such as a remotely mounted database on a volume that's a +# bit slow to mount. But we can at least emit a message advising newbies +# what to do. + +PGDATA="$1" + +if [ -z "$PGDATA" ] +then + echo "Usage: $0 database-path" + exit 1 +fi + +# PGMAJORVERSION is major version +PGMAJORVERSION=9.2 +# PREVMAJORVERSION is the previous major version, e.g., 8.4, for upgrades +PREVMAJORVERSION=9.1 + +# Check for the PGDATA structure +if [ -f "$PGDATA/PG_VERSION" ] && [ -d "$PGDATA/base" ] +then + # Check version of existing PGDATA + if [ x`cat "$PGDATA/PG_VERSION"` = x"$PGMAJORVERSION" ] + then + : A-OK + elif [ x`cat "$PGDATA/PG_VERSION"` = x"$PREVMAJORVERSION" ] + then + echo $"An old version of the database format was found." + echo $"See https://wiki.archlinux.org/index.php/PostgreSQL#Upgrading_PostgreSQL" + exit 1 + else + echo $"An old version of the database format was found." + echo $"You need to dump and reload before using PostgreSQL $PGMAJORVERSION." + echo $"See http://www.postgresql.org/docs/9.2/static/upgrading.html" + exit 1 + fi +else + # No existing PGDATA! Warn the user to initdb it. + echo $"\"$PGDATA\" is missing or empty. Use a command like" + echo $" su - postgres -c \"initdb --locale en_US.UTF-8 -D '$PGDATA'\"" + echo $"with relevant options, to initialize the database cluster." + exit 1 +fi + +exit 0 diff --git a/extra/postgresql/postgresql.install b/extra/postgresql/postgresql.install index c52432271..7b73f6fa9 100644 --- a/extra/postgresql/postgresql.install +++ b/extra/postgresql/postgresql.install @@ -2,9 +2,13 @@ post_install() { if [ ! -d '/var/lib/postgres' ]; then mkdir -p '/var/lib/postgres' fi - getent group postgres >/dev/null || groupadd -g 88 postgres - getent passwd postgres >/dev/null || useradd -c 'PostgreSQL user' -u 88 -g postgres -d '/var/lib/postgres' -s /bin/bash postgres - passwd -l postgres >/dev/null + if ! getent group postgres >/dev/null; then + groupadd -g 88 postgres + fi + if ! getent passwd postgres >/dev/null; then + useradd -c 'PostgreSQL user' -u 88 -g postgres -d '/var/lib/postgres' -s /bin/bash postgres + passwd -l postgres >/dev/null + fi } post_upgrade() { diff --git a/extra/postgresql/postgresql.service b/extra/postgresql/postgresql.service new file mode 100644 index 000000000..294b66e8f --- /dev/null +++ b/extra/postgresql/postgresql.service @@ -0,0 +1,26 @@ +[Unit] +Description=PostgreSQL database server +After=network.target + +[Service] +Type=forking +TimeoutSec=120 +User=postgres +Group=postgres + +Environment=PGROOT=/var/lib/postgres + +SyslogIdentifier=postgres +PIDFile=/var/lib/postgres/data/postmaster.pid + +ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGROOT}/data +ExecStart= /usr/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120 +ExecReload=/usr/bin/pg_ctl -s -D ${PGROOT}/data reload +ExecStop= /usr/bin/pg_ctl -s -D ${PGROOT}/data stop -m fast + +# Due to PostgreSQL's use of shared memory, OOM killer is often overzealous in +# killing Postgres, so adjust it downward +OOMScoreAdjust=-200 + +[Install] +WantedBy=multi-user.target -- cgit v1.2.3-54-g00ecf