uwsgi: add modular package superseeding uwsgi-cgi 9855/head
authorPeter Stadler <peter.stadler@student.uibk.ac.at>
Wed, 28 Aug 2019 07:41:59 +0000 (09:41 +0200)
committerPeter Stadler <peter.stadler@student.uibk.ac.at>
Wed, 1 Jan 2020 17:28:01 +0000 (18:28 +0100)
Provide the minimal applications and plugins for: cgi, filelog, syslog and
python3. More plugins can be added if needed by other packages. Autostart
uwsgi in emperor mode loading vassals on demand.

For now, include luci-support (maybe it will be moved to another package),
which uses the syslog plugin by default.

Signed-off-by: Peter Stadler <peter.stadler@student.uibk.ac.at>
24 files changed:
net/uwsgi-cgi/Makefile [deleted file]
net/uwsgi-cgi/files-luci-support/luci-cgi_io.ini [deleted file]
net/uwsgi-cgi/files-luci-support/luci-webui.ini [deleted file]
net/uwsgi-cgi/files/emperor.ini [deleted file]
net/uwsgi-cgi/files/uwsgi.init [deleted file]
net/uwsgi-cgi/patches/001-remove-unused-deps.patch [deleted file]
net/uwsgi-cgi/patches/002-dont-hardcode-zlib.patch [deleted file]
net/uwsgi-cgi/patches/003-dont-override-toolchain-optimization.patch [deleted file]
net/uwsgi-cgi/patches/004-hard-code-Linux-as-compilation-os.patch [deleted file]
net/uwsgi-cgi/patches/010-uclibc-ng.patch [deleted file]
net/uwsgi-cgi/patches/020-uwsgiconfig-system-python3.patch [deleted file]
net/uwsgi-cgi/patches/030-plugins-cgi_adds_dontresolve_option.patch [deleted file]
net/uwsgi/Makefile [new file with mode: 0644]
net/uwsgi/files-luci-support/luci-cgi_io.ini [new file with mode: 0644]
net/uwsgi/files-luci-support/luci-webui.ini [new file with mode: 0644]
net/uwsgi/files/emperor.ini [new file with mode: 0644]
net/uwsgi/files/uwsgi.init [new file with mode: 0644]
net/uwsgi/patches/001-dont-hardcode-zlib.patch [new file with mode: 0644]
net/uwsgi/patches/002-dont-override-toolchain-optimization.patch [new file with mode: 0644]
net/uwsgi/patches/003-hard-code-Linux-as-compilation-os.patch [new file with mode: 0644]
net/uwsgi/patches/010-uclibc-ng.patch [new file with mode: 0644]
net/uwsgi/patches/020-uwsgiconfig-system-python3.patch [new file with mode: 0644]
net/uwsgi/patches/030-plugins-cgi_adds_dontresolve_option.patch [new file with mode: 0644]
net/uwsgi/src/buildconf/openwrt.ini [new file with mode: 0644]

diff --git a/net/uwsgi-cgi/Makefile b/net/uwsgi-cgi/Makefile
deleted file mode 100644 (file)
index 3df4c5b..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=uwsgi-cgi
-PKG_VERSION:=2.0.18
-PKG_RELEASE:=4
-
-PKG_SOURCE_URL= \
-       https://projects.unbit.it/downloads \
-       https://codeload.github.com/unbit/uwsgi/tar.gz/$(PKG_VERSION)?
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=4972ac538800fb2d421027f49b4a1869b66048839507ccf0aa2fda792d99f583
-PKG_BUILD_DIR:=$(BUILD_DIR)/uwsgi-$(PKG_VERSION)
-
-PKG_LICENSE:=GPL-2.0-or-later
-PKG_LICENSE_FILES:=LICENSE
-PKG_MAINTAINER:=Ansuel Smith <ansuelsmth@gmail.com>
-
-PKG_BUILD_DEPENDS:=python3/host
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/uwsgi-cgi
-  SECTION:=net
-  CATEGORY:=Network
-  SUBMENU:=Web Servers/Proxies
-  TITLE:=The uWSGI server
-  URL:=https://projects.unbit.it/uwsgi
-  DEPENDS:=+libcap +jansson +libuuid
-endef
-
-define Package/uwsgi-cgi-luci-support
-  SECTION:=net
-  CATEGORY:=Network
-  SUBMENU:=Web Servers/Proxies
-  TITLE:=Support files for LuCI on Nginx
-  DEPENDS:=+uwsgi-cgi
-endef
-
-define Package/uwsgi-cgi/description
-       The uWSGI project build with cgi profile
-endef
-
-MAKE_VARS+=\
-       CPP=$(TARGET_CROSS)cpp \
-       PYTHON=$(STAGING_DIR_HOSTPKG)/bin/python3
-
-define Build/Compile
-       $(call Build/Compile/Default,PROFILE=cgi)
-endef
-
-define Package/uwsgi-cgi/install
-       $(INSTALL_DIR) $(1)/usr/sbin
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/uwsgi $(1)/usr/sbin/
-
-       $(INSTALL_DIR) $(1)/etc/init.d
-       $(INSTALL_BIN) ./files/uwsgi.init $(1)/etc/init.d/uwsgi
-       
-       $(INSTALL_DIR) $(1)/etc/uwsgi
-       $(INSTALL_DATA) ./files/emperor.ini $(1)/etc/uwsgi/emperor.ini
-
-       $(INSTALL_DIR) $(1)/etc/uwsgi/vassals
-endef
-
-define Package/uwsgi-cgi-luci-support/install
-       $(INSTALL_DIR) $(1)/etc/uwsgi/vassals
-       $(INSTALL_DATA) ./files-luci-support/luci-webui.ini $(1)/etc/uwsgi/vassals/luci-webui.ini
-       $(INSTALL_DATA) ./files-luci-support/luci-cgi_io.ini $(1)/etc/uwsgi/vassals/luci-cgi_io.ini
-endef
-
-$(eval $(call BuildPackage,uwsgi-cgi))
-$(eval $(call BuildPackage,uwsgi-cgi-luci-support))
diff --git a/net/uwsgi-cgi/files-luci-support/luci-cgi_io.ini b/net/uwsgi-cgi/files-luci-support/luci-cgi_io.ini
deleted file mode 100644 (file)
index af95d67..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-[uwsgi]
-strict = true
-cgi-mode = true
-cgi = /www/
-buffer-size = 10000
-reload-mercy = 8
-max-requests = 2000
-limit-as = 200
-reload-on-as = 256
-reload-on-rss = 192
-no-orphans = true
-post-buffering = 8192
-socket-timeout = 120
-thunder-lock = true
-#logger = syslog:uwsgi-luci-cgi_io
-disable-logging = true
-chmod-socket = 666
-cgi-safe = /usr/libexec/cgi-io
-cgi-dontresolve = true
-cgi-close-stdin-on-eof = true
-cheap = true
-idle = 360
\ No newline at end of file
diff --git a/net/uwsgi-cgi/files-luci-support/luci-webui.ini b/net/uwsgi-cgi/files-luci-support/luci-webui.ini
deleted file mode 100644 (file)
index 5371a10..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-[uwsgi]
-strict = true
-cgi-mode = true
-cgi = /www/
-chdir = /usr/lib/lua/luci/
-buffer-size = 10000
-reload-mercy = 8
-max-requests = 2000
-limit-as = 200
-reload-on-as = 256
-reload-on-rss = 192
-enable-threads = true
-post-buffering = 8192
-socket-timeout = 120
-thunder-lock = true
-#logger = syslog:uwsgi-luci
-disable-logging = true
-log-format = %(addr) %(method) %(uri) => generated %(rsize) bytes in %(msecs) msecs
-threads = 3
-processes = 3
-chmod-socket = 666
-cheap = true
-cheaper-algo = spare
-cheaper = 1
-cheaper-initial = 2
-cheaper-step = 1
-master = true
-idle = 360
\ No newline at end of file
diff --git a/net/uwsgi-cgi/files/emperor.ini b/net/uwsgi-cgi/files/emperor.ini
deleted file mode 100644 (file)
index 5baa11b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-[uwsgi]
-strict = true
-pidfile        = /var/run/uwsgi.pid
-emperor = /etc/uwsgi/vassals/*.ini
-logger = syslog:uwsgi-emperor
-vacuum = true
-emperor-on-demand-directory = /var/run/
-emperor-required-heartbeat = 99
-vassal-set = die-on-idle=true
-#disable-logging = true
\ No newline at end of file
diff --git a/net/uwsgi-cgi/files/uwsgi.init b/net/uwsgi-cgi/files/uwsgi.init
deleted file mode 100644 (file)
index 98f2c83..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh /etc/rc.common
-
-START=79
-USE_PROCD=1
-
-start_service() {
-       procd_open_instance
-       procd_set_param command /usr/sbin/uwsgi --ini /etc/uwsgi/emperor.ini
-       procd_set_param file /etc/uwsgi/emperor.ini
-       procd_set_param respawn
-       procd_close_instance
-}
-
diff --git a/net/uwsgi-cgi/patches/001-remove-unused-deps.patch b/net/uwsgi-cgi/patches/001-remove-unused-deps.patch
deleted file mode 100644 (file)
index 2b058c3..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/buildconf/base.ini
-+++ b/buildconf/base.ini
-@@ -1,9 +1,9 @@
- [uwsgi]
--xml = auto
--yaml = true
--json = auto
--ssl = auto
--pcre = auto
-+xml = false
-+yaml = embedded
-+json = jansson
-+ssl = false
-+pcre = false
- routing = auto
- debug = false
- unbit = false
diff --git a/net/uwsgi-cgi/patches/002-dont-hardcode-zlib.patch b/net/uwsgi-cgi/patches/002-dont-hardcode-zlib.patch
deleted file mode 100644 (file)
index 23ca62d..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
---- a/uwsgiconfig.py
-+++ b/uwsgiconfig.py
-@@ -851,11 +851,11 @@ class uConf(object):
-                 self.cflags.append('-DUWSGI_HAS_EXECINFO')
-                 report['execinfo'] = True
--        if self.has_include('zlib.h'):
--            self.cflags.append('-DUWSGI_ZLIB')
--            self.libs.append('-lz')
--            self.gcc_list.append('core/zlib')
--            report['zlib'] = True
-+#        if self.has_include('zlib.h'):
-+#            self.cflags.append('-DUWSGI_ZLIB')
-+#            self.libs.append('-lz')
-+#            self.gcc_list.append('core/zlib')
-+            report['zlib'] = False
-         if uwsgi_os == 'OpenBSD':
-             try:
diff --git a/net/uwsgi-cgi/patches/003-dont-override-toolchain-optimization.patch b/net/uwsgi-cgi/patches/003-dont-override-toolchain-optimization.patch
deleted file mode 100644 (file)
index 196edfb..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/uwsgiconfig.py
-+++ b/uwsgiconfig.py
-@@ -680,7 +680,7 @@ class uConf(object):
-             self.include_path += os.environ['UWSGI_INCLUDES'].split(',')
--        self.cflags = ['-O2', '-I.', '-Wall', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] + os.environ.get("CFLAGS", "").split() + self.get('cflags','').split()
-+        self.cflags = ['-I.', '-Wall', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] + os.environ.get("CFLAGS", "").split() + self.get('cflags','').split()
-         report['kernel'] = uwsgi_os
diff --git a/net/uwsgi-cgi/patches/004-hard-code-Linux-as-compilation-os.patch b/net/uwsgi-cgi/patches/004-hard-code-Linux-as-compilation-os.patch
deleted file mode 100644 (file)
index 0459ed0..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
---- a/uwsgiconfig.py
-+++ b/uwsgiconfig.py
-@@ -5,9 +5,9 @@
- import os
- import re
- import time
--uwsgi_os = os.uname()[0]
--uwsgi_os_k = re.split('[-+_]', os.uname()[2])[0]
--uwsgi_os_v = os.uname()[3]
-+uwsgi_os = "Linux"
-+uwsgi_os_k = "4.4.0"
-+uwsgi_os_v = "Linux"
- uwsgi_cpu = os.uname()[4]
- import sys
diff --git a/net/uwsgi-cgi/patches/010-uclibc-ng.patch b/net/uwsgi-cgi/patches/010-uclibc-ng.patch
deleted file mode 100644 (file)
index e967320..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/core/uwsgi.c
-+++ b/core/uwsgi.c
-@@ -1820,7 +1820,7 @@ void uwsgi_plugins_atexit(void) {
- void uwsgi_backtrace(int depth) {
--#if defined(__GLIBC__) || (defined(__APPLE__) && !defined(NO_EXECINFO)) || defined(UWSGI_HAS_EXECINFO)
-+#if (!defined(__UCLIBC__) && defined(__GLIBC__)) || (defined(__APPLE__) && !defined(NO_EXECINFO)) || defined(UWSGI_HAS_EXECINFO)
- #include <execinfo.h>
diff --git a/net/uwsgi-cgi/patches/020-uwsgiconfig-system-python3.patch b/net/uwsgi-cgi/patches/020-uwsgiconfig-system-python3.patch
deleted file mode 100644 (file)
index 82522be..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Index: uwsgi-2.0.18/Makefile
-===================================================================
---- uwsgi-2.0.18.orig/Makefile
-+++ uwsgi-2.0.18/Makefile
-@@ -1,4 +1,4 @@
--PYTHON := python
-+PYTHON ?= python3
- all:
-       $(PYTHON) uwsgiconfig.py --build $(PROFILE)
diff --git a/net/uwsgi-cgi/patches/030-plugins-cgi_adds_dontresolve_option.patch b/net/uwsgi-cgi/patches/030-plugins-cgi_adds_dontresolve_option.patch
deleted file mode 100644 (file)
index 7acdfc7..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-From f259999d824b921a8a443e73d8c2b9e2d2170413 Mon Sep 17 00:00:00 2001
-From: Ansuel Smith <ansuelsmth@gmail.com>
-Date: Tue, 8 Oct 2019 02:10:43 +0200
-Subject: [PATCH] plugins/cgi: adds dontresolve option
-
-This option permit to call the simbolic link instead of the file the simbolic link points.
-All the security check are still done as the simbolic path is passed at the end after all the checks are passed. This is useful if some cgi app are used for multiple function based on the name they are called by.
-
-Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
----
- plugins/cgi/cgi_plugin.c | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
-diff --git a/plugins/cgi/cgi_plugin.c b/plugins/cgi/cgi_plugin.c
-index d032db17c..30e1cc528 100644
---- a/plugins/cgi/cgi_plugin.c
-+++ b/plugins/cgi/cgi_plugin.c
-@@ -15,6 +15,7 @@ struct uwsgi_cgi {
-       struct uwsgi_string_list *loadlib;
-       struct uwsgi_string_list *cgi_safe;
-       int optimize;
-+      int dontresolve;
-       int from_docroot;
-       int has_mountpoints;
-       struct uwsgi_dyn_dict *default_cgi;
-@@ -75,6 +76,8 @@ struct uwsgi_option uwsgi_cgi_options[] = {
-         {"cgi-safe", required_argument, 0, "skip security checks if the cgi file is under the specified path", uwsgi_opt_add_string_list, &uc.cgi_safe, 0},
-+        {"cgi-dontresolve", no_argument, 0 , "call symbolic link directly instead of the real path", uwsgi_opt_true,&uc.dontresolve, 0},
-+
-         {0, 0, 0, 0, 0, 0, 0},
- };
-@@ -475,6 +478,7 @@ static int uwsgi_cgi_request(struct wsgi_request *wsgi_req) {
-       char full_path[PATH_MAX];
-       char tmp_path[PATH_MAX];
-+      char symbolic_path[PATH_MAX];
-       struct stat cgi_stat;
-       int need_free = 0;
-       int is_a_file = 0;
-@@ -533,6 +537,10 @@ static int uwsgi_cgi_request(struct wsgi_request *wsgi_req) {
-                       uwsgi_404(wsgi_req);
-                       return UWSGI_OK;
-               }
-+              if (uc.dontresolve) {
-+                      full_path_len = strlen(full_path);
-+                      memcpy(symbolic_path, full_path, full_path_len+1);
-+              }
-               full_path_len = strlen(tmp_path);
-               // add +1 to copy the null byte
-@@ -639,6 +647,11 @@ static int uwsgi_cgi_request(struct wsgi_request *wsgi_req) {
-               }
-       }
-+      if (uc.dontresolve) {
-+              full_path_len = strlen(symbolic_path);
-+              memcpy(full_path, symbolic_path, full_path_len+1);
-+      }
-+
-       int ret = uwsgi_cgi_run(wsgi_req, docroot, docroot_len, full_path, helper, path_info, script_name, is_a_file, discard_base);
-       if (need_free) free(docroot);
-       return ret;
diff --git a/net/uwsgi/Makefile b/net/uwsgi/Makefile
new file mode 100644 (file)
index 0000000..f34ba6a
--- /dev/null
@@ -0,0 +1,168 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=uwsgi
+PKG_VERSION:=2.0.18
+PKG_RELEASE:=1
+
+PKG_SOURCE:=uwsgi-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL=https://files.pythonhosted.org/packages/source/u/uwsgi/
+PKG_HASH:=4972ac538800fb2d421027f49b4a1869b66048839507ccf0aa2fda792d99f583
+PKG_BUILD_DIR:=$(BUILD_DIR)/uwsgi-$(PKG_VERSION)
+PKG_BUILD_DEPENDS:=python3/host
+
+PKG_LICENSE:=GPL-2.0-or-later
+PKG_LICENSE_FILES:=LICENSE
+PKG_MAINTAINER:=Ansuel Smith <ansuelsmth@gmail.com>
+
+include $(INCLUDE_DIR)/package.mk
+include ../../lang/python/python3-package.mk
+#for LINUX_UNAME_VERSION:
+include $(INCLUDE_DIR)/kernel.mk
+
+define Package/uwsgi
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Web Servers/Proxies
+  TITLE:=The uWSGI server
+  URL:=https://uwsgi-docs.readthedocs.io/en/latest/
+  DEPENDS:=+libpcre +libcap +libuuid
+  MENU:=1
+endef
+
+define Package/uwsgi-logfile-plugin
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Web Servers/Proxies
+  TITLE:=The Logfile plugin for the uWSGI server
+  DEPENDS:=uwsgi
+  MDEPENDS:=uwsgi
+endef
+
+define Package/uwsgi-syslog-plugin
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Web Servers/Proxies
+  TITLE:=The Syslog plugin for the uWSGI server
+  DEPENDS:=uwsgi
+  MDEPENDS:=uwsgi
+endef
+
+define Package/uwsgi-cgi-plugin
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Web Servers/Proxies
+  TITLE:=The CGI plugin for the uWSGI server
+  DEPENDS:=uwsgi
+  MDEPENDS:=uwsgi
+endef
+
+define Package/uwsgi-python3-plugin
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Web Servers/Proxies
+  TITLE:=The Python3 plugin for the uWSGI server
+  DEPENDS:=uwsgi +python3-light
+  MDEPENDS:=uwsgi
+endef
+
+define Package/uwsgi-luci-support
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Web Servers/Proxies
+  TITLE:=Support files for LuCI on Nginx
+  DEPENDS:=uwsgi +uwsgi-syslog-plugin +uwsgi-cgi-plugin
+  MDEPENDS:=uwsgi
+endef
+
+define Package/uwsgi/description
+       The uWSGI project (to be used together with nginx or nginx-ssl).
+endef
+
+define Package/uwsgi-logfile-plugin/description
+       The Logfile plugin for the uWSGI project.
+endef
+
+define Package/uwsgi-syslog-plugin/description
+       The Syslog plugin for the uWSGI project.
+endef
+
+define Package/uwsgi-cgi-plugin/description
+       The CGI plugin for the uWSGI project.
+endef
+
+define Package/uwsgi-python3-plugin/description
+       The Python3 plugin for the uWSGI project.
+endef
+
+define Package/uwsgi-luci-support/description
+       Support files for LuCI on Nginx
+endef
+
+MAKE_VARS+=\
+       CPP=$(TARGET_CROSS)cpp \
+       PYTHON=$(STAGING_DIR_HOSTPKG)/bin/python3 \
+       LINUX_UNAME_VERSION=$(LINUX_UNAME_VERSION)
+
+define Build/Compile
+       $(call Build/Compile/Default,PROFILE=openwrt)
+       $(call Build/Compile/Default,plugin.logfile PROFILE=openwrt)
+       $(call Build/Compile/Default,plugin.syslog PROFILE=openwrt)
+       $(call Build/Compile/Default,plugin.cgi PROFILE=openwrt)
+       $(call Build/Compile/HostPy3RunTarget, \
+               cd $(PKG_BUILD_DIR), \
+               uwsgiconfig.py --plugin plugins/python openwrt, \
+               CPP="$(TARGET_CROSS)cpp" \
+               LINUX_UNAME_VERSION=$(LINUX_UNAME_VERSION) \
+               CFLAGS="$(TARGET_CPPFLAGS) -I$(PYTHON3_INC_DIR) $(TARGET_CFLAGS)" \
+       )
+endef
+
+define Package/uwsgi/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/uwsgi $(1)/usr/sbin/
+
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/uwsgi.init $(1)/etc/init.d/uwsgi
+
+       $(INSTALL_DIR) $(1)/etc/uwsgi
+       $(INSTALL_CONF) ./files/emperor.ini $(1)/etc/uwsgi/emperor.ini
+
+       $(INSTALL_DIR) $(1)/etc/uwsgi/vassals
+endef
+
+define Package/uwsgi/conffiles
+/etc/uwsgi/emperor.ini
+endef
+
+define Package/uwsgi-logfile-plugin/install
+       $(INSTALL_DIR) $(1)/usr/lib/uwsgi
+       $(CP) $(PKG_BUILD_DIR)/logfile_plugin.so $(1)/usr/lib/uwsgi/
+endef
+
+define Package/uwsgi-syslog-plugin/install
+       $(INSTALL_DIR) $(1)/usr/lib/uwsgi
+       $(CP) $(PKG_BUILD_DIR)/syslog_plugin.so $(1)/usr/lib/uwsgi/
+endef
+
+define Package/uwsgi-cgi-plugin/install
+       $(INSTALL_DIR) $(1)/usr/lib/uwsgi
+       $(CP) $(PKG_BUILD_DIR)/cgi_plugin.so $(1)/usr/lib/uwsgi/
+endef
+
+define Package/uwsgi-python3-plugin/install
+       $(INSTALL_DIR) $(1)/usr/lib/uwsgi
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/python_plugin.so $(1)/usr/lib/uwsgi/
+endef
+
+define Package/uwsgi-luci-support/install
+       $(INSTALL_DIR) $(1)/etc/uwsgi/vassals
+       $(INSTALL_DATA) ./files-luci-support/luci-webui.ini $(1)/etc/uwsgi/vassals/luci-webui.ini
+       $(INSTALL_DATA) ./files-luci-support/luci-cgi_io.ini $(1)/etc/uwsgi/vassals/luci-cgi_io.ini
+endef
+
+$(eval $(call BuildPackage,uwsgi))
+$(eval $(call BuildPackage,uwsgi-logfile-plugin))
+$(eval $(call BuildPackage,uwsgi-syslog-plugin))
+$(eval $(call BuildPackage,uwsgi-cgi-plugin))
+$(eval $(call BuildPackage,uwsgi-python3-plugin))
+$(eval $(call BuildPackage,uwsgi-luci-support))
diff --git a/net/uwsgi/files-luci-support/luci-cgi_io.ini b/net/uwsgi/files-luci-support/luci-cgi_io.ini
new file mode 100644 (file)
index 0000000..da5ef76
--- /dev/null
@@ -0,0 +1,31 @@
+[uwsgi]
+strict = true
+if-not-env = UWSGI_EMPEROR_FD
+socket = /var/run/luci-cgi_io.socket
+chmod-socket = 666
+cheap = true
+end-if =
+plugin = cgi
+cgi-mode = true
+cgi = /www/
+chdir = /usr/lib/lua/luci/
+buffer-size = 10000
+reload-mercy = 8
+max-requests = 2000
+limit-as = 200
+reload-on-as = 256
+reload-on-rss = 192
+no-orphans = true
+post-buffering = 8192
+socket-timeout = 120
+thunder-lock = true
+plugin = syslog
+disable-logging = true
+req-logger = syslog:uwsgi-luci-cgi_io
+log-format=%(method) %(uri) => return %(status) (%(rsize) bytes in %(msecs) ms)
+chmod-socket = 666
+cgi-safe = /usr/libexec/cgi-io
+cgi-dontresolve = true
+cgi-close-stdin-on-eof = true
+cheap = true
+idle = 360
diff --git a/net/uwsgi/files-luci-support/luci-webui.ini b/net/uwsgi/files-luci-support/luci-webui.ini
new file mode 100644 (file)
index 0000000..04abfc8
--- /dev/null
@@ -0,0 +1,35 @@
+[uwsgi]
+strict = true
+if-not-env = UWSGI_EMPEROR_FD
+socket = /var/run/luci-webui.socket
+chmod-socket = 666
+cheap = true
+end-if =
+plugin = cgi
+cgi-mode = true
+cgi = /www/
+chdir = /usr/lib/lua/luci/
+buffer-size = 10000
+reload-mercy = 8
+max-requests = 2000
+limit-as = 200
+reload-on-as = 256
+reload-on-rss = 192
+enable-threads = true
+post-buffering = 8192
+socket-timeout = 120
+thunder-lock = true
+plugin = syslog
+logger = luci syslog:uwsgi-luci
+log-route = luci luci:
+disable-logging = true
+req-logger = syslog:uwsgi-luci
+log-format=%(method) %(uri) => return %(status) (%(rsize) bytes in %(msecs) ms)
+threads = 3
+processes = 3
+cheaper-algo = spare
+cheaper = 1
+cheaper-initial = 1
+cheaper-step = 1
+master = true
+idle = 360
diff --git a/net/uwsgi/files/emperor.ini b/net/uwsgi/files/emperor.ini
new file mode 100644 (file)
index 0000000..9c245af
--- /dev/null
@@ -0,0 +1,9 @@
+[uwsgi]
+strict = true
+pidfile = /var/run/uwsgi.pid
+emperor = /etc/uwsgi/vassals/*.ini
+early-emperor = true
+vacuum = true
+emperor-on-demand-directory = /var/run/
+emperor-required-heartbeat = 99
+vassal-set = die-on-idle=true
diff --git a/net/uwsgi/files/uwsgi.init b/net/uwsgi/files/uwsgi.init
new file mode 100644 (file)
index 0000000..20a1280
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/sh /etc/rc.common
+
+START=79
+USE_PROCD=1
+
+start_service() {
+       procd_open_instance
+       procd_set_param command /usr/sbin/uwsgi --ini /etc/uwsgi/emperor.ini
+       procd_set_param stderr 1
+       procd_set_param file /etc/uwsgi/emperor.ini
+       procd_set_param respawn
+       procd_close_instance
+}
+
diff --git a/net/uwsgi/patches/001-dont-hardcode-zlib.patch b/net/uwsgi/patches/001-dont-hardcode-zlib.patch
new file mode 100644 (file)
index 0000000..23ca62d
--- /dev/null
@@ -0,0 +1,19 @@
+--- a/uwsgiconfig.py
++++ b/uwsgiconfig.py
+@@ -851,11 +851,11 @@ class uConf(object):
+                 self.cflags.append('-DUWSGI_HAS_EXECINFO')
+                 report['execinfo'] = True
+-        if self.has_include('zlib.h'):
+-            self.cflags.append('-DUWSGI_ZLIB')
+-            self.libs.append('-lz')
+-            self.gcc_list.append('core/zlib')
+-            report['zlib'] = True
++#        if self.has_include('zlib.h'):
++#            self.cflags.append('-DUWSGI_ZLIB')
++#            self.libs.append('-lz')
++#            self.gcc_list.append('core/zlib')
++            report['zlib'] = False
+         if uwsgi_os == 'OpenBSD':
+             try:
diff --git a/net/uwsgi/patches/002-dont-override-toolchain-optimization.patch b/net/uwsgi/patches/002-dont-override-toolchain-optimization.patch
new file mode 100644 (file)
index 0000000..196edfb
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/uwsgiconfig.py
++++ b/uwsgiconfig.py
+@@ -680,7 +680,7 @@ class uConf(object):
+             self.include_path += os.environ['UWSGI_INCLUDES'].split(',')
+-        self.cflags = ['-O2', '-I.', '-Wall', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] + os.environ.get("CFLAGS", "").split() + self.get('cflags','').split()
++        self.cflags = ['-I.', '-Wall', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] + os.environ.get("CFLAGS", "").split() + self.get('cflags','').split()
+         report['kernel'] = uwsgi_os
diff --git a/net/uwsgi/patches/003-hard-code-Linux-as-compilation-os.patch b/net/uwsgi/patches/003-hard-code-Linux-as-compilation-os.patch
new file mode 100644 (file)
index 0000000..169a309
--- /dev/null
@@ -0,0 +1,15 @@
+--- a/uwsgiconfig.py
++++ b/uwsgiconfig.py
+@@ -5,9 +5,9 @@
+ import os
+ import re
+ import time
+-uwsgi_os = os.uname()[0]
+-uwsgi_os_k = re.split('[-+_]', os.uname()[2])[0]
+-uwsgi_os_v = os.uname()[3]
++uwsgi_os = "Linux"
++uwsgi_os_k = os.environ['LINUX_UNAME_VERSION']
++uwsgi_os_v = "Linux"
+ uwsgi_cpu = os.uname()[4]
+ import sys
diff --git a/net/uwsgi/patches/010-uclibc-ng.patch b/net/uwsgi/patches/010-uclibc-ng.patch
new file mode 100644 (file)
index 0000000..e967320
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/core/uwsgi.c
++++ b/core/uwsgi.c
+@@ -1820,7 +1820,7 @@ void uwsgi_plugins_atexit(void) {
+ void uwsgi_backtrace(int depth) {
+-#if defined(__GLIBC__) || (defined(__APPLE__) && !defined(NO_EXECINFO)) || defined(UWSGI_HAS_EXECINFO)
++#if (!defined(__UCLIBC__) && defined(__GLIBC__)) || (defined(__APPLE__) && !defined(NO_EXECINFO)) || defined(UWSGI_HAS_EXECINFO)
+ #include <execinfo.h>
diff --git a/net/uwsgi/patches/020-uwsgiconfig-system-python3.patch b/net/uwsgi/patches/020-uwsgiconfig-system-python3.patch
new file mode 100644 (file)
index 0000000..82522be
--- /dev/null
@@ -0,0 +1,10 @@
+Index: uwsgi-2.0.18/Makefile
+===================================================================
+--- uwsgi-2.0.18.orig/Makefile
++++ uwsgi-2.0.18/Makefile
+@@ -1,4 +1,4 @@
+-PYTHON := python
++PYTHON ?= python3
+ all:
+       $(PYTHON) uwsgiconfig.py --build $(PROFILE)
diff --git a/net/uwsgi/patches/030-plugins-cgi_adds_dontresolve_option.patch b/net/uwsgi/patches/030-plugins-cgi_adds_dontresolve_option.patch
new file mode 100644 (file)
index 0000000..7acdfc7
--- /dev/null
@@ -0,0 +1,65 @@
+From f259999d824b921a8a443e73d8c2b9e2d2170413 Mon Sep 17 00:00:00 2001
+From: Ansuel Smith <ansuelsmth@gmail.com>
+Date: Tue, 8 Oct 2019 02:10:43 +0200
+Subject: [PATCH] plugins/cgi: adds dontresolve option
+
+This option permit to call the simbolic link instead of the file the simbolic link points.
+All the security check are still done as the simbolic path is passed at the end after all the checks are passed. This is useful if some cgi app are used for multiple function based on the name they are called by.
+
+Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
+---
+ plugins/cgi/cgi_plugin.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/plugins/cgi/cgi_plugin.c b/plugins/cgi/cgi_plugin.c
+index d032db17c..30e1cc528 100644
+--- a/plugins/cgi/cgi_plugin.c
++++ b/plugins/cgi/cgi_plugin.c
+@@ -15,6 +15,7 @@ struct uwsgi_cgi {
+       struct uwsgi_string_list *loadlib;
+       struct uwsgi_string_list *cgi_safe;
+       int optimize;
++      int dontresolve;
+       int from_docroot;
+       int has_mountpoints;
+       struct uwsgi_dyn_dict *default_cgi;
+@@ -75,6 +76,8 @@ struct uwsgi_option uwsgi_cgi_options[] = {
+         {"cgi-safe", required_argument, 0, "skip security checks if the cgi file is under the specified path", uwsgi_opt_add_string_list, &uc.cgi_safe, 0},
++        {"cgi-dontresolve", no_argument, 0 , "call symbolic link directly instead of the real path", uwsgi_opt_true,&uc.dontresolve, 0},
++
+         {0, 0, 0, 0, 0, 0, 0},
+ };
+@@ -475,6 +478,7 @@ static int uwsgi_cgi_request(struct wsgi_request *wsgi_req) {
+       char full_path[PATH_MAX];
+       char tmp_path[PATH_MAX];
++      char symbolic_path[PATH_MAX];
+       struct stat cgi_stat;
+       int need_free = 0;
+       int is_a_file = 0;
+@@ -533,6 +537,10 @@ static int uwsgi_cgi_request(struct wsgi_request *wsgi_req) {
+                       uwsgi_404(wsgi_req);
+                       return UWSGI_OK;
+               }
++              if (uc.dontresolve) {
++                      full_path_len = strlen(full_path);
++                      memcpy(symbolic_path, full_path, full_path_len+1);
++              }
+               full_path_len = strlen(tmp_path);
+               // add +1 to copy the null byte
+@@ -639,6 +647,11 @@ static int uwsgi_cgi_request(struct wsgi_request *wsgi_req) {
+               }
+       }
++      if (uc.dontresolve) {
++              full_path_len = strlen(symbolic_path);
++              memcpy(full_path, symbolic_path, full_path_len+1);
++      }
++
+       int ret = uwsgi_cgi_run(wsgi_req, docroot, docroot_len, full_path, helper, path_info, script_name, is_a_file, discard_base);
+       if (need_free) free(docroot);
+       return ret;
diff --git a/net/uwsgi/src/buildconf/openwrt.ini b/net/uwsgi/src/buildconf/openwrt.ini
new file mode 100644 (file)
index 0000000..f9ea834
--- /dev/null
@@ -0,0 +1,30 @@
+[uwsgi]
+xml = false
+yaml = false
+json = false
+ssl = false
+pcre = true
+routing = auto
+debug = false
+unbit = false
+malloc_implementation = libc
+extras =
+plugins =
+bin_name = uwsgi
+append_version =
+plugin_dir = /usr/lib/uwsgi
+plugin_build_dir = .
+embedded_plugins =
+as_shared_library = false
+
+locking = auto
+event = auto
+timer = auto
+filemonitor = auto
+
+blacklist =
+whitelist =
+
+embed_files =
+
+embed_config =