mirror of
https://github.com/searxng/searxng.git
synced 2024-11-29 14:11:02 +00:00
utils/lib.sh: make uWSGI installation available for all distros
support: ubuntu, debin, fedora, archlinux Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
This commit is contained in:
parent
f5d10abc7f
commit
d5917cc029
6 changed files with 136 additions and 11 deletions
2
Makefile
2
Makefile
|
@ -84,11 +84,11 @@ test.pylint: pyenvinstall
|
||||||
$(call cmd,pylint,searx/testing.py)
|
$(call cmd,pylint,searx/testing.py)
|
||||||
|
|
||||||
test.sh:
|
test.sh:
|
||||||
shellcheck -x utils/lxc.sh
|
|
||||||
shellcheck -x utils/lib.sh
|
shellcheck -x utils/lib.sh
|
||||||
shellcheck -x utils/filtron.sh
|
shellcheck -x utils/filtron.sh
|
||||||
shellcheck -x utils/searx.sh
|
shellcheck -x utils/searx.sh
|
||||||
shellcheck -x utils/morty.sh
|
shellcheck -x utils/morty.sh
|
||||||
|
shellcheck -x utils/lxc.sh
|
||||||
shellcheck -x .config.sh
|
shellcheck -x .config.sh
|
||||||
|
|
||||||
test.pep8: pyenvinstall
|
test.pep8: pyenvinstall
|
||||||
|
|
69
utils/lib.sh
69
utils/lib.sh
|
@ -692,18 +692,37 @@ apache_dissable_site() {
|
||||||
# -----
|
# -----
|
||||||
|
|
||||||
uWSGI_SETUP="${uWSGI_SETUP:=/etc/uwsgi}"
|
uWSGI_SETUP="${uWSGI_SETUP:=/etc/uwsgi}"
|
||||||
|
uWSGI_USER=
|
||||||
|
uWSGI_GROUP=
|
||||||
|
|
||||||
|
# How distros manage uWSGI apps is very different. From uWSGI POV read:
|
||||||
|
# - https://uwsgi-docs.readthedocs.io/en/latest/Management.html
|
||||||
|
|
||||||
case $DIST_ID-$DIST_VERS in
|
case $DIST_ID-$DIST_VERS in
|
||||||
ubuntu-*|debian-*)
|
ubuntu-*|debian-*)
|
||||||
# init.d --> /usr/share/doc/uwsgi/README.Debian.gz
|
# init.d --> /usr/share/doc/uwsgi/README.Debian.gz
|
||||||
|
# For uWSGI debian uses the LSB init process, this might be changed
|
||||||
|
# one day, see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=833067
|
||||||
uWSGI_APPS_AVAILABLE="${uWSGI_SETUP}/apps-available"
|
uWSGI_APPS_AVAILABLE="${uWSGI_SETUP}/apps-available"
|
||||||
uWSGI_APPS_ENABLED="${uWSGI_SETUP}/apps-enabled"
|
uWSGI_APPS_ENABLED="${uWSGI_SETUP}/apps-enabled"
|
||||||
;;
|
;;
|
||||||
arch-*)
|
arch-*)
|
||||||
# systemd --> /usr/lib/systemd/system/uwsgi@.service
|
# systemd --> /usr/lib/systemd/system/uwsgi@.service
|
||||||
uWSGI_APPS_AVAILABLE="${uWSGI_SETUP}"
|
# For uWSGI archlinux uses systemd template units, see
|
||||||
|
# - http://0pointer.de/blog/projects/instances.html
|
||||||
|
# - https://uwsgi-docs.readthedocs.io/en/latest/Systemd.html#one-service-per-app-in-systemd
|
||||||
|
uWSGI_APPS_AVAILABLE="${uWSGI_SETUP}/apps-archlinux"
|
||||||
uWSGI_APPS_ENABLED="${uWSGI_SETUP}"
|
uWSGI_APPS_ENABLED="${uWSGI_SETUP}"
|
||||||
;;
|
;;
|
||||||
|
fedora-*)
|
||||||
|
# systemd --> /usr/lib/systemd/system/uwsgi.service
|
||||||
|
# The unit file starts uWSGI in emperor mode (/etc/uwsgi.ini), see
|
||||||
|
# - https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html
|
||||||
|
uWSGI_APPS_AVAILABLE="${uWSGI_SETUP}/apps-available"
|
||||||
|
uWSGI_APPS_ENABLED="${uWSGI_SETUP}.d"
|
||||||
|
uWSGI_USER="uwsgi"
|
||||||
|
uWSGI_GROUP="uwsgi"
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
info_msg "$DIST_ID-$DIST_VERS: uWSGI not yet implemented"
|
info_msg "$DIST_ID-$DIST_VERS: uWSGI not yet implemented"
|
||||||
;;
|
;;
|
||||||
|
@ -723,10 +742,25 @@ uWSGI_restart() {
|
||||||
|
|
||||||
case $DIST_ID-$DIST_VERS in
|
case $DIST_ID-$DIST_VERS in
|
||||||
ubuntu-*|debian-*)
|
ubuntu-*|debian-*)
|
||||||
|
# the 'service' method seems broken in that way, that it (re-)starts
|
||||||
|
# the whole uwsgi process.
|
||||||
service uwsgi restart "${CONF%.*}"
|
service uwsgi restart "${CONF%.*}"
|
||||||
;;
|
;;
|
||||||
arch-*)
|
arch-*)
|
||||||
systemctl restart "uwsgi@${CONF%.*}"
|
# restart systemd template instance
|
||||||
|
if uWSGI_app_available "${CONF}"; then
|
||||||
|
systemctl restart "uwsgi@${CONF%.*}"
|
||||||
|
else
|
||||||
|
info_msg "in systemd template mode: ${CONF} not installed (nothing to restart)"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
fedora-*)
|
||||||
|
# in emperor mode, just touch the file to restart
|
||||||
|
if uWSGI_app_enabled "${CONF}"; then
|
||||||
|
touch "${uWSGI_APPS_ENABLED}/${CONF}"
|
||||||
|
else
|
||||||
|
info_msg "in uWSGI emperor mode: ${CONF} not installed (nothing to restart)"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
err_msg "$DIST_ID-$DIST_VERS: uWSGI not yet implemented"
|
err_msg "$DIST_ID-$DIST_VERS: uWSGI not yet implemented"
|
||||||
|
@ -765,7 +799,7 @@ uWSGI_install_app() {
|
||||||
root root 644
|
root root 644
|
||||||
uWSGI_enable_app "${pos_args[1]}"
|
uWSGI_enable_app "${pos_args[1]}"
|
||||||
uWSGI_restart "${pos_args[1]}"
|
uWSGI_restart "${pos_args[1]}"
|
||||||
info_msg "installed uWSGI app: ${pos_args[1]}"
|
info_msg "uWSGI app: ${pos_args[1]} is installed"
|
||||||
}
|
}
|
||||||
|
|
||||||
uWSGI_remove_app() {
|
uWSGI_remove_app() {
|
||||||
|
@ -797,6 +831,10 @@ uWSGI_app_enabled() {
|
||||||
systemctl -q is-enabled "uwsgi@${CONF%.*}"
|
systemctl -q is-enabled "uwsgi@${CONF%.*}"
|
||||||
exit_val=$?
|
exit_val=$?
|
||||||
;;
|
;;
|
||||||
|
fedora-*)
|
||||||
|
[[ -f "${uWSGI_APPS_ENABLED}/${CONF}" ]]
|
||||||
|
exit_val=$?
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
# FIXME
|
# FIXME
|
||||||
err_msg "$DIST_ID-$DIST_VERS: uWSGI not yet implemented"
|
err_msg "$DIST_ID-$DIST_VERS: uWSGI not yet implemented"
|
||||||
|
@ -821,14 +859,22 @@ uWSGI_enable_app() {
|
||||||
case $DIST_ID-$DIST_VERS in
|
case $DIST_ID-$DIST_VERS in
|
||||||
ubuntu-*|debian-*)
|
ubuntu-*|debian-*)
|
||||||
mkdir -p "${uWSGI_APPS_ENABLED}"
|
mkdir -p "${uWSGI_APPS_ENABLED}"
|
||||||
pushd "${uWSGI_APPS_ENABLED}" >/dev/null
|
rm -f "${uWSGI_APPS_ENABLED}/${CONF}"
|
||||||
rm -f "$CONF"
|
ln -s "${uWSGI_APPS_AVAILABLE}/${CONF}" "${uWSGI_APPS_ENABLED}/${CONF}"
|
||||||
ln -s "${uWSGI_APPS_AVAILABLE}/${CONF}" .
|
|
||||||
popd >/dev/null
|
|
||||||
info_msg "enabled uWSGI app: ${CONF} (restart required)"
|
info_msg "enabled uWSGI app: ${CONF} (restart required)"
|
||||||
;;
|
;;
|
||||||
arch-*)
|
arch-*)
|
||||||
systemctl enable "uwsgi@${CONF%.*}"
|
mkdir -p "${uWSGI_APPS_ENABLED}"
|
||||||
|
rm -f "${uWSGI_APPS_ENABLED}/${CONF}"
|
||||||
|
ln -s "${uWSGI_APPS_AVAILABLE}/${CONF}" "${uWSGI_APPS_ENABLED}/${CONF}"
|
||||||
|
info_msg "enabled uWSGI app: ${CONF} (restart required)"
|
||||||
|
;;
|
||||||
|
fedora-*)
|
||||||
|
mkdir -p "${uWSGI_APPS_ENABLED}"
|
||||||
|
rm -f "${uWSGI_APPS_ENABLED}/${CONF}"
|
||||||
|
ln -s "${uWSGI_APPS_AVAILABLE}/${CONF}" "${uWSGI_APPS_ENABLED}/${CONF}"
|
||||||
|
chown "${uWSGI_USER}:${uWSGI_GROUP}" "${uWSGI_APPS_ENABLED}/${CONF}"
|
||||||
|
info_msg "enabled uWSGI app: ${CONF}"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
# FIXME
|
# FIXME
|
||||||
|
@ -843,7 +889,7 @@ uWSGI_disable_app() {
|
||||||
|
|
||||||
local CONF="$1"
|
local CONF="$1"
|
||||||
if [[ -z $CONF ]]; then
|
if [[ -z $CONF ]]; then
|
||||||
err_msg "uWSGI_enable_app: missing arguments"
|
err_msg "uWSGI_disable_app: missing arguments"
|
||||||
return 42
|
return 42
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -856,6 +902,11 @@ uWSGI_disable_app() {
|
||||||
arch-*)
|
arch-*)
|
||||||
systemctl stop "uwsgi@${CONF%.*}"
|
systemctl stop "uwsgi@${CONF%.*}"
|
||||||
systemctl disable "uwsgi@${CONF%.*}"
|
systemctl disable "uwsgi@${CONF%.*}"
|
||||||
|
rm -f "${uWSGI_APPS_ENABLED}/${CONF}"
|
||||||
|
;;
|
||||||
|
fedora-*)
|
||||||
|
# in emperor mode, just remove the app.ini file
|
||||||
|
rm -f "${uWSGI_APPS_ENABLED}/${CONF}"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
# FIXME
|
# FIXME
|
||||||
|
|
|
@ -344,7 +344,7 @@ add_subordinate_ids() {
|
||||||
|
|
||||||
del_subordinate_ids() {
|
del_subordinate_ids() {
|
||||||
local out
|
local out
|
||||||
local exit_value
|
local exit_val
|
||||||
if grep "root:${HOST_USER_ID}:1" /etc/subuid -qs; then
|
if grep "root:${HOST_USER_ID}:1" /etc/subuid -qs; then
|
||||||
# TODO: root user is always in use by process 1, how can we remove subordinates?
|
# TODO: root user is always in use by process 1, how can we remove subordinates?
|
||||||
info_msg "remove lxd permission to map ${HOST_USER_ID}'s user/group id through"
|
info_msg "remove lxd permission to map ${HOST_USER_ID}'s user/group id through"
|
||||||
|
|
|
@ -96,6 +96,11 @@ To activate morty in searx, add result_proxy to your settings.yml::
|
||||||
result_proxy:
|
result_proxy:
|
||||||
url : ${PUBLIC_URL_MORTY}/
|
url : ${PUBLIC_URL_MORTY}/
|
||||||
|
|
||||||
|
server:
|
||||||
|
...
|
||||||
|
image_proxy : True # Proxying image results through searx
|
||||||
|
...
|
||||||
|
|
||||||
further read: ${DOCS_URL}/admin/morty.html
|
further read: ${DOCS_URL}/admin/morty.html
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
|
@ -43,6 +43,9 @@ case $DIST_ID in
|
||||||
git build-essential libxslt-dev zlib1g-dev libffi-dev libssl-dev "
|
git build-essential libxslt-dev zlib1g-dev libffi-dev libssl-dev "
|
||||||
;;
|
;;
|
||||||
arch) # pacman packages
|
arch) # pacman packages
|
||||||
|
# FIXME:
|
||||||
|
# - /usr/lib/uwsgi/http_plugin.so: cannot open shared object file: No such file or directory !!!
|
||||||
|
# - /usr/lib/uwsgi/systemd_logger_plugin.so: cannot open shared object file: No such file or directory !!!
|
||||||
SEARX_PACKAGES="\
|
SEARX_PACKAGES="\
|
||||||
python python-pip python-lxml python-babel \
|
python python-pip python-lxml python-babel \
|
||||||
uwsgi uwsgi-plugin-python \
|
uwsgi uwsgi-plugin-python \
|
||||||
|
|
66
utils/templates/etc/uwsgi/apps-archlinux/searx.ini
Normal file
66
utils/templates/etc/uwsgi/apps-archlinux/searx.ini
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
[uwsgi]
|
||||||
|
|
||||||
|
# uWSGI core
|
||||||
|
# ----------
|
||||||
|
#
|
||||||
|
# https://uwsgi-docs.readthedocs.io/en/latest/Options.html#uwsgi-core
|
||||||
|
|
||||||
|
# Who will run the code
|
||||||
|
uid = ${SERVICE_USER}
|
||||||
|
gid = ${SERVICE_GROUP}
|
||||||
|
|
||||||
|
# chdir to specified directory before apps loading
|
||||||
|
chdir = ${SEARX_SRC}/searx
|
||||||
|
|
||||||
|
# searx configuration (settings.yml)
|
||||||
|
env = SEARX_SETTINGS_PATH=${SEARX_SETTINGS_PATH}
|
||||||
|
|
||||||
|
# disable logging for privacy
|
||||||
|
logger = systemd
|
||||||
|
disable-logging = false
|
||||||
|
|
||||||
|
# The right granted on the created socket
|
||||||
|
chmod-socket = 666
|
||||||
|
|
||||||
|
# Plugin to use and interpretor config
|
||||||
|
single-interpreter = true
|
||||||
|
|
||||||
|
# enable master process
|
||||||
|
master = true
|
||||||
|
|
||||||
|
# load apps in each worker instead of the master
|
||||||
|
lazy-apps = true
|
||||||
|
|
||||||
|
# load uWSGI plugins
|
||||||
|
plugin = python,http,systemd_logger
|
||||||
|
|
||||||
|
# By default the Python plugin does not initialize the GIL. This means your
|
||||||
|
# app-generated threads will not run. If you need threads, remember to enable
|
||||||
|
# them with enable-threads. Running uWSGI in multithreading mode (with the
|
||||||
|
# threads options) will automatically enable threading support. This *strange*
|
||||||
|
# default behaviour is for performance reasons.
|
||||||
|
enable-threads = true
|
||||||
|
|
||||||
|
|
||||||
|
# plugin: python
|
||||||
|
# --------------
|
||||||
|
#
|
||||||
|
# https://uwsgi-docs.readthedocs.io/en/latest/Options.html#plugin-python
|
||||||
|
|
||||||
|
# load a WSGI module
|
||||||
|
module = searx.webapp
|
||||||
|
|
||||||
|
# set PYTHONHOME/virtualenv
|
||||||
|
virtualenv = ${SEARX_PYENV}
|
||||||
|
|
||||||
|
# add directory (or glob) to pythonpath
|
||||||
|
pythonpath = ${SEARX_SRC}
|
||||||
|
|
||||||
|
|
||||||
|
# plugin http
|
||||||
|
# -----------
|
||||||
|
#
|
||||||
|
# https://uwsgi-docs.readthedocs.io/en/latest/Options.html#plugin-http
|
||||||
|
|
||||||
|
# Native HTTP support: https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html
|
||||||
|
http = ${SEARX_INTERNAL_URL}
|
Loading…
Reference in a new issue