[packages/uwsgi] Start uwsgi in the 'emperor' mode, convert old configs

jajcus jajcus at pld-linux.org
Wed Jun 12 13:37:48 CEST 2013


commit 0eec49127fd879fcad3b3a1770cd0832468a3154
Author: Jacek Konieczny <j.konieczny at eggsoft.pl>
Date:   Wed Jun 12 13:19:08 2013 +0200

    Start uwsgi in the 'emperor' mode, convert old configs
    
    Emperor mode is the suggested way to start system-wide uWSGI service.
    It will start separate uWSGI instance for every available config file.
    Instance configuration files are placed in /etc/uwsgi/vassals
    
    Old ini or xml configuration file will be converted and placed in the
    vassals directory on upgrade from older package. The convertion is not
    fail-proof, though.

 emperor.ini     | 17 +++++++++++++
 uwsgi.ini       |  6 -----
 uwsgi.init      | 23 ++++++-----------
 uwsgi.spec      | 78 +++++++++++++++++++++++++++++++++++++++++++++++----------
 uwsgi.sysconfig |  3 ---
 uwsgi.xml       |  7 ------
 6 files changed, 89 insertions(+), 45 deletions(-)
---
diff --git a/uwsgi.spec b/uwsgi.spec
index 943949c..4684025 100644
--- a/uwsgi.spec
+++ b/uwsgi.spec
@@ -23,10 +23,8 @@ Group:		Networking/Daemons
 Source0:	http://projects.unbit.it/downloads/%{name}-%{version}.tar.gz
 # Source0-md5:	93e561fcd4d7da48aafaf2a85095df58
 Source1:	%{name}.init
-Source2:	%{name}.xml
-Source3:	%{name}.ini
-Source4:	%{name}.sysconfig
-Source5:	%{name}.tmpfiles
+Source2:	emperor.ini
+Source3:	%{name}.tmpfiles
 Patch0:		%{name}-plugin_build_dir.patch
 URL:		http://projects.unbit.it/uwsgi/
 %{?with_xml:BuildRequires:	libxml2-devel}
@@ -50,6 +48,7 @@ BuildRequires:	python-devel >= 1:2.7
 BuildRequires:	python3-devel >= 1:2.7
 BuildRequires:	python3-modules
 %endif
+Suggests:	uwsgi-plugin-python
 BuildRoot:	%{tmpdir}/%{name}-%{version}-root-%(id -u -n)
 
 %define pyver %(echo %{py_ver} | tr -d .)
@@ -137,16 +136,14 @@ done
 rm -rf $RPM_BUILD_ROOT
 install -d $RPM_BUILD_ROOT{%{_bindir},%{_libdir}/%{name}} \
 	$RPM_BUILD_ROOT{%{_sysconfdir}/rc.d/init.d,%{_sysconfdir}/sysconfig} \
-	$RPM_BUILD_ROOT{%{_sysconfdir}/uwsgi,/var/{run/uwsgi,log}} \
+	$RPM_BUILD_ROOT{%{_sysconfdir}/uwsgi/vassals,/var/{run/uwsgi,log}} \
 	$RPM_BUILD_ROOT%{systemdtmpfilesdir}
 
 touch $RPM_BUILD_ROOT/var/log/%{name}.log
 install uwsgi $RPM_BUILD_ROOT%{_bindir}
 install %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/%{name}
-install %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/uwsgi/
-install %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/uwsgi/
-install %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/%{name}
-install %{SOURCE5} $RPM_BUILD_ROOT%{systemdtmpfilesdir}/%{name}.conf
+install %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/uwsgi/emperor.ini
+install %{SOURCE3} $RPM_BUILD_ROOT%{systemdtmpfilesdir}/%{name}.conf
 
 install *_plugin.so $RPM_BUILD_ROOT%{_libdir}/%{name}
 
@@ -185,15 +182,70 @@ if [ "$1" = "0" ]; then
 	%groupremove %{name}
 fi
 
+%triggerpostun -- %{name} < 1.9.12-1.1
+UWSGI_CONFIG_FORMAT="xml"
+[ -f /etc/sysconfig/uwsgi.rpmsave ] && . /etc/sysconfig/uwsgi.rpmsave || :
+if [ "$UWSGI_CONFIG_FORMAT" = "xml" ] ; then
+  if [ -f /etc/uwsgi/uwsgi.xml.rpmsave ] ; then
+    sed -e 's/<daemonize>.*<\/daemonize>//' \
+	-e 's/<uwsgi>/<uwsgi>\n<plugins>python,gevent,ping,cache,nagios,rrdtool,carbon,rpc,corerouter,fastrouter,http,ugreen,signal,syslog,rsyslog,logsocket,router_uwsgi,router_redirect,router_basicauth,zergpool,redislog,mongodblog,router_rewrite,router_http,logfile,router_cache,rawrouter<\/plugins>/' \
+	< /etc/uwsgi/uwsgi.xml.rpmsave \
+	> /etc/uwsgi/vassals/uwsgi.xml || :
+  else
+    cat >/etc/uwsgi/vassals/uwsgi.xml << 'EOF'
+<uwsgi>
+	<plugins>python,gevent,ping,cache,nagios,rrdtool,carbon,rpc,corerouter,fastrouter,http,ugreen,signal,syslog,rsyslog,logsocket,router_uwsgi,router_redirect,router_basicauth,zergpool,redislog,mongodblog,router_rewrite,router_http,logfile,router_cache,rawrouter</plugins>
+        <pidfile>/var/run/uwsgi/uwsgi.pid</pidfile>
+        <uid>uwsgi</uid>
+        <gid>uwsgi</gid>
+        <socket>/var/run/uwsgi/uwsgi.sock</socket>
+</uwsgi>
+EOF
+  fi
+elif [ "$UWSGI_CONFIG_FORMAT" = "ini" ] ; then
+  if [ -f /etc/uwsgi/uwsgi.ini.rpmsave ] ; then
+    mv /etc/uwsgi/vassals/uwsgi.ini{,.rpmorig}
+    sed -e 's/[ \t]*daemonize.*//' \
+	-e 's/^\[uwsgi\]/[uwsgi]\nplugins=python,gevent,ping,cache,nagios,rrdtool,carbon,rpc,corerouter,fastrouter,http,ugreen,signal,syslog,rsyslog,logsocket,router_uwsgi,router_redirect,router_basicauth,zergpool,redislog,mongodblog,router_rewrite,router_http,logfile,router_cache,rawrouter/' \
+	< /etc/uwsgi/uwsgi.ini.rpmsave \
+	> /etc/uwsgi/vassals/uwsgi.ini || :
+  else
+    cat >/etc/uwsgi/vassals/uwsgi.ini << 'EOF'
+[uwsgi]
+plugins = python,gevent,ping,cache,nagios,rrdtool,carbon,rpc,corerouter,fastrouter,http,ugreen,signal,syslog,rsyslog,logsocket,router_uwsgi,router_redirect,router_basicauth,zergpool,redislog,mongodblog,router_rewrite,router_http,logfile,router_cache,rawrouter
+socket = /var/run/uwsgi/uwsgi.sock
+uid = uwsgi
+gid = uwsgi
+pidfile = /var/run/uwsgi/uwsgi.pid
+EOF
+  fi
+fi
+
+if [ -f /var/run/uwsgi/uwsgi.pid ] ; then
+  # for the service restart to work
+  mv /var/run/uwsgi/uwsgi.pid /var/run/uwsgi-emperor.pid || :
+fi
+
+%banner -e %{name} << 'EOF'
+uWSGI instance configuration has been moved to 
+the %{_sysconfdir}/%{name}/vassals directory and
+updated to be started via uWSGI emperor with loadable plugins.
+
+The automatic configuration update might have failed, though.
+
+You should probably install uwsgi-plugin-python too.
+EOF
+
+%service %{name} restart
+
 %files
 %defattr(644,root,root,755)
-%dir %{_sysconfdir}/%{name}
 %doc README
 %attr(755,root,root) %{_bindir}/uwsgi
 %{systemdtmpfilesdir}/%{name}.conf
-%config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/uwsgi
-%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/uwsgi/uwsgi.xml
-%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/uwsgi/uwsgi.ini
+%dir %{_sysconfdir}/%{name}
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/uwsgi/emperor.ini
+%dir %{_sysconfdir}/%{name}/vassals
 %attr(754,root,root) /etc/rc.d/init.d/%{name}
 %attr(755,uwsgi,uwsgi) %dir /var/run/uwsgi
 %attr(644,uwsgi,uwsgi) %ghost /var/log/%{name}.log
diff --git a/emperor.ini b/emperor.ini
new file mode 100644
index 0000000..b9d9b6f
--- /dev/null
+++ b/emperor.ini
@@ -0,0 +1,17 @@
+
+; This configures the uWSGI Emperor, which starts individual
+; uWSGI instances (vassals) for available configs
+; 
+; Just put your uWSGI configuration file (.ini, .xml or .yaml)
+; into the /etc/uwsgi/vassals directory.
+
+[uwsgi]
+uid = uwsgi
+gid = uwsgi
+emperor = /etc/uwsgi/vassals
+binary-path = /usr/bin/uwsgi
+
+;; Uncomment the two lines below for the tyrant mode
+;; (running vassals with the configuration file's owner permissions)
+; emperor-tyrant = true
+; cap = setgid,setuid
diff --git a/uwsgi.ini b/uwsgi.ini
deleted file mode 100644
index d846b2f..0000000
--- a/uwsgi.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[uwsgi]
-socket = /var/run/uwsgi/uwsgi.sock
-daemonize = /var/log/uwsgi.log
-uid = uwsgi
-gid = uwsgi
-pidfile = /var/run/uwsgi/uwsgi.pid
diff --git a/uwsgi.init b/uwsgi.init
index a91c030..627e473 100644
--- a/uwsgi.init
+++ b/uwsgi.init
@@ -1,38 +1,29 @@
 #!/bin/sh
 # /etc/init.d/uwsgi
 #
-# php-fpm	Fast WSGI server
+# uwsgi		Fast WSGI server
 #
 # chkconfig:	345 80 30
 #
 # description:	Fast WSGI server
 #
 # processname:	uwsgi
-# config:	/etc/uwsgi/uwsgi.xml
-# pidfile:	/var/run/uwsgi/uwsgi.pid
+# config:	/etc/uwsgi/emperor.ini
+# pidfile:	/var/run/uwsgi-emperor.pid
 # Source function library
 . /etc/rc.d/init.d/functions
 
 # Get uwsgi system config
-. /etc/sysconfig/uwsgi
+[ -f /etc/sysconfig/uwsgi ] && . /etc/sysconfig/uwsgi
 
-
-PIDFILE=/var/run/uwsgi/uwsgi.pid
-CONF=/etc/uwsgi/uwsgi.$UWSGI_CONFIG_FORMAT
+PIDFILE=/var/run/uwsgi-emperor.pid
+CONF=/etc/uwsgi/emperor.ini
 
 # Carry out specific functions when asked to by the system
 start() {
 	if [ ! -f /var/lock/subsys/uwsgi ]; then
 		msg_starting "uWSGI"
-		if [ $UWSGI_CONFIG_FORMAT = "xml" ]; then
-        		daemon --pidfile $PIDFILE  /usr/bin/uwsgi -x $CONF
-		elif [ $UWSGI_CONFIG_FORMAT = "ini" ]; then
-        		daemon --pidfile $PIDFILE  /usr/bin/uwsgi --ini $CONF
-		else 
-			echo "Set proper config format in /etc/sysconfig/uwsgi"
-			exit 1
-		fi
-
+		daemon --pidfile $PIDFILE /usr/bin/uwsgi --pidfile $PIDFILE --ini $CONF --daemonize=/var/log/uwsgi.log
 		RETVAL=$?
 		[ $RETVAL -eq 0 ] && touch /var/lock/subsys/uwsgi
 	else
diff --git a/uwsgi.sysconfig b/uwsgi.sysconfig
deleted file mode 100644
index 41e20e1..0000000
--- a/uwsgi.sysconfig
+++ /dev/null
@@ -1,3 +0,0 @@
-# choose format for uwsgi config file
-
-UWSGI_CONFIG_FORMAT="xml"
diff --git a/uwsgi.xml b/uwsgi.xml
deleted file mode 100644
index 6dfd0e4..0000000
--- a/uwsgi.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<uwsgi>
-        <pidfile>/var/run/uwsgi/uwsgi.pid</pidfile>
-        <daemonize>/var/log/uwsgi.log</daemonize>
-        <uid>uwsgi</uid>
-        <gid>uwsgi</gid>
-        <socket>/var/run/uwsgi/uwsgi.sock</socket>
-</uwsgi>
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/uwsgi.git/commitdiff/a2e939cbb7c05d52b365b8e9dc13e9fe45d1a1bc



More information about the pld-cvs-commit mailing list