summaryrefslogtreecommitdiffstats
path: root/rpm
diff options
context:
space:
mode:
Diffstat (limited to 'rpm')
-rw-r--r--rpm/README52
-rw-r--r--rpm/init-functions-compat12
-rw-r--r--rpm/postgresql-common.spec142
3 files changed, 206 insertions, 0 deletions
diff --git a/rpm/README b/rpm/README
new file mode 100644
index 0000000..a6a9067
--- /dev/null
+++ b/rpm/README
@@ -0,0 +1,52 @@
+postgresql-common for RedHat
+============================
+
+The postgresql-common framework was written for Debian/Ubuntu, but most parts
+of it work as well on other operating systems. The RPM port changes little in
+the original code, and even uses many files from the debian/ directory for
+building the packages.
+
+No separate PostgreSQL client/server packages are provided; the port is backed
+by the PGDG RPM packages from yum.postgresql.org.
+
+The filesystem layout is unchanged, /etc/postgresql, /etc/postgresql-common,
+and /var/lib/postgresql are used as before.
+
+Differences between the Debian and RedHat operating modes are:
+
+* /var/run/postgresql/ is still used for external pid files, but the default
+ unix socket directory is /tmp, to match the RPM packages' default.
+
+* The postgres system user home is /var/lib/pgsql.
+
+* The binroot is changed from /usr/lib/postgresql/ to /usr/pgsql-. (Note the
+ missing trailing slash, the idea is that the version number can just be
+ appended to the path, e.g. /usr/lib/postgresql/9.4/bin becomes
+ /usr/pgsql-9.4/bin.)
+
+* The various symlinks for frontend programs in /usr/bin like psql are not
+ direct symlinks to pg_wrapper, but are added as high-priority alternatives to
+ the alternatives symlinks set up by the PostgreSQL RPM packages.
+
+* SSL is disabled by default because there is no easily available snakeoil
+ certificate. Proper certificates can be configured in createcluster.conf.
+
+* No attempt is made to setup OOM killer protection for the postmaster process.
+
+* On Debian, the /etc/init.d/postgresql init script skips versions that have
+ their own /etc/init.d/postgresql-x.y init script, mostly for compatibility
+ with legacy packages before the advent of the postgresql-common framework.
+ The RPM packages provide /etc/init.d/postgresql-x.y scripts, which are
+ ignored by /etc/init.d/postgresql. The postgresql-x.y scripts will not do
+ anything as long as the user does not use them to create clusters in
+ /var/lib/pgsql. (In which case they continue to work as if postgresql-common
+ was not present.)
+
+* Debian's pre/postinst/rm maintainer scripts are not used. Mostly this means
+ there is no automatic integration of tsearch with system-provided
+ dictionaries.
+
+The postgresql-common testsuite is supported if perl-Test-Simple and
+perl-Time-HiRes are installed.
+
+ -- Christoph Berg <christoph.berg@credativ.de> Thu, 26 Jun 2014 16:59:47 +0200
diff --git a/rpm/init-functions-compat b/rpm/init-functions-compat
new file mode 100644
index 0000000..da13596
--- /dev/null
+++ b/rpm/init-functions-compat
@@ -0,0 +1,12 @@
+# Functions missing in older /lib/lsb/init-functions scripts
+
+function_exists () {
+ type $1 >/dev/null 2>&1
+}
+
+function_exists log_daemon_msg || log_daemon_msg () { echo -n "$1:${2:+ $2}"; }
+function_exists log_progress_msg || log_progress_msg () { echo -n " $1"; }
+function_exists log_end_msg || log_end_msg () { if [ $1 -eq 0 ]; then echo "."; else echo "failed!"; fi; }
+# this one exists, but we provide it anyway so we don't need to depend on redhat-lsb-core:
+function_exists log_warning_msg || log_warning_msg () { echo "$1"; }
+function_exists log_failure_msg || log_failure_msg () { echo "$1"; }
diff --git a/rpm/postgresql-common.spec b/rpm/postgresql-common.spec
new file mode 100644
index 0000000..ad24e63
--- /dev/null
+++ b/rpm/postgresql-common.spec
@@ -0,0 +1,142 @@
+Name: postgresql-common
+Version: %{version}
+Release: 1%{?dist}
+BuildArch: noarch
+Summary: PostgreSQL database-cluster manager
+Packager: Debian PostgreSQL Maintainers <pkg-postgresql-public@lists.alioth.debian.org>
+
+License: GPLv2+
+URL: https://packages.debian.org/sid/%{name}
+Source0: http://ftp.debian.org/debian/pool/main/p/%{name}/%{name}_%{version}.tar.xz
+Requires: postgresql-client-common
+
+%description
+The postgresql-common package provides a structure under which
+multiple versions of PostgreSQL may be installed and/or multiple
+clusters maintained at one time.
+
+%package -n postgresql-client-common
+Summary: manager for multiple PostgreSQL client versions
+%description -n postgresql-client-common
+The postgresql-client-common package provides a structure under which
+multiple versions of PostgreSQL client programs may be installed at
+the same time. It provides a wrapper which selects the right version
+for the particular cluster you want to access (with a command line
+option, an environment variable, /etc/postgresql-common/user_clusters,
+or ~/.postgresqlrc).
+
+%prep
+# unpack tarball, ignoring the name of the top level directory inside
+%setup -c
+mv */* .
+
+%build
+make
+
+%install
+rm -rf %{buildroot}
+# install in subpackages using the Debian files
+for inst in debian/*.install; do
+ pkg=$(basename $inst .install)
+ [ "$pkg" = "postgresql-server-dev-all" ] && continue
+ echo "### Reading $pkg files list from $inst ###"
+ while read file dir; do
+ mkdir -p %{buildroot}/$dir
+ cp -r $file %{buildroot}/$dir
+ echo "/$dir/${file##*/}" >> files-$pkg
+ done < $inst
+done
+# install manpages
+for manpages in debian/*.manpages; do
+ pkg=$(basename $manpages .manpages)
+ [ "$pkg" = "postgresql-server-dev-all" ] && continue
+ echo "### Reading $pkg manpages list from $manpages ###"
+ while read file; do
+ section="${file##*.}"
+ mandir="%{buildroot}%{_mandir}/man$section"
+ mkdir -p $mandir
+ for f in $file; do # expand wildcards
+ cp $f $mandir
+ echo "%doc %{_mandir}/man$section/$(basename $f).gz" >> files-$pkg
+ done
+ done < $manpages
+done
+# install pg_wrapper symlinks by augmenting the existing pgdg.rpm alternatives
+while read dest link; do
+ name="pgsql-$(basename $link)"
+ echo "update-alternatives --install /$link $name /$dest 9999" >> postgresql-client-common.post
+ echo "update-alternatives --remove $name /$dest" >> postgresql-client-common.preun
+done < debian/postgresql-client-common.links
+# activate rpm-specific tweaks
+sed -i -e 's/#redhat# //' \
+ %{buildroot}/usr/bin/pg_config \
+ %{buildroot}/usr/bin/pg_virtualenv \
+ %{buildroot}/usr/share/perl5/PgCommon.pm \
+ %{buildroot}/usr/share/postgresql-common/init.d-functions
+# install init script
+mkdir -p %{buildroot}/etc/init.d %{buildroot}/etc/logrotate.d
+cp debian/postgresql-common.postgresql.init %{buildroot}/etc/init.d/postgresql
+#cp debian/postgresql-common.postinst %{buildroot}/usr/share/postgresql-common
+cp rpm/init-functions-compat %{buildroot}/usr/share/postgresql-common
+# ssl defaults to 'off' here because we don't have pregenerated snakeoil certs
+sed -e 's/__SSL__/off/' createcluster.conf > %{buildroot}/etc/postgresql-common/createcluster.conf
+cp debian/postgresql-common.logrotate %{buildroot}/etc/logrotate.d/postgresql-common
+
+%if 0%{?rhel} >= 7
+# Prepare systemd unit files, but only for RHEL/CentOS 7 and above...
+pushd systemd
+DESTDIR=%{buildroot} gmake install
+sed -i -e 's/#redhat# //' %{buildroot}/lib/systemd/system-generators/postgresql-generator
+popd
+%endif
+
+%files -n postgresql-common -f files-postgresql-common
+%attr(0755, root, root) %config /etc/init.d/postgresql
+#%attr(0755, root, root) /usr/share/postgresql-common/postgresql-common.postinst
+/usr/share/postgresql-common/init-functions-compat
+%config /etc/postgresql-common/createcluster.conf
+%config /etc/logrotate.d/postgresql-common
+
+%if 0%{?rhel} >= 7
+%config /lib/systemd/system/postgresql.service
+%config /lib/systemd/system/postgresql@.service
+%config /lib/systemd/system-generators/postgresql-generator
+%endif
+
+%files -n postgresql-client-common -f files-postgresql-client-common
+
+%post
+# create postgres user
+groupadd -g 26 -o -r postgres >/dev/null 2>&1 || :
+useradd -M -n -g postgres -o -r -d /var/lib/pgsql -s /bin/bash \
+ -c "PostgreSQL Server" -u 26 postgres >/dev/null 2>&1 || :
+# create directories so postgres can create clusters without root
+install -d -o postgres -g postgres /etc/postgresql /var/lib/postgresql /var/lib/pgsql /var/log/postgresql /var/run/postgresql
+# install logrotate config
+version_lt () {
+ newest=$( ( echo "$1"; echo "$2" ) | sort -V | tail -n1)
+ [ "$1" != "$newest" ]
+}
+lrversion=$(rpm --queryformat '%{VERSION}' -q logrotate)
+if version_lt $lrversion 3.8; then
+ echo "Adjusting /etc/logrotate.d/postgresql-common for logrotate version $lrversion"
+ sed -i -e '/ su /d' /etc/logrotate.d/postgresql-common || :
+fi
+
+%post -n postgresql-client-common -f postgresql-client-common.post
+update-alternatives --install /usr/bin/ecpg pgsql-ecpg /usr/share/postgresql-common/pg_wrapper 9999
+
+%preun -n postgresql-client-common -f postgresql-client-common.preun
+update-alternatives --remove pgsql-ecpg /usr/share/postgresql-common/pg_wrapper
+
+%changelog
+* Tue Sep 29 2020 Christoph Berg <myon@debian.org> 217-1
+- Drop postgresql-server-dev-all package, it's debian-specific only.
+* Fri Dec 09 2016 Bernd Helmle <bernd.helmle@credativ.de> 177-1
+- New upstream release 177
+* Fri Jun 03 2016 Bernd Helmle <bernd.helmle@credativ.de> 174-2
+- Fix package dependencies and systemd integration
+* Thu Aug 7 2014 Christoph Berg <christoph.berg@credativ.de> 160-1
+- Omit the LD_PRELOAD logic in pg_wrapper
+* Thu Jun 5 2014 Christoph Berg <christoph.berg@credativ.de> 158-1
+- Initial specfile version