[packages/postgresql] systemd units added

jajcus jajcus at pld-linux.org
Sun Mar 9 16:35:09 CET 2014


commit d183f71c6d75ef9c7deaddc2ea817c183f478907
Author: Jacek Konieczny <jajcus at jajcus.net>
Date:   Sun Mar 9 16:18:50 2014 +0100

    systemd units added
    
    Attempt to keep 'service postgresql stop/start/reload/restart' work
    as it used to, but to have each postgresql instance individually managed
    by systemd.
    
    Release: 2

 postgresql.service   | 13 ++++++++++++
 postgresql.spec      | 56 ++++++++++++++++++++++++++++++++++++++++++++++------
 postgresql.sysconfig |  4 ++++
 postgresql.target    |  2 ++
 postgresql at .service  | 15 ++++++++++++++
 5 files changed, 84 insertions(+), 6 deletions(-)
---
diff --git a/postgresql.spec b/postgresql.spec
index 8d14049..79ddbb0 100644
--- a/postgresql.spec
+++ b/postgresql.spec
@@ -33,7 +33,7 @@ Summary(uk.UTF-8):	PostgreSQL - система керування базами 
 Summary(zh_CN.UTF-8):	PostgreSQL 客户端程序和库文件
 Name:		postgresql
 Version:	%{mver}.3
-Release:	1
+Release:	2
 License:	BSD
 Group:		Applications/Databases
 Source0:	ftp://ftp.postgresql.org/pub/source/v%{version}/%{name}-%{version}.tar.bz2
@@ -42,8 +42,11 @@ Source1:	%{name}.init
 Source2:	pgsql-Database-HOWTO-html.tar.gz
 # Source2-md5:	5b656ddf1db41965761f85204a14398e
 Source3:	%{name}.sysconfig
-Source5:	%{name}.upstart
-Source6:	%{name}-instance.upstart
+Source4:	%{name}@.service
+Source5:	%{name}.service
+Source6:	%{name}.target
+Source7:	%{name}.upstart
+Source8:	%{name}-instance.upstart
 Patch0:		%{name}-conf.patch
 Patch1:		%{name}-absolute_dbpaths.patch
 Patch2:		%{name}-ecpg-includedir.patch
@@ -78,7 +81,7 @@ BuildRequires:	python-devel >= 1:2.3
 BuildRequires:	python-modules >= 1:2.3
 %endif
 BuildRequires:	readline-devel >= 4.2
-BuildRequires:	rpmbuild(macros) >= 1.268
+BuildRequires:	rpmbuild(macros) >= 1.671
 %{?with_tcl:BuildRequires:	tcl-devel >= 8.4.3}
 %{?with_tests:BuildRequires:	tzdata}
 BuildRequires:	zlib-devel
@@ -92,6 +95,7 @@ Requires(triggerpostun):	/usr/sbin/usermod
 Requires:	%{name}-clients = %{version}-%{release}
 Requires:	%{name}-libs = %{version}-%{release}
 Requires:	rc-scripts >= 0.4.3.0
+Requires:	systemd-units >= 38
 Requires:	tzdata
 Obsoletes:	postgresql-module-plpgsql
 Obsoletes:	postgresql-module-tsearch2
@@ -831,6 +835,7 @@ install -d $RPM_BUILD_ROOT{%{_sysconfdir},/etc/{rc.d/init.d,sysconfig,init/%{nam
 	$RPM_BUILD_ROOT{/var/{lib/pgsql,log},%{_pgsqldir}} \
 	$RPM_BUILD_ROOT%{_examplesdir}/%{name}-%{version} \
 	$RPM_BUILD_ROOT%{_mandir} \
+	$RPM_BUILD_ROOT{%{systemdunitdir},/etc/systemd/system/%{name}.target.requires} \
 	$RPM_BUILD_ROOT/home/services/postgres
 
 install src/tutorial/*.sql $RPM_BUILD_ROOT%{_examplesdir}/%{name}-%{version}
@@ -855,8 +860,12 @@ touch $RPM_BUILD_ROOT/var/log/pgsql
 install %{SOURCE1} $RPM_BUILD_ROOT/etc/rc.d/init.d/postgresql
 install %{SOURCE3} $RPM_BUILD_ROOT/etc/sysconfig/postgresql
 
-install %{SOURCE5} $RPM_BUILD_ROOT/etc/init/%{name}.conf
-install %{SOURCE6} $RPM_BUILD_ROOT/etc/init/%{name}/instance.conf
+install %{SOURCE4} $RPM_BUILD_ROOT%{systemdunitdir}/%{name}@.service
+install %{SOURCE5} $RPM_BUILD_ROOT%{systemdunitdir}/%{name}.service
+install %{SOURCE6} $RPM_BUILD_ROOT%{systemdunitdir}/%{name}.target
+
+install %{SOURCE7} $RPM_BUILD_ROOT/etc/init/%{name}.conf
+install %{SOURCE8} $RPM_BUILD_ROOT/etc/init/%{name}/instance.conf
 
 install -d howto
 tar zxf %{SOURCE2} -C howto
@@ -948,12 +957,43 @@ fi
 %post
 /sbin/chkconfig --add postgresql
 %service postgresql restart "postgresql server"
+if [ "$1" -eq "1" ]; then
+	PG_DB_CLUSTERS=""
+	[ -f /etc/sysconfig/postgresql ] && . /etc/sysconfig/postgresql
+	export SYSTEMD_LOG_LEVEL=warning SYSTEMD_LOG_TARGET=syslog
+	for pgdir in $PG_DB_CLUSTERS; do
+		instance="$(echo "$pgdir" | sed -e 's/^\///;s/-/\\x2d/g;s/@/\\x40/g;s/\//-/g')"
+		/bin/systemctl --quiet enable "postgresql@$instance.service" || :
+	done
+fi
+%systemd_post postgresql.service
 
 %preun
 if [ "$1" = "0" ]; then
 	%service postgresql stop
 	/sbin/chkconfig --del postgresql
+
+	PG_DB_CLUSTERS=""
+	[ -f /etc/sysconfig/postgresql ] && . /etc/sysconfig/postgresql
+	export SYSTEMD_LOG_LEVEL=warning SYSTEMD_LOG_TARGET=syslog
+	for pgdir in $PG_DB_CLUSTERS; do
+		instance="$(echo "$pgdir" | sed -e 's/^\///;s/-/\\x2d/g;s/@/\\x40/g;s/\//-/g')"
+		/bin/systemctl --quiet disable "postgresql@$instance.service" || :
+	done
 fi
+%systemd_preun postgresql.service
+
+%postun
+%systemd_reload
+
+%triggerpostun -- %{name} < 9.3.3-2
+PG_DB_CLUSTERS=""
+[ -f /etc/sysconfig/postgresql ] && . /etc/sysconfig/postgresql
+for pgdir in $PG_DB_CLUSTERS; do
+	instance="$(echo "$pgdir" | sed -e 's/^\///;s/-/\\x2d/g;s/@/\\x40/g;s/\//-/g')"
+	/bin/systemctl --quiet enable "postgresql@$instance.service" || :
+done
+%systemd_trigger postgresql.service
 
 %post upstart
 %upstart_post postgresql
@@ -972,6 +1012,10 @@ fi
 %doc COPYRIGHT README HISTORY doc/{bug.template,KNOWN_BUGS,MISSING_FEATURES,TODO}
 %attr(754,root,root) /etc/rc.d/init.d/postgresql
 %attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/postgresql
+%{systemdunitdir}/%{name}.service
+%{systemdunitdir}/%{name}@.service
+%{systemdunitdir}/%{name}.target
+%dir /etc/systemd/system/%{name}.target.requires
 
 %attr(755,root,root) %{_bindir}/initdb
 %attr(755,root,root) %{_bindir}/pg_basebackup
diff --git a/postgresql.service b/postgresql.service
new file mode 100644
index 0000000..61bb968
--- /dev/null
+++ b/postgresql.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=PostgreSQL server
+Wants=postgresql.target
+After=postgresql.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/bin/systemctl is-active postgresql.target
+ExecReload=/bin/true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/postgresql.sysconfig b/postgresql.sysconfig
index 1e38c03..f3f4735 100644
--- a/postgresql.sysconfig
+++ b/postgresql.sysconfig
@@ -5,6 +5,10 @@
 # PostgreSQL. If you want to start more than one PostgreSQL instance,
 # you should change TCP/IP port, at least.
 #
+# Under systemd each cluster is started under a different postgresql at .service
+# instance, the default being postgresql at var-lib-pgsql.service
+#
+# To enable a new one use;  /bin/systemctl enable postgresql@${instance}.service
 
 # locale used at service postgresql init
 # PG_INIT_LOCALE=C
diff --git a/postgresql.target b/postgresql.target
new file mode 100644
index 0000000..e8c6d17
--- /dev/null
+++ b/postgresql.target
@@ -0,0 +1,2 @@
+[Unit]
+Description=PostgreSQL server instances
diff --git a/postgresql at .service b/postgresql at .service
new file mode 100644
index 0000000..4eb4761
--- /dev/null
+++ b/postgresql at .service
@@ -0,0 +1,15 @@
+[Unit]
+Description=PostgreSQL database server at %f
+PartOf=postgresql.target postgresql.service
+ReloadPropagatedFrom=postgresql.service
+
+[Service]
+Type=forking
+User=postgres
+ExecStart=/usr/bin/pg_ctl -D %f start -w -s
+ExecStop=/usr/bin/pg_ctl -D %f stop -w -s -m fast
+ExecReload=/usr/bin/pg_ctl -D %f reload -w -s
+PIDFile=%f/postmaster.pid
+
+[Install]
+RequiredBy=postgresql.target
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/postgresql.git/commitdiff/d183f71c6d75ef9c7deaddc2ea817c183f478907



More information about the pld-cvs-commit mailing list