From e860c3d2532a7ed1a0c55a6c12b80f51746e54bbfda07a54170d287fa12a74ec Mon Sep 17 00:00:00 2001 From: James Oakley Date: Fri, 31 May 2013 18:42:21 +0000 Subject: [PATCH 1/7] - Deprecated init script and sysconfig file in favor of systemd service and a default configuration file /etc/uwsgi/uwsgi.ini - Update README to describe important changes - Removed separate packages for plugins that have no uncommon requirements - Update to 1.9.11 * Fixed Python 3 stdout/stderr buffering * Fixed mule messages (@mulefunc is now reliable) * Fixed SCRIPT_NAME handling in dynamic mode * Fixed X-Sendfile with gzip static mode * Fixed cache item maximum size with custom block size * Fixed cache path handling * Added the new high-performance PyPy plugin * You can now avoid overlapping crons using --unique-cron. The uWSGI master will track death of a single task, and until its death the same cron will not be triggered * A key/value variant of the --cron option is now available * When using the cron2 option you are allowed to set a harakiri timeout for a cron task. Just add harakiri=n to the options * Added support for GNU Hurd * A new offload engine named "memory" allows to offload memory transfers. The cache router automatically supports it. To enable it just add --offload-threads * An example websocket chat using Redis has been added to the repository * You can now define a routing table to be executed as soon as you set the HTTP status code in your plugin * Generally the wsgi.file_wrapper callable expects a file-like object. PEP 333/3333 reports a special pattern when the object is not a file (call read() until the object is consumed). uWSGI now supports this pattern (even if in a hacky way) * When using --http-keepalive you can now hold the connection open even if OBS-URL: https://build.opensuse.org/package/show/server:http/uwsgi?expand=0&rev=5 --- README.openSUSE | 21 +- uwsgi-1.2.6-plugin_build_path.patch | 11 - uwsgi-1.2.6.tar.gz | 3 - uwsgi-1.9.11-no-LD_RUN_PATH.patch | 56 +++ uwsgi-1.9.11-plugin_build_path.patch | 14 + uwsgi-1.9.11.tar.gz | 3 + uwsgi.changes | 311 +++++++++++++ uwsgi.ini | 3 + uwsgi.init | 99 ---- uwsgi.service | 11 + uwsgi.spec | 646 +++++++++++++-------------- uwsgi.sysconfig | 35 -- 12 files changed, 713 insertions(+), 500 deletions(-) delete mode 100644 uwsgi-1.2.6-plugin_build_path.patch delete mode 100644 uwsgi-1.2.6.tar.gz create mode 100644 uwsgi-1.9.11-no-LD_RUN_PATH.patch create mode 100644 uwsgi-1.9.11-plugin_build_path.patch create mode 100644 uwsgi-1.9.11.tar.gz create mode 100644 uwsgi.ini delete mode 100644 uwsgi.init create mode 100644 uwsgi.service delete mode 100644 uwsgi.sysconfig diff --git a/README.openSUSE b/README.openSUSE index eddcb57..81c9a76 100644 --- a/README.openSUSE +++ b/README.openSUSE @@ -2,17 +2,25 @@ openSUSE uWSGI Notes ==================== +Upgrading from 1.2.6 +-------------------- + +The init script and the sysconfig file /etc/sysconfig/uwsgi are now deprecated +in favor of a systemd service and a default configuration file +/etc/uwsgi/uwsgi.ini. + Emperor Mode ------------ -The included init script runs uWSGI in Emperor mode. It will monitor the -/etc/uwsgi/vassals directory for configurations and will automatically load -and restart uWSGI processes when configuration files are placed there or -modified. Some example configurations are provided in the directory. To enable -one, rename it without the .example at the end and edit for your application. +The included uwsgi service runs uWSGI in Emperor mode by defgault. It will +monitor the /etc/uwsgi/vassals directory for configurations and will +automatically load and restart uWSGI processes when configuration files are +placed there or modified. Some example configurations are provided in the +directory. To enable one, rename it without the .example at the end and edit +for your application. For more information on Emperor mode, see -http://projects.unbit.it/uwsgi/wiki/Emperor +https://uwsgi-docs.readthedocs.org/en/latest/Emperor.html Plugins @@ -32,4 +40,3 @@ encounters options for those plugins in the configuration. To enable that, use the following in the configuration: autoload = 1 - diff --git a/uwsgi-1.2.6-plugin_build_path.patch b/uwsgi-1.2.6-plugin_build_path.patch deleted file mode 100644 index c243ae1..0000000 --- a/uwsgi-1.2.6-plugin_build_path.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/uwsgiconfig.py -+++ b/uwsgiconfig.py -@@ -902,7 +902,7 @@ def build_plugin(path, uc, cflags, ldfla - except: - pass - -- plugin_dest = uc.get('plugin_dir') + '/' + name + '_plugin' -+ plugin_dest = name + '_plugin' - - shared_flag = '-shared' - diff --git a/uwsgi-1.2.6.tar.gz b/uwsgi-1.2.6.tar.gz deleted file mode 100644 index c78f9d6..0000000 --- a/uwsgi-1.2.6.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:49d2fbedbd42b3c95a684f7ddf43302f881297f3614c7edd0af4a4c44e2032a5 -size 515869 diff --git a/uwsgi-1.9.11-no-LD_RUN_PATH.patch b/uwsgi-1.9.11-no-LD_RUN_PATH.patch new file mode 100644 index 0000000..8b268f0 --- /dev/null +++ b/uwsgi-1.9.11-no-LD_RUN_PATH.patch @@ -0,0 +1,56 @@ +--- a/plugins/jvm/uwsgiplugin.py ++++ b/plugins/jvm/uwsgiplugin.py +@@ -59,11 +59,6 @@ if "-framework JavaVM" in JVM_LIBPATH: + + GCC_LIST = ['jvm_plugin'] + +-if 'LD_RUN_PATH' in os.environ: +- os.environ['LD_RUN_PATH'] += ':' + JVM_LIBPATH[0][2:] +-else: +- os.environ['LD_RUN_PATH'] = JVM_LIBPATH[0][2:] +- + def post_build(config): + if os.system("javac %s/plugins/jvm/uwsgi.java" % os.getcwd()) != 0: + os._exit(1) +--- a/plugins/php/uwsgiplugin.py ++++ b/plugins/php/uwsgiplugin.py +@@ -22,7 +22,6 @@ CFLAGS = [os.popen(PHPPATH + ' --include + LDFLAGS = os.popen(PHPPATH + ' --ldflags').read().rstrip().split() + if ld_run_path: + LDFLAGS.append('-L%s' % ld_run_path) +- os.environ['LD_RUN_PATH'] = ld_run_path + + LIBS = [os.popen(PHPPATH + ' --libs').read().rstrip(), '-lphp5'] + +--- a/plugins/python/uwsgiplugin.py ++++ b/plugins/python/uwsgiplugin.py +@@ -44,10 +44,8 @@ if not 'UWSGI_PYTHON_NOLIB' in os.enviro + else: + try: + LDFLAGS.append("-L%s" % sysconfig.get_config_var('LIBDIR')) +- os.environ['LD_RUN_PATH'] = "%s" % (sysconfig.get_config_var('LIBDIR')) + except: + LDFLAGS.append("-L%s/lib" % sysconfig.PREFIX) +- os.environ['LD_RUN_PATH'] = "%s/lib" % sysconfig.PREFIX + + LIBS.append('-lpython%s' % get_python_version()) + else: +--- a/plugins/rack/uwsgiplugin.py ++++ b/plugins/rack/uwsgiplugin.py +@@ -44,7 +44,6 @@ LIBS = os.popen(RUBYPATH + " -e \"requir + + if has_shared == 'yes': + LDFLAGS.append('-L' + libpath ) +- os.environ['LD_RUN_PATH'] = libpath + LIBS.append(os.popen(RUBYPATH + " -e \"require 'rbconfig';print '-l' + %s::CONFIG['RUBY_SO_NAME']\"" % rbconfig).read().rstrip()) + else: + GCC_LIST.append("%s/%s" % (libpath, os.popen(RUBYPATH + " -e \"require 'rbconfig';print %s::CONFIG['LIBRUBY_A']\"" % rbconfig).read().rstrip())) +--- a/plugins/ruby19/uwsgiplugin.py ++++ b/plugins/ruby19/uwsgiplugin.py +@@ -40,6 +40,5 @@ LDFLAGS = os.popen(RUBYPATH + " -e \"req + + libpath = os.popen(RUBYPATH + " -e \"require 'rbconfig';print %s::CONFIG['libdir']\"" % rbconfig).read().rstrip() + LDFLAGS.append('-L' + libpath ) +-os.environ['LD_RUN_PATH'] = libpath + LIBS = os.popen(RUBYPATH + " -e \"require 'rbconfig';print '-l' + %s::CONFIG['RUBY_SO_NAME']\"" % rbconfig).read().rstrip().split() + diff --git a/uwsgi-1.9.11-plugin_build_path.patch b/uwsgi-1.9.11-plugin_build_path.patch new file mode 100644 index 0000000..d92f77a --- /dev/null +++ b/uwsgi-1.9.11-plugin_build_path.patch @@ -0,0 +1,14 @@ +--- a/uwsgiconfig.py ++++ b/uwsgiconfig.py +@@ -1128,10 +1128,7 @@ def build_plugin(path, uc, cflags, ldfla + except: + pass + +- if uc: +- plugin_dest = uc.get('plugin_dir') + '/' + name + '_plugin' +- else: +- plugin_dest = name + '_plugin' ++ plugin_dest = name + '_plugin' + + shared_flag = '-shared' + diff --git a/uwsgi-1.9.11.tar.gz b/uwsgi-1.9.11.tar.gz new file mode 100644 index 0000000..f1b12d6 --- /dev/null +++ b/uwsgi-1.9.11.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e566163a7ffd18f341a0de8462d22410ee58b1f5f54c468e3019f47b7e5c4aa4 +size 634255 diff --git a/uwsgi.changes b/uwsgi.changes index 77cd852..aa54f42 100644 --- a/uwsgi.changes +++ b/uwsgi.changes @@ -1,3 +1,314 @@ +------------------------------------------------------------------- +Wed May 29 17:26:24 UTC 2013 - jfunk@funktronics.ca + +- Deprecated init script and sysconfig file in favor of systemd service and a + default configuration file /etc/uwsgi/uwsgi.ini +- Update README to describe important changes +- Removed separate packages for plugins that have no uncommon requirements +- Update to 1.9.11 + * Fixed Python 3 stdout/stderr buffering + * Fixed mule messages (@mulefunc is now reliable) + * Fixed SCRIPT_NAME handling in dynamic mode + * Fixed X-Sendfile with gzip static mode + * Fixed cache item maximum size with custom block size + * Fixed cache path handling + * Added the new high-performance PyPy plugin + * You can now avoid overlapping crons using --unique-cron. The uWSGI master + will track death of a single task, and until its death the same cron will + not be triggered + * A key/value variant of the --cron option is now available + * When using the cron2 option you are allowed to set a harakiri timeout for a + cron task. Just add harakiri=n to the options + * Added support for GNU Hurd + * A new offload engine named "memory" allows to offload memory transfers. The + cache router automatically supports it. To enable it just add + --offload-threads + * An example websocket chat using Redis has been added to the repository + * You can now define a routing table to be executed as soon as you set the + HTTP status code in your plugin + * Generally the wsgi.file_wrapper callable expects a file-like object. PEP + 333/3333 reports a special pattern when the object is not a file (call + read() until the object is consumed). uWSGI now supports this pattern (even + if in a hacky way) + * When using --http-keepalive you can now hold the connection open even if + the request has a body + * You can now set a harakiri timer for each request using internal routing + * The RPC plugin has been extended to allows interoperation with other + standards. Currently a simple HTTP wrapper and an XML-RPC one are exposed +- 1.9.10 + * fixed alarm threads during reloads + * fixed uninitialized memory in --touch-* options + * fixed a regression in --attach-daemon + * Added gccgo plugin. As Go 1.1 will be no no more compatible with uWSGI, + gccgo will became the official way for running go apps + * You can now run routing rules after a request. Obviously not all of the + exposed actions make sense after the request but you should be able to + write even more complex setup +- 1.9.9 + * Special warning: The router_basicauth plugin has changed its default + behaviour to return "break" if authorization fails. The "basicauth-next" + action, uses the old behaviour (returning "next"). This new approach should + reduce security problems caused by wrong configurations + * do not increment "tx" statistics counter for "unaccountable" plugins + * fixed --backtrace-depth + * fixed cache-sync parsing + * fixed mule farms initialization + * fixed multithreading bug when regexp conditional route is used + * fixed default-app usage in the psgi plugin + * fixed python dynamic mode + threads + * fixed error reporting in corerouter when retry is in place + * correctly report harakiri condition for gateways + * Added the WebDav plugin + * Added support for Go 1.1. Albeit you can successfully embed go 1.1 apps in + uWSGI, go 1.1 will be completely fork() unsafe. That means you are not able + to use multiprocessing, the master, mules and so on + * Stackless, Greenlet and Fiber support have been updated to support new + async features + * You can now authenticate over radius servers using the router_radius plugin + * Added another authentication backend, using SPNEGO (kerberos) + * Added the ldap authenticator + * Removed the GOON action, as it was messy and basically useless with the new + authentication approach + * The "setscriptname" action has been added to override the internally + computed SCRIPT_NAME (not only the var) + * The "donotlog" action forces uWSGI to not log the current request + * The "regexp" routing conditions has been improved to allows grouping. Now + you can easily manipulate strings and adding them as new request VARS + * uwsgi.atexit hook is now honoured by the gevent plugin (Author: André Cruz) + * Transformations can be applied on the fly (no buffering involved) + * The xattr plugin allows you to reference files extended attributes in the + internal routing subsystem + * Added airbrake plugin. Currently at early stage of development, it allows + sending uWSGI exceptions and alarms to airbrake servers + * Added legion daemons, allowing you to run external processes only when an + instance is a lord + * A new "touch" option (like --touch-reload) is available, triggering the + execution of a command + * You can now use the caching subsystem to store 64bit signed numbers and + apply atomic operations on them +- 1.9.8 + * fixed a crash when reloading the master + * fixed a crash in async mode + uGreen + * the 'mime' routing var requires a request var (not a raw string) +- 1.9.7 + * fixed teajs engine build + * fixed offloading status code (set to 202 when a request is offloaded) + * execute cron tasks within 60 second resolution, instead of 61 seconds + * fixed websocket proxy + * check for python3 unicode encoding (instead of crashing...) + * fixed ipcsem removal on reload + * fixed kqueue timer on OpenBSD, NetBSD and DragonFlyBSD + * fixed/reimplemented perl uwsgi::register_rpc + * fixed fd leak on sendfile() error + * fixed Content-Length when gzip file variant is used + * allows non-request plugins to register rpc functions + * more robust error checking for cgroups + * honour SCRIPT_NAME the in the PSGI plugin when multiple perl apps are + mounted + * Added legion cron to force only one instance of an application in legion + mode to execute cron tasks + * The curl_cron plugin has been added allowing the cron subsystem to call + urls (via libcurl) instead of unix commands + * The cachestore routing function can now directly store items in gzip format + * Added --skip-atexit to avoid calling atexit() hooks to workaround a bug in the + mongodb client library + * The http and uwsgi routing instructions are now more smart. You can cache + their output and get the right status code in the logs + * Added a generic api for manipulating the response has been added + (cachestore uses it) + * You can now trigger alarms when an fd is ready for read with --alarm-fd + * The spooler server plugin and the cheaper busyness algorithm are now + compiled in by default +- 1.9.6 + * workaround for building the python plugin with gcc 4.8 + * Sqlite and LDAP configuration moved to plugins + * New instructions added to allow for dynamic apps using internal routing + * You can now configure how the carbon plugin send the response average when + no requests have been managed + * Added numeric checks for the internal routing + * Added math and time support in the internal routing + * Added non-standard seek() and tell() to wsgi.input (post-buffering + required) + * You can invoke the ipython shell instead of the default one when using + --pyshell + * Added the 'rpcraw' routing instruction (dangerous) + * Added preliminary support for the HTTP Range header + * Added the 'lord' routing condition for Legion + * Added GridFS authentication + * Added the 'uwsgi' routing var for accessing internal uWSGI parameters + * Added the 'alarm' routing action for triggering alarms from the routing + subsystem + * Added --rbshell for accessing a Ruby shell + * Added --lua-shell for accessing a Lua shell + * Removed the old (and useless) probe subsystem + * Two new hooks have been added to the Legion subsystem: --legion-node-joined + and --legion-node-left + * --socket-sndbuf and --socket-rcvbuf have been added to allow tuning of the + send and receive buffers of the uWSGI sockets (use with caution) + * V8 plugin improvements +- 1.9.5 + * fixed a memory leak with cachestore routing instruction (Riccardo + Magliocchetti) + * fixed a memory leak in carbon plugin (Riccardo Magliocchetti) + * fixed a memory leak in the cgi plugin (Riccardo Magliocchetti) + * fixed old-style python dynamic apps + * force the emperor to honour --max-fd for vassals + * improved PSGI seek with post-buffering + * fixed kvlist escaping + * Added the GridFS plugin + * Improved V8 plugin + * Added the 'cgi' routing instruction to call CGI scripts directly +- 1.9.4 + * fixed cache statistics exported by the stats subsystem (Łukasz Mierzwa) + * fixed CoroEV bug in after_request (Tom Molesworth and John Berthels) + * update cache items after a restore from persistent storage (Łukasz Mierzwa) + * fixed signal handling in non-worker processes + * fixed thundering herd in multiple mules setup + * ported the cplusplus skeletal plugin to the new api + * fixed uWSGI reloading when build as a shared library + * From now on, SmartOS is included in the officially supported operating + systems + * Support for JavaScript routing rules and configurations using V8 + * Added the rpcnext routing action + * Legion improvements +- 1.9.3 + * fixed imports in the JVM build system when virtualenvs are used (Ryan + Kaskel) + * fixed mod_proxy_uwsgi with apache 2.4 + * fixed php headers generation when Status is created from the php app itself + * Pluggable configuration system (with Lua support) + * Immediate setuid and setgid with new options --immediate-uid and + --immediate-gid + * The option --emperor-tyrant-nofollow has been added forcing the emperor to + now follow symlinks when searching for uid/gid in tyrant mode + * Added the "rpcret" routing action to usa Lua to write advanced rules +- 1.9.2 + * Fixed python3 response headers managament (wrong refcnt) + * Fixed readline() on request body when postbuffering is in place + * Fixed ruby fiber plugin + * You can now store responses automatically in the uWSGI cache using + route-run and the cachestore routing action + * routing access to cookie and query string + * Added empty internal routing condition + * Added the Geoip plugin + * Added the SSI plugin (beta) +- 1.9.1 + * Fixed --req-logger after a graceful reload + * Fixed a crash with the carbon plugin + * Fixed signal handling when multiple workers + copy on write is in place + * Fixed exception handling in the Rack plugin + * The XSLT plugin has been added. It allows to apply XML transformation via + request plugin or uWSGI internal routing + * Legion scrolls api + * On demand vassals in Emperor mode + * The --exec-post-app hook has been added allowing you to run commands after + the load of an application + * The cache router plugin has been improved + * Added a crypto logger allowing for encryption in logging to remote hosts + via UDP + * The "rpc" routing instruction has been added, allowing you to call rpc + functions directly from the routing subsystem and forward they output to + the client + * Preliminary support for name resolving in the carbon plugin + * New routing conditions have been added (equal,startswith,endswith,regexp) + * You can reference the uWSGI version string using the %V magic var in your + configurations + * Added the 'mongodb' generic plugin +- 1.9 + * From now on, all of the request plugins need to be non-blocking + * Added Coro::AnyEvent plugin for Perl. Requires Coro::Anyevent package + * We have finally a truly working JVM infrastructure + * The first Mono plugin attempt (in 2010) was a total failure. Now we have a + new shining implementation + * Language independent HTTP body manage + * Faster uwsgi/HTTP/FastCGI/SCGI native sockets + * Can split request/error logging + * Chain reloading of workers + * Offloading improvements + * Better static files management/serving + * New Generation Cache subsystem (cache2) + * The Legion subsystem is a new whole addition to the uWSGI project. It has + superseeded the old Clustering subsystem + * Cygwin (windows) support + * Advanced Exceptions subsystem + * SPDY, SSL and SNI support + * HTTP router keepalive, auto-chunking, auto-gzip and transparent websockets + * The SSL router (sslrouter) for SSL virtual hosting + * New Websockets API + * New Programmable Internal Routing (turing complete ?) + * A new imperial monitor has been added allowing vassals to be governed over + zeromq messages + * Total introspection via the stats server + * Ping requests sent using nagios plugin will no longer be counted in apps + request stats + * The --app option has been removed. To load applications on specific + mountpoints use the --mount option + * The --static-offload-to-thread option has been removed. Use the more + versatile --offload-threads + * The grunt mode has been removed. To accomplish the same behaviour just use + threads or directly call fork() and uwsgi.disconnect() + * The send_message/recv_message api has been removed (use language-supplied + functions) +- 1.5 + * added --not-alarm-log + * support for TCP_FASTOPEN (Linux-only) + * improved emperor reloading + * added --get + * Legion subsystem + * emperor_zeromq plugin + * SNI support + * distributed SSL session cache +- 1.4.1 + * fixed typos in corerouter plugins + * fixed offloading when the number of threads is higher than 1 + * fixed static_maps for non-existent paths + * fixed uwsgi_connect() on modern Linux systems to reset the socket to blocking mode +- 1.4 + * gevent improvements + * improved http/https router and fastrouter + * Go official support + * a new set of infos are exported to the stats system + * improved systemd support + * log filtering and routing + * improved tracebacker + * offload transfer for static files, and network transfers + * matheval support + * plugins can be written in Obj-C + * smart attach daemon + * added support for PEP 405 virtualenvs + * rawrouter with xclient support + * internal routing plugin for cache +- 1.3 + * python tracebacker + * user-governed harakiri + * simplified external plugin development + * Linux namespace mountpoint improvements + * secured subscription system + * merged routers codebase (fastrouter, http, rawrouter) + * https support in the http router + * config report at the end of uWSGI build process + * improved subscription system (multicast and unix socket) + * custom options + * graceful reloads on shared sockets + * configurable log-master buffer size + * extreme-optimizations for the stats subsystem + * redislog and mongodblog plugins + * added python logger + * mongodb and postgres imperial monitors + * implemented psgix.logger and psgix.cleanup + * full rack spec compliance + * preliminary ipv6 support + * gevent graceful reloads + * support for multiple loggers and logformat + * lazy-apps to load apps after fork() but without changing reloading subsystem + * emperor heartbeat subsystem + * cheaper busyness plugin + * pluggable clock sources + * added router_rewrite and router_http plugins + * external spoolers + * support for section:// and fd:// loaders + * alarm subsystem (with curl and xmpp plugins) + ------------------------------------------------------------------- Tue Sep 11 22:13:54 UTC 2012 - jfunk@funktronics.ca diff --git a/uwsgi.ini b/uwsgi.ini new file mode 100644 index 0000000..6f28c63 --- /dev/null +++ b/uwsgi.ini @@ -0,0 +1,3 @@ +[uwsgi] +# Directory containing application configs +emperor = /etc/uwsgi/vassals diff --git a/uwsgi.init b/uwsgi.init deleted file mode 100644 index 464a05b..0000000 --- a/uwsgi.init +++ /dev/null @@ -1,99 +0,0 @@ -#!/bin/sh -# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. -# -# Author: James Oakley -# -# /etc/init.d/uwsgi -# and its symbolic link -# /(usr/)sbin/rcuwsgi -# -# LSB compatible service control script; see http://www.linuxbase.org/spec/ -# -### BEGIN INIT INFO -# Provides: uwsgi -# Required-Start: $syslog $remote_fs -# Should-Start: $time ypbind smtp -# Required-Stop: $syslog $remote_fs -# Should-Stop: ypbind smtp -# Default-Start: 3 5 -# Default-Stop: 0 1 2 6 -# Short-Description: Application Container Server for Networked/Clustered Web Applications -# Description: Application Container Server for Networked/Clustered Web Applications -### END INIT INFO - -# Check for missing binaries (stale symlinks should not happen) -UWSGI_BIN=/usr/sbin/uwsgi -test -x $UWSGI_BIN || { echo "$UWSGI_BIN not installed"; - if [ "$1" = "stop" ]; then exit 0; - else exit 5; fi; } - -UWSGI_CONFIG=/etc/sysconfig/uwsgi -test -r $UWSGI_CONFIG || { echo "$UWSGI_CONFIG not existing"; - if [ "$1" = "stop" ]; then exit 0; - else exit 6; fi; } -. $UWSGI_CONFIG - -UWSGI_OPTIONS="$UWSGI_OPTIONS --autoload" - -if [ "$UWSGI_EMPEROR_MODE" = "true" ] ; then - UWSGI_OPTIONS="$UWSGI_OPTIONS --emperor $UWSGI_VASSALS" -fi - -. /etc/rc.status - -rc_reset - -case "$1" in - start) - echo -n "Starting uWSGI " - /sbin/startproc $UWSGI_BIN $UWSGI_OPTIONS - rc_status -v - ;; - stop) - echo -n "Shutting down uWSGI " - /sbin/killproc $UWSGI_BIN - rc_status -v - ;; - try-restart|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 - fi - rc_status - ;; - restart) - $0 stop - $0 start - rc_status - ;; - force-reload) - echo -n "Reload service uWSGI " - /sbin/killproc -HUP $UWSGI_BIN - rc_status -v - ;; - reload) - echo -n "Reload service uWSGI " - /sbin/killproc -HUP $UWSGI_BIN - rc_status -v - ;; - status) - echo -n "Checking for service uWSGI " - /sbin/checkproc $UWSGI_BIN - rc_status -v - ;; - probe) - echo -n "uWSGI does not support probe " - rc_failed 3 - rc_status -v - ;; - *) - echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}" - exit 1 - ;; -esac -rc_exit diff --git a/uwsgi.service b/uwsgi.service new file mode 100644 index 0000000..5bbb3f7 --- /dev/null +++ b/uwsgi.service @@ -0,0 +1,11 @@ +[Unit] +Description=Application Container Server for Networked/Clustered Web Applications + +[Service] +ExecStart=/usr/bin/uwsgi --autoload --ini /etc/uwsgi/uwsgi.ini +Restart=always +Type=notify +NotifyAccess=all + +[Install] +WantedBy=multi-user.target diff --git a/uwsgi.spec b/uwsgi.spec index 4f0af7f..a21b06e 100644 --- a/uwsgi.spec +++ b/uwsgi.spec @@ -1,7 +1,7 @@ # # spec file for package uwsgi # -# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: uwsgi -Version: 1.2.6 +Version: 1.9.11 Release: 0 Summary: Application Container Server for Networked/Clustered Web Applications License: GPL-2.0+ @@ -25,36 +25,79 @@ Group: Productivity/Networking/Web/Servers Url: http://projects.unbit.it/uwsgi/wiki Source: http://projects.unbit.it/downloads/uwsgi-%{version}.tar.gz Source1: opensuse.ini.in -Source2: uwsgi.init +Source2: uwsgi.service Source3: django.ini.example Source4: rails.yml.example Source5: trac.ini.example Source6: werkzeug.xml.example Source7: README.openSUSE -Source8: uwsgi.sysconfig -# PATCH-FIX-OPENSUSE uwsgi-1.2.6-plugin_build_path.patch - Don't attempt to install plugins to target dest during build -Patch0: uwsgi-1.2.6-plugin_build_path.patch +# PATCH-FIX-OPENSUSE uwsgi-1.9.11-plugin_build_path.patch - Don't attempt to install plugins to target dest during build +Patch0: uwsgi-1.9.11-plugin_build_path.patch +# PATCH-FIX-OPENSUSE uwsgi-1.9.11-no-LD_RUN_PATH.patch - Disable invalid rpath in plugins +Patch1: uwsgi-1.9.11-no-LD_RUN_PATH.patch +BuildRequires: erlang BuildRequires: gcc-c++ +#BuildRequires: go BuildRequires: java-devel +#BuildRequires: krb5-devel +BuildRequires: libGeoIP-devel +BuildRequires: libattr-devel +BuildRequires: libcap-devel +BuildRequires: libcurl-devel +BuildRequires: libjansson-devel +#BuildRequires: libmono-2_0-devel +BuildRequires: libuuid-devel BuildRequires: libxml2-devel +BuildRequires: libxslt-devel +BuildRequires: libyaml-devel +BuildRequires: lua51-devel +#BuildRequires: mono-web +BuildRequires: openldap2-devel +BuildRequires: openssl-devel BuildRequires: pam-devel +BuildRequires: pcre-devel +#BuildRequires: php5-devel +BuildRequires: pkg-config BuildRequires: postgresql-devel BuildRequires: python-devel -BuildRequires: ruby-devel -%if 0%{?suse_version} && 0%{?suse_version} > 1210 -BuildRequires: erlang -BuildRequires: lua51-devel -%else -BuildRequires: lua-devel -%endif -%if 0%{?suse_version} && 0%{?suse_version} > 1140 BuildRequires: python-greenlet-devel -%endif +BuildRequires: ruby-devel +BuildRequires: sqlite3-devel +BuildRequires: systemd-devel +BuildRequires: tcpd-devel +BuildRequires: v8-devel +BuildRequires: zeromq-devel +BuildRequires: zlib-devel +%{?systemd_requires} BuildRoot: %{_tmppath}/%{name}-%{version}-build -%if 0%{?suse_version} && 0%{?suse_version} <= 1110 -%{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} -%{!?python_sitearch: %global python_sitearch %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")} -%endif +Provides: uwsgi-carbon = %{version} +Obsoletes: uwsgi-carbon < 1.9.11 +Provides: uwsgi-cgi = %{version} +Obsoletes: uwsgi-cgi < 1.9.11 +Provides: uwsgi-fastrouter = %{version} +Obsoletes: uwsgi-fastrouter < 1.9.11 +Provides: uwsgi-graylog2 = %{version} +Obsoletes: uwsgi-graylog2 < 1.9.11 +Provides: uwsgi-http = %{version} +Obsoletes: uwsgi-http < 1.9.11 +Provides: uwsgi-logsocket = %{version} +Obsoletes: uwsgi-logsocket < 1.9.11 +Provides: uwsgi-nagios = %{version} +Obsoletes: uwsgi-nagios < 1.9.11 +Provides: uwsgi-probepg = %{version} +Obsoletes: uwsgi-probepg < 1.9.11 +Provides: uwsgi-redislog = %{version} +Obsoletes: uwsgi-redislog < 1.9.11 +Provides: uwsgi-rrdtool = %{version} +Obsoletes: uwsgi-rrdtool < 1.9.11 +Provides: uwsgi-rsyslog = %{version} +Obsoletes: uwsgi-rsyslog < 1.9.11 +Provides: uwsgi-syslog = %{version} +Obsoletes: uwsgi-syslog < 1.9.11 +Provides: uwsgi-ugreen = %{version} +Obsoletes: uwsgi-ugreen < 1.9.11 +Provides: uwsgi-zergpool = %{version} +Obsoletes: uwsgi-zergpool < 1.9.11 %description uWSGI is a fast, self-healing and developer/sysadmin-friendly application @@ -81,48 +124,56 @@ different plugins can be used in order to add compatibility with tons of different technology on top of the same core. -%package carbon -Summary: Carbon Plugin for Graphite Integration for uWSGI +%package emperor_pg +Summary: PostgreSQL Emperor Plugin for uWSGI Group: Productivity/Networking/Web/Servers Requires: %{name} = %{version} -%description carbon +%description emperor_pg uWSGI is a fast, self-healing and developer/sysadmin-friendly application container server coded in pure C. -This package contains the carbon plugin for integration with the Graphite -realtime graphing server. - -See http://projects.unbit.it/uwsgi/wiki/Carbon for more info. +This package contains an emperor plugin allowing for configuration of +applications (vassals) in a PostgreSQL database. -%package cgi -Summary: CGI Plugin for uWSGI +%package emperor_zeromq +Summary: ZeroMQ Emperor Plugin for uWSGI Group: Productivity/Networking/Web/Servers Requires: %{name} = %{version} -%description cgi +%description emperor_zeromq uWSGI is a fast, self-healing and developer/sysadmin-friendly application container server coded in pure C. -This package contains the CGI plugin to support legacy CGI scripts. - -See http://projects.unbit.it/uwsgi/wiki/CGI for more info. +This package contains an emperor plugin allowing for configuration of +applications (vassals) via ZeroMQ. -%package fastrouter -Summary: Fastrouter Plugin for uWSGI +%package erlang +Summary: Erlang Plugin for uWSGI Group: Productivity/Networking/Web/Servers Requires: %{name} = %{version} -%description fastrouter +%description erlang uWSGI is a fast, self-healing and developer/sysadmin-friendly application container server coded in pure C. -This package contains the fastrouter plugin for using uWSGI as a -proxy/load-balancer/router speaking the uwsgi protocol. +This package contains support for uWSGI to act as an Erlang C-Node and exchange +messages and rpc with Erlang nodes. -See http://projects.unbit.it/uwsgi/wiki/FastRouter for more info. + +%package geoip +Summary: GeoIP Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} +Requires: %{name}-python = %{version} + +%description geoip +uWSGI is a fast, self-healing and developer/sysadmin-friendly application +container server coded in pure C. + +This package contains support for GeoIP routing. %package gevent @@ -138,39 +189,27 @@ container server coded in pure C. This package contains support for Python Gevent, which is a non-blocking networking framework. -See http://projects.unbit.it/uwsgi/wiki/Gevent for more info. - -%package graylog2 -Summary: Graylog2 Plugin for uWSGI +%package greenlet +Summary: Greenlet Plugin for uWSGI Group: Productivity/Networking/Web/Servers Requires: %{name} = %{version} +Requires: %{name}-python = %{version} -%description graylog2 +%description greenlet uWSGI is a fast, self-healing and developer/sysadmin-friendly application container server coded in pure C. -This package contains support for logging to Graylog2 log servers. - - -%package http -Summary: HTTP Plugin for uWSGI -Group: Productivity/Networking/Web/Servers -Requires: %{name} = %{version} - -%description http -uWSGI is a fast, self-healing and developer/sysadmin-friendly application -container server coded in pure C. - -This package contains support for using uWSGI as a HTTP server. - -See http://projects.unbit.it/uwsgi/wiki/HTTPserver for more info. +This package contains support for the Python Greenlet non-blocking network +framework. %package jvm Summary: JVM Plugin for uWSGI Group: Productivity/Networking/Web/Servers Requires: %{name} = %{version} +Provides: uwsgi-jwsgi = %{version} +Obsoletes: uwsgi-jwsgi < 1.9.11 %description jvm uWSGI is a fast, self-healing and developer/sysadmin-friendly application @@ -178,36 +217,17 @@ container server coded in pure C. This package contains support for embedding a Java virtual machine in uWSGI. -See http://projects.unbit.it/uwsgi/wiki/JVM for more info. - -%package jwsgi -Summary: Java WSGI Plugin for uWSGI -Group: Productivity/Networking/Web/Servers -Requires: %{name} = %{version} -Requires: %{name}-jvm = %{version} - -%description jwsgi -uWSGI is a fast, self-healing and developer/sysadmin-friendly application -container server coded in pure C. - -This package contains support for WSGI-style Java applications. - -See http://projects.unbit.it/uwsgi/wiki/jwsgi for more info. - - -%package logsocket -Summary: Socket Logging Plugin for uWSGI +%package ldap +Summary: LDAP Plugin for uWSGI Group: Productivity/Networking/Web/Servers Requires: %{name} = %{version} -%description logsocket +%description ldap uWSGI is a fast, self-healing and developer/sysadmin-friendly application container server coded in pure C. -This package contains the logsocket plugin for logging to UNIX and UDP sockets. - -See http://projects.unbit.it/uwsgi/wiki/SocketLogging for more info. +This package contains support for configuring uWSGI via LDAP. %package lua @@ -221,22 +241,6 @@ container server coded in pure C. This package contains support for Lua applications via the wsapi interface. -See http://projects.unbit.it/uwsgi/wiki/Lua for more info. - - -%package nagios -Summary: Nagios Plugin for uWSGI -Group: Productivity/Networking/Web/Servers -Requires: %{name} = %{version} - -%description nagios -uWSGI is a fast, self-healing and developer/sysadmin-friendly application -container server coded in pure C. - -This package contains support for Nagios monitoring of the uWSGI server. - -See http://projects.unbit.it/uwsgi/wiki/Nagios for more info. - %package pam Summary: PAM Plugin for uWSGI @@ -250,18 +254,6 @@ container server coded in pure C. This package contains support for PAM authentication. -%package probepg -Summary: PostgreSQL Probe Plugin for uWSGI -Group: Productivity/Networking/Web/Servers -Requires: %{name} = %{version} - -%description probepg -uWSGI is a fast, self-healing and developer/sysadmin-friendly application -container server coded in pure C. - -This package contains support for probing PostgreSQL servers. - - %package psgi Summary: PSGI Plugin for uWSGI Group: Productivity/Networking/Web/Servers @@ -274,146 +266,6 @@ container server coded in pure C. This package contains the PSGI plugin for running Perl applications that support the PSGI protocol. -See http://projects.unbit.it/uwsgi/wiki/PSGI for more info. - - -%package python -Summary: Python Plugin for uWSGI -Group: Productivity/Networking/Web/Servers -Requires: %{name} = %{version} - -%description python -uWSGI is a fast, self-healing and developer/sysadmin-friendly application -container server coded in pure C. - -This package contains support for Python applications via the WSGI protocol. - -See http://projects.unbit.it/uwsgi/wiki/Quickstart for more info. - - -%package ruby -Summary: Ruby Plugin for uWSGI -Group: Productivity/Networking/Web/Servers -Requires: %{name} = %{version} - -%description ruby -uWSGI is a fast, self-healing and developer/sysadmin-friendly application -container server coded in pure C. - -This package contains support for Ruby applications. - -See http://projects.unbit.it/uwsgi/wiki/Rack for more info. - - -%package redislog -Summary: Redis Logging Plugin for uWSGI -Group: Productivity/Networking/Web/Servers -Requires: %{name} = %{version} - -%description redislog -uWSGI is a fast, self-healing and developer/sysadmin-friendly application -container server coded in pure C. - -This package contains support for logging to a Redis server. - - -%package rrdtool -Summary: RRDTool Plugin for uWSGI -Group: Productivity/Networking/Web/Servers -Requires: %{name} = %{version} - -%description rrdtool -uWSGI is a fast, self-healing and developer/sysadmin-friendly application -container server coded in pure C. - -This package contains support for saving statistics in RRD bastabase files. - - -%package rsyslog -Summary: Rsyslog Plugin for uWSGI -Group: Productivity/Networking/Web/Servers -Requires: %{name} = %{version} - -%description rsyslog -uWSGI is a fast, self-healing and developer/sysadmin-friendly application -container server coded in pure C. - -This package contains support for logging to Rsyslog servers. - - -%package syslog -Summary: Syslog Plugin for uWSGI -Group: Productivity/Networking/Web/Servers -Requires: %{name} = %{version} - -%description syslog -uWSGI is a fast, self-healing and developer/sysadmin-friendly application -container server coded in pure C. - -This package contains support for logging to syslog servers. - - -%package ugreen -Summary: Green Threads Plugin for uWSGI -Group: Productivity/Networking/Web/Servers -Requires: %{name} = %{version} -Requires: %{name}-python = %{version} - -%description ugreen -uWSGI is a fast, self-healing and developer/sysadmin-friendly application -container server coded in pure C. - -This package contains support for green threads in Python applications. - -See http://projects.unbit.it/uwsgi/wiki/uGreen for more info. - - -%package zergpool -Summary: Zerg Mode Plugin for uWSGI -Group: Productivity/Networking/Web/Servers -Requires: %{name} = %{version} - -%description zergpool -uWSGI is a fast, self-healing and developer/sysadmin-friendly application -container server coded in pure C. - -This package contains support for Zerg mode, which allows for dynamically added -workers under load. - -See http://projects.unbit.it/uwsgi/wiki/ZergMode for more info. - - -%if 0%{?suse_version} && 0%{?suse_version} > 1210 -%package fiber -Summary: Ruby Fibers Plugin for uWSGI -Group: Productivity/Networking/Web/Servers -Requires: %{name} = %{version} -Requires: %{name}-ruby = %{version} - -%description fiber -uWSGI is a fast, self-healing and developer/sysadmin-friendly application -container server coded in pure C. - -This package contains support for Ruby fibers. Fibers are a form of coroutine, -useful for implementing cooperative multitasking in your apps. - -See http://projects.unbit.it/uwsgi/wiki/FiberLoop for more info. - - -%package erlang -Summary: Erlang Plugin for uWSGI -Group: Productivity/Networking/Web/Servers -Requires: %{name} = %{version} - -%description erlang -uWSGI is a fast, self-healing and developer/sysadmin-friendly application -container server coded in pure C. - -This package contains support for uWSGI to act as an Erlang C-Node and exchange -messages and rpc with Erlang nodes. - -See http://projects.unbit.it/uwsgi/wiki/ErlangIntegration for more info. - %package pyerl Summary: Python-Erlang Plugin for uWSGI @@ -429,55 +281,149 @@ container server coded in pure C. This package contains the pyerl module for accessing Erlang functionality to Python applications. -See http://projects.unbit.it/uwsgi/wiki/ErlangIntegration for more info. -%endif -%if 0%{?suse_version} && 0%{?suse_version} > 1140 -%package greenlet -Summary: Greenlet Plugin for uWSGI +%package pypy +Summary: PyPy Plugin for uWSGI Group: Productivity/Networking/Web/Servers Requires: %{name} = %{version} -Requires: %{name}-python = %{version} -%description greenlet +%description pypy uWSGI is a fast, self-healing and developer/sysadmin-friendly application container server coded in pure C. -This package contains support for the Python Greenlet non-blocking network -framework. +This package contains support for Python applications using PyPy. + + +%package python +Summary: Python Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description python +uWSGI is a fast, self-healing and developer/sysadmin-friendly application +container server coded in pure C. + +This package contains support for Python applications via the WSGI protocol. + + +%package ruby +Summary: Ruby Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} +Provides: uwsgi-fiber = %{version} +Obsoletes: uwsgi-fiber < 1.9.11 + +%description ruby +uWSGI is a fast, self-healing and developer/sysadmin-friendly application +container server coded in pure C. + +This package contains support for Ruby applications. + + +%package sqlite3 +Summary: SQLite3 Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description sqlite3 +uWSGI is a fast, self-healing and developer/sysadmin-friendly application +container server coded in pure C. + +This package contains support for storing application configuration in SQLite3 +databases. + + +%package v8 +Summary: V8 JavaScript Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description v8 +uWSGI is a fast, self-healing and developer/sysadmin-friendly application +container server coded in pure C. + +This package contains support for JavaScript using V8. + + +%package xslt +Summary: XSLT Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description xslt +uWSGI is a fast, self-healing and developer/sysadmin-friendly application +container server coded in pure C. + +This package contains support for rendering XML content using XSLT. -See http://projects.unbit.it/uwsgi/wiki/AsyncSupport for more info. -%endif %prep %setup -q -n uwsgi-%{version} %patch0 -p1 +%patch1 -p1 # Generate a config that builds all plugins except for examples and stuff we -# can't satisfy the requirements for -excluded_plugins="cheaper_backlog2 cplusplus dummy example mono pyuwsgi stackless pypy php" +# can't satisfy the requirements for or are just broken +excluded_plugins="" + +# Still no mongodb in Factory +excluded_plugins="$excluded_plugins stats_pusher_mongodb emperor_mongodb mongodb mongodblog gridfs" + +# Mono plugin builds private key during build. It would not be a good idea to +# distribute the same key to multiple systems +excluded_plugins="$excluded_plugins mono" + +# Only for OSX +excluded_plugins="$excluded_plugins alarm_speech" + +# No libphp on openSUSE for some reason +excluded_plugins="$excluded_plugins php" + +# No stackless in openSUSE +excluded_plugins="$excluded_plugins stackless" + +# No perl-Coro in Factory (there is a broken unmaintained one under d:l:perl:CPAN-C) +excluded_plugins="$excluded_plugins coroae" + +# Requires libgloox, which is not in Factory +excluded_plugins="$excluded_plugins alarm_xmpp" + +# No build config for gccgo ATM +excluded_plugins="$excluded_plugins gccgo" + +# These plugins require a libuwsgi, which appears to conflict with core... +excluded_plugins="$excluded_plugins go pyuwsgi" + +# The SPNEGO router is not complete +excluded_plugins="$excluded_plugins router_spnego" + +# These are example plugins and shouldn't be distributed +excluded_plugins="$excluded_plugins cplusplus dummy example" + %if 0%{?suse_version} && 0%{?suse_version} <= 1210 +# Requirements missing on openSUSE <= 12.1 excluded_plugins="$excluded_plugins fiber ruby19 erlang pyerl" %endif -%if 0%{?suse_version} && 0%{?suse_version} <= 1140 -excluded_plugins="$excluded_plugins greenlet" -%endif + plugins=$(python -c "import sys, os; print ', '.join([p for p in os.listdir('plugins') if p not in sys.argv[1:]])" $excluded_plugins) sed -e "s#@@LIBDIR@@#%{_libdir}#" -e "s#@@PLUGINS@@#$plugins#" %{SOURCE1} > buildconf/opensuse.ini + # README.openSUSE cp %{SOURCE7} . %build # Find correct location for libjvm -jvmlib=$(dirname $(find %{_jvmdir}/java/jre/lib -name "libjvm.so" | grep server)) -export CFLAGS="%{optflags} -I$(echo %{_libdir}/erlang/lib/erl_interface-*/include) -I%{_jvmdir}/java/include/ -I%{_jvmdir}/java/include/linux -L$jvmlib" +export UWSGICONFIG_JVM_LIBPATH=$(dirname $(find %{_jvmdir}/java/jre/lib -name "libjvm.so" | grep server)) +export UWSGICONFIG_JVM_INCPATH="%{_jvmdir}/java/include" +export UWSGICONFIG_LUALIB="lua" +export CFLAGS="%{optflags} -I$(echo %{_libdir}/erlang/lib/erl_interface-*/include) -I%{_jvmdir}/java/include/linux -L$UWSGICONFIG_JVM_LIBPATH/jli" +%{?jobs:export CPUCOUNT=%jobs} python uwsgiconfig.py --build opensuse %install install -D -m 0755 uwsgi %{buildroot}%{_sbindir}/uwsgi install -d -m 0755 %{buildroot}%{_libdir}/uwsgi install -m 0755 *_plugin.so %{buildroot}%{_libdir}/uwsgi -install -D -m 0755 %{SOURCE2} %{buildroot}%{_sysconfdir}/init.d/uwsgi -ln -sf %{_sysconfdir}/init.d/uwsgi %{buildroot}%{_sbindir}/rcuwsgi +install -D -m 0644 %{SOURCE2} %{buildroot}%{_unitdir}/uwsgi.service install -d -m 0755 %{buildroot}%{_sysconfdir}/uwsgi/vassals install -m 0644 %{SOURCE3} %{SOURCE4} %{SOURCE5} %{SOURCE6} %{buildroot}%{_sysconfdir}/uwsgi/vassals install -m 0644 vassals/broodlord.ini %{buildroot}%{_sysconfdir}/uwsgi/vassals/broodlord.ini.example @@ -485,99 +431,142 @@ install -m 0644 vassals/cc.ini %{buildroot}%{_sysconfdir}/uwsgi/vassals/cc.ini.e install -m 0644 vassals/multi.xml %{buildroot}%{_sysconfdir}/uwsgi/vassals/multi.xml.example install -D -m 0644 uwsgidecorators.py %{buildroot}%{python_sitelib}/uwsgidecorators.py %py_compile %{buildroot}%{python_sitelib} -install -D -m 0644 %{SOURCE8} %{buildroot}/%{_var}/adm/fillup-templates/sysconfig.uwsgi +install -D plugins/jvm/uwsgi.jar %{buildroot}%{_javadir}/uwsgi.jar + +%pre +%service_add_pre uwsgi.service %post -%fillup_and_insserv uwsgi +%service_add_post uwsgi.service %preun -%stop_on_removal uwsgi +%service_del_preun uwsgi.service %postun -%restart_on_update uwsgi -%insserv_cleanup +%service_del_postun uwsgi.service %files %defattr(-,root,root,-) -%doc CONTRIBUTORS ChangeLog LICENSE README uwsgi_API.txt README.openSUSE +%doc CONTRIBUTORS LICENSE README uwsgi_API.txt contrib examples README.openSUSE %{_sbindir}/uwsgi %dir %{_sysconfdir}/uwsgi/ %dir %{_sysconfdir}/uwsgi/vassals %{_sysconfdir}/uwsgi/vassals/* %dir %{_libdir}/uwsgi -%config %{_sysconfdir}/init.d/uwsgi -%{_sbindir}/rcuwsgi +%{_unitdir}/uwsgi.service %{_libdir}/uwsgi/admin_plugin.so +%{_libdir}/uwsgi/airbrake_plugin.so +%{_libdir}/uwsgi/alarm_curl_plugin.so %{_libdir}/uwsgi/cache_plugin.so +%{_libdir}/uwsgi/carbon_plugin.so +%{_libdir}/uwsgi/cgi_plugin.so +%{_libdir}/uwsgi/cheaper_backlog2_plugin.so +%{_libdir}/uwsgi/cheaper_busyness_plugin.so +%{_libdir}/uwsgi/clock_monotonic_plugin.so +%{_libdir}/uwsgi/clock_realtime_plugin.so +%{_libdir}/uwsgi/corerouter_plugin.so +%{_libdir}/uwsgi/curl_cron_plugin.so +%{_libdir}/uwsgi/dumbloop_plugin.so +%{_libdir}/uwsgi/emperor_amqp_plugin.so +%{_libdir}/uwsgi/exception_log_plugin.so +%{_libdir}/uwsgi/fastrouter_plugin.so %{_libdir}/uwsgi/echo_plugin.so +%{_libdir}/uwsgi/graylog2_plugin.so +%{_libdir}/uwsgi/http_plugin.so +%{_libdir}/uwsgi/legion_cache_fetch_plugin.so +%{_libdir}/uwsgi/logcrypto_plugin.so +%{_libdir}/uwsgi/logfile_plugin.so +%{_libdir}/uwsgi/logsocket_plugin.so +%{_libdir}/uwsgi/nagios_plugin.so %{_libdir}/uwsgi/notfound_plugin.so %{_libdir}/uwsgi/ping_plugin.so -%{_libdir}/uwsgi/probeconnect_plugin.so +%{_libdir}/uwsgi/rawrouter_plugin.so +%{_libdir}/uwsgi/redislog_plugin.so +%{_libdir}/uwsgi/router_access_plugin.so %{_libdir}/uwsgi/router_basicauth_plugin.so +%{_libdir}/uwsgi/router_cache_plugin.so +%{_libdir}/uwsgi/router_http_plugin.so +%{_libdir}/uwsgi/router_memcached_plugin.so +%{_libdir}/uwsgi/router_radius_plugin.so %{_libdir}/uwsgi/router_redirect_plugin.so +%{_libdir}/uwsgi/router_rewrite_plugin.so +%{_libdir}/uwsgi/router_static_plugin.so %{_libdir}/uwsgi/router_uwsgi_plugin.so %{_libdir}/uwsgi/rpc_plugin.so +%{_libdir}/uwsgi/rrdtool_plugin.so +%{_libdir}/uwsgi/rsyslog_plugin.so %{_libdir}/uwsgi/signal_plugin.so %{_libdir}/uwsgi/spooler_plugin.so +%{_libdir}/uwsgi/ssi_plugin.so +%{_libdir}/uwsgi/sslrouter_plugin.so +%{_libdir}/uwsgi/stats_pusher_statsd_plugin.so %{_libdir}/uwsgi/symcall_plugin.so -%{_var}/adm/fillup-templates/sysconfig.uwsgi +%{_libdir}/uwsgi/syslog_plugin.so +%{_libdir}/uwsgi/systemd_logger_plugin.so +%{_libdir}/uwsgi/transformation_chunked_plugin.so +%{_libdir}/uwsgi/transformation_gzip_plugin.so +%{_libdir}/uwsgi/transformation_tofile_plugin.so +%{_libdir}/uwsgi/transformation_toupper_plugin.so +%{_libdir}/uwsgi/ugreen_plugin.so +%{_libdir}/uwsgi/webdav_plugin.so +%{_libdir}/uwsgi/xattr_plugin.so +%{_libdir}/uwsgi/zergpool_plugin.so -%files carbon +%files emperor_pg %defattr(-,root,root,-) -%{_libdir}/uwsgi/carbon_plugin.so +%{_libdir}/uwsgi/emperor_pg_plugin.so -%files cgi +%files emperor_zeromq %defattr(-,root,root,-) -%{_libdir}/uwsgi/cgi_plugin.so +%{_libdir}/uwsgi/emperor_zeromq_plugin.so -%files fastrouter +%files erlang %defattr(-,root,root,-) -%{_libdir}/uwsgi/fastrouter_plugin.so +%{_libdir}/uwsgi/erlang_plugin.so + +%files geoip +%defattr(-,root,root,-) +%{_libdir}/uwsgi/geoip_plugin.so %files gevent %defattr(-,root,root,-) %{_libdir}/uwsgi/gevent_plugin.so -%files graylog2 +%files greenlet %defattr(-,root,root,-) -%{_libdir}/uwsgi/graylog2_plugin.so - -%files http -%defattr(-,root,root,-) -%{_libdir}/uwsgi/http_plugin.so +%{_libdir}/uwsgi/greenlet_plugin.so %files jvm %defattr(-,root,root,-) %{_libdir}/uwsgi/jvm_plugin.so - -%files jwsgi -%defattr(-,root,root,-) %{_libdir}/uwsgi/jwsgi_plugin.so +%{_libdir}/uwsgi/ring_plugin.so +%{_javadir}/uwsgi.jar -%files logsocket +%files ldap %defattr(-,root,root,-) -%{_libdir}/uwsgi/logsocket_plugin.so +%{_libdir}/uwsgi/ldap_plugin.so %files lua %defattr(-,root,root,-) %{_libdir}/uwsgi/lua_plugin.so -%files nagios -%defattr(-,root,root,-) -%{_libdir}/uwsgi/nagios_plugin.so - %files pam %defattr(-,root,root,-) %{_libdir}/uwsgi/pam_plugin.so -%files probepg -%defattr(-,root,root,-) -%{_libdir}/uwsgi/probepg_plugin.so - %files psgi %defattr(-,root,root,-) %{_libdir}/uwsgi/psgi_plugin.so +%files pyerl +%defattr(-,root,root,-) +%{_libdir}/uwsgi/pyerl_plugin.so + +%files pypy +%defattr(-,root,root,-) +%{_libdir}/uwsgi/pypy_plugin.so + %files python %defattr(-,root,root,-) %{_libdir}/uwsgi/python_plugin.so @@ -585,53 +574,20 @@ install -D -m 0644 %{SOURCE8} %{buildroot}/%{_var}/adm/fillup-templates/sysconfi %files ruby %defattr(-,root,root,-) -%{_libdir}/uwsgi/rack_plugin.so -%if 0%{?suse_version} && 0%{?suse_version} > 1210 -%{_libdir}/uwsgi/ruby19_plugin.so -%endif - -%files redislog -%defattr(-,root,root,-) -%{_libdir}/uwsgi/redislog_plugin.so - -%files rrdtool -%defattr(-,root,root,-) -%{_libdir}/uwsgi/rrdtool_plugin.so - -%files rsyslog -%defattr(-,root,root,-) -%{_libdir}/uwsgi/rsyslog_plugin.so - -%files syslog -%defattr(-,root,root,-) -%{_libdir}/uwsgi/syslog_plugin.so - -%files ugreen -%defattr(-,root,root,-) -%{_libdir}/uwsgi/ugreen_plugin.so - -%files zergpool -%defattr(-,root,root,-) -%{_libdir}/uwsgi/zergpool_plugin.so - -%if 0%{?suse_version} && 0%{?suse_version} > 1210 -%files fiber -%defattr(-,root,root,-) %{_libdir}/uwsgi/fiber_plugin.so +%{_libdir}/uwsgi/rack_plugin.so +%{_libdir}/uwsgi/ruby19_plugin.so -%files erlang +%files sqlite3 %defattr(-,root,root,-) -%{_libdir}/uwsgi/erlang_plugin.so +%{_libdir}/uwsgi/sqlite3_plugin.so -%files pyerl +%files v8 %defattr(-,root,root,-) -%{_libdir}/uwsgi/pyerl_plugin.so -%endif +%{_libdir}/uwsgi/v8_plugin.so -%if 0%{?suse_version} && 0%{?suse_version} > 1140 -%files greenlet +%files xslt %defattr(-,root,root,-) -%{_libdir}/uwsgi/greenlet_plugin.so -%endif +%{_libdir}/uwsgi/xslt_plugin.so %changelog diff --git a/uwsgi.sysconfig b/uwsgi.sysconfig deleted file mode 100644 index b7142d2..0000000 --- a/uwsgi.sysconfig +++ /dev/null @@ -1,35 +0,0 @@ -## Path: Network/WWW/uWSGI -## Description: Run uWSGI in Emperor Mode -## Type: boolean -## Default: true -# -# uWSGI emperor mode is a method of running many different applications -# (vassals) in individual uWSGI processes, managed by a single master (emperor) -# process. It is recommended in most cases. -# -UWSGI_EMPEROR_MODE=true - -## Path: Network/WWW/uWSGI -## Description: uWSGI Vassals Directory -## Type: string -## Default: /etc/uwsgi/vassals -# -# When uWSGI is running in emperor mode, this is the directory where individual -# application configurations (vassals) are found. Configuration files can be in -# xml, ini, yaml, and json format. Vassals are started automatically when a -# file is placed in this directory and restarted if a file is changed. -# -UWSGI_VASSALS="/etc/uwsgi/vassals/" - -## Path: Network/WWW/uWSGI -## Description: Additional uWSGI Options -## Type: string -## Default: "" -# -# Specify additional uWSGI options here. This is normally unnecessary since -# options can be specified in per-application configuration files when running -# in emperor mode. However, if emperor mode is disabled, this option will be -# necessary. If emperor mode is enabled, these options are specified in -# addition to the emperor mode settings. -# -UWSGI_OPTIONS="" From 2c6855f1630f38b2ad2bb8f40e7bb20876a05ee9fd485244802fcb2c0588acf7 Mon Sep 17 00:00:00 2001 From: James Oakley Date: Fri, 31 May 2013 20:55:51 +0000 Subject: [PATCH 2/7] - Fix path to uwsgi binary in service file - Install uwsgi.ini - Fix signed/unsigned comparison in emperor_amqp OBS-URL: https://build.opensuse.org/package/show/server:http/uwsgi?expand=0&rev=6 --- ...i-1.9.11-emperor_amqp-fix-comparison.patch | 12 +++++++++ uwsgi-1.9.11-systemd_logger-old_systemd.patch | 9 +++++++ uwsgi.changes | 7 +++++ uwsgi.service | 2 +- uwsgi.spec | 26 ++++++++++++++++++- 5 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 uwsgi-1.9.11-emperor_amqp-fix-comparison.patch create mode 100644 uwsgi-1.9.11-systemd_logger-old_systemd.patch diff --git a/uwsgi-1.9.11-emperor_amqp-fix-comparison.patch b/uwsgi-1.9.11-emperor_amqp-fix-comparison.patch new file mode 100644 index 0000000..3f03507 --- /dev/null +++ b/uwsgi-1.9.11-emperor_amqp-fix-comparison.patch @@ -0,0 +1,12 @@ +--- a/plugins/emperor_amqp/amqp.c ++++ b/plugins/emperor_amqp/amqp.c +@@ -453,7 +453,8 @@ static int amqp_wait_connection_tune(int + static char *amqp_simple_get_frame(int fd, struct amqp_frame_header *fh) { + + char *ptr = (char *) fh; +- ssize_t len = 0, rlen; ++ size_t len = 0; ++ ssize_t rlen; + + while(len < 7) { + rlen = recv(fd, ptr, 7-len, 0); diff --git a/uwsgi-1.9.11-systemd_logger-old_systemd.patch b/uwsgi-1.9.11-systemd_logger-old_systemd.patch new file mode 100644 index 0000000..270af1d --- /dev/null +++ b/uwsgi-1.9.11-systemd_logger-old_systemd.patch @@ -0,0 +1,9 @@ +--- a/plugins/systemd_logger/systemd_logger.c ++++ b/plugins/systemd_logger/systemd_logger.c +@@ -1,5 +1,6 @@ + #include "../../uwsgi.h" + ++#include + #include + + ssize_t uwsgi_systemd_logger(struct uwsgi_logger *ul, char *message, size_t len) { diff --git a/uwsgi.changes b/uwsgi.changes index aa54f42..671c438 100644 --- a/uwsgi.changes +++ b/uwsgi.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Fri May 31 18:52:08 UTC 2013 - jfunk@funktronics.ca + +- Fix path to uwsgi binary in service file +- Install uwsgi.ini +- Fix signed/unsigned comparison in emperor_amqp + ------------------------------------------------------------------- Wed May 29 17:26:24 UTC 2013 - jfunk@funktronics.ca diff --git a/uwsgi.service b/uwsgi.service index 5bbb3f7..aee8f0d 100644 --- a/uwsgi.service +++ b/uwsgi.service @@ -2,7 +2,7 @@ Description=Application Container Server for Networked/Clustered Web Applications [Service] -ExecStart=/usr/bin/uwsgi --autoload --ini /etc/uwsgi/uwsgi.ini +ExecStart=/usr/sbin/uwsgi --autoload --ini /etc/uwsgi/uwsgi.ini Restart=always Type=notify NotifyAccess=all diff --git a/uwsgi.spec b/uwsgi.spec index a21b06e..d30faf8 100644 --- a/uwsgi.spec +++ b/uwsgi.spec @@ -31,11 +31,18 @@ Source4: rails.yml.example Source5: trac.ini.example Source6: werkzeug.xml.example Source7: README.openSUSE +Source8: uwsgi.ini # PATCH-FIX-OPENSUSE uwsgi-1.9.11-plugin_build_path.patch - Don't attempt to install plugins to target dest during build Patch0: uwsgi-1.9.11-plugin_build_path.patch # PATCH-FIX-OPENSUSE uwsgi-1.9.11-no-LD_RUN_PATH.patch - Disable invalid rpath in plugins Patch1: uwsgi-1.9.11-no-LD_RUN_PATH.patch +# PATCH-FIX-UPSTREAM uwsgi-1.9.11-emperor_amqp-fix-comparison.patch - Fix signed/unsigned comparison +Patch2: uwsgi-1.9.11-emperor_amqp-fix-comparison.patch +# PATCH-FIX-OPENSUSE uwsgi-1.9.11-systemd_logger-old_systemd.patch - Older systemd in 12.2 does not implicity include syslog.h +Patch3: uwsgi-1.9.11-systemd_logger-old_systemd.patch +%if 0%{?suse_version} > 1210 BuildRequires: erlang +%endif BuildRequires: gcc-c++ #BuildRequires: go BuildRequires: java-devel @@ -44,13 +51,19 @@ BuildRequires: libGeoIP-devel BuildRequires: libattr-devel BuildRequires: libcap-devel BuildRequires: libcurl-devel +%if 0%{?suse_version} > 1210 BuildRequires: libjansson-devel +%endif #BuildRequires: libmono-2_0-devel BuildRequires: libuuid-devel BuildRequires: libxml2-devel BuildRequires: libxslt-devel BuildRequires: libyaml-devel +%if 0%{?suse_version} > 1210 BuildRequires: lua51-devel +%else +BuildRequires: lua-devel +%endif #BuildRequires: mono-web BuildRequires: openldap2-devel BuildRequires: openssl-devel @@ -61,7 +74,11 @@ BuildRequires: pkg-config BuildRequires: postgresql-devel BuildRequires: python-devel BuildRequires: python-greenlet-devel +%if 0%{?suse_version} > 1230 +BuildRequires: ruby19-devel +%else BuildRequires: ruby-devel +%endif BuildRequires: sqlite3-devel BuildRequires: systemd-devel BuildRequires: tcpd-devel @@ -150,6 +167,7 @@ This package contains an emperor plugin allowing for configuration of applications (vassals) via ZeroMQ. +%if 0%{?suse_version} > 1210 %package erlang Summary: Erlang Plugin for uWSGI Group: Productivity/Networking/Web/Servers @@ -161,7 +179,7 @@ container server coded in pure C. This package contains support for uWSGI to act as an Erlang C-Node and exchange messages and rpc with Erlang nodes. - +%endif %package geoip Summary: GeoIP Plugin for uWSGI @@ -361,6 +379,8 @@ This package contains support for rendering XML content using XSLT. %setup -q -n uwsgi-%{version} %patch0 -p1 %patch1 -p1 +%patch2 -p1 +%patch3 -p1 # Generate a config that builds all plugins except for examples and stuff we # can't satisfy the requirements for or are just broken excluded_plugins="" @@ -425,6 +445,7 @@ install -d -m 0755 %{buildroot}%{_libdir}/uwsgi install -m 0755 *_plugin.so %{buildroot}%{_libdir}/uwsgi install -D -m 0644 %{SOURCE2} %{buildroot}%{_unitdir}/uwsgi.service install -d -m 0755 %{buildroot}%{_sysconfdir}/uwsgi/vassals +install -D -m 0644 %{SOURCE8} %{buildroot}%{_sysconfdir}/uwsgi/uwsgi.ini install -m 0644 %{SOURCE3} %{SOURCE4} %{SOURCE5} %{SOURCE6} %{buildroot}%{_sysconfdir}/uwsgi/vassals install -m 0644 vassals/broodlord.ini %{buildroot}%{_sysconfdir}/uwsgi/vassals/broodlord.ini.example install -m 0644 vassals/cc.ini %{buildroot}%{_sysconfdir}/uwsgi/vassals/cc.ini.example @@ -450,6 +471,7 @@ install -D plugins/jvm/uwsgi.jar %{buildroot}%{_javadir}/uwsgi.jar %doc CONTRIBUTORS LICENSE README uwsgi_API.txt contrib examples README.openSUSE %{_sbindir}/uwsgi %dir %{_sysconfdir}/uwsgi/ +%config %{_sysconfdir}/uwsgi/uwsgi.ini %dir %{_sysconfdir}/uwsgi/vassals %{_sysconfdir}/uwsgi/vassals/* %dir %{_libdir}/uwsgi @@ -520,9 +542,11 @@ install -D plugins/jvm/uwsgi.jar %{buildroot}%{_javadir}/uwsgi.jar %defattr(-,root,root,-) %{_libdir}/uwsgi/emperor_zeromq_plugin.so +%if 0%{?suse_version} > 1210 %files erlang %defattr(-,root,root,-) %{_libdir}/uwsgi/erlang_plugin.so +%endif %files geoip %defattr(-,root,root,-) From b22531006b078fd37670c87e23eacb92e11583230b0aa0e5deb87b74eb0b2cfa Mon Sep 17 00:00:00 2001 From: James Oakley Date: Fri, 31 May 2013 21:12:58 +0000 Subject: [PATCH 3/7] Fix requirements and remove unsupported plugins on openSUSE <= 12.1 OBS-URL: https://build.opensuse.org/package/show/server:http/uwsgi?expand=0&rev=7 --- uwsgi.spec | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/uwsgi.spec b/uwsgi.spec index d30faf8..9b3ba55 100644 --- a/uwsgi.spec +++ b/uwsgi.spec @@ -74,13 +74,15 @@ BuildRequires: pkg-config BuildRequires: postgresql-devel BuildRequires: python-devel BuildRequires: python-greenlet-devel -%if 0%{?suse_version} > 1230 +%if 0%{?suse_version} >= 1230 BuildRequires: ruby19-devel %else BuildRequires: ruby-devel %endif BuildRequires: sqlite3-devel +%if 0%{?suse_version} > 1210 BuildRequires: systemd-devel +%endif BuildRequires: tcpd-devel BuildRequires: v8-devel BuildRequires: zeromq-devel @@ -285,6 +287,7 @@ This package contains the PSGI plugin for running Perl applications that support the PSGI protocol. +%if 0%{?suse_version} > 1210 %package pyerl Summary: Python-Erlang Plugin for uWSGI Group: Productivity/Networking/Web/Servers @@ -298,7 +301,7 @@ container server coded in pure C. This package contains the pyerl module for accessing Erlang functionality to Python applications. - +%endif %package pypy Summary: PyPy Plugin for uWSGI @@ -324,6 +327,7 @@ container server coded in pure C. This package contains support for Python applications via the WSGI protocol. +%if 0%{?suse_version} > 1210 %package ruby Summary: Ruby Plugin for uWSGI Group: Productivity/Networking/Web/Servers @@ -336,7 +340,7 @@ uWSGI is a fast, self-healing and developer/sysadmin-friendly application container server coded in pure C. This package contains support for Ruby applications. - +%endif %package sqlite3 Summary: SQLite3 Plugin for uWSGI @@ -421,7 +425,7 @@ excluded_plugins="$excluded_plugins cplusplus dummy example" %if 0%{?suse_version} && 0%{?suse_version} <= 1210 # Requirements missing on openSUSE <= 12.1 -excluded_plugins="$excluded_plugins fiber ruby19 erlang pyerl" +excluded_plugins="$excluded_plugins erlang fiber pyerl ruby19 systemd_logger" %endif plugins=$(python -c "import sys, os; print ', '.join([p for p in os.listdir('plugins') if p not in sys.argv[1:]])" $excluded_plugins) @@ -524,7 +528,9 @@ install -D plugins/jvm/uwsgi.jar %{buildroot}%{_javadir}/uwsgi.jar %{_libdir}/uwsgi/stats_pusher_statsd_plugin.so %{_libdir}/uwsgi/symcall_plugin.so %{_libdir}/uwsgi/syslog_plugin.so +%if 0%{?suse_version} > 1210 %{_libdir}/uwsgi/systemd_logger_plugin.so +%endif %{_libdir}/uwsgi/transformation_chunked_plugin.so %{_libdir}/uwsgi/transformation_gzip_plugin.so %{_libdir}/uwsgi/transformation_tofile_plugin.so @@ -583,9 +589,11 @@ install -D plugins/jvm/uwsgi.jar %{buildroot}%{_javadir}/uwsgi.jar %defattr(-,root,root,-) %{_libdir}/uwsgi/psgi_plugin.so +%if 0%{?suse_version} > 1210 %files pyerl %defattr(-,root,root,-) %{_libdir}/uwsgi/pyerl_plugin.so +%endif %files pypy %defattr(-,root,root,-) @@ -596,11 +604,13 @@ install -D plugins/jvm/uwsgi.jar %{buildroot}%{_javadir}/uwsgi.jar %{_libdir}/uwsgi/python_plugin.so %{python_sitelib}/uwsgidecorators.py* +%if 0%{?suse_version} > 1210 %files ruby %defattr(-,root,root,-) %{_libdir}/uwsgi/fiber_plugin.so %{_libdir}/uwsgi/rack_plugin.so %{_libdir}/uwsgi/ruby19_plugin.so +%endif %files sqlite3 %defattr(-,root,root,-) From 3dc4e554b186310ba298e6452b09e01ad53be274e8b288391b8a9f418f727852 Mon Sep 17 00:00:00 2001 From: James Oakley Date: Fri, 31 May 2013 21:14:59 +0000 Subject: [PATCH 4/7] Don't replace /etc/uwsgi/uwsgi.ini on updates OBS-URL: https://build.opensuse.org/package/show/server:http/uwsgi?expand=0&rev=8 --- uwsgi.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uwsgi.spec b/uwsgi.spec index 9b3ba55..f32bd77 100644 --- a/uwsgi.spec +++ b/uwsgi.spec @@ -475,7 +475,7 @@ install -D plugins/jvm/uwsgi.jar %{buildroot}%{_javadir}/uwsgi.jar %doc CONTRIBUTORS LICENSE README uwsgi_API.txt contrib examples README.openSUSE %{_sbindir}/uwsgi %dir %{_sysconfdir}/uwsgi/ -%config %{_sysconfdir}/uwsgi/uwsgi.ini +%config(noreplace) %{_sysconfdir}/uwsgi/uwsgi.ini %dir %{_sysconfdir}/uwsgi/vassals %{_sysconfdir}/uwsgi/vassals/* %dir %{_libdir}/uwsgi From aa5d89f76e8ff2a0a74c6f0e877e5fadfc5e41fa28034dc6d856ca6cda866c07 Mon Sep 17 00:00:00 2001 From: James Oakley Date: Fri, 31 May 2013 21:18:47 +0000 Subject: [PATCH 5/7] Still need systemd for macros on 12.1 OBS-URL: https://build.opensuse.org/package/show/server:http/uwsgi?expand=0&rev=9 --- uwsgi.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/uwsgi.spec b/uwsgi.spec index f32bd77..c4e6d20 100644 --- a/uwsgi.spec +++ b/uwsgi.spec @@ -82,6 +82,8 @@ BuildRequires: ruby-devel BuildRequires: sqlite3-devel %if 0%{?suse_version} > 1210 BuildRequires: systemd-devel +%else +BuildRequires: systemd %endif BuildRequires: tcpd-devel BuildRequires: v8-devel From 04b934c86b48e25b8ad90e17f0e63ee585a164d701f2a161a11b61878dcb3717 Mon Sep 17 00:00:00 2001 From: James Oakley Date: Fri, 31 May 2013 21:22:27 +0000 Subject: [PATCH 6/7] Fix Ruby req. It should always be ruby19 OBS-URL: https://build.opensuse.org/package/show/server:http/uwsgi?expand=0&rev=10 --- uwsgi.spec | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/uwsgi.spec b/uwsgi.spec index c4e6d20..ad39156 100644 --- a/uwsgi.spec +++ b/uwsgi.spec @@ -74,10 +74,8 @@ BuildRequires: pkg-config BuildRequires: postgresql-devel BuildRequires: python-devel BuildRequires: python-greenlet-devel -%if 0%{?suse_version} >= 1230 +%if 0%{?suse_version} > 1210 BuildRequires: ruby19-devel -%else -BuildRequires: ruby-devel %endif BuildRequires: sqlite3-devel %if 0%{?suse_version} > 1210 From 9228307da548b5458c36e2664265c9b3e8c61c71bc6dc1c2e3790a5b3858f051 Mon Sep 17 00:00:00 2001 From: James Oakley Date: Fri, 31 May 2013 21:38:50 +0000 Subject: [PATCH 7/7] Ensure that only Ruby 1.9 is used OBS-URL: https://build.opensuse.org/package/show/server:http/uwsgi?expand=0&rev=11 --- uwsgi.spec | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/uwsgi.spec b/uwsgi.spec index ad39156..aebeb7e 100644 --- a/uwsgi.spec +++ b/uwsgi.spec @@ -332,6 +332,7 @@ This package contains support for Python applications via the WSGI protocol. Summary: Ruby Plugin for uWSGI Group: Productivity/Networking/Web/Servers Requires: %{name} = %{version} +Requires: ruby19 Provides: uwsgi-fiber = %{version} Obsoletes: uwsgi-fiber < 1.9.11 @@ -425,7 +426,7 @@ excluded_plugins="$excluded_plugins cplusplus dummy example" %if 0%{?suse_version} && 0%{?suse_version} <= 1210 # Requirements missing on openSUSE <= 12.1 -excluded_plugins="$excluded_plugins erlang fiber pyerl ruby19 systemd_logger" +excluded_plugins="$excluded_plugins erlang fiber pyerl rack ruby19 systemd_logger" %endif plugins=$(python -c "import sys, os; print ', '.join([p for p in os.listdir('plugins') if p not in sys.argv[1:]])" $excluded_plugins) @@ -439,6 +440,7 @@ cp %{SOURCE7} . export UWSGICONFIG_JVM_LIBPATH=$(dirname $(find %{_jvmdir}/java/jre/lib -name "libjvm.so" | grep server)) export UWSGICONFIG_JVM_INCPATH="%{_jvmdir}/java/include" export UWSGICONFIG_LUALIB="lua" +export UWSGICONFIG_RUBYPATH="ruby1.9" export CFLAGS="%{optflags} -I$(echo %{_libdir}/erlang/lib/erl_interface-*/include) -I%{_jvmdir}/java/include/linux -L$UWSGICONFIG_JVM_LIBPATH/jli" %{?jobs:export CPUCOUNT=%jobs} python uwsgiconfig.py --build opensuse