From bae18fdb80148edcdae1b2576e950bd40bcbea4d Mon Sep 17 00:00:00 2001 From: Adis Nezirovic Date: Tue, 11 May 2010 15:18:43 +0200 Subject: [PATCH] system/postgresql: Initial import --- system/postgresql/README | 54 ++++++++++ system/postgresql/doinst.sh | 16 +++ system/postgresql/postgresql.SlackBuild | 136 ++++++++++++++++++++++++ system/postgresql/postgresql.info | 8 ++ system/postgresql/postgresql.logrotate | 8 ++ system/postgresql/rc.postgresql.new | 118 ++++++++++++++++++++ system/postgresql/setup.postgresql | 33 ++++++ system/postgresql/slack-desc | 12 +++ 8 files changed, 385 insertions(+) create mode 100644 system/postgresql/README create mode 100644 system/postgresql/doinst.sh create mode 100644 system/postgresql/postgresql.SlackBuild create mode 100644 system/postgresql/postgresql.info create mode 100644 system/postgresql/postgresql.logrotate create mode 100644 system/postgresql/rc.postgresql.new create mode 100644 system/postgresql/setup.postgresql create mode 100644 system/postgresql/slack-desc diff --git a/system/postgresql/README b/system/postgresql/README new file mode 100644 index 0000000000..a2c2a18999 --- /dev/null +++ b/system/postgresql/README @@ -0,0 +1,54 @@ +PostgreSQL is an advanced object-relational database management +system (ORDBMS) based on POSTGRES. With more than 15 years of +development history, it is quickly becoming the de facto +database for enterprise level open source solutions. + +Homepage: http://www.postgresql.org + +This script builds postgresql with a couple of useful features in the +contrib directory. + +adminpack - + File and log manipulation routines, used by pgAdmin + by Dave Page + +tsearch2 - + Full-text-index support using GiST + by Teodor Sigaev and Oleg Bartunov + . + + +Before you can run postgresql you'll need to create the +database files in /var/lib/pgsql. The following should do +the trick. + + # su postgres -c "initdb -D /var/lib/pgsql/data" + +Additionally, a logrotation script is added to /etc/logrotate.d/ and an +rc.postgresql script is added. In order to activate postgresql at boot +time and shut it down properly upon system shutdown, add the following +lines to the following files. + + /etc/rc.d/rc.local + ================== + + # Startup postgresql + if [ -x /etc/rc.d/rc.postgresql ]; then + /etc/rc.d/rc.postgresql start + fi + + + /etc/rc.d/rc.local_shutdown + =========================== + + # Stop postgres + if [ -x /etc/rc.d/rc.postgresql ]; then + /etc/rc.d/rc.postgresql stop + fi + +Additionally, you'll have to set the rc script to be executable just +like any other Slackware rc script. + + # chmod +x /etc/rc.d/rc.postgresql + + diff --git a/system/postgresql/doinst.sh b/system/postgresql/doinst.sh new file mode 100644 index 0000000000..4eed17e907 --- /dev/null +++ b/system/postgresql/doinst.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +config() { + NEW="$1" + OLD="`dirname $NEW`/`basename $NEW .new`" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ]; then # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +config etc/rc.d/rc.postgresql.new +config etc/logrotate.d/postgresql.new diff --git a/system/postgresql/postgresql.SlackBuild b/system/postgresql/postgresql.SlackBuild new file mode 100644 index 0000000000..46c180e565 --- /dev/null +++ b/system/postgresql/postgresql.SlackBuild @@ -0,0 +1,136 @@ +#!/bin/sh + +## Slackware build script for PostgreSQL +## $Revision: 1addf65317c9 $ +## $Date: 2007/04/25 02:58:20 $ +## +## Copyright 2007 Adis Nezirovic +## Licensed under GNU GPL v2 + +# Slightly modified by the SlackBuilds Project +PRGNAM=postgresql +VERSION=8.2.4 +ARCH=${ARCH:-i486} +BUILD=${BUILD:-1} +TAG=${TAG:_SBo} +CWD=`pwd` +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +# Exit on any and all errors +set -e + +# Bail out if user or group isn't valid on your system +# For slackbuilds.org, assigned postgres uid/gid are 209/209 +# see http://slackbuilds.org/uid_gid.txt +# Other popular choice is 26/26 +if ! grep ^postgres: /etc/group 2>&1 > /dev/null; then + echo " Must have a postgres group to run this script." + echo " # groupadd -g 209 postgres" + echo " Or something similar." + exit 1 +elif ! grep ^postgres: /etc/passwd 2>&1 > /dev/null; then + echo " Must have a postgres user to run this script." + echo " # useradd -u 209 -g postgres -d /var/lib/pgsql postgres" + echo " Or something similar." + exit 1 +fi + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2" +fi + +# Make sure we start from clean state +rm -rf $TMP/$PRGNAM-$VERSION $PKG +mkdir -p $TMP $PKG $OUTPUT + +cd $TMP +tar xjvf $CWD/$PRGNAM-$VERSION.tar.bz2 || exit 1 + +# Fix permissions here. +chmod -R a-s,u+w,go+r-w $PRGNAM-$VERSION +chown -R root:root $PRGNAM-$VERSION + +cd $TMP/$PRGNAM-$VERSION + +CFLAGS="$SLKCFLAGS" \ +./configure \ + --prefix=/usr \ + --with-openssl \ + --with-tcl \ + --with-perl \ + --with-python \ + --enable-thread-safety || exit 1 +make || exit 1 +make DESTDIR=$PKG install-strip || exit 1 + +# Two nice extensions: +# adminpack for pgAdmin +# tsearch2 for full text search +cd $TMP/$PRGNAM-$VERSION/contrib/adminpack +make || exit 1 +make DESTDIR=$PKG install-strip || exit 1 + +cd $TMP/$PRGNAM-$VERSION/contrib/tsearch2 +make || exit 1 +make DESTDIR=$PKG install-strip || exit 1 + +cd $TMP/$PRGNAM-$VERSION + +# man pages +gzip -9 $PKG/usr/man/man?/* + +# docs +mv $PKG/usr/doc/$PRGNAM $PKG/usr/doc/$PRGNAM-$VERSION +cp -a COPYRIGHT \ + HISTORY \ + README \ + doc/* \ + $PKG/usr/doc/$PRGNAM-$VERSION/ +rm -fr $PKG/usr/doc/$PRGNAM-$VERSION/{man.tar.gz,man1,manl,man7,postgres.tar.gz} + +# Ensure this flu^^^script spreads further +SLACK_BUILD=$PKG/usr/share/$PRGNAM/SlackBuild +mkdir -p $SLACK_BUILD +cat $CWD/$PRGNAM.SlackBuild > $SLACK_BUILD/$PRGNAM.SlackBuild +cat $CWD/$PRGNAM.info > $SLACK_BUILD/$PRGNAM.info +cat $CWD/slack-desc > $SLACK_BUILD/slack-desc +cat $CWD/doinst.sh > $SLACK_BUILD/doinst.sh +cat $CWD/README > $SLACK_BUILD/README +cat $CWD/rc.postgresql.new > $SLACK_BUILD/rc.postgresql.new +cat $CWD/setup.postgresql > $SLACK_BUILD/setup.postgresql + +# base database directory +# assumes you are using /var/lib/pgsql as a homedir for postgres user +mkdir -p $PKG/var/lib/pgsql/data +chown -R postgres:postgres $PKG/var/lib/pgsql +chmod 700 $PKG/var/lib/pgsql +# permissions for DATADIR should be u=rwx (0700) +chmod 700 $PKG/var/lib/pgsql/data + +# description file +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +# pkgtool setup procedure +mkdir -p $PKG/var/log/setup +cat $CWD/setup.$PRGNAM > $PKG/var/log/setup/setup.$PRGNAM +chmod 755 $PKG/var/log/setup/setup.$PRGNAM + +# rc script +mkdir -p $PKG/etc/rc.d +cat $CWD/rc.postgresql.new > $PKG/etc/rc.d/rc.postgresql.new + +# logrotation +mkdir -p $PKG/etc/logrotate.d +cat $CWD/postgresql.logrotate > $PKG/etc/logrotate.d/postgresql.new + +## make the package +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.tgz diff --git a/system/postgresql/postgresql.info b/system/postgresql/postgresql.info new file mode 100644 index 0000000000..c53f74a1ce --- /dev/null +++ b/system/postgresql/postgresql.info @@ -0,0 +1,8 @@ +PRGNAM="postgresql" +VERSION="8.2.4" +HOMEPAGE="http://www.postgresql.org" +DOWNLOAD="ftp://ftp.postgresql.org/pub/source/v8.2.4/postgresql-8.2.4.tar.bz2" +MD5SUM="af7ec100a33c41bfb8d87b5e0ec2f44a" +MAINTAINER="Adis Nezirovic" +EMAIL="adis _at_ linux.org.ba" +APPROVED="BP{k}" diff --git a/system/postgresql/postgresql.logrotate b/system/postgresql/postgresql.logrotate new file mode 100644 index 0000000000..c8724992e2 --- /dev/null +++ b/system/postgresql/postgresql.logrotate @@ -0,0 +1,8 @@ +/var/log/postgresql.log { + postrotate + /etc/rc.d/rc.postgresql reload 2>&1 > /dev/null + endscript + size=100k + rotate 5 + create 0640 postgres wheel +} diff --git a/system/postgresql/rc.postgresql.new b/system/postgresql/rc.postgresql.new new file mode 100644 index 0000000000..329b7b092d --- /dev/null +++ b/system/postgresql/rc.postgresql.new @@ -0,0 +1,118 @@ +#!/bin/bash + +# PostgreSQL startup script for Slackware Linux +# Copyright 2007 Adis Nezirovic +# Licensed under GNU GPL v2 + +# Do not source this script (since it contains exit() calls) + +# Before you can run postgresql you'll need to create the +# database files in /var/lib/pgsql. The following should do +# the trick. +# +# $ su postgres -c "initdb -D /var/lib/pgsql/data" +# + +LOGFILE=/var/log/postgresql +DATADIR=/var/lib/pgsql/data +POSTGRES=/usr/bin/postgres +PIDFILE=postmaster.pid + +# Return values (according to LSB): +# 0 - success +# 1 - generic or unspecified error +# 2 - invalid or excess argument(s) +# 3 - unimplemented feature (e.g. "reload") +# 4 - insufficient privilege +# 5 - program is not installed +# 6 - program is not configured +# 7 - program is not running + +pg_ctl() +{ + CMD="/usr/bin/pg_ctl $@" + su - postgres -c "$CMD" +} + +if [ ! -f $POSTGRES ]; then + echo "Could not find 'postgres' binary. Maybe PostgreSQL is not installed properly?" + exit 5 +fi + +case "$1" in + + "start") + echo "Starting PostgreSQL" + touch $LOGFILE + chown postgres:wheel $LOGFILE + chmod 0640 $LOGFILE + + if [ ! -e $DATADIR/PG_VERSION ]; then + echo "You should initialize the PostgreSQL database at location $DATADIR" + exit 6 + fi + + if [ `pgrep -f $POSTGRES` ]; then + + echo "PostgreSQL daemon already running" + if [ ! -f $DATADIR/$PIDFILE ]; then + echo "Warning: Missing pid file $DATADIR/$PIDFILE" + fi + exit 1 + + else # remove old socket, if it exists and no daemon is running. + + if [ ! -f $DATADIR/$PIDFILE ]; then + rm -f /tmp/.s.PGSQL.5432 + rm -f /tmp/.s.PGSQL.5432.lock + pg_ctl start -w -l $LOGFILE -D $DATADIR + exit 0 + else + echo "PostgreSQL daemon was not properly shut down" + echo "Please remove stale pid file $DATADIR/$PIDFILE" + exit 7 + fi + + fi + ;; + + "stop") + echo "Shutting down PostgreSQL..." + pg_ctl stop -l $LOGFILE -D $DATADIR -m smart + ;; + + "restart") + echo "Restarting PostgreSQL..." + pg_ctl restart -l $LOGFILE -D $DATADIR -m smart + ;; + + "reload") + echo "Reloading configuration for PostgreSQL..." + pg_ctl reload -l $LOGFILE -D $DATADIR -m smart + ;; + + "status") + if [ `pgrep -f $POSTGRES` ]; then + echo "PostgreSQL is running" + + if [ ! -e $DATADIR/$PIDFILE ]; then + echo "Warning: Missing pid file $DATADIR/$PIDFILE" + fi + + exit 0 + else + echo "PostgreSQL is stopped" + + if [ -e $DATADIR/$PIDFILE ]; then + echo "Detected stale pid file $DATADIR/$PIDFILE" + fi + + exit 0 + fi + ;; + + *) + echo "Usage: $0 {start|stop|status|restart|reload}" + exit 1 + ;; +esac diff --git a/system/postgresql/setup.postgresql b/system/postgresql/setup.postgresql new file mode 100644 index 0000000000..0c52cbf949 --- /dev/null +++ b/system/postgresql/setup.postgresql @@ -0,0 +1,33 @@ +#!/bin/bash +#BLURB="PostgreSQL" + +PG_HOME=/var/lib/pgsql +PG_USER=postgres +PG_USER_ID=26 +PG_GROUP=postgres +PG_GROUP_ID=26 + +echo "Adding PostgreSQL user and group..." +groupadd -g $PG_GROUP_ID $PG_GROUP +useradd -g $PG_GROUP -u $PG_USER_ID -d $PG_HOME -c PostgreSQL $PG_USER +mkdir -p $PG_HOME/data + +## default permissions +echo "Setting up permissions..." +chown -R $PG_USER:$PG_GROUP $PG_HOME +chmod 700 $PG_HOME +chmod 700 $PG_HOME/data + +## database cluster +if [ ! -f $PG_HOME/data/PG_VERSION ]; then + echo "Creating database cluster in $PG_HOME/data..." + su $PG_USER -c "initdb -D $PG_HOME/data" +else + echo "*** WARNING ***" >&2 + echo " There is already a database cluster in $PG_HOME/data." >&2 + echo " If you are upgrading from an older version of PostgreSQL" >&2 + echo " you will have to 'dump' and 'restore' your database." >&2 + echo " See PostgreSQL manual for more details." >&2 +fi + +echo "PostgreSQL post-installation setup completed" diff --git a/system/postgresql/slack-desc b/system/postgresql/slack-desc new file mode 100644 index 0000000000..5a15c63f8b --- /dev/null +++ b/system/postgresql/slack-desc @@ -0,0 +1,12 @@ + |-----handy-ruler-------------------------------------------------| +postgresql: PostgreSQL +postgresql: +postgresql: PostgreSQL is an advanced object-relational database management +postgresql: system (ORDBMS) based on POSTGRES. With more than 15 years of +postgresql: development history, it is quickly becoming the de facto +postgresql: database for enterprise level open source solutions. +postgresql: This build includes full text search support (tsearch2). +postgresql: +postgresql: Homepage: http://www.postgresql.org +postgresql: +postgresql: