- Refine the dependencies between the "dummy" packages and the

actual implementation of PostgreSQL. The dummy packages now
  require an arbitrary implementation and recommend the default
  version.
- Move the contents of postgresql-init to the server package.

OBS-URL: https://build.opensuse.org/package/show/server:database:postgresql/postgresql?expand=0&rev=84
This commit is contained in:
Reinhard Max 2017-09-21 13:48:21 +00:00 committed by Git OBS Bridge
parent 5bb6fea7ae
commit 0f2fbd2c27
7 changed files with 402 additions and 11 deletions

4
postgresql-firewall Normal file
View File

@ -0,0 +1,4 @@
## Name: PostgreSQL Server
## Description: Opens TCP port 5432 to allow remote connections to the PostgreSQL server.
TCP="5432"

199
postgresql-init Normal file
View File

@ -0,0 +1,199 @@
#!/bin/sh
# Copyright (c) 1995-2004 SUSE Linux AG, Nuernberg, Germany.
# All rights reserved.
#
# System startup script for PostgreSQL
#
# LSB compatible service control script; see http://www.linuxbase.org/spec/
#
### BEGIN INIT INFO
# Provides: postgresql
# Required-Start: $network $remote_fs
# Required-Stop: $network $remote_fs
# Default-Start: 3 5
# Default-Stop:
# Description: Start the PostgreSQL master daemon
### END INIT INFO
# Source SuSE config
PG_SYSCONFIG=/etc/sysconfig/postgresql
test -f $PG_SYSCONFIG && . $PG_SYSCONFIG
# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v ditto but be verbose in local rc status
# rc_status -v -r ditto and clear the local rc status
# rc_failed set local and overall rc status to failed
# rc_reset clear local rc status (overall remains)
# rc_exit exit appropriate to overall rc status
. /etc/rc.status
eval DATADIR=${POSTGRES_DATADIR:-~postgres/data}
OPTIONS=${POSTGRES_OPTIONS}
PIDFILE=$DATADIR/postmaster.pid
# The echo return value for success (defined in /etc/rc.config).
rc_reset
# Return values acc. to LSB for all commands but status:
# 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
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signalling is not supported) are
# considered a success.
#
if test -r $DATADIR/PG_VERSION ; then
DATA_VERSION=$(cat $DATADIR/PG_VERSION)
POSTGRES=/usr/lib/postgresql${DATA_VERSION/./}/bin/postgres
fi
if test -x /usr/bin/postgres; then
ACTIVE=$(readlink -q -f /usr/bin/postgres)
test -z "$POSTGRES" && POSTGRES="$ACTIVE"
fi
if test -z "$POSTGRESQL_QUIET"; then
export POSTGRESQL_QUIET=1
if test -n "$DATA_VERSION"; then
if test -z "$ACTIVE" -o "$ACTIVE" != "$POSTGRES"; then
echo " Your database files were created by PostgreSQL version $DATA_VERSION."
if test -x "$POSTGRES"; then
echo " Using the executables in $(dirname $POSTGRES)."
else
echo " Could not find executables for this version."
echo " Please install the PostgreSQL server package for version $DATA_VERSION."
fi
fi
elif test -z "$ACTIVE"; then
echo " Cannot find an active PostgreSQL server binary. Please install one of the PostgreSQL"
echo " server packages or activate an already installed version using update-alternatives."
fi
fi
if test ! -x "$POSTGRES"; then
test "$1" = "stop" && exit 0 || exit 5
fi
BINDIR=$(dirname $POSTGRES)
VERSION=$($POSTGRES --version|awk '{print $NF}')
LOGFILE=$DATADIR/postmaster.log
pg_ctl () {
CMD="$BINDIR/pg_ctl ${POSTGRES_TIMEOUT:+-t $POSTGRES_TIMEOUT} $@"
su - postgres -c "$CMD"
}
case "$1" in
start)
if [ ! -f $DATADIR/PG_VERSION ]; then
echo -n "Initializing PostgreSQL $VERSION at location ${DATADIR}"
LANG_SYSCONFIG=/etc/sysconfig/language
test -f "$LANG_SYSCONFIG" && . $LANG_SYSCONFIG
LANG=${POSTGRES_LANG:-$RC_LANG}
INITDB=/usr/bin/initdb
V=$(printf "%02d%02d" $(echo $VERSION|awk -F. '{print $1, $2}'))
AUTH="ident"; test $V -lt 0804 && AUTH="ident sameuser"
install -d -o postgres -g postgres -m 700 ${DATADIR} &&
su - postgres -c \
"$INITDB --locale=$LANG --auth=\"$AUTH\" $DATADIR &> initlog" ||
rc_failed
rc_status -v
rc_status || {
echo "You can find a log of the initialisation in ~postgres/initlog ."
rc_exit
}
fi
echo -n "Starting PostgreSQL $VERSION "
if pg_ctl status -s -D $DATADIR >/dev/null
then
rc_failed 0
else
set -o pipefail
pg_ctl start -s -w -D $DATADIR -l $LOGFILE -o "\"$OPTIONS\""
fi
rc_status -v
;;
stop)
echo -n "Shutting down PostgreSQL $VERSION "
if pg_ctl status -s -D $DATADIR >/dev/null
then
pg_ctl stop -s -D $DATADIR -m fast &> /dev/null
else
rc_failed 0
fi
rc_status -v
;;
try-restart|condrestart)
## Do a restart only if the service was active before.
## Note: try-restart is now part of LSB (as of 1.9).
## RH has a similar command named condrestart.
if test "$1" = "condrestart"; then
echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
fi
$0 status
if test $? = 0; then
$0 restart
else
rc_reset # Not running is not a failure.
fi
# Remember status and be quiet
rc_status
;;
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
$0 start
rc_status
;;
force-reload | reload)
echo -n "Reloading configuration for PostgreSQL $VERSION "
pg_ctl reload -s -D $DATADIR
rc_status -v
;;
status)
echo -n "Checking for PostgreSQL $VERSION: "
## Check status with checkproc(8), if process is running
## checkproc will return with exit status 0.
# Status has a slightly different for the status command:
# 0 - service running
# 1 - service dead, but /var/run/ pid file exists
# 2 - service dead, but /var/lock/ lock file exists
# 3 - service not running
# NOTE: checkproc returns LSB compliant status values.
if ! pg_ctl status -s -D $DATADIR >/dev/null
then
if test -f $DATADIR/postmaster.pid; then
rc_failed 1
else
rc_failed 3
fi
fi
rc_status -v
;;
probe)
rc_failed 3
rc_status -v
;;
*)
echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
exit 1
;;
esac
# Inform the caller not only verbosely and set an exit status.
rc_exit

51
postgresql-sysconfig Normal file
View File

@ -0,0 +1,51 @@
## Path: Applications/PostgreSQL
## Description: The PostgreSQL Database System
## Type: string()
## Default: "~postgres/data"
## ServiceRestart: postgresql
#
# In which directory should the PostgreSQL database reside?
#
POSTGRES_DATADIR="~postgres/data"
## Path: Applications/PostgreSQL
## Description: The PostgreSQL Database System
## Type: string()
## Default: ""
## ServiceRestart: postgresql
#
# The options that are given to the PostgreSQL master daemon on startup.
# See the manual pages for postmaster and postgres for valid options.
#
# Don't put "-D datadir" here since it is set by the startup script
# based on the variable POSTGRES_DATADIR above.
#
POSTGRES_OPTIONS=""
## Path: Applications/PostgreSQL
## Description: The PostgreSQL Database System
## Type: string()
## Default: "600"
## ServiceRestart: postgresql
#
# This value controls how many seconds the pg_ctl helper program waits
# for the startup or shutdown of the PostgreSQL server to complete.
#
POSTGRES_TIMEOUT="600"
## Path: Applications/PostgreSQL
## Description: The PostgreSQL Database System
## Type: string()
## Default: "C"
## ServiceRestart: ""
#
# Specifies the locale under which the PostgreSQL database location
# should be initialized and run. If needed, it has to be changed
# before PostgreSQL is started for the first time. To change the
# locale of an existsing PostgreSQL database location, it must be
# dumped, removed and initialized from scratch using the new locale.
#
# If unset or empty $RC_LANG from /etc/sysconfig/language is used.
#
POSTGRES_LANG=""

2
postgresql-tmpfiles.conf Normal file
View File

@ -0,0 +1,2 @@
# For the PostgreSQL server's unix domain socket
d /var/run/postgresql 1777 root root -

View File

@ -1,3 +1,12 @@
-------------------------------------------------------------------
Thu Sep 21 07:59:26 UTC 2017 - max@suse.com
- Refine the dependencies between the "dummy" packages and the
actual implementation of PostgreSQL. The dummy packages now
require an arbitrary implementation and recommend the default
version.
- Move the contents of postgresql-init to the server package.
-------------------------------------------------------------------
Thu Aug 3 23:06:39 UTC 2017 - mrueckert@suse.de

19
postgresql.service Normal file
View File

@ -0,0 +1,19 @@
[Unit]
Description=PostgreSQL database server
After=syslog.target
After=network.target
[Service]
Type=forking
User=postgres
EnvironmentFile=-/etc/sysconfig/postgresql
ExecStart=/usr/lib/postgresql-init start
ExecStop=/usr/lib/postgresql-init stop
ExecReload=/usr/lib/postgresql-init reload
# The server might be slow to stop, and that's fine. Don't kill it
SendSIGKILL=no
[Install]
WantedBy=multi-user.target

View File

@ -17,6 +17,12 @@
%define defaultpackage postgresql10
%if 0%{?suse_version} >= 1300
%bcond_without systemd
%else
%bcond_with systemd
%endif
Name: postgresql
Summary: Basic Clients and Utilities for PostgreSQL
License: PostgreSQL
@ -25,10 +31,24 @@ Version: 10
Release: 0
Url: https://www.postgresql.org/
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Requires: %defaultpackage
Provides: postgresql-noarch = %version-%release
Requires: postgresql-implementation
Recommends: %defaultpackage
BuildArch: noarch
Source0: postgresql-bashprofile
Source0: postgresql-init
Source1: postgresql-sysconfig
Source2: postgresql-firewall
Source3: postgresql-tmpfiles.conf
Source4: postgresql.service
Source5: postgresql-bashprofile
%if 0%{?suse_version} > 1100
%define fwdir /etc/sysconfig/SuSEfirewall2.d/services
%define fwname postgresql
%else
%define fwdir /etc/sysconfig/scripts
%define fwname SuSEfirewall2-postgresql
%endif
%description
PostgreSQL is an advanced object-relational database management system
@ -45,7 +65,18 @@ package.
%package server
Summary: The Programs Needed to Create and Run a PostgreSQL Server
Group: Productivity/Databases/Servers
Requires: %defaultpackage-server
Provides: postgresql-server-noarch = %version-%release
Requires: postgresql-server-implementation
Recommends: %defaultpackage-server
Provides: postgresql-init = %version
Obsoletes: postgresql-init < %version
%if %{with systemd}
BuildRequires: pkgconfig(systemd)
%{?systemd_requires}
%else
Requires(postun): %insserv_prereq
%endif
%description server
PostgreSQL is an advanced object-relational database management system
@ -60,7 +91,9 @@ PostgreSQL databases.
%package docs
Summary: HTML Documentation for PostgreSQL
Group: Productivity/Databases/Tools
Requires: %defaultpackage-docs
Provides: postgresql-docs-noarch = %version-%release
Requires: postgresql-docs-implementation
Recommends: %defaultpackage-docs
%description docs
PostgreSQL is an advanced object-relational database management system
@ -76,7 +109,9 @@ postgresql package.
%package contrib
Summary: Contributed Extensions and Additions to PostgreSQL
Group: Productivity/Databases/Tools
Requires: %defaultpackage-contrib
Provides: postgresql-docs-noarch = %version-%release
Requires: postgresql-docs-implementation
Recommends: %defaultpackage-contrib
%description contrib
PostgreSQL is an advanced object-relational database management system
@ -94,7 +129,9 @@ Documentation for the modules contained in this package can be found in
%package devel
Summary: PostgreSQL development header files and libraries
Group: Productivity/Databases/Tools
Requires: %defaultpackage-devel
Provides: postgresql-devel-noarch = %version-%release
Requires: postgresql-devel-implementation
Recommends: %defaultpackage-devel
%description devel
PostgreSQL is an advanced object-relational database management system
@ -111,7 +148,9 @@ which will interact with a PostgreSQL server.
%package plperl
Summary: The PL/Tcl, PL/Perl, and PL/Python procedural languages for PostgreSQL
Group: Productivity/Databases/Servers
Requires: %defaultpackage-plperl
Provides: postgresql-plperl-noarch = %version-%release
Requires: postgresql-plperl-implementation
Recommends: %defaultpackage-plperl
%description plperl
PostgreSQL is an advanced object-relational database management system
@ -126,7 +165,9 @@ functions, and triggers.
%package plpython
Summary: The PL/Python Procedural Languages for PostgreSQL
Group: Productivity/Databases/Servers
Requires: %defaultpackage-plpython
Provides: postgresql-devel-noarch = %version-%release
Requires: postgresql-plpython-implementation
Recommends: %defaultpackage-plpython
%description plpython
PostgreSQL is an advanced object-relational database management system
@ -141,7 +182,9 @@ functions, and triggers.
%package pltcl
Summary: PL/Tcl Procedural Language for PostgreSQL
Group: Productivity/Databases/Tools
Requires: %defaultpackage-pltcl
Provides: postgresql-pltcl-noarch = %version-%release
Requires: postgresql-pltcl-implementation
Recommends: %defaultpackage-pltcl
%description pltcl
PostgreSQL is an advanced object-relational database management system
@ -158,8 +201,57 @@ echo "This is a dummy package to provide a dependency on the default PostgreSQL
%install
mkdir -p %buildroot/var/lib/pgsql/
sed 's,@LIBDIR@,%_libdir,g' %{SOURCE0} > \
%buildroot/var/lib/pgsql/.bash_profile
install -m640 %{SOURCE5} %buildroot/var/lib/pgsql/.bash_profile
install -m755 -d %buildroot/var/adm/fillup-templates
install -m644 %{S:1} %buildroot/var/adm/fillup-templates/sysconfig.postgresql
install -m755 -d %buildroot%fwdir
install -m644 %{S:2} %buildroot%fwdir/%fwname
install -m755 -d %buildroot/usr/sbin
%if %{with systemd}
install -m755 -d %buildroot/%_tmpfilesdir
install -m644 %{S:3} %buildroot%_tmpfilesdir/postgresql.conf
install -m755 -d %buildroot/usr/lib
install -m755 %{S:0} %buildroot/usr/lib
install -m755 -d %buildroot%_unitdir
install -m444 %{S:4} %buildroot%_unitdir
ln -sf service %buildroot/usr/sbin/rcpostgresql
%else
install -m755 -d %buildroot/etc/init.d
install -m755 %{S:0} %buildroot/etc/init.d/postgresql
ln -sf /etc/init.d/postgresql %buildroot/usr/sbin/rcpostgresql
%endif
%pre server
groupadd -g 26 -o -r postgres >/dev/null 2>/dev/null || :
useradd -g postgres -o -r -d /var/lib/pgsql -s /bin/bash \
-c "PostgreSQL Server" -u 26 postgres 2>/dev/null || :
%post server
%fillup_only -n postgresql
%if %{with systemd}
%tmpfiles_create %_tmpfilesdir/postgresql.conf
%service_add_post postgresql.service
%endif
%preun server
%if %{with systemd}
%service_del_preun postgresql.service
%else
%stop_on_removal postgresql
%endif
%postun server
%if %{with systemd}
%service_del_postun postgresql.service
%else
%insserv_cleanup
%endif
%files
%defattr(-,root,root,-)
@ -171,6 +263,21 @@ sed 's,@LIBDIR@,%_libdir,g' %{SOURCE0} > \
%attr(750,postgres,postgres) %dir /var/lib/pgsql
%attr(640,postgres,postgres) %config(noreplace) /var/lib/pgsql/.bash_profile
%if 0%{?suse_version} > 1110
%dir %fwdir
%endif
%config %fwdir/%fwname
/var/adm/fillup-templates/sysconfig.postgresql
/usr/sbin/rcpostgresql
%if %{with systemd}
%_tmpfilesdir/postgresql.conf
%_unitdir/
/usr/lib/*
%else
%config /etc/init.d/postgresql
%endif
%files docs
%defattr(-,root,root,-)
%doc README