Skip to content

Commit

Permalink
system/postgresql15: Added (Object-relational DBMS).
Browse files Browse the repository at this point in the history
Signed-off-by: Andrew Clemons <[email protected]>
  • Loading branch information
willysr authored and aclemons committed Dec 14, 2024
1 parent 37a8f3c commit 0398060
Show file tree
Hide file tree
Showing 9 changed files with 574 additions and 0 deletions.
14 changes: 14 additions & 0 deletions system/postgresql15/README
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
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.

Before you can run postgresql you'll need to create the database;
please see README.SBo.

You need a "postgres" user and group prior to building postgresql.
Something like this will suffice for most systems:
groupadd -g 209 postgres
useradd -u 209 -g 209 -d /var/lib/pgsql postgres
Feel free to use a different uid and gid if desired, but 209 is
recommended to avoid conflicts with other stuff from SlackBuilds.org.
60 changes: 60 additions & 0 deletions system/postgresql15/README.SBo
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
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/15/data --locale=en_US.UTF-8 -A md5 -W"

Additionally, a logrotation script and init script are included.
For production level log file handling please read
https://www.postgresql.org/docs/15/logfile-maintenance.html

In order to start postgresql at boot and stop it properly at shutdown,
make sure rc.postgresql is executable and 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, rc.postgresql script has additional modes for stop/restart:
force-stop|force-restart (i.e. pg_ctl 'fast' mode)
unclean-stop|unclean-restart (i.e. pg_ctl 'immediate' mode)
See https://www.postgresql.org/docs/15/app-pg-ctl.html

From PostgreSQL 9.3 we support in place database upgrades using pg_upgrade:
https://www.postgresql.org/docs/15/pgupgrade.html

A few hints for PostgreSQL 14.x -> 15.x upgrade:
- Don't remove old PostgreSQL 14.x package (yet)
- Install PostgreSQL 15.x, note that binaries are in
'/usr/lib64/postgresql15/15/bin'
- Create database file for postgresql 15
# su postgres -c "initdb -D /var/lib/pgsql/15/data --locale=en_US.UTF-8 -A md5 -W"
- Adjust the pg_hba.conf in postgresql 15 to allow postgres user to connect
- Run pg_upgrade (as postgres user)
$ pg_upgrade --old-datadir /var/lib/pgsql/14/data/ --new-datadir /var/lib/pgsql/15/data/ --old-bindir /usr/lib64/postgresql/14/bin/ --new-bindir /usr/lib64/postgresql15/15/bin/ -U postgres
- Start postgresql 15 service
- Optionally, vacuum all database
/usr/lib{64}/postgresql15/15/bin/vacuumdb -U postgres --all --analyze-in-stages
To remove old's cluster data files, run:
./delete_old_cluster.sh
- Remove old package when transition is over, or read comments in
rc.postgresql if you want to run multiple PostgreSQL versions in parallel

This script builds postgresql with some useful extension modules from
the contrib directory, see PG_EXTENSIONS in SlackBuild file.
To build PostgreSQL with all extensions, use the following command:

# PG_EXTENSIONS=ALL ./postgresql.SlackBuild

Please note that in order to actually use extension, you must execute
'CREATE EXTENSION [ IF NOT EXISTS ] extension_name' for each extension.
40 changes: 40 additions & 0 deletions system/postgresql15/doinst.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
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...
}

preserve_perms() {
NEW="$1"
OLD="$(dirname $NEW)/$(basename $NEW .new)"
if [ -e $OLD ]; then
cp -a $OLD ${NEW}.incoming
cat $NEW > ${NEW}.incoming
mv ${NEW}.incoming $NEW
fi
config $NEW
}

preserve_perms etc/rc.d/rc.postgresql15.new
config etc/logrotate.d/postgresql15.new

# Create default program symlinks in /usr/bin
(
cd usr/bin
for pg_binary in ../lib@LIBDIRSUFFIX@/@PRGNAM@/@PG_VERSION@/bin/*; do
pg_prog=$(basename $pg_binary)
if [ -L $pg_prog ]; then
ln -sf $pg_binary
elif [ ! -e $pg_prog ]; then
# make sure we don't overwrite actual binaries
ln -s $pg_binary
fi
done
)

216 changes: 216 additions & 0 deletions system/postgresql15/postgresql15.SlackBuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
#!/bin/bash

# Slackware build script for PostgreSQL
#
# Copyright 2007-2018 Adis Nezirovic <adis_at_linux.org.ba>
# Copyright 2024 Willy Sudiarto Raharjo <[email protected]>
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

cd $(dirname $0) ; CWD=$(pwd)

PRGNAM=postgresql15
SRCNAM=postgresql
VERSION=${VERSION:-15.10}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}

PG_VERSION=${PG_VERSION:-15}
PG_PORT=${PG_PORT:-5432}
PG_UID=${PG_UID:-209}
PG_GID=${PG_GID:-209}

if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi

if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
exit 0
fi

TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

# 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 > /dev/null 2>&1 ; then
echo " You must have a postgres group to run this script."
echo " # groupadd -g $PG_GID postgres"
exit 1
elif ! grep ^postgres: /etc/passwd > /dev/null 2>&1 ; then
echo " You must have a postgres user to run this script."
echo " # useradd -u $PG_UID -g $PG_GID -d /var/lib/pgsql postgres"
exit 1
fi

# Enable NLS builds using 'ENABLE_NLS=1 ./postgresql.SlackBuild'
if [ ! -z $ENABLE_NLS ];then
NLS=enable
else
NLS=disable
fi

if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi

set -e

rm -rf $TMP/$SRCNAM-$VERSION $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
tar xvf $CWD/$SRCNAM-$VERSION.tar.gz
cd $SRCNAM-$VERSION
chown -R root:root .
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
-o -perm 511 \) -exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;

CFLAGS="$SLKCFLAGS" \
PYTHON="/usr/bin/python3" \
./configure \
--prefix=/usr/lib${LIBDIRSUFFIX}/$PRGNAM/$PG_VERSION \
--sysconfdir=/etc/$PRGNAM/$PG_VERSION \
--includedir=/usr/include \
--datarootdir=/usr/share \
--mandir=/usr/man \
--docdir=/usr/doc/$PRGNAM-$VERSION \
--datadir=/usr/share/$PRGNAM-$PG_VERSION \
--with-openssl \
--with-tcl \
--with-perl \
--with-python \
--with-libxml \
--with-libxslt \
--enable-thread-safety \
--with-system-tzdata=/usr/share/zoneinfo \
--$NLS-nls \
--build=$ARCH-slackware-linux

make
make install-strip DESTDIR=$PKG
make install-docs DESTDIR=$PKG

# 20220414 bkw: this one binary wasn't getting stripped...
strip $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/$PG_VERSION/bin/pg_config

# create symlinks to shared library for other programs to link against
( cd $PKG/usr/lib${LIBDIRSUFFIX}
for i in $(ls $PRGNAM/$PG_VERSION/lib/lib*.so*) ; do ln -sf $i ; done
)

# create symlinks to pkg-config scripts
( mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig
cd $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig
for i in $(ls ../$PRGNAM/$PG_VERSION/lib/pkgconfig/*) ; do ln -sf $i ; done
)

# Some interesting additional modules:
# https://www.postgresql.org/docs/15/contrib.html
#
# adminpack - helper extension for pgAdmin
# pgcrypto - extension for some business applications
# ltree, xml2 - useful extensions for developers
# postgres_fdw - foreign-data wrapper for access to external PostgreSQL servers
# file_fdw - foreign-data wrapper for access to data files on filesystem

PG_EXTENSIONS=${PG_EXTENSIONS:-"adminpack pgcrypto ltree xml2 postgres_fdw file_fdw hstore citext"}

if [ "$PG_EXTENSIONS" = "ALL" ];then
cd $TMP/$SRCNAM-$VERSION/contrib
make all
make install-strip DESTDIR=$PKG
else
for ext in $PG_EXTENSIONS; do
cd $TMP/$SRCNAM-$VERSION/contrib/$ext
make
make install-strip DESTDIR=$PKG
done
fi

cd $TMP/$SRCNAM-$VERSION

find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done

cp -a COPYRIGHT HISTORY README doc/KNOWN_BUGS doc/MISSING_FEATURES doc/TODO $PKG/usr/doc/$PRGNAM-$VERSION/
rm -rf $PKG/usr/doc/$PRGNAM-$VERSION/{man.tar.gz,man1,manl,man7,postgres.tar.gz}
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
cat $CWD/README.SBo > $PKG/usr/doc/$PRGNAM-$VERSION/README.SBo

# base database directory
# assumes you are using /var/lib/pgsql as a homedir for postgres user
mkdir -p $PKG/var/lib/pgsql/$PG_VERSION/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/$PG_VERSION/data

# Install init script
mkdir -p $PKG/etc/rc.d
sed -e "s%@PG_VERSION@%$PG_VERSION%" \
-e "s%@PRGNAM@%$PRGNAM%" \
-e "s%@PG_PORT@%$PG_PORT%" \
-e "s%@LIBDIRSUFFIX@%$LIBDIRSUFFIX%" \
$CWD/rc.$PRGNAM.new > $PKG/etc/rc.d/rc.$PRGNAM.new
chmod 0755 $PKG/etc/rc.d/rc.$PRGNAM.new

# Install logrotate script
mkdir -p $PKG/etc/logrotate.d
sed -e "s%@PG_VERSION@%$PG_VERSION%" \
-e "s%@PRGNAM@%$PRGNAM%" \
$CWD/$PRGNAM.logrotate > $PKG/etc/logrotate.d/$PRGNAM.new

mkdir -p $PKG/var/log/setup
sed -e "s%@UID@%$PG_UID%" \
-e "s%@GID@%$PG_GID%" \
-e "s%@PG_VERSION@%$PG_VERSION%" \
$CWD/setup.$PRGNAM > $PKG/var/log/setup/setup.$PRGNAM
chmod 755 $PKG/var/log/setup/setup.$PRGNAM

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
sed -e "s%@PG_VERSION@%$PG_VERSION%" \
-e "s%@PRGNAM@%$PRGNAM%" \
-e "s%@LIBDIRSUFFIX@%$LIBDIRSUFFIX%" \
$CWD/doinst.sh > $PKG/install/doinst.sh

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
10 changes: 10 additions & 0 deletions system/postgresql15/postgresql15.info
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
PRGNAM="postgresql15"
VERSION="15.10"
HOMEPAGE="https://www.postgresql.org"
DOWNLOAD="https://ftp.postgresql.org/pub/source/v15.10/postgresql-15.10.tar.gz"
MD5SUM="5dbee44cb2cca9e02694f9b0438e254c"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="Willy Sudiarto Raharjo"
EMAIL="[email protected]"
9 changes: 9 additions & 0 deletions system/postgresql15/postgresql15.logrotate
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/var/log/@PRGNAM@-@PG_VERSION@ {
daily
rotate 7
copytruncate
delaycompress
compress
notifempty
missingok
}
Loading

0 comments on commit 0398060

Please sign in to comment.