commit 3b161bb751b8219f3b66011f9276be953471d0739c4c940cf824230b1ccbb7e7 Author: James Oakley Date: Thu Dec 5 11:41:02 2024 +0000 Use SOURCE_DATE_EPOCH for reproducible jar mtime OBS-URL: https://build.opensuse.org/package/show/server:http/uwsgi?expand=0&rev=135 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/README.openSUSE b/README.openSUSE new file mode 100644 index 0000000..b53eec9 --- /dev/null +++ b/README.openSUSE @@ -0,0 +1,42 @@ +==================== +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 uwsgi service runs uWSGI in Emperor mode by default. 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 +https://uwsgi-docs.readthedocs.org/en/latest/Emperor.html + + +Plugins +------- + +This uWSGI package is fully modular. Some plugins, such as the Python plugin, +are not embedded in the main server binary. + +This means that your application configurations need to specify the plugins it +uses. For example, a Python application will need the following option +specified: + + plugins = python + +Alternatively, uWSGI has a autoload option that will load any plugins when it +encounters options for those plugins in the configuration. To enable that, use +the following in the configuration: + + autoload = 1 diff --git a/django.ini.example b/django.ini.example new file mode 100644 index 0000000..f9c79ac --- /dev/null +++ b/django.ini.example @@ -0,0 +1,10 @@ +[uwsgi] +plugin = python +socket = 127.0.0.1:3034 +threads = 40 +master = 1 +autoload = 1 +env = DJANGO_SETTINGS_MODULE=myapp.settings +module = django.core.handlers.wsgi:WSGIHandler() +chdir = /srv/djangoapp001 + diff --git a/opensuse.ini.in b/opensuse.ini.in new file mode 100644 index 0000000..3fd566f --- /dev/null +++ b/opensuse.ini.in @@ -0,0 +1,5 @@ +[uwsgi] +inherit = base +plugin_dir = @@LIBDIR@@/uwsgi +embedded_plugins = null +plugins = @@PLUGINS@@ diff --git a/python313.patch b/python313.patch new file mode 100644 index 0000000..77c119f --- /dev/null +++ b/python313.patch @@ -0,0 +1,99 @@ +From 699dc20f8204ee18812951600b0221156d217530 Mon Sep 17 00:00:00 2001 +From: Riccardo Magliocchetti +Date: Sun, 21 Jul 2024 16:32:31 +0200 +Subject: [PATCH] plugins/python: handle cframe removal from CPython thread + state + +Use current_frame instead +--- + plugins/python/python_plugin.c | 16 ++++++++++++++++ + plugins/python/uwsgi_python.h | 12 ++++++++++++ + 2 files changed, 28 insertions(+) + +Index: uwsgi-2.0.28/plugins/python/python_plugin.c +=================================================================== +--- uwsgi-2.0.28.orig/plugins/python/python_plugin.c ++++ uwsgi-2.0.28/plugins/python/python_plugin.c +@@ -1615,7 +1615,11 @@ void uwsgi_python_suspend(struct wsgi_re + #elif defined UWSGI_PY312 + up.current_c_recursion_remaining[wsgi_req->async_id] = tstate->c_recursion_remaining; + up.current_py_recursion_remaining[wsgi_req->async_id] = tstate->py_recursion_remaining; ++#ifdef UWSGI_PY313 ++ up.current_frame[wsgi_req->async_id] = tstate->current_frame; ++#else + up.current_frame[wsgi_req->async_id] = tstate->cframe; ++#endif + #elif defined UWSGI_PY311 + up.current_recursion_remaining[wsgi_req->async_id] = tstate->recursion_remaining; + up.current_frame[wsgi_req->async_id] = tstate->cframe; +@@ -1632,7 +1636,11 @@ void uwsgi_python_suspend(struct wsgi_re + #elif defined UWSGI_PY312 + up.current_main_c_recursion_remaining = tstate->c_recursion_remaining; + up.current_main_py_recursion_remaining = tstate->py_recursion_remaining; ++#ifdef UWSGI_PY313 ++ up.current_main_frame = tstate->current_frame; ++#else + up.current_main_frame = tstate->cframe; ++#endif + #elif defined UWSGI_PY311 + up.current_main_recursion_remaining = tstate->recursion_remaining; + up.current_main_frame = tstate->cframe; +@@ -1876,7 +1884,11 @@ void uwsgi_python_resume(struct wsgi_req + #elif defined UWSGI_PY312 + tstate->c_recursion_remaining = up.current_c_recursion_remaining[wsgi_req->async_id]; + tstate->py_recursion_remaining = up.current_py_recursion_remaining[wsgi_req->async_id]; ++#ifdef UWSGI_PY313 ++ tstate->current_frame = up.current_frame[wsgi_req->async_id]; ++#else + tstate->cframe = up.current_frame[wsgi_req->async_id]; ++#endif + #elif defined UWSGI_PY311 + tstate->recursion_remaining = up.current_recursion_remaining[wsgi_req->async_id]; + tstate->cframe = up.current_frame[wsgi_req->async_id]; +@@ -1893,7 +1905,11 @@ void uwsgi_python_resume(struct wsgi_req + #elif defined UWSGI_PY312 + tstate->c_recursion_remaining = up.current_main_c_recursion_remaining; + tstate->py_recursion_remaining = up.current_main_py_recursion_remaining; ++#ifdef UWSGI_PY313 ++ tstate->current_frame = up.current_main_frame; ++#else + tstate->cframe = up.current_main_frame; ++#endif + #elif defined UWSGI_PY311 + tstate->recursion_remaining = up.current_main_recursion_remaining; + tstate->cframe = up.current_main_frame; +Index: uwsgi-2.0.28/plugins/python/uwsgi_python.h +=================================================================== +--- uwsgi-2.0.28.orig/plugins/python/uwsgi_python.h ++++ uwsgi-2.0.28/plugins/python/uwsgi_python.h +@@ -29,6 +29,10 @@ + # define UWSGI_PY313 + #endif + ++#if (PY_VERSION_HEX >= 0x030d0000) ++# define UWSGI_PY313 ++#endif ++ + #if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 7 + #define HAS_NOT_PyMemoryView_FromBuffer + #endif +@@ -183,11 +187,19 @@ struct uwsgi_python { + #elif defined UWSGI_PY312 + int *current_c_recursion_remaining; + int *current_py_recursion_remaining; ++#ifdef UWSGI_PY313 ++ struct _PyInterpreterFrame **current_frame; ++#else + _PyCFrame **current_frame; ++#endif + + int current_main_c_recursion_remaining; + int current_main_py_recursion_remaining; ++#ifdef UWSGI_PY313 ++ struct _PyInterpreterFrame *current_main_frame; ++#else + _PyCFrame *current_main_frame; ++#endif + #elif defined UWSGI_PY311 + int *current_recursion_remaining; + _PyCFrame **current_frame; diff --git a/rails.yml.example b/rails.yml.example new file mode 100644 index 0000000..847b901 --- /dev/null +++ b/rails.yml.example @@ -0,0 +1,10 @@ +uwsgi: + plugins: rack + rack: config.ru + master: 1 + autoload: 1 + processes: 8 + socket: 127.0.0.1:3033 + post-buffering: 4096 + chdir: /srv/railsapp001 + diff --git a/trac.ini.example b/trac.ini.example new file mode 100644 index 0000000..e874475 --- /dev/null +++ b/trac.ini.example @@ -0,0 +1,8 @@ +[uwsgi] +master = true +autoload = true +processes = 2 +module = trac.web.main:dispatch_request +env = TRAC_ENV=/srv/project001 +socket = 127.0.0.1:3032 + 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-1.9.13-objc_gc-no-fobjc-gc.patch b/uwsgi-1.9.13-objc_gc-no-fobjc-gc.patch new file mode 100644 index 0000000..05edc45 --- /dev/null +++ b/uwsgi-1.9.13-objc_gc-no-fobjc-gc.patch @@ -0,0 +1,9 @@ +--- a/plugins/objc_gc/uwsgiplugin.py ++++ b/plugins/objc_gc/uwsgiplugin.py +@@ -1,5 +1,5 @@ + NAME="objc_gc" +-CFLAGS=["-fobjc-gc"] ++CFLAGS=[] + LDFLAGS=[] + LIBS=[] + GCC_LIST=['objc_gc.m'] diff --git a/uwsgi-1.9.17-plugin_build_path.patch b/uwsgi-1.9.17-plugin_build_path.patch new file mode 100644 index 0000000..598178f --- /dev/null +++ b/uwsgi-1.9.17-plugin_build_path.patch @@ -0,0 +1,16 @@ +Index: uwsgi-2.0.25.1/uwsgiconfig.py +=================================================================== +--- uwsgi-2.0.25.1.orig/uwsgiconfig.py ++++ uwsgi-2.0.25.1/uwsgiconfig.py +@@ -1444,10 +1444,7 @@ def build_plugin(path, uc, cflags, ldfla + except: + pass + +- if uc: +- plugin_dest = uc.get('plugin_build_dir', uc.get('plugin_dir')) + '/' + name + '_plugin' +- else: +- plugin_dest = name + '_plugin' ++ plugin_dest = name + '_plugin' + + shared_flag = '-shared' + diff --git a/uwsgi-2.0.12-no-LD_RUN_PATH.patch b/uwsgi-2.0.12-no-LD_RUN_PATH.patch new file mode 100644 index 0000000..cac4fee --- /dev/null +++ b/uwsgi-2.0.12-no-LD_RUN_PATH.patch @@ -0,0 +1,54 @@ +--- a/plugins/jvm/uwsgiplugin.py ++++ b/plugins/jvm/uwsgiplugin.py +@@ -69,11 +69,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 subprocess.call("javac %s/plugins/jvm/uwsgi.java" % os.getcwd(), shell=True) != 0: + os._exit(1) +--- a/plugins/php/uwsgiplugin.py ++++ b/plugins/php/uwsgiplugin.py +@@ -19,7 +19,6 @@ LDFLAGS = os.popen(PHPPATH + ' --ldflags + + if ld_run_path: + LDFLAGS.append('-L%s' % ld_run_path) +- os.environ['LD_RUN_PATH'] = ld_run_path + + # PHP8 and above does not add the version to the library + # name +--- a/plugins/python/uwsgiplugin.py ++++ b/plugins/python/uwsgiplugin.py +@@ -90,8 +90,6 @@ if not 'UWSGI_PYTHON_NOLIB' in os.enviro + LDFLAGS.append("-L%s" % libdir) + LDFLAGS.append("-Wl,-rpath,%s" % libdir) + +- os.environ['LD_RUN_PATH'] = "%s" % libdir +- + LIBS.append('-lpython%s' % get_python_version()) + else: + LIBS = [] +--- a/plugins/rack/uwsgiplugin.py ++++ b/plugins/rack/uwsgiplugin.py +@@ -48,7 +48,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: + rubylibdir = os.popen(RUBYPATH + " -e \"require 'rbconfig';print RbConfig::CONFIG['rubylibdir']\"").read().rstrip() +--- a/plugins/ruby19/uwsgiplugin.py ++++ b/plugins/ruby19/uwsgiplugin.py +@@ -42,6 +42,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-2.0.18-postgresql-config.patch b/uwsgi-2.0.18-postgresql-config.patch new file mode 100644 index 0000000..73a83ca --- /dev/null +++ b/uwsgi-2.0.18-postgresql-config.patch @@ -0,0 +1,16 @@ +--- a/plugins/emperor_pg/uwsgiplugin.py ++++ b/plugins/emperor_pg/uwsgiplugin.py +@@ -2,11 +2,8 @@ import os + + NAME = 'emperor_pg' + +-CFLAGS = ['-I' + os.popen('pg_config --includedir').read().rstrip()] ++CFLAGS = os.popen('pkg-config --cflags libpq').read().rstrip().split() + LDFLAGS = [] +-LIBS = [ +- '-L' + os.popen('pg_config --libdir').read().rstrip(), +- '-lpq' +-] ++LIBS = os.popen('pkg-config --libs libpq').read().rstrip().split() + + GCC_LIST = ['emperor_pg'] diff --git a/uwsgi-2.0.25.1.tar.gz b/uwsgi-2.0.25.1.tar.gz new file mode 100644 index 0000000..9274ffd --- /dev/null +++ b/uwsgi-2.0.25.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1e4a401f71d29e49d4762223412c32a42594c415f9d72d0f759680e5b8f4cf9 +size 811635 diff --git a/uwsgi-2.0.28.tar.gz b/uwsgi-2.0.28.tar.gz new file mode 100644 index 0000000..a85a706 --- /dev/null +++ b/uwsgi-2.0.28.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bb0762c5becb0414352cca664957206df4d6847e9a1c472e87708dc2cdad610 +size 815887 diff --git a/uwsgi-93d07ec38b31.patch b/uwsgi-93d07ec38b31.patch new file mode 100644 index 0000000..7162536 --- /dev/null +++ b/uwsgi-93d07ec38b31.patch @@ -0,0 +1,23 @@ +From 93d07ec38b319c2fba7c71d3fd0d5acc2882d65a Mon Sep 17 00:00:00 2001 +From: Rosen Penev +Date: Tue, 14 May 2024 21:08:14 -0700 +Subject: [PATCH] fix 32-bit compilation with GCC14 + +Wrong pointer type is used. +--- + core/regexp.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/core/regexp.c b/core/regexp.c +index 74bb77751..2b59f16fb 100644 +--- a/core/regexp.c ++++ b/core/regexp.c +@@ -23,7 +23,7 @@ int uwsgi_regexp_build(char *re, uwsgi_pcre ** pattern) { + + #ifdef UWSGI_PCRE2 + int errnbr; +- long unsigned int erroff; ++ size_t erroff; + + *pattern = pcre2_compile((const unsigned char *) re, PCRE2_ZERO_TERMINATED, 0, &errnbr, &erroff, NULL); + #else diff --git a/uwsgi-ld-noexecstack.patch b/uwsgi-ld-noexecstack.patch new file mode 100644 index 0000000..e1ca552 --- /dev/null +++ b/uwsgi-ld-noexecstack.patch @@ -0,0 +1,47 @@ +--- a/uwsgiconfig.py ++++ b/uwsgiconfig.py +@@ -535,7 +535,7 @@ def build_uwsgi(uc, print_only=False, gc + gcc_list.append('%s/%s' % (path, cfile)) + for bfile in up.get('BINARY_LIST', []): + try: +- binary_link_cmd = "ld -r -b binary -o %s/%s.o %s/%s" % (path, bfile[1], path, bfile[1]) ++ binary_link_cmd = "ld -z noexecstack -r -b binary -o %s/%s.o %s/%s" % (path, bfile[1], path, bfile[1]) + print(binary_link_cmd) + if subprocess.call(binary_link_cmd, shell=True) != 0: + raise Exception('unable to link binary file') +@@ -1150,7 +1150,7 @@ class uConf(object): + if not self.embed_config: + self.embed_config = self.get('embed_config') + if self.embed_config: +- binary_link_cmd = "ld -r -b binary -o %s.o %s" % (binarize(self.embed_config), self.embed_config) ++ binary_link_cmd = "ld -z noexecstack -r -b binary -o %s.o %s" % (binarize(self.embed_config), self.embed_config) + print(binary_link_cmd) + subprocess.call(binary_link_cmd, shell=True) + self.cflags.append("-DUWSGI_EMBED_CONFIG=_binary_%s_start" % binarize(self.embed_config)) +@@ -1169,7 +1169,7 @@ class uConf(object): + for directory, directories, files in os.walk(ef): + for f in files: + fname = "%s/%s" % (directory, f) +- binary_link_cmd = "ld -r -b binary -o %s.o %s" % (binarize(fname), fname) ++ binary_link_cmd = "ld -z noexecstack -r -b binary -o %s.o %s" % (binarize(fname), fname) + print(binary_link_cmd) + subprocess.call(binary_link_cmd, shell=True) + if symbase: +@@ -1179,7 +1179,7 @@ class uConf(object): + subprocess.call(objcopy_cmd, shell=True) + binary_list.append(binarize(fname)) + else: +- binary_link_cmd = "ld -r -b binary -o %s.o %s" % (binarize(ef), ef) ++ binary_link_cmd = "ld -z noexecstack -r -b binary -o %s.o %s" % (binarize(ef), ef) + print(binary_link_cmd) + subprocess.call(binary_link_cmd, shell=True) + binary_list.append(binarize(ef)) +@@ -1464,7 +1464,7 @@ def build_plugin(path, uc, cflags, ldfla + gcc_list.append(path + '/' + cfile) + for bfile in up.get('BINARY_LIST', []): + try: +- binary_link_cmd = "ld -r -b binary -o %s/%s.o %s/%s" % (path, bfile[1], path, bfile[1]) ++ binary_link_cmd = "ld -z noexecstack -r -b binary -o %s/%s.o %s/%s" % (path, bfile[1], path, bfile[1]) + print(binary_link_cmd) + if subprocess.call(binary_link_cmd, shell=True) != 0: + raise Exception('unable to link binary file') diff --git a/uwsgi-reproducible-jar-mtime.patch b/uwsgi-reproducible-jar-mtime.patch new file mode 100644 index 0000000..8ea15c5 --- /dev/null +++ b/uwsgi-reproducible-jar-mtime.patch @@ -0,0 +1,11 @@ +--- uwsgi-2.0.25.1/plugins/jvm/uwsgiplugin.py 2024-09-26 21:40:38.319789843 +0200 ++++ uwsgi-2.0.25.1/plugins/jvm/uwsgiplugin.py 2024-09-26 21:43:21.557662471 +0200 +@@ -77,7 +77,7 @@ + def post_build(config): + if subprocess.call("javac %s/plugins/jvm/uwsgi.java" % os.getcwd(), shell=True) != 0: + os._exit(1) +- if subprocess.call("cd %s/plugins/jvm ; jar cvf uwsgi.jar *.class" % os.getcwd(), shell=True) != 0: ++ if subprocess.call("cd %s/plugins/jvm ; jar --date=\"$(date -u -d @${SOURCE_DATE_EPOCH:-$(date +%%s)} +%%Y-%%m-%%dT%%H:%%M:%%SZ)\" --create --verbose --file=uwsgi.jar *.class" % os.getcwd(), shell=True) != 0: + os._exit(1) + print("*** uwsgi.jar available in %s/plugins/jvm/uwsgi.jar ***" % os.getcwd()) + diff --git a/uwsgi.changes b/uwsgi.changes new file mode 100644 index 0000000..d81fc03 --- /dev/null +++ b/uwsgi.changes @@ -0,0 +1,1843 @@ +------------------------------------------------------------------- +Thu Dec 5 07:06:07 UTC 2024 - Fridrich Strba + +- Added patch: + * uwsgi-reproducible-jar-mtime.patch + + Use SOURCE_DATE_EPOCH for reproducible jar mtime + + Applied if building with Java >= 17 + +------------------------------------------------------------------- +Tue Nov 5 14:58:48 UTC 2024 - Markéta Machová + +- add python313.patch to support the newest CPython + +------------------------------------------------------------------- +Tue Oct 29 17:46:07 UTC 2024 - Dirk Müller + +- update to 2.0.28 (bsc#1222332, CVE-2024-24795): + * Bit more friendly log messages + * Add more integration tests + * Fix static library not found install error on conda + * pyuwsgi: avoid interleaving pywsgi threadstate + * Fix gracefully_kill_them_all with running requests + * Fix –catch-exceptions causing a segfault in Python 3.5+ + * plugins/php: Add support for uwsgi.disconnect() function + * plugins/python: use PyOS_*Fork stable API functions on 3.7+ + * core/uwsgi: set enable threads by default + * plugins/python: fix compilation with Python 3.13 + * use pipe in gracefully_kill() to stop worker loop + * port pypy plugin to python3 + * add some integrations tests + * apache2/mod_proxy_uwsgi: let httpd handle CL/TE for + non-http handlers CVE-2024-24795 + * remove race-condition over termination of uWSGI process + when using need-app and lazy-apps (Hanan .T) + * fix 32-bit compilation with GCC14 (Rosen Penev) + * uwsgiconfig: get compiler version with -dumpfullversion + * Fix uwsgi_regexp_match() with pcre2 +- drop uwsgi-93d07ec38b31.patch (upstream) + +------------------------------------------------------------------- +Thu Jul 25 16:31:34 UTC 2024 - Martin Jambor + +- Added a backport of uwsgi-93d07ec38b31.patch to fix a type + incompatibility problem to enable build with GCC 14. + +------------------------------------------------------------------- +Tue May 14 07:07:42 UTC 2024 - pgajdos@suse.com + +- version update to 2.0.25.1 + * fixed build with gcc14 + 2.0.25.1 + * Fix build when pcre is not found and is optional (umut) + 2.0.25 + * Update glusterfs io callback function signature for 6.0 (Ralf Ertzinger) + * Fix default values in help for min-worker-lifetime & legion-skew-tolerance (Thomas Riccardi) + * Fix build regression with gcc < 5 (Riccardo Magliocchetti) + * Add support for building against prcre2. This changes the regexp internal data structures (Alexandre Rossi) + * Allow the valgrind generator script to run with a different python version (Wynn Wilkes) + * Fix a potential error with not releasing the gil in uwsgi_python_rpc (Wynn Wilkes) + * Rework threading cancellation handling. This can fix issues with threading, missing atexit callbacks and whatnot. (Inada Naoki) +- modified patches + % uwsgi-1.9.17-plugin_build_path.patch (refreshed) +- deleted patches + - uwsgi-2.0.24-update-glusterfs-io-callback-signature.patch (upstreamed) + +------------------------------------------------------------------- +Fri Mar 15 14:26:20 UTC 2024 - James Oakley + +- Update to 2.0.24 + * properly init cache for purge_lru (Alexandre Rossi) + * fix linking with php8 (Remi Collet) + * remove unused variables to fix compilation (László Károlyi) + * fix function parameter type to avoid overflow in harakiri (Shai Bentov) + * fix socket queue stats for ipv6 (Riccardo Magliocchetti) + * fixup -Wformat-signedness warnings (Riccardo Magliocchetti) + * Avoid strncpy from null in pyloader (Ben Kallus) + * add clang to compile test matrix in ci (Riccardo Magliocchetti) + +------------------------------------------------------------------- +Tue Feb 20 15:39:21 UTC 2024 - Dominique Leuenberger + +- Use %autosetup macro. Allows to eliminate the usage of deprecated + %patchN + +------------------------------------------------------------------- +Sat Jan 6 23:23:03 UTC 2024 - Ben Greiner + +- Update to 2.0.23 + * Add support for Python 3.12 (Ralf Ertzinger) + * plugins/php: ini_entries is read-only since PHP 8.3 (Remi + Collet) + * Silence glibc warnings against pthread robust mutex functions + (Riccardo Magliocchetti) + * Fixup jvm library path detection (Riccardo Magliocchetti) + * Use sysconfig if distutils is not available (Steve Kowalik, + Terence D. Honles, Riccardo Magliocchetti) + +------------------------------------------------------------------- +Wed Oct 18 09:48:50 UTC 2023 - Dominique Leuenberger + +- Update to version 2.0.22: + + apache2/mod_proxy_uwsgi: stricter backend HTTP response + parsing/validation (CVE-2023-27522). + + plugins/rack: fix compilation with ruby 3.1. + + plugins/php: fix build with PHP >= 8.2. +- Drop uwsgi-php82-php_module_startup-signature.patch: fixed + upstream. + +------------------------------------------------------------------- +Sat Jul 1 19:53:24 UTC 2023 - Andreas Schneider + +- Use sle15_python_module_pythons + +------------------------------------------------------------------- +Fri May 5 10:49:27 UTC 2023 - pgajdos@suse.com + +- added patches + fix https://github.com/unbit/uwsgi/commit/509a0fdd12870d0bf5b4c1ef7d1f7f + + uwsgi-php82-php_module_startup-signature.patch + +------------------------------------------------------------------- +Fri Jan 6 20:36:08 UTC 2023 - Dirk Müller + +- update to 2.0.21: + * Python 3.10 support + * Python 3.11 support + * add tests for worker deadlocks + * fix memory corruption in uwsgi_cache + * Fix segfault from GEVENT_SWITCH + * Support php 8.1 + * Use parenthesis in print() statement + +------------------------------------------------------------------- +Tue Dec 13 19:44:00 UTC 2022 - sven@uebelacker.net + +- fixing uwsgi-php[78] package description +- rpmlint: removing obsolete specfile condition for python which is included in python-rpm-macros + +------------------------------------------------------------------- +Mon Dec 12 08:58:58 UTC 2022 - Dirk Müller + +- switch to pkgconfig(zlib) so that alternative providers can be + used + +------------------------------------------------------------------- +Tue Nov 15 10:58:25 UTC 2022 - pgajdos@suse.com + +- php8 is supported already + +------------------------------------------------------------------- +Mon Jul 4 12:23:33 UTC 2022 - Ben Greiner + +- Build python plugins for all flavors on Tumbleweed + * reason: so that we can pin mailman to Python 3.9 + +------------------------------------------------------------------- +Thu May 12 07:28:54 UTC 2022 - Martin Liška + +- Add uwsgi-ld-noexecstack.patch in order to fix gh#unbit/uwsgi#2436. + +------------------------------------------------------------------- +Sun Dec 5 14:20:26 UTC 2021 - Michael Ströder + +- update 2.0.20: + * Switch default python for build to python3 (Riccardo Magliocchetti) + * Add support for PHP 8 (Riccardo Magliocchetti) + * Drop support for PHP < 7 as it is EOL since end of 2018 (Riccardo Magliocchetti) + * Fix segfaults when using –wsgi-env-behavior=holy (Antonio Cuni) + * Replace uwsgi.h system includes in core and proto dirs for Bazel (Serge Bazanski) + * gevent: fix compilation with clang11 (László Károlyi) + * Fix Python 3.9 deprecations warnings (Riccardo Magliocchetti) + * Add trove classifier for Python 3.9 (Adrian) + * Fix message in Log SIGINT/SIGTERM triggered kill_them_all (Delena Malan) + * Support 7 in weekedays as an alias for sunday to match crontab behaviour (Riccardo Magliocchetti) + * Document http-timeout default of 60 seconds (Etienne H) + * Add option to override python sys.executable using py-executable config + * Allow specifying an iteration to uwsgi::add_rb_timer (Luciano Rocha) + * Allow to compile with Python versions with minor version with 2+ digits (Cyrille Pontvieux) + * Take into account new naming for LIBPL since python 3.6 (ilrico) + * Added missing HTTP status codes messages (James Brown) + * Official support for Python 3.10 + +------------------------------------------------------------------- +Thu Oct 7 07:25:48 UTC 2021 - pgajdos@suse.com + +- greenlet and gevent plugins require uwsgi-python3 instead of + uwsgi-python + +------------------------------------------------------------------- +Thu Sep 30 08:52:52 UTC 2021 - pgajdos@suse.com + +- do not require python2, drop python plugin [bsc#1191174] + +------------------------------------------------------------------- +Fri Dec 11 22:29:58 UTC 2020 - Andreas Schwab + +- Fix logic handling v8 plugin + +------------------------------------------------------------------- +Tue Dec 1 13:59:23 UTC 2020 - pgajdos@suse.com + +- use system apache rpm macros + +------------------------------------------------------------------- +Thu Nov 26 18:51:29 UTC 2020 - Dirk Mueller + +- update 2.0.19.1: + * Reverted CGI chunked encoding support + * Fixed bug with WSGI responses returning + * Update travis to xenial (Terence D. Honles) + * Fix segfault in logsocket plugin (Riccardo Magliocchetti, #2010) + * Backport Coverity fixes from master (Riccardo Magliocchetti) + * Fix Python 3.7 warnings (Orivej Desh) + * Fix uwsgi.workers() leak in Python plugin (Arne Welzel, #2056) + * Backport redislog plugin 32-bit build fixes (Riccardo Magliocchetti, #1828) + * Fix stack overflow in core/rpc (Nicola Martino) + * Fix build with spaces in the path (Arne Welzel, #1939) + * Add missing initialization for zend_file_handle in php plugin (Arne Welzel) + * Build Python 3.7 and 3.8 plugins in CI (Arne Welzel) + * Add Trove classifiers for Python 3.7 and 3.8 (Hugo) + * Graceful shutdown for vassals (Sponsored by guppyltd.com) + * Improve yaml parsing with libyaml (Arne Welzel, #2097) + * Add smart-daemon2 option to notify daemon of master reloading (Eduardo Felipe Castegnaro) + * Do not chroot multiple times when root (Arne Welzel) + * Support io.BytesIO with wsgi.file_wrapper (Arne Welzel, #1126) + * Add websocket continuation frames support (Timi, #1350) + * Fix compilation with gevent 1.5.0 (Vytautas Liuolia) + * Fix PSGI plugin build with gcc 10 (Jorge Gallegos) + * Get rid of paste.script dependency in pypy/python plugins (Thomas De Schampheleire) + * Improve performance for santitizing file descriptors with cgi plugin (Natanael Copa, #2053) + * Fix offload-threads with honour-range (Liss Tarnell) + * Fix logging packet size length overflow (Pawel Marokwsi) + * Fix possible deadlock in install (Jacob Tolar) + * Fix parsing of http port for ipv6 (Cyril Baÿ) + * Fix impossibility of determining the end of the chunked stream with psgi plugin (ols) + * Fix parsing of http-socket port for ipv6 (Daniel Holth) + * Add chunked request decoding to the CGI plugin (Robert Schindler) + * Add add max-worker-lifetime-delta to reload workers with a delta (Marcin Lulek , #2020) + +- remove uwsgi-2.0.18-psgi-fix-duplicate-uperl.patch (upstream) + +------------------------------------------------------------------- +Wed Sep 9 10:29:20 UTC 2020 - Andreas Schneider + +- Add systemd tmpfile.d config to create /run/uwsgi + +------------------------------------------------------------------- +Wed Sep 9 09:42:14 UTC 2020 - Andreas Schneider + +- Use %license for the LICENSE + +------------------------------------------------------------------- +Mon Jun 8 18:09:43 UTC 2020 - James Oakley + +- Fix duplicate uperl in psgi plugin with wth gcc 10 (uwsgi-2.0.18-psgi-fix-duplicate-uperl.patch) + +------------------------------------------------------------------- +Sat May 16 16:33:23 UTC 2020 - James Oakley + +- Fix greenlet dependency for Python 3 +- Use explicit Python macros + +------------------------------------------------------------------- +Mon Mar 9 14:24:36 UTC 2020 - pgajdos@suse.com + +- disable geoip plugin [bsc#1156199] + +------------------------------------------------------------------- +Thu Dec 19 14:54:12 UTC 2019 - Dominique Leuenberger + +- BuildRequire pkgconfig(libsystemd) instead of systemd-devel: + Allow OBS to shortcut through the -mini flavors. + +------------------------------------------------------------------- +Tue Apr 30 04:48:25 UTC 2019 - Martin Herkt <9+suse@cirno.systems> + +- Fix systemd kill signal (uwsgi does not die on SIGTERM) +- Add reload command to systemd service + +------------------------------------------------------------------- +Sat Mar 16 00:45:25 UTC 2019 - James Oakley + +- Add patch uwsgi-2.0.18-postgresql-config.patch to use pkg-config + instead of pg_config as it was removed in postgres11-devel + +------------------------------------------------------------------- +Sat Feb 9 16:19:37 UTC 2019 - Michael Ströder + +- HTTPS URL for source +- update to upstream release 2.0.18 + * Fixed support for Python 3.7 + * Allow to use autoport (socket :0) with custom socket backlog + * pyuwsgi ported to python3 + * pyuwsgi packages fixes + * pyuwsginossl build configuration for building pyuwsgi without ssl support + * Fix unix socket inheritance after reload on FreeBSD + * Fix crashes with --wsgi-env-behavior=holy (#1950) + * Fix invalid free in python plugin (#1942) + * Fix compilation warnings with gcc-8 (#1819) + * Fix spooler python references + * Don't generate build warnings in systemd_logger + * Fix segmentation fault during worker shutdown (#1651) + +------------------------------------------------------------------- +Thu Aug 2 22:12:22 UTC 2018 - michael@stroeder.com + +- Trimmed package description + +------------------------------------------------------------------- +Mon Jul 23 13:33:36 UTC 2018 - jfunk@funktronics.ca + +- Work around missing include dir in glusterfs pkg-config + +------------------------------------------------------------------- +Mon Jul 9 14:52:54 UTC 2018 - michael@stroeder.com + +- update to upstream release 2.0.17.1 + * Fixed memory leak in HTTPS_CLIENT_CERTIFICATE + * TLSv1 is now disabled by default + * Improved daemons throttle system + * Add “secs” log formatting variable + * Improved snprintf() usage to be OpenBSD-friendly + * Improved glibc crypt/crypt_r management + * Fixed websocket pong timeout check + * Add the “License” classifier to setup.py + * Add support for php user.ini + * Official support for Python 3.7 + +------------------------------------------------------------------- +Thu May 31 00:45:55 UTC 2018 - jfunk@funktronics.ca + +- Don't create a /run directory for Apache on startup. It fails if Apache is + not installed and sockets are defined per-application anyway (bnc#1082002) +- Fix broken build dependency on Leap 15 + +------------------------------------------------------------------- +Tue Apr 24 10:48:33 UTC 2018 - michael@stroeder.com + +- Require Apache 2.4.33 for Leap 15 and Tumbleweed + because otherwise mod_proxy_uwsgi is not available (bsc#1090695) + +------------------------------------------------------------------- +Wed Apr 18 13:32:20 UTC 2018 - guillaume.gardet@opensuse.org + +- Handle aarch64 arch + +------------------------------------------------------------------- +Mon Apr 16 23:48:42 UTC 2018 - jfunk@funktronics.ca + +- Disable apache2-mod_proxy_uwsgi on Leap 15 since upstream Apache includes + the module now + +------------------------------------------------------------------- +Mon Apr 16 13:42:59 UTC 2018 - jfunk@funktronics.ca + +- Update to 2.0.17: + * The Emperor throttling subsystem does not make use anymore of blocking + functions, like usleep(), this should fix stats serving and should improve + vassals startup time + * [Security/PHP] enforce DOCUMENT_ROOT check when using --php-docroot to + avoid directory traversal (Marios Nicolaides) + * added --shutdown-sockets to improve graceful shutdowns (Andrew Wason) + +------------------------------------------------------------------- +Tue Feb 27 11:53:27 UTC 2018 - bjorn.lie@gmail.com + +- Update License tag to SPDX 3 version: + Apache-2.0 AND GPL-2.0-only WITH GCC-exception-2.0. + +------------------------------------------------------------------- +Sun Feb 18 18:51:03 UTC 2018 - michael@stroeder.com + +- removed obsolete reproducible.patch +- Update to 2.0.16: + * [CVE-2018-6758] Stack-based buffer overflow in + core/utils.c:uwsgi_expand_path() + * Backported early_post_jail plugin hook (Bjørnar Ness) + * Fixed ipv6 suupport for http-socket (James Brown) + * Enable execinfo on DragonFly BSD (Aaron LI) + * Fix inet_ntop buffer size (Orivej Desh) + * Add worker running time metrics (Serge/yasek) + * Backported safe-pidfile, safe-pidfile2 (Nate Coraor) + * Stop using libxml2 by default on osx + * Fixed uwsgi_kvlist_parse signature + * Backport http range fixes from master (Curtis Maloney, Sokolov Yura) + * relicensed mod_proxy_uwsgi to Apache 2.0 + * logging: Add ${millis} support to json encode + * plugins/router_xmldir: fixup invalid locale check (Riccardo Magliocchetti) + * Add ssl-verify-depth flag to set the max Client CA chain length (Paul Tagliamonte) + * Allow to override build date (Bernhard M. Wiedemann) + * Python 3 plugin: improved thread names handling (Jyrki Muukkonen, Mark Meyer) + * Added uwsgi_resolve_ip for redis host (ahmbas) + * plugins/gevent: Fix signal handlers (Maslov Alexander) + * Write x509 DER to the uwsgi buffer (Paul Tagliamonte) + * plugin/http: Fix compilation (Melvyn Sopacua) + * Fixed emperor throttling system (Jeremy Hiatt) + * Fix application loading without Plack after excluding “.” from @INC in new Perl versions (Anton Petrusevich) + * Fix MULE MSG QUEUE IS FULL message hint (Eugene Tataurov) + * Build System: support k_minor has a _xxx suffix (TOGO Li) + * Fixed drop-after-* options (Robert DeRose) + * Add mule_send_msg success indicator (Josh Tiras) + * Properly check item size in uwsgi_queue_push (Josh Tiras) + * FastRouter / HTTP Router can now have a ‘fallback’ key configured + * HTTP Router now supports post-buffer, just like FastRouter + * Fix handling of env in embedded dict in Python plugin (could cause segfaults in single thread mode) + * Add support for Brotli (.br) with –static-gzip + * Back-ported HTTP/1.1 support (–http11-socket) from 2.1 + +------------------------------------------------------------------- +Sun Dec 10 04:51:02 UTC 2017 - i@marguerite.su + +- fix a leaf problem found by repo-checker + * uwsgi-python3 can't be install because it requires python-base = 3.6 + which should be python3-base + +------------------------------------------------------------------- +Wed Nov 09 00:00:00 UTC 2017 - sven@uebelacker.net + +- creating /run/uwsgi for sockets via systemd service now + +------------------------------------------------------------------- +Wed Oct 26 00:00:00 UTC 2017 - sven@uebelacker.net + +- Update to 2.0.15: [2017-03-30] + * workaround for the holy allocator for avoiding crashes with newrelic (see + Issues notes) + * avoid time overflow in request logs during (even minimal) clock skew + * fixed python logger with python3 + * fixed catch-exceptions with python3 + * backported “don’t clone $env->{‘psgix.io’} on ‘PSGI cancel’” + * added support for authentication in the redis logger + * added the spinningfifo action hook to the core + * fixed compilation with php 7.1 (Дамјан Георгиевски) + * correctly returns error code 22 in lazy_apps + master_mode + * fixed compilation for OpenSSL 1.1 (Riccardo Magliocchetti) + * Add a –skip-atexit-teardown option to skip perl/python teardown (Ævar + Arnfjörð Bjarmason) + * fixed static file serving over https-socket +- building now php7 plugin via php7-embed package for Factory/Tumbleweed +- removing uwsgi-1.9.13-emperor_pg-Wformat.patch + +------------------------------------------------------------------- +Wed Oct 18 08:35:31 UTC 2017 - jengelh@inai.de + +- Trim filler wording from description. + +------------------------------------------------------------------- +Sat Jun 24 06:59:57 UTC 2017 - bwiedemann@suse.com + +- Add reproducible.patch to override build date to make build more reproducible +- sort list of plugins + +------------------------------------------------------------------- +Wed Oct 5 12:14:59 UTC 2016 - buschmann23@opensuse.org + +- Update to 2.0.14: + * backported gevent-early-monkey-patch (jianbin-wei) + * Fixed OpenBSD version check (Pavel Korovin) + * PSGI/Perl cache api fixes (Alexander Demenshin) + * Correctly decode PATH_INFo in router_rewrite plugin (Ben Hearsum) + * add uwsgi.accepting() for chain-reload + worker-override combo + (enkore) + * fixed workers killing when in cheaper modes (shoham-stratoscale) + * added –cgi-safe option (nnnn20430) + * Implemented graceful reload for COROAE plugin (aleksey-mashanov) + * Added –php-fallback2, –php-fallback-qs (Felicity unixwitch) + * Added ipv4in and ipv6in routing rules (Felicity unixwitch) + * Fixed readline support in python3 when working interactively + (Anthony Sottile) + * Implement touch-reloading for mules and spoolers (Alexandre Bonnetain) + * add request_start timestamp in stats (Ben Plotnick) + * Fixed double free in uwsgi_routing_func_rewrite (William Orr) + * Various mod_proxy_uwsgi fixes (Ya-Lin Huang) + * support for ‘no-answer’ in PSGI (Anton Petrusevich) + * added php-constant option (Дамјан Георгиевски [gdamjan]) + * added the stdio logger (Дамјан Георгиевски [gdamjan]) + * spooler: fix reading inconsistent data (Pavel Patrin) + * Removed -WError from the build procedure (Riccardo Magliocchetti, + suggested by Ian Denhardt) + * The usual amount of coverity-based fixes (Riccardo Magliocchetti) + +------------------------------------------------------------------- +Wed Sep 28 02:00:36 UTC 2016 - jfunk@funktronics.ca + +- Don't fail build on deprecated declarations + +------------------------------------------------------------------- +Wed Jun 8 18:53:26 UTC 2016 - buschmann23@opensuse.org + +- Update to 2.0.13.1: + * Fixed support for python 2.5 and python 2.6 + * Fixed support for older glibc + * Reverted EPOLLEXCLUSIVE patch, requires more investigation + +------------------------------------------------------------------- +Thu May 12 04:43:00 UTC 2016 - jfunk@funktronics.ca + +- Update to 2.0.13: + * Fix compilation with GCC 6 + * Remote rpc fixes (Darvame) + * Musl support! (Natanael Copa, Matt Dainty, Riccardo Magliocchetti) + * Create the spooler directory if it does not exist (Alexandre Bonnetain) + * Fix compilation on big endian linux (Riccardo Magliocchetti) + * A ton of cache fixes (Darvame) + * Make it easier to compile plugins on a different directory (Jakub + Jirutka) + * Add wheel package machinery (Matt Robenolt) + * Use EPOLLEXCLUSIVE for reading, helps with the thundering herd problem + (on linux 4.5+) (INADA Naoki) + * Fix apache 2.4 integration with unix sockets (Alexandre Rossi) + * Add HTTP/2 support to apache 2 proxy (Michael Fladischer, OGAWA Hirofumi) + * Fix apache mod proxy compilation with apache 2.4.20 (Mathieu Arnold) + * Default to clang as default compiler on MacOS X (Riccardo Magliocchetti) + * Added --cgi-close-stdin-on-eof (Roberto De Ioris) + +------------------------------------------------------------------- +Thu Jan 7 13:50:57 UTC 2016 - buschmann23@opensuse.org + +- Udate to version 2.0.12 + * Bugfixes + * ‘rpcvar’ routing action correctly returns NEXT on empty response + * uwsgiconfig: fix handling of empty keys in python3 (Simone Basso) + * plugins/alarm_speech: fix AppKit spelling to support + case-sensitive filesystems (Andrew Janke) + * Fix inheriting INET address 0.0.0.0 (INADA Naoki) + * core/xmlconf: correctly initialize libxml2 (Riccardo Magliocchetti) + * Pass LIBDIR to linker in python plugin (Borys Pierov) + * Platforms-related build fixes for pty, forkptyrouter and mono + plugins (Jonas Smedegaard and Riccardo Magliocchetti) + * New Features + * The custom worker api - Finally you are able to override the uWSGI + processing model to completeley get control of it. + https://github.com/unbit/uwsgi-docs/blob/master/WorkerOverride.rst + * --wsgi-disable-file-wrapper - This option disables the wsgi.file_wrapper + optimization of the WSGI standard. IN some corner case this is + the only trick to avoid errors. + * Official PHP7 support - PHP 7 is now officially supported in + the php plugin. + * uwsgi.spooler_get_task api (Credits: Alexandre Bonnetain) + This patch allows you to easily parse spooler files. + * --if-hostname-match (Credits: Alexandre Bonnetain) + This options for config logic allows you to define options only + when a regexp over the hostname machtes. +- Update patch 1 - uwsgi-1.9.17-no-LD_RUN_PATH.patch - renamed patch + file to uwsgi-2.0.12-no-LD_RUN_PATH.patch + +------------------------------------------------------------------- +Fri Nov 6 17:33:31 UTC 2015 - buschmann23@opensuse.org + +- Update to version 2.0.11.2 + * Bugfixes + * OSX 10.11 supports TCP_FASTOPEN + * fixed http-socket parser state after harakiri + * fixed threaded request logger + * fixed fastrouter subscriptions modifiers + * fixed alarm backlog + +------------------------------------------------------------------- +Sat Sep 26 17:39:41 UTC 2015 - jfunk@funktronics.ca + +- Remove uwsgi-2.0.10-gcc5.patch as it was integrated upstream +- Update to 2.0.11.1: + * Bugfixes + * fixed HTTPS router resource deallocation and fiel descriptors leak + * do not spit out ssl errors when errno is 0 + * New Features + * The unix_signal hook - You can now remap UNIX signals to specific + functions symbols +- Changes from 2.0.11: + * Bugfixes + * [pypy] fixed misuse of ffi.string + * fixed detection for gcc 5 (jimfunk) + * fixed shared sockets for gateways + * [psgi] Changed abs to labs because offset is declared as a long (Peter H. + Ezetta) + * add null terminator to uwsgi_get_dot_h() and uwsgi_config_py() (Jay + Oster) + * fixed thread waiting during stop/restart (Kaiwen Xu) + * fixed chain reloading verbosity + * [python] fixed spooler job reference counting (Curtis Maloney) + * various static analysis improvements (Riccardo Magliocchetti) + * fixed sharedarea support for very big ranges + * fixed gzip transformation for zero-sized responses (Curtis Maloney) + * fixed management of https client certificate authentication (Vladimir + Didenko) + * fixed OpenBSD build + * fixed TMPFILE permissions + * New Features + * The mem_collector thread - Evil memory monitors (like --evil-reload-on-rss) + are now asynchronously managed by a dedicated thread. This solves the issue + of runaway processes not catched by the master. + * fixpathinfo routing action - This is another step in removing the need of + the infamous uwsgi_modifier1 30 relic. + * uwsgi[sor] and time[micros] routing vars - This two new vars exposes the + start of the current request (in micros) and the current time (again in + micros) + * wait-for-socket - This works like wait-for-fs/iface/file/dir. The spawn + of the instance is suspended until the specified tcp/unix socket is + ready. You can use it to synchronize vassals spawn (like stopping a + vassal until a postgresql server has been spawned) + * wait_for hooks - All of the wait-for-* functions can now be used as a + hook + +------------------------------------------------------------------- +Wed Aug 12 11:10:35 UTC 2015 - dvaleev@suse.com + +- Don't build v8 plugin for PowerPC + +------------------------------------------------------------------- +Sun Jun 28 18:10:21 UTC 2015 - jfunk@funktronics.ca + +- Added uwsgi-2.0.10-gcc5.patch to fix build for gcc 5 +- Update to 2.0.10: + * Bugfixes + * Don't lower security standards with gcc 4.9 (Riccardo Magliocchetti) + * Perl/PSGI make sure that at least two params are passed to xs_input_seek + (Ivan Kruglov) + * Perl/PSGI fixed multiple interpreters usage + * spooler: fixed scandir usage + * fixed exception handler arguments management + * fixed 'log-master' + 'daemonize2' disables all logging + * fixed http Range header management + * New Features + * safeexec hook - this is like 'exec' but do not exit on error even if the + executed command returns a non-zero value + * backported --emperor-wrapper-fallback and --emperor-wrapper-override + * added support for UNIX sockets to rsyslog + * forcecl transformation - this transformation works like 'fixcl' but + generates the Content-Length header even if Content-Length has been + listed for removal +- Changes from 2.0.9: + * Bugfixes + * fixed mod_proxy_uwsgi for non-blocking mode (many thanks to Joe cuchac) + * fixed master-fifo + cheaper + * fixed leak on error in bind_to_unix (Riccardo Magliocchetti) + * atexit hooks works in cheaped workers too + * atexit hooks works in gevent mode too during shutdown + * fixed carbon command line option value after reload + * do not honour Emperor throttling on the first run + * fixed Mono plugin + * fixed peer name in corerouters + * fixed stop signal for daemons + * various ssl/tls fixes in https/spdy router + * fixed python3 --py-auto-reload-ignore + * fixed modifiers in corerouters + * support for yajl from homebrew (OSX) + * psgi: Ensure that we call any DESTROY hooks on psgix.harakiri.commit + (Ævar Arnfjörð Bjarmason) + * systemdlogger: fix compilation with -Werror=format-security (Riccardo + Magliocchetti) + * fixed unmasked websockets + * perl fixed latent refcounting bug (Mattia Barbon) + * New Features + * Improved PyPy support for Linux + * Fastrouter post-buffering + * Perl uwsgi::opt - The psgi/perl plugin exposes the uwsgi::opt hash, + reporting the whole instance key-value configuration + * --pull-header - This is like --collect-header but the collected header + is not returned to the client + * active-workers signal target - This is like the 'workers' target, but + forward the signal only to non-cheaper workers + * httpdumb routing action - The http internal router exposes a new mode + called 'httpdumb' that does not change headers before forwarding the + request +- Changes from 2.0.8: + * Bugfixes + * fixed PHP `SCRIPT_NAME` usage when --php-app is in place + * allow "appendn" hook without second argument + * fix heap corruption in the Carbon plugin (credits: Nigel Heron) + * fix getifaddrs() memory management + * fixed `tcsetattr()` usage + * fixed kevent usage of return value (credits: Adriano Di Luzio) + * ensure PSGI response headers are in the right format + * fixed reloading of attached daemons + * fixed SSL/TLS shutdown + * fixed mountpoint logic for paths not ending with / (credits: Adriano Di + Luzio) + * fixed Python3 support in spooler decorators (credits: Adriano Di Luzio) + * New Features + * RTSP and chunked input backports from 2.1 for the HTTP router + * --hook-post-fork - This custom hook allows you to call actions after + each fork() + * fallback to trollius for asyncio plugin + * added sweep_on_full, clear_on_full and no_expire to --cache2 - Three new + options for --cache2 have been added for improving the caching expire + strategies: + * sweep_on_full will call a sweep (delete all of the expired items) as + soon as the cache became full + * clear_on_full will completely clear the cache as soon as it is full + * no_expire forces the cache to not generate a cache sweeper thread, + delegating items removal to the two previous options + * backported wait-for-fs/mountpoints from 2.1: + * --wait-for-fs : suspend the uWSGI startup until a file/directory + is available + * --wait-for-file : suspend the uWSGI startup until a file is + available + * --wait-for-dir : suspend the uWSGI startup until a directory is + available + * --wait-for-mountpoint : suspend the uWSGI startup until a + mountpoint is available + * improved the offload api (backport from 2.1) + * Allows building plugins from remote sources as embedded + * Automatically manage HTTP_X_FORWARDED_PROTO +- Changes from 2.0.7 + * Bugfixes + * fixed counters in Statsd plugin (Joshua C. Forest) + * fixed caching in PHP plugin (Andrew Bevitt) + * fixed management of system users starting with a number + * fixed request body readline using memmove instead of memcpy (Andrew + Wason) + * ignore "user" namespace in setns (still a source of problems) + * fixed Python3 RPC bytes/string mess (result: we support both) + * do not destroy the Emperor on failed mount hooks + * fixed symbol lookup error in the Mono plugin on OS X (Ventero) + * fixed FastCGI and SCGI protocols error when out of buffer happens + * fixed Solaris/SmartOS I/O management + * fixed two memory leaks in the RPC subsystem (Riccardo Magliocchetti) + * fixed the Rados plugin's PUT method (Martin Mlynář) + * fixed multiple Python mountpoints with multiple threads in cow mode + * stats UNIX socket is now deleted by vacuum + * fixed off-by-one corruption in cache LRU mode + * force single-CPU build in Cygwin (Guido Notari) + * New Features + * Allow calling the spooler from every CPython context + * store_delete cache2 option - The store_delete flag of the --cache2 + option allows you to force the cache engine to automatically remove + invalid backing store files instead of steadfastly refusing to launch + * file logger rotation + * Vassal plugin hooks + * Broodlord improvements - The Broodlord subsystem has been improved with + a new option: --vassal-sos that automatically ask for reinforcement when + all of the workers of an instance are busy + +------------------------------------------------------------------- +Tue Jul 1 17:14:31 UTC 2014 - jfunk@funktronics.ca + +- Update to 2.0.6: + * Bugfixes + * fixed a memory leak with subscription system + * fixed shortcut for ssl-socket + * fixed apache2 mod_proxy_uwsgi (it is now considered stable with all mpm + engines) + * fixed SCRIPT_NAME and PATH_TRANSLATED generation in php plugin (thanks + Matthijs Kooijman) + * remove the old FIFO socket from the event queue when recreating it + (thanks Marko Tiikkaja) + * New features + * The new Rados plugins. The rados plugin has been improved and + stabilized, and now it is considered usable in production. + * --if-hostname. This is a configuration logic for including options only + when the specified hostname matches + * Apache2 mod_proxy_uwsgi stabilization. After literally years of bug + reports, and corrupted data, the mod_proxy_uwsgi is now stable, and on + modern apache2 releases it supports unix sockets too + * uwsgi[rsize] routing var. This routing var (meaningful only in the + 'final' chain) exposes the response size of the request + * the callint scheme. This scheme allows you to generate blob from + functions exposed by your uWSGI instance + * --fastrouter-fallback-on-no-key. The corerouters fallback procedure + requires a valid key (domain name) has been requested. This option + forces the various routers to trigger the fallback procedure even if a + key has not been found + * php 5.5 opcode caching via --php-sapi-name + * Improved chain-reloading. Thanks to Marko Tiikkaja the chain reloading + procedure correctly works in cheaper modes and it is more verbose + * added 'chdir' keyval to --attach-daemon2. You can now set where attached + daemons need to chdir() +- Changes from 2.0.5: + * Bugfixes + * fixed support for repeated headers in lua plugin (Credits: tizoc) + * fixed support for embedding config in OpenBSD and NetBSD + * various fixes in the curl-based plugins (Credits: Yu Zhao) + * fixed milliseconds-based waits + * fixed sharedarea poller + * fixed stats server json escaper + * fixed fastcgi parser and implemented eof management (Credits: Jeff + Trawick) + * improved fast on-demand mode + * exclude avg_rt computation for static files + * fixed variables support in uwsgi internal router + * fixed websockets + keepalive ordering + * disable SIGPIPE management in corutines-based loop-engines + * fixed 64bit sharedarea management in 32bit systems + * honour chmod/chown-socket in fd0 mode + * hack for avoiding Safari iOS to make mess with keepalive + * fixed log setup when both --logto and --log2 (Credits: Łukasz + Mierzwa) + * fixed mule_get_msg EAGAIN + * signal_pidfile returns the right error code + * fixed asyncio on OSX + * New features + * graceful reload of mule processes (Credits: Paul Egan). SIGHUP is now + sent to mules instead of directly killing them + * return routing action (Credits: Yu Zhao). The new action will allow + users to write simplified "break" clause + * --emperor-no-blacklist. This new option, completely disables the + blacklisting Emperor subsystem + * Icecast2 protocol helpers + * --metrics-no-cores, --stats-no-cores, --stats-no-metrics. When you have + hundreds (or thousands) of async cores, exposing metrics of them could + be really slow. Three new options have been added allowing you to + disable the generation of core-related metrics and (eventually) their + usage in the stats server + * sharedarea improvements. The sharedarea api continues to improve. Latest + patches include support for mmapping device directly from the command + line + * UWSGI_GO_CHEAP_CODE. This exit code (15) can be raised by a worker to + tell the master to not respawn it + * PROXY1 support for the http router (Credits: bgglenn). The option + --http-enable-proxy-protocol allows the HTTP router to understand PROXY1 + protocol requests (like the ones made by haproxy or amazon elb) + * reset_after_push for metrics (Credits: Babacar Tall). This metric + attribute ensure that the matric value is reset to 0 (or its hardcoded + initial_value) evry time the metric is pushed to some external system + (like carbon, or statsd) + * setremoteaddr. This routing action allows you to completely override the + REMOTE_ADDR detected by protocol handlers + * The resolve option. There are uWSGI options (or plugins) that do not + automatically resolves dns name to ip addresses. This option allows you + to map a placeholder to the dns resolution of a string +- Changes from 2.0.4: + * Bugfixes + * fixed "mime" routing var (Steve Stagg) + * allow duplicate headers in http parsers + * faster on_demand Emperor management + * fixed UWSGI_ADDITIONAL_SOURCES build option + * merge duplicated headers when SPDY is enabled (Łukasz Mierzwa) + * fixed segfault for unnamed loggers + * --need-app works in lazy-apps mode + * fixed fatal hooks management + * New features + * The experimental asyncio loop engine (CPython >= 3.4). asyncio (also + known as 'tulip') is the new infrastructure for writing + non-blocking/async/callback-based code with Python 3. This plugin + (experimental) allows you to use asyncio as the uWSGI loop engine + * httprouter advanced timeout management. The http router got 2 new + specific timeout: + * --http-headers-timeout ; defines the timeout while waiting for + http headers + * --http-connect-timeout ; defines the timeout when connecting to + backend instances + they should help the sysadmin in improving security and availability. + Credits: Łukasz Mierzwa + * Allow disabling cache warnings in --cache2. Author: Łukasz Mierzwai. + The 'ignore_full' keyval option has beed added to cache2. This will + disable warnings when a cache is full + * purge LRU cache feature by Yu Zhao (getcwd). This new mode allows you to + configure a cache to automatically expires least recently used (LRU) + items when it is full. Just add purge_lru=1 to your cache2 directive + * support embedded config on FreeBSD. You can now embed config on FreeBSD + systems + * rpc hook. Two new hooks have been added: + * 'rpc' -> call the specified rpc function (fails on error) + * 'rpcretry' -> call the specified rpc function (retry on error) + * setmodifier1 and setmodifier2 routing actions. Having to load the + 'uwsgi' routing plugin just for setting modifiers was really annoying. + These two routing actions (embedded in the core) allow you to + dynamically set modifiers + * no_headers option for static router. Keyval based static routing action + can now avoid to rewrite response headers (useful for X-Sendfile), just + add no_headers=1 to your keyval options. +- Added Python 3 plugin +- Added rcuwsgi link + +------------------------------------------------------------------- +Sat Mar 29 17:28:02 UTC 2014 - jfunk@funktronics.ca + +- Update to 2.0.3: + * Bugfixes + * fixed spooler 'at' key usage + * fixed a memory and fd leak with on-demand Emperor sockets + * on __APPLE__ use LOG_NOTICE for syslog plugin + * fixed mongrel2 support + * hack for avoiding libmongoclient to crash on broken cursor + * log alarm is now a uwsgi_log_verbose() wrapper + * fixed tuntap router memory corruption + * Set ECDHE curve independently from DHE parameters (Hynek Schlawack) + * do not wait for a whole Emperor cycle before checking for each waitpid + * fix a regression with caller() not indicating the starting *.psgi program + (Ævar Arnfjörð Bjarmason) + * New features + * The Emperor now responds to two new signals: + * SIGWINCH: force an emperor rescan of vassals + * SIGURG: cleanup the Emperor states (for now it only clears its blacklist) + * --build-plugin. Building plugins on-the-fly from git repositories + * uwsgi.add_var(key, value). You can now set request variables directly + from your app, for better integration with the internal routing + subsystem + * 'disableheaders' routing action. This new action disables the sending of + response headers, independently by the current request state + * Smarter Emperor on bad conditions. Now the Emperor completely destroys + internal vassal-related structures when it is impossible to correctly + kill a broken vassal (both for inconsistent Emperor state or for + internal system problems) + +------------------------------------------------------------------- +Sun Mar 16 18:00:35 UTC 2014 - jfunk@funktronics.ca + +- Update to 2.0.2: + * Bugfixes + * fixed python3 support on older compilers/libc + * allow starting in spooler-only mode + * fixed cache bitmap support and added test suite (credits: Danila Shtan) + * fixed ftime log var + * added async remote signal management + * fixed end-for and end-if + * fixed loop in internal-routing response chain + * fixed pypy execute_source usage + * logpipe: Don't setsid() twice (credits: INADA Naoki) + * New features and improvements + * CGI plugin + * The plugin has been improved to support streaming + * The long-awaited async support is finally ready + * PSGI loading improvements + * The PSGI loader now tries to use Plack::Util::load_psgi() function + instead of simple eval + +------------------------------------------------------------------- +Fri Feb 21 16:49:14 UTC 2014 - jfunk@funktronics.ca + +- Update to 2.0.1: + * Bugfixes + * due to a wrong prototype declaration, building uWSGI without SSL + resulted in a compilation bug. The issue has been fixed. + * a race condition preventing usage of a massive number of threads in the + PyPy plugin has been fixed + * check for heartbeat status only if heartbeat subsystem has been enabled + * improved heartbeat code to support various corner cases + * improved psgi.input to support offset in read() + * fixed (and simplified) perl stacktrace usage + * fixed sni secured subscription + * CGI plugin does not require anymore that Status header is the first one + (Andjelko Horvat) + * fixed CPython mule_msg_get timeout parsing + * allows embedding of config files via absolute paths + * fixed symcall rpc + * fixed a memory leak in CPython spooler api (xiaost) + * The --no-orphans hardening has been brought back (currently Linux-only) + * improved dotsplit router mode to reduce DOS risk + * sub-Emperor are now loyal by default + * fixed non-shared ruby 1.8.7 support + * fixed harakiri CPython tracebacker + * request vars are now correctly exposed by the stats server + * support log-master for logfile-chown + * improved legion reload + * fixed tuntap netmask + * fixed busyness plugin without metrics subsystem + * New features + * See http://uwsgi-docs.readthedocs.org/en/latest/Changelog-2.0.1.html + * Perl native Spooler support + * --alarm-backlog: Raise the specified alarm when the listen queue is full + * --close-on-exec2: applies CLOSE_ON_EXEC socket flag on all of the server + sockets + * simple notifications subsystem for subscriptions + * pid namespace for daemons (Linux only) + * The fastrouter and the http/https/spdy router now support + "resubscription". + * filesystem monitor api + * support for yajl 1.0 + * for-readline: a config-logic iterator that yields file lines + * %i magic var: returns the inode of the currently parsed file + * %j magic var: returns hex representation of 32bit djb33x hashing of the + currently parsed absolute filename + * --inject-before and --inject-after: prepend and append 'blobs' to a + config file + * --http-server-name-as-http-host: This flag allow the http router to map + SERVER_NAME to HTTP_HOST automatically instead of instructing your uWSGI + instances to do it + * better Emperor's Ragnarok (shutdown procedure) + * PyPy paste support +Changes from 2.0.0: + * Important changes + * Dynamic options have been definitely removed as well as the + broken_plugins directory + * Bugfixes and improvements + * improved log rotation + * do not rely on unix signals to print request status during harakiri + * added magic vars for uid and gid + * various Lua fixes + * a tons of coverity-governed bugfixes made by Riccardo Magliocchetti + * New features + * --attach-daemon2: this is a keyval based option for configuring external + daemons + * Linux setns() support + * "private" hooks + * Support for yajl library (JSON parser) + * Perl spooler support + * Gateways can drop privileges + * Subscriptions-governed SNI contexts +* Changes from 1.9.21: + * Bugfixes + * croak if the psgi streamer fails + * allows building coroae on raspberrypi + * do not wait for write availability until strictly required + * avoid segfault when async mode api is called without async mode + * fixed plain (without suspend engine) async mode + * do not spit errors on non x86 timerfd_create + * support timerfd_create/timerfd_settime on __arm__ + * Optimizations + * writev() for the first chunk + * use a single buffer for websockets outgoing packets + * New features + * See http://uwsgi-docs.readthedocs.org/en/latest/Changelog-1.9.21.html + * removed zeromq api + * The shared area subsystem has been rewritten + * report request data in writers and readers + * Modular logchunks management + * 6 new request logging variables are available: + * tmsecs: report the current unix time in milliseconds + * tmicros: report the current unix time in microseconds + * werr: report the number of write errors for the current request + * rerr: report the number of read errors for the current request + * ioerr: the sum of werr and rerr + * var.XXX: report the context of the request var XXX (like + var.PATH_INFO) + * mountpoints and mules support for symcall + * read2 and wait_milliseconds async hooks + * websockets binary messages + * the 'S' master fifo command + * as-mule hook + * accepting hook and improved chain reloading + * --after-request-call: this option allows you to call specific C + functions (in chains) after each request + * error pages + * Simplified plugins builder +* Changes from 1.9.20: + * First round of deprecations and removals for 2.0 + * The Go plugin is now considered "broken" and has been moved away from + the plugins directory. The new blessed way for running Go apps in uWSGI + is using the GCCGO plugin. + * The --auto-snapshot option has been removed, advanced management of + instances now happens via MasterFIFO + * The matheval support has been removed, while a generic "matheval" plugin + (for internal routing) is available (but not compiled in by default). + See below for the new way for making "math" in config files. + * The "erlang" and "pyerl" plugins are broken and has been moved out of + the plugins directory. Erlang support will be completely rewritten after + 2.0 release. + * Bugfixes + * Fixed master hang when gracefully reloading in lazy mode. + * Fixed default_app usage. + * Another round of coverity fixes by Riccardo Magliocchetti. + * Fixed EAGAIN management when reading the body. + * New features + * See http://uwsgi-docs.readthedocs.org/en/latest/Changelog-1.9.20.html + * 64bit return values for the RPC subsystem + * The new GCCGO plugin + * Simple math in configuration files + * New magic vars + * %t: Unix time (in seconds, gathered at instance startup) + * %T: Unix time (in microseconds, gathered at instance startup) + * %k: Number of detected CPU cores + * Perl/PSGI improvements + * New native protocols: --https-socket and --ssl-socket + * PROXY (version1) protocol support + * New metrics collectors + * avg: Compute the math average of children + * accumulator: Always add the value of the specified children to the + final value + * multiplier: Multiply the sum of the specified children for the value + specified in arg1n + +------------------------------------------------------------------- +Sun Nov 10 20:06:51 UTC 2013 - jfunk@funktronics.ca + +- Update to 1.9.19: + * This release starts the 'hardening' cycle for uWSGI 2.0 (scheduled for the + end of december 2013). The metrics subsystem was the last piece missing + and this version (after 1 year of analysis) finally includes it. During + the following 2 months we will start deprecating features or plugins that + got no-interest, are known to be broken or are simply superseed by more + modern/advanced ones. + * Bugfixes + * completely skip cgroups initialization when non-root + * tons of post-static_analysis fixes by Riccardo Magliocchetti + * fixed the greenlet plugin reference counting + * avoid kevent storm for stats pusher thread + * fixed rbtimers math + * both 'cache' and 'file' routers got a 'no_content_length' key option to + avoid setting the Content-Length header + * the PyPy plugin automatically enables threads/GIL + * manage dot_segments in HTTP parser + * improved srand() usage + * New features + * The Metrics subsystem. This was the last piece missing before uWSGI 2.0. + The Metrics subsystem allows you to store "numbers" related to + monitoring, graphing and quality checks and exports them in various ways + * The Tornado loop engine. While working on nodejs integration we realized + that contrary to what we used to believe, Tornado (an asynchronous, + callback based module for python) is usable in uWSGI. + * The 'puwsgi' protocol. A "persistent" (keep-alive) version of the + 'uwsgi' parser has been added named 'puwsgi' (persistent uwsgi). + * --vassal-set. You can tell the Emperor to pass specific options to every + vassal using the --set facility + * The 'template' transformation. This is a transformation allowing you to + apply all of the internal routing patterns to your responses. + +------------------------------------------------------------------- +Fri Nov 8 19:50:28 UTC 2013 - jfunk@funktronics.ca + +- Added apache2-mod_proxy_uwsgi and apache2-mod_uwsgi sub packages + +------------------------------------------------------------------- +Thu Oct 17 18:10:06 UTC 2013 - jfunk@funktronics.ca + +- Update to 1.9.18.2: + * check for NULL dictionary values in python3 autoreloader + * fixed fastrouter realloc() bug + * fixed stdin and embedded configuration + * fixed vassal's strict mode + * fixed UUID randomization when libuuid is not used + * added --iprint (immediate print) option +- Changes from 1.9.18: + * License change. This version of uWSGI is the first of the 1.9 tree using + GPL2 + linking exception instead of plain GPL2 + * Bugfixes + * fixed uwsgi native protocol support on big endian machines + * fixed jvm build system for arm (Jorge Gallegos) + * fixed a memleak spotted by cppcheck in zlib management + * chdir() at every emperor glob iteration + * correctly honour --force-cwd + * fixed ia64/Linux compilation (Jonas Smedegaard/Riccardo Magliocchetti) + * fixed ruby rvm paths parsing order + * added waitpid() after daemon’s SIGTERM (Łukasz Mierzwa) + * fixed pid numbering after --idle (Łukasz Mierzwa) + * fixed/improved cheaper memory limits (Łukasz Mierzwa) + * correctly close inherited sockets in gateways + * fix checks for MAP_FAILED in mmap() (instead of NULL) + * fixed FastCGI non-blocking body read() (patch by Arkaitz Jimenez) + * fixed attach.py script + * avoid crashing on non-conformant PSGI response headers + * run the python autoreloader even in non-apps mode when non-lazy + * New Features + * https://uwsgi-docs.readthedocs.org/en/latest/Changelog-1.9.18.html + * Minimal build profiles + * Auto-fix modifier1. Now if the modifier1 of the request is zero, but the + python plugin is not loaded (or there are no python apps loaded) the + first configured app will be set instead (unless you disable with + feature with --no-default-app). + * Perl auto reloader. The --perl-auto-reload option allows the psgi plugin + to check for changed modules after every request. It takes the frequency + (in seconds) of the scan. + * The "raw" mode (preview technology, only for CPython). Raw mode allows + you to directly parse the request in your application callable. Instead + of getting a list of CGI vars/headers in your callable you only get the + file descriptor soon after accept(). You can then read()/write() to that + file descriptor in full freedom. + * Optional NON-standard support for CPython buffer protocol for WSGI + responses. This is a NON-standard behaviour you have to voluntarily + enable with --wsgi-accept-buffer. + * Emperor and config improvements + * The config system has been improved to be even more consistent in + respect to strict mode (reminder: with --strict you basically check + your config files for unknown options avoiding headaches caused by + typos). + * New magic vars have been added exposing the name of the original + config file (this simplifies templating when in Emperor mode), check + them at + https://github.com/unbit/uwsgi-docs/blob/master/Configuration.rst#magic-variables + * The Emperor got support for Linux capabilities using the --emperor-cap + option. The option takes the list of capability you want to maintain + for your vassals when they start as root + * Build system improvements + * The build system has been improved to link custom sources on the fly. + * Riccardo Magliocchetti rewrote the build script to use optparse + instead of raw/old-fashioned sys.argv parsing + * Pluginized the 'schemes' managementi. Schemes are the prefix part of + uWSGI uri's. When you do "uwsgi --ini http://foobar.local:9090/test.ini" + the http:// is the scheme, signalling uWSGI it has to download the + config file via http. Til now those 'schemes' were hardcoded. Now they + are exposed as plugins, so you can add more of them (or override the + default one). + * mountpoints checks. Allows for managing, for example, FUSE filesystems + with uWSGI: + http://uwsgi-docs.readthedocs.org/en/latest/tutorials/ReliableFuse.html + * Preliminary libffi plugin. As embedding c libraries for exposing hooks + is becoming more common, we have started working on libffi integration, + allowing safe (and sane) argument passing to hooks. More to came soon. + * Official support for kFreeBSD. Debian/kFreeBSD is officially supported. + +------------------------------------------------------------------- +Tue Sep 24 16:49:25 UTC 2013 - jfunk@funktronics.ca + +- Update to 1.9.17.1: + * Emergency release fixing two bugs: + * fixed inheriting of file descriptor 0 (this breaks fastcgi on dreamhost, + and uwsgi on unbit.it) + * fixed router_http REQUEST_URI rewrite (double free) + +------------------------------------------------------------------- +Mon Sep 23 18:47:59 UTC 2013 - jfunk@funktronics.ca + +- Disable v8 on unsupported architectures, and on distributions with newer + versions of v8, as it seems that upstream is not maintaining it +- Update to 1.9.17 + * Bugfixes + * the pty client is now blocking (safer approach) + * removed strtok() usage (substituted by a new uwsgi api function on top + of strtok_r()) + * fixed --pty-exec (Credits: C Anthony Risinger) + * listen_queue/somaxconn linux check is now done even for UNIX sockets + * New features + * https://uwsgi-docs.readthedocs.org/en/latest/Changelog-1.9.17.html + * The Master FIFO: a new management way in addition to UNIX signals + * A new hook, named asap has been added. It will be run soon after the + options are parsed + * The TCC (libtcc) plugin: TCC is an embeddable c compiler. It includes a + shared library (libtcc) you can use to compile strings of c code on the + fly. The libtcc uWSGI plugins allows compiling strings of c to process + symbols. Currently the "tcc" hook engine has been implemented: + * The forkptyrouter gateway: While work on Linux containers/namespaces + continues to improve we have added this special router/gateway allowing + dynamic allocation of pseodoterminals in uWSGI instances. To access the + sockets created by the forkptyrouter you can use the --pty-connect + option exposed by the pty plugin. + * added a new magic var for ANSI escaping. It allows you to define ANSI + sequences in your logs + * Routable log encoders: You can now attach log encoders to specific log + routes + * --vassals-include: This is like --vassal-inherit but the parsing will be + "immediate" (so you can use placeholders) + * The Emperor heartbeat system is now mercyless. The old approach for the + heartbeat Emperor subsystem was asking for "gentle" reload to bad + vassals. Now vassals not sending heartbeat (after being registered with + the heartbeat subsystem) are killed with -9 + * logpipe: You can now send loglines to the stdin of an external command + * Added "fd" logger to "logfile" plugin: you can directly send logs to a + file descriptor +- Changes from 1.9.16 + * Important change in the gevent plugin shutdown/reload procedure: The + shutdown/reload phase when in gevent mode has been changed to better + integrate with multithreaded (and multigreenlet) environments (most + notably the newrelic agent). Instead of "joining" the gevent hub, a new + "dummy" greenlet is spawned and "joined". During shutdown only the + greenlets spawned by uWSGI are taken in account, and after all of them are + destroyed the process will exit. This is different from the old approach + where the process wait for ALL the currently available greenlets (and + monkeypatched threads). If you prefer the old behaviour just specify the + option --gevent-wait-for-hub + * Bugfixes/Improvements + * fixed CPython reference counting bug in rpc and signal handlers + * improved smart-attach-daemon for slow processes + * follow Rack specifications for QUERY_STRING, SCRIPT_NAME,SERVER_NAME and + SERVER_PORT + * report missing internal routing support (it is only a warning when + libpcre is missing) + * better ipcsem support during shutdown and zerg mode (added + --persistent-ipcsem as special case) + * fixed fastcgi bug exposed by apache mod_fastcgi + * do not call pre-jail hook on reload + * force linking with -lrt on solaris + * report thunder lock status + * allow custom priority in rsyslog plugin + * New features + * https://uwsgi-docs.readthedocs.org/en/latest/Changelog-1.9.16.html + * FreeBSD jails native support + * The Rados plugin: Based on the The GlusterFS plugin plugin, a new one + allowing access to Rados object storage is available + * The TunTap router: A new method of providing virtual network interfaces + in namespaces + * Linux O_TMPFILE: Latest Linux kernel supports a new operational mode for + opening files: O_TMPFILE. This flag opens a temporary file (read: + unlinked) without any kind of race conditions. This mode is + automatically used if available (no options needed) + * Linux pivot-root: When dealing with Linux namespaces, changing the root + filesystem is one of the main task. chroot() is generally too simple, + while pivot-root allows you more advanced setup. The syntax is + --pivot-root + * Cheaper memlimit: This new check allows control of dynamic process + spawning based on the RSS usage + * Log encoders: A method of encoding logs for arbitrary external logging + systems. They are basically patterns you can apply to each logline + * New "advanced" Hooks: A new series of hooks for developers needing + little modifications to the uWSGI cores are available. + * New mount/umount hooks: When dealing with namespaces and jails, mounting + and unmounting filesystems is one of the most common tasks. As the mount + and umount commands could not be available during the setup phase, these + 2 hooks have been added directly calling the syscalls. +- Changes from 1.9.15 + * Bugfixes + * fixed jvm options hashmap (#364) + * fixed python3 wsgi.file_wrapper + * fixed python3 --catch-exceptions + * fixed type in pypy wsgi.input.read + * better symbol detection for pypy + * improved ruby libraries management on heroku + * fixed http-keepalive memleak + * fixed spooler body management under CPython + * fixed unshare() usage of 'fs' + * fixed UWSGI_PROFILE usage when building plugins with --plugin + * improved SmartOS support and added OmniOS support + * New features + * The PTY plugin: This new plugin allows you to generate pseudoterminals + and attach them to your workers. Pseudoterminals are then reachable via + network (UNIX or TCP sockets). You can use them for shared debugging or + to have input channels on your webapps. + * strict mode: If you want to check all of your config options, you can + now add the --strict option. Unknown options will trigger a fatal error. + * fallback configs: Being very cheap (in term of resources) and supporting + lot of operating systems and architectures, uWSGI is heavily used in + embedded systems. One of the common feature in such devices is the + "reset to factory defaults." uWSGI now natively support this kind of + operation, thanks to the --fallback-config option. + * --perl-exec and --perl-exec-post-fork: You can now run custom perl code + before and after the fork() calls. Both options simply take the perl + script as the argument + * uwsgi.cache_keys([cache]): This api function has been added to the + python and pypy plugins. It allows you to iterate the keys of a local + uWSGI cache. It returns a list. + * added %(ftime) to logformat: this is like 'ltime' but honouring the + --log-date format + * protect destruction of UNIX sockets when another instance binds them: on + startup uWSGI now get the inode of the just created unix socket. On + vacuum if the inode is changed the unlink of the socket is skipped. This + should help avoiding sysadmin destructive race conditions or + misconfigurations + * --worker-exec2: this is like --worker-exec but happens after post_fork + hooks + * allow post_fork hook on general plugins: general plugins (the ones + without the .request hook) can now expose the .post_fork hook + * --call hooks: In the same spirit of exec-* hooks, call hooks works in + the same way but directly calling functions in the current process + address space (they have to be exposed as valid symbols) + * init_func support for plugins, and --need-plugin variant: when loading a + plugin you can call a symbol defined in it soon after dlopen() + * added commodity loader for the pecan framework: A new python loader + (--pecan) has been added for the pecan WSGI framework + * UWSGI_REMOVE_INCLUDES: during the build phase you can remove include + headers with the UWSGI_REMOVE_INCLUDES environment variable. This is + useful for cross-compilation where some automatically detected includes + could be wrong + * router_expires: We already have various options in the uWSGI core to set + Expires header. This router has been added to allow customizing them + * announce Legion's death on reload/shutdown: Every legion member will now + announce its death as soon as a reload (or a shutdown) of the instance + is triggered + * The GlusterFS plugin (beta): This new plugin make use ot the new + glusterfs c api, avoiding the overhead of fuse when serving files stored + on glusterfs servers. The plugin supports the multiprocess and + multithreads modes, while async modes are currently in beta. + * --force-gateway: all of the gateways (fastrouter, httprouter, rawrouter, + sslrouter ...) has to be run under the master process. By specifying + --force-gateway, you will bypass this limit + * preliminary python3 profiler (beta): The --profiler pycall/pyline + profilers have been added to python3. They are beta quality (they leak + memory), but should be usable. + * file monitor support for OpenBSD,NetBSD,DragonFlyBSD: Both --fs-reload + and the @fmon decorator now work on these operating systems. + * --cwd: you can force the startup "current working directory" (used by + --vacuum and the reloading subsystem) with this option. It is useful in + chroot setups where the binary executable change its place. + * --add-gid: This options allows you to add additional group ids to the + current process. You can specify it multiple times. + * Emperor and Linux namespaces improvements: Thanks to the cooperation + with the pythonanywhere.com guys the Emperor has been improved for + better Linux namespaces integration. The --emperor-use-clone option + allows you to use clone() instead of fork() for your vassal's spawn. In + this way you can create the vassals directly in a new namespace. The + function takes the same parameters of the --unshare one + * --wait-for-interface: As dealing with the Linux network namespace + introduces lot of race conditions (expecially when working with virtual + ethernets), this new option allows you to pause an instance until a + network interface is available. This is useful when waiting for the + emperor to move a veth to the vassal namespace, avoiding the vassal to + run commands on the interface before is available +- Changes from 1.9.14 + * Bugfixes + * fixed python modifier1 management (was hardcoded to 0) + * fixed url decoding in http and http-socket (it now supports lowercase + hex, spotted by Miles Shang) + * more user-friendly error message for undeletable unix sockets + * fixed --http-auto-chunked in http 1.1 keepalive mode (André Cruz) + * fixed python wheel support (Fraser Nevett) + * fixed --safe-fd (was not correctly honoured by the Emperor) + * fixed ruby 2.x reloading + * improved support for OSX Tiger (yes, OSX 10.4) + * better computation of listen queue load + * fixed v8 build on OSX + * fixed pypy rpc + * improved chunked api performance + * fixed latin1 encoding with python3 + * fixed --spooler-ordered (Roberto Leandrini) + * fixed php status line reported in request logs + * New features + * Ruby 1.9.x/2.x native threads support: Ruby 1.9 (mri) introduced native + threads support (very similar to the CPython ones, governed by a global + lock named GVL). + * Filesystem monitoring interface (fsmon): Currently uWSGI is able to + monitor filesystem changes using the "simple" --touch-* facility or the + signal framework (using various operating system api like inotify or + kqueue). A new interface for plugin writers named "fsmon" has been + added, allowing easy implementation of realtime filesystem monitors. + * uClibc support: uWSGI can now be built on uclibc-based systems + (generally, embedded systems) + * Lua 5.2 support: the lua plugins now support Lua 5.2 + * setscheme, setdocroot: These two new routing actions allow you to + dynamically override DOCUMENT_ROOT and UWSGI_SCHEME + * sendfile, fastfile: These two actions (added to the router_static + plugin) allow you to return static files to the client bypassing the + DOCUMENT_ROOT check. + * --reload-on-fd and --brutal-reload-on-fd: Two new options allowing you + to reload an instance when a file descriptor is ready. Currently the + best usage scenario is for the oom_control cgroup interface (via + eventfd) + * Spooler improvements: You can now pass to all of the available + spooler-related decorators the "pass_arguments=True" option, to + automatically serialize the spooler function parameters. This is an + abstraction avoiding you the need to serialize/deserialize arguments. In + addition to this the decorators have been extended to implement __call__ + in this way you can directly call spoller decorated functions as normal + functions. + * --emperor-nofollow: Enabling this option will allow the Emperor to watch + for symbolic links mtime update instead of the mtime of the real file. + * daemontools envdir support: Albeit daemontools look old-fashioned, + things like envdirs (http://cr.yp.to/daemontools/envdir.html) are + heavily used in various context. uWSGI got two new options (--envdir + and --early-envdir ) allowing you to support this special + (archaic ?) configuration way. + * xmldir improvements: The xmldir plugins has been improved supporting + iconv-based utf8 encoding. Various minor fixes have been committed. + +------------------------------------------------------------------- +Fri Sep 20 15:06:48 UTC 2013 - dvaleev@suse.com + +- enable v8 conditionally (enables build for powerpc and s390) + +------------------------------------------------------------------- +Thu Sep 5 18:43:14 CEST 2013 - mls@suse.de + +- add libperl_requires, as we link against libperl and thus + need a specific version of perl + +------------------------------------------------------------------- +Tue Jul 16 20:41:08 UTC 2013 - jfunk@funktronics.ca + +- Add -Wformat to emperor_pg CFLAGS since pg-config --cflags returns + -Wformat-security and gcc complains about it's exclusion + +------------------------------------------------------------------- +Tue Jul 16 17:15:59 UTC 2013 - jfunk@funktronics.ca + +- Update to 1.9.13 + * Bugfixes + * Fixed a corner case bug when response offloading is enabled, but no + request plugin is loaded + * Fixed harakiri routing when multiple rules are in place (return NEXT + instead of CONTINUE) + * Fixed curl crashing master on slow dns responses (Łukasz Mierzwa) + * Removed PTRACE check in uwsgi.h (it is no more needed since uWSGI 1.0) + * Fixed -print-sym + * Added a newline in -cflags + * Improved python3 detection and compilation + * Fixed Coro::AnyEvent loop engine (John Berthels) + * Rack api functions are now static + * Better fastcgi handling of big uploads + * Improved GCC usage on Darwin for Python non-apple builds + * Fixed XCLIENT usage in rawrouter + * Use the clang preprocessor instead of hardcoded 'cpp' when CC=clang is + used + * Set 16bit options to 65535 when higher values are requested + * Fixed virtualhosting (it is now compatible with 1.4 configurations) + * New features + * https://uwsgi-docs.readthedocs.org/en/latest/Changelog-1.9.13.html + * PyPy performance and features improvents + * Chunked input api + * Toward better third-party plugins management: the -dot-h option + * setmethod, seturi and setpathinfo routing action + * UWSGI_INCLUDES + * Improved set_user_harakiri api function + * -add-cache-item [cache ]KEY=VALUE + * the router_xmldir plugin + * Implement __call__ for @spool* decorators + * the uwsgi[lq] routing var + * -use-abort +- Changes from 1.9.12 + * Bugfixes + * offloading cache writes will return the correct status code and not 202 + * you can now control the path of temporary files setting the TMPDIR + environment variable (this fixes an old issue for users without control + over /tmp) + * fixed a compilation error on amqp imperial monitor + * cron commands are correctly escaped when reported in the stats server + * fixed fastcgi parser corner-case bug with big uploads + * fixed support for newest cygwin + * New Features + * https://uwsgi-docs.readthedocs.org/en/latest/Changelog-1.9.12.html + * Offloading responses + * JWSGI and JVM improvements + * -touch-signal + * The "pipe" offload engine + * The new redis router + * The "hash" router + +------------------------------------------------------------------- +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 + +- 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 + +- Install uwsgidecorators module for Python plugin +- Create sysconfig file for adding uwsgi options + +------------------------------------------------------------------- +Sun Sep 9 19:11:43 UTC 2012 - jfunk@funktronics.ca + +- Don't attempt to build Erlang plugins on openSUSE < 12.2 +- Don't attempt to build Greenlet plugin on openSUSE < 12.1 + +------------------------------------------------------------------- +Sun Sep 9 18:56:43 UTC 2012 - jfunk@funktronics.ca + +- Don't attempt to build Ruby 1.9 features on openSUSE < 12.2 + +------------------------------------------------------------------- +Sun Sep 9 00:19:40 UTC 2012 - jfunk@funktronics.ca + +- Fix JVM build on i586 + +------------------------------------------------------------------- +Sat Sep 8 23:17:30 UTC 2012 - jfunk@funktronics.ca + +- Fix lua requirement for openSUSE < 12.2 + +------------------------------------------------------------------- +Sat Sep 8 21:41:39 UTC 2012 - jfunk@funktronics.ca + +- Initial release + 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.service b/uwsgi.service new file mode 100644 index 0000000..9af9735 --- /dev/null +++ b/uwsgi.service @@ -0,0 +1,14 @@ +[Unit] +Description=Application Container Server for Networked/Clustered Web Applications +Documentation=https://uwsgi-docs.readthedocs.io/en/latest/ + +[Service] +ExecStart=/usr/sbin/uwsgi --autoload --ini /etc/uwsgi/uwsgi.ini +Restart=always +Type=notify +NotifyAccess=all +KillSignal=SIGINT +ExecReload=/bin/kill -HUP $MAINPID + +[Install] +WantedBy=multi-user.target diff --git a/uwsgi.spec b/uwsgi.spec new file mode 100644 index 0000000..7a98499 --- /dev/null +++ b/uwsgi.spec @@ -0,0 +1,825 @@ +# +# spec file for package uwsgi +# +# Copyright (c) 2024 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +%{?sle15_python_module_pythons} +%define with_php 1 +%if 0%{?suse_version} > 1320 +%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150400 +%define php php8 +%else +%define php php7 +%endif +%else +%define with_php 0 +%endif + +Name: uwsgi +Version: 2.0.28 +Release: 0 +Summary: Application Container Server for Networked/Clustered Web Applications +License: Apache-2.0 AND GPL-2.0-only WITH GCC-exception-2.0 +Group: Productivity/Networking/Web/Servers +URL: https://uwsgi-docs.readthedocs.io/en/latest/ +Source: https://github.com/unbit/uwsgi/archive/refs/tags/%{version}.tar.gz#/uwsgi-%{version}.tar.gz +Source1: opensuse.ini.in +Source2: uwsgi.service +Source3: django.ini.example +Source4: rails.yml.example +Source5: trac.ini.example +Source6: werkzeug.xml.example +Source7: README.openSUSE +Source8: uwsgi.ini +Source9: uwsgi.tmpfiles.d +# PATCH-FIX-OPENSUSE uwsgi-1.9.17-plugin_build_path.patch - Don't attempt to install plugins to target dest during build +Patch0: uwsgi-1.9.17-plugin_build_path.patch +# PATCH-FIX-OPENSUSE uwsgi-1.9.17-no-LD_RUN_PATH.patch - Disable invalid rpath in plugins +Patch1: uwsgi-2.0.12-no-LD_RUN_PATH.patch +# PATCH-FIX-OPENSUSE uwsgi-1.9.13-objc_gc-no-fobjc-gc.patch - No -fobjc-gc in CFLAGS, which is incorrect in GNU +Patch2: uwsgi-1.9.13-objc_gc-no-fobjc-gc.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 +# PATCH-FIX-OPENSUSE uwsgi-2.0.18-postgresql-config.patch - Use pkg-config instead of pg_config +Patch4: uwsgi-2.0.18-postgresql-config.patch +# PATCH-FIX-UPSTREAM uwsgi-ld-noexecstack.patch - Do not create executable stack +Patch5: uwsgi-ld-noexecstack.patch +# PATCH-FIX-UPSTREAM python313.patch - plugins/python: handle cframe removal from CPython thread state https://github.com/unbit/uwsgi/commit/699dc20f8204ee18812951600b0221156d217530 +Patch6: python313.patch +# PATCH-FIX-OPENSUSE +Patch100: uwsgi-reproducible-jar-mtime.patch +BuildRequires: apache-rpm-macros +%if 0%{suse_version} < 1500 +BuildRequires: apache2-devel +%else +BuildRequires: apache2-devel >= 2.4.33 +%endif +%if 0%{?suse_version} >= 1500 +BuildRequires: argon2-devel +%endif +BuildRequires: gcc-c++ +BuildRequires: gcc-objc +%if 0%{?suse_version} > 1220 +BuildRequires: glusterfs-devel +%endif +#BuildRequires: go +BuildRequires: java-devel +#BuildRequires: krb5-devel +BuildRequires: libattr-devel +BuildRequires: libcap-devel +BuildRequires: libcurl-devel +BuildRequires: libffi-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: ncurses-devel +BuildRequires: openldap2-devel +BuildRequires: openssl-devel +BuildRequires: pam-devel +BuildRequires: pcre-devel +%if %{with_php} +BuildRequires: %{php}-devel +BuildRequires: %{php}-embed +%endif +BuildRequires: %{python_module devel} +BuildRequires: %{python_module greenlet-devel} +BuildRequires: pkg-config +BuildRequires: postgresql-devel +BuildRequires: python-rpm-macros +%if 0%{?suse_version} <= 1310 +BuildRequires: ruby19-devel +%endif +BuildRequires: sqlite3-devel +BuildRequires: tcpd-devel +BuildRequires: pkgconfig(libsystemd) +%ifarch %{ix86} x86_64 %{arm} +%if 0%{?suse_version} < 1310 +BuildRequires: v8-devel +%endif +%endif +BuildRequires: zeromq-devel +BuildRequires: pkgconfig(zlib) +%{?systemd_requires} +BuildRoot: %{_tmppath}/%{name}-%{version}-build +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 +%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150500 +# these must be the last directives before the description +%define python_subpackage_only 1 +%python_subpackages +%endif + +%description +uWSGI is a self-healing application container server coded in pure C. + +It is a WSGI server with a stack for networked/clustered web applications, +implementing message/object passing, caching, RPC and process management. + +It uses the uwsgi protocol for all the networking/interprocess communications, +but it can speak other protocols as well (http, fastcgi, mongrel2...) + +It can be run in preforking mode, threaded, asynchronous/evented and supports +various forms of green threads/coroutines (such as uGreen, Greenlet, Stackless, +Gevent and Fiber). + +Different plugins can be used in order to add compatibility with +different technology on top of the same core. + + +# This is part of the apache2 package now +%if 0%{suse_version} < 1500 +%package -n apache2-mod_proxy_uwsgi +Summary: uWSGI Proxy Module for Apache 2.0 +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description -n apache2-mod_proxy_uwsgi +uWSGI is a self-healing application container server coded in pure C. + +This package contains an Apache 2.0 proxy module for uWSGI. +%endif + +%package -n apache2-mod_uwsgi +Summary: uWSGI Module for Apache 2.0 +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description -n apache2-mod_uwsgi +uWSGI is a self-healing application container server coded in pure C. + +This package contains an Apache 2.0 module for uWSGI. + +%package emperor_pg +Summary: PostgreSQL Emperor Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description emperor_pg +uWSGI is a self-healing application container server coded in pure C. + +This package contains an emperor plugin allowing for configuration of +applications (vassals) in a PostgreSQL database. + +%package emperor_zeromq +Summary: ZeroMQ Emperor Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description emperor_zeromq +uWSGI is a self-healing application container server coded in pure C. + +This package contains an emperor plugin allowing for configuration of +applications (vassals) via ZeroMQ. + +%package gevent +Summary: Gevent Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} +Requires: %{name}-python3 = %{version} + +%description gevent +uWSGI is a self-healing application container server coded in pure C. + +This package contains support for Python Gevent, which is a non-blocking +networking framework. + + +%if 0%{?suse_version} > 1220 +%package glusterfs +Summary: GlusterFS Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description glusterfs +uWSGI is a self-healing application container server coded in pure C. + +This package contains support for returning objects directly from a GlusterFS +filesystem +%endif + +%package greenlet +Summary: Greenlet Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} +Requires: %{name}-python3 = %{version} + +%description greenlet +uWSGI is a self-healing application container server coded in pure C. + +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 self-healing application container server coded in pure C. + +This package contains support for embedding a Java virtual machine in uWSGI. + +%package ldap +Summary: LDAP Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description ldap +uWSGI is a self-healing application container server coded in pure C. + +This package contains support for configuring uWSGI via LDAP. + +%package libffi +Summary: Plugin libffi for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description libffi +uWSGI is a self-healing application container server coded in pure C. + +This package contains support for libffi. + +%package logzmq +Summary: ZMQ Logger for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description logzmq +uWSGI is a self-healing application container server coded in pure C. + +This package contains support for ZMQ logging. + +%package lua +Summary: Lua Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description lua +uWSGI is a self-healing application container server coded in pure C. + +This package contains support for Lua applications via the wsapi interface. + +%package pam +Summary: PAM Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description pam +uWSGI is a self-healing application container server coded in pure C. + +This package contains support for PAM authentication. + +%package psgi +Summary: PSGI Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} +%{?libperl_requires} + +%description psgi +uWSGI is a self-healing application container server coded in pure C. + +This package contains the PSGI plugin for running Perl applications that +support the PSGI protocol. + +%package pypy +Summary: PyPy Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description pypy +uWSGI is a self-healing application container server coded in pure C. + +This package contains support for Python applications using PyPy. + +%if 0%{?sle_version} && 0%{?sle_version} <= 150400 + +%package python3 +Summary: Python 3 Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} +Requires: python3-base >= 3.6 +Provides: python3-uwsgi-python3 = %{version}-%{release} + +%description python3 +uWSGI is a self-healing application container server coded in pure C. + +This package contains support for Python 3 applications via the WSGI protocol. + +%else + +%package -n python-uwsgi-python3 +Summary: Python %{python_version} Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} +%if "%{python_provides}" == "python3" +Provides: uwsgi-python3 = %{version}-%{release} +Obsoletes: uwsgi-python3 < %{version}-%{release} +%endif +# the plugin is linked to the python library, no reason the state -base explicitly + +%description -n python-uwsgi-python3 +uWSGI is a self-healing application container server coded in pure C. + +This package contains support for Python %{python_version} applications via the WSGI protocol. + +%endif + +%if 0%{?suse_version} <= 1310 +%package ruby +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 + +%description ruby +uWSGI is a self-healing application container server coded in pure C. + +This package contains support for Ruby applications. +%endif + +%package sqlite3 +Summary: SQLite3 Plugin for uWSGI +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} + +%description sqlite3 +uWSGI is a self-healing 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 self-healing 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 self-healing application container server coded in pure C. + +This package contains support for rendering XML content using XSLT. + +%if %{with_php} +%package %{php} +%if 0%{?suse_version} >= 1550 +Summary: PHP8 Plugin for uWSGI +%else +Summary: PHP7 Plugin for uWSGI +%endif +Group: Productivity/Networking/Web/Servers +Requires: %{name} = %{version} +Requires: %{php}-embed + +%description %{php} +uWSGI is a self-healing application container server coded in pure C. + +%if 0%{?suse_version} >= 1550 +This package contains support for PHP version 8. +%else +This package contains support for PHP version 7. +%endif +%endif + +%prep +%setup -n uwsgi-%{version} +%patch -P 0 -p1 +%patch -P 1 -p1 +%patch -P 2 -p1 +%patch -P 3 -p1 +%patch -P 4 -p1 +%patch -P 5 -p1 +%patch -P 6 -p1 +# The "--date" option was added into jar in OpenJDK 17 +%if %{?pkg_vcmp:%pkg_vcmp java-devel >= 17}%{!?pkg_vcmp:0} +%patch -P 100 -p1 +%endif + +# 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="" + +# 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" + +%if 0%{?suse_version} <= 1320 +# No php[57]-embed on openSUSE Leap for some reason +excluded_plugins="$excluded_plugins php" +%endif + +# 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 gccgo in openSUSE yet +excluded_plugins="$excluded_plugins gccgo" + +# This plugin require a libuwsgi, which appears to conflict with core... +excluded_plugins="$excluded_plugins 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" + +# Ceph/RADOS not yet in Factory +excluded_plugins="$excluded_plugins rados" + +# libtcc not yet in Factory +excluded_plugins="$excluded_plugins libtcc" + +# matheval is deprecated +excluded_plugins="$excluded_plugins matheval" + +# bsc#1156199 - python-txtorcon: GeoIP support is discontinued +excluded_plugins="$excluded_plugins geoip" + +# V8 is not yet available on all platforms and is broken in the v8 versions in +# 13.1+ +%if 0%{?suse_version} >= 1310 +excluded_plugins="$excluded_plugins v8" +%else +%ifnarch %{ix86} x86_64 %{arm} +excluded_plugins="$excluded_plugins v8" +%endif +%endif + +# python3 modules are built separately +excluded_plugins="$excluded_plugins python" + +# Ruby 1.9 is no longer available after 13.1 +%if 0%{?suse_version} > 1310 +excluded_plugins="$excluded_plugins fiber mongrel2 rack rbthreads ruby19" +%endif + +%if 0%{?suse_version} <= 1220 +# Requirements missing on openSUSE <= 12.2 +excluded_plugins="$excluded_plugins glusterfs" +%endif + +plugins=$(python3 -c "import sys, os; print(', '.join([p for p in sorted(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 +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_LUAPC="lua" +export UWSGICONFIG_RUBYPATH="ruby1.9" +export CFLAGS="%{optflags} -Wno-error=deprecated-declarations -I%{_includedir}/glusterfs -I$(echo %{_libdir}/erlang/lib/erl_interface-*/include) -I%{_jvmdir}/java/include/linux -L$UWSGICONFIG_JVM_LIBPATH/jli" +%{?jobs:export CPUCOUNT=%jobs} +%python_expand PYTHON=$python $python uwsgiconfig.py --build opensuse + +# Build python3 plugins +%if 0%{?sle_version} && 0%{?sle_version} <= 150400 +python3 uwsgiconfig.py --plugin plugins/python opensuse python3 +%else +# https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html#bonus-multiple-python-versions-for-the-same-uwsgi-binary +%python_expand PYTHON=$python $python uwsgiconfig.py --plugin plugins/python opensuse ${python_flavor} +%endif + +# Build Apache modules +%if 0%{suse_version} < 1500 +%{apache_apxs} -c apache2/mod_proxy_uwsgi.c +%endif +%{apache_apxs} -c apache2/mod_uwsgi.c + +# Build php plugin +%if %{with_php} +python3 uwsgiconfig.py --plugin plugins/php opensuse %{php} +%endif + +%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 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 +install -m 0644 vassals/multi.xml %{buildroot}%{_sysconfdir}/uwsgi/vassals/multi.xml.example +%if 0%{?sle_version} && 0%{?sle_version} <= 150400 +install -D -m 0644 uwsgidecorators.py %{buildroot}%{python3_sitelib}/uwsgidecorators.py +%else +%{python_expand # +install -D -m 0644 uwsgidecorators.py %{buildroot}%{$python_sitelib}/uwsgidecorators.py +if [ "%{$python_provides}" == "python3" ]; then + ln -s ${python_flavor}_plugin.so %{buildroot}%{_libdir}/uwsgi/python3_plugin.so +fi +} +%endif +install -D plugins/jvm/uwsgi.jar %{buildroot}%{_javadir}/uwsgi.jar +install -d -m 0755 %{buildroot}/%{apache_libexecdir} +install -m 0755 apache2/.libs/*.so %{buildroot}/%{apache_libexecdir} +%if 0%{?suse_version} > 1220 +ln -sf /usr/sbin/service %{buildroot}%{_sbindir}/rcuwsgi +%endif + +install -d -m 0755 %{buildroot}%{_tmpfilesdir} +install -m 0644 %{SOURCE9} %{buildroot}/%{_tmpfilesdir}/uwsgi.conf + +%pre +%service_add_pre uwsgi.service + +%post +%service_add_post uwsgi.service +%tmpfiles_create %{_tmpfilesdir}/uwsgi.conf + +%preun +%service_del_preun uwsgi.service + +%postun +%service_del_postun uwsgi.service + +%files +%defattr(-,root,root,-) +%license LICENSE +%doc CONTRIBUTORS README contrib examples README.openSUSE +%{_sbindir}/uwsgi +%dir %{_sysconfdir}/uwsgi/ +%config(noreplace) %{_sysconfdir}/uwsgi/uwsgi.ini +%dir %{_sysconfdir}/uwsgi/vassals +%config %{_sysconfdir}/uwsgi/vassals/* +%dir %{_libdir}/uwsgi +%ghost %dir %attr(711,root,root) /run/uwsgi +%{_unitdir}/uwsgi.service +%{_tmpfilesdir}/uwsgi.conf +%if 0%{?suse_version} > 1220 +%{_sbindir}/rcuwsgi +%endif +%{_libdir}/uwsgi/airbrake_plugin.so +%{_libdir}/uwsgi/alarm_curl_plugin.so +%{_libdir}/uwsgi/asyncio_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/forkptyrouter_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/logpipe_plugin.so +%{_libdir}/uwsgi/logsocket_plugin.so +%{_libdir}/uwsgi/nagios_plugin.so +%{_libdir}/uwsgi/objc_gc_plugin.so +%{_libdir}/uwsgi/msgpack_plugin.so +%{_libdir}/uwsgi/notfound_plugin.so +%{_libdir}/uwsgi/ping_plugin.so +%{_libdir}/uwsgi/pty_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_expires_plugin.so +%{_libdir}/uwsgi/router_hash_plugin.so +%{_libdir}/uwsgi/router_http_plugin.so +%{_libdir}/uwsgi/router_memcached_plugin.so +%{_libdir}/uwsgi/router_metrics_plugin.so +%{_libdir}/uwsgi/router_radius_plugin.so +%{_libdir}/uwsgi/router_redirect_plugin.so +%{_libdir}/uwsgi/router_redis_plugin.so +%{_libdir}/uwsgi/router_rewrite_plugin.so +%{_libdir}/uwsgi/router_static_plugin.so +%{_libdir}/uwsgi/router_uwsgi_plugin.so +%{_libdir}/uwsgi/router_xmldir_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_file_plugin.so +%{_libdir}/uwsgi/stats_pusher_socket_plugin.so +%{_libdir}/uwsgi/stats_pusher_statsd_plugin.so +%{_libdir}/uwsgi/symcall_plugin.so +%{_libdir}/uwsgi/syslog_plugin.so +%{_libdir}/uwsgi/systemd_logger_plugin.so +%{_libdir}/uwsgi/tornado_plugin.so +%{_libdir}/uwsgi/transformation_chunked_plugin.so +%{_libdir}/uwsgi/transformation_gzip_plugin.so +%{_libdir}/uwsgi/transformation_offload_plugin.so +%{_libdir}/uwsgi/transformation_template_plugin.so +%{_libdir}/uwsgi/transformation_tofile_plugin.so +%{_libdir}/uwsgi/transformation_toupper_plugin.so +%{_libdir}/uwsgi/tuntap_plugin.so +%{_libdir}/uwsgi/ugreen_plugin.so +%{_libdir}/uwsgi/webdav_plugin.so +%{_libdir}/uwsgi/xattr_plugin.so +%{_libdir}/uwsgi/zabbix_plugin.so +%{_libdir}/uwsgi/zergpool_plugin.so + +%if 0%{suse_version} < 1500 +%files -n apache2-mod_proxy_uwsgi +%defattr(-,root,root,-) +%{apache_libexecdir}/mod_proxy_uwsgi.so +%endif + +%files -n apache2-mod_uwsgi +%defattr(-,root,root,-) +%{apache_libexecdir}/mod_uwsgi.so + +%files emperor_pg +%defattr(-,root,root,-) +%{_libdir}/uwsgi/emperor_pg_plugin.so + +%files emperor_zeromq +%defattr(-,root,root,-) +%{_libdir}/uwsgi/emperor_zeromq_plugin.so + +%files gevent +%defattr(-,root,root,-) +%{_libdir}/uwsgi/gevent_plugin.so + +%files greenlet +%defattr(-,root,root,-) +%{_libdir}/uwsgi/greenlet_plugin.so + +%if 0%{?suse_version} > 1220 +%files glusterfs +%defattr(-,root,root,-) +%{_libdir}/uwsgi/glusterfs_plugin.so +%endif + +%files jvm +%defattr(-,root,root,-) +%{_libdir}/uwsgi/jvm_plugin.so +%{_libdir}/uwsgi/jwsgi_plugin.so +%{_libdir}/uwsgi/ring_plugin.so +%{_libdir}/uwsgi/servlet_plugin.so +%{_javadir}/uwsgi.jar + +%files ldap +%defattr(-,root,root,-) +%{_libdir}/uwsgi/ldap_plugin.so + +%files libffi +%defattr(-,root,root,-) +%{_libdir}/uwsgi/libffi_plugin.so + +%files logzmq +%defattr(-,root,root,-) +%{_libdir}/uwsgi/logzmq_plugin.so + +%files lua +%defattr(-,root,root,-) +%{_libdir}/uwsgi/lua_plugin.so + +%files pam +%defattr(-,root,root,-) +%{_libdir}/uwsgi/pam_plugin.so + +%files psgi +%defattr(-,root,root,-) +%{_libdir}/uwsgi/psgi_plugin.so + +%files pypy +%defattr(-,root,root,-) +%{_libdir}/uwsgi/pypy_plugin.so + +%if 0%{?sle_version} && 0%{?sle_version} <= 150400 + +%files python3 +%defattr(-,root,root,-) +%{_libdir}/uwsgi/python3_plugin.so +%{python3_sitelib}/uwsgidecorators.py* + +%else + +%files %{python_files uwsgi-python3} +%defattr(-,root,root,-) +%{_libdir}/uwsgi/%{python_flavor}_plugin.so +%if "%{python_provides}" == "python3" +%{_libdir}/uwsgi/python3_plugin.so +%endif +%{python_sitelib}/uwsgidecorators.py* + +%endif + +%if 0%{?suse_version} <= 1310 +%files ruby +%defattr(-,root,root,-) +%{_libdir}/uwsgi/fiber_plugin.so +%{_libdir}/uwsgi/mongrel2_plugin.so +%{_libdir}/uwsgi/rack_plugin.so +%{_libdir}/uwsgi/rbthreads_plugin.so +%{_libdir}/uwsgi/ruby19_plugin.so +%endif + +%files sqlite3 +%defattr(-,root,root,-) +%{_libdir}/uwsgi/sqlite3_plugin.so + +%ifarch %{ix86} x86_64 %{arm} +%if 0%{?suse_version} < 1310 +%files v8 +%defattr(-,root,root,-) +%{_libdir}/uwsgi/v8_plugin.so +%endif +%endif + +%files xslt +%defattr(-,root,root,-) +%{_libdir}/uwsgi/xslt_plugin.so + +%if 0%{?suse_version} > 1320 +%files %{php} +%defattr(-,root,root,-) +%{_libdir}/uwsgi/php*_plugin.so +%endif + +%changelog diff --git a/uwsgi.tmpfiles.d b/uwsgi.tmpfiles.d new file mode 100644 index 0000000..68c3f21 --- /dev/null +++ b/uwsgi.tmpfiles.d @@ -0,0 +1,2 @@ +# Type Path Mode UID GID Age Argument +d /run/uwsgi 0711 root root - - diff --git a/werkzeug.xml.example b/werkzeug.xml.example new file mode 100644 index 0000000..645cc3d --- /dev/null +++ b/werkzeug.xml.example @@ -0,0 +1,7 @@ + + werkzeug.testapp:test_app + + 4 + 127.0.0.1:3031 + +