[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