Browse Source

[clean up] drop obsolete searx, filtron and morty install scripts

Since ./utils/searxng.sh is implemented, the old installation procedures from
filtron, morty and searx can be removed.

For users who want to upgrade, the procedures for removing old installations
have still been retained.

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
Markus Heiser 2 years ago
parent
commit
692708aa77

+ 0 - 52
.config.sh

@@ -1,52 +0,0 @@
-# -*- coding: utf-8; mode: sh -*-
-# SPDX-License-Identifier: AGPL-3.0-or-later
-# shellcheck shell=bash disable=SC2034
-#
-# This file should be edited only ones just before the installation of any
-# service is done.  After the installation of the searx service a copy of this
-# file is placed into the $SEARXNG_SRC of the instance, e.g.::
-#
-#     /usr/local/searx/searx-src/.config.sh
-#
-# .. hint::
-#
-#    Before you change a value here, You have to fully uninstall any previous
-#    installation of searx, morty and filtron services!
-
-# utils/searx.sh
-# --------------
-
-# The setup of the SearXNG instance is done in the settings.yml
-# (SEARXNG_SETTINGS_PATH).  Read the remarks in [1] carefully and don't forget to
-# rebuild instance's environment (make buildenv) if needed.  The settings.yml
-# file of an already installed instance is shown by::
-#
-#     $ ./utils/searx.sh --help
-#     ---- SearXNG instance setup (already installed)
-#       SEARXNG_SETTINGS_PATH : /etc/searxng/settings.yml
-#       SEARXNG_SRC           : /usr/local/searx/searx-src
-#
-# [1] https://docs.searxng.org/admin/engines/settings.html
-
-# utils/filtron.sh
-# ----------------
-
-# FILTRON_API="127.0.0.1:4005"
-# FILTRON_LISTEN="127.0.0.1:4004"
-
-# utils/morty.sh
-# --------------
-
-# morty listen address
-# MORTY_LISTEN="127.0.0.1:3000"
-# PUBLIC_URL_PATH_MORTY="/morty/"
-
-# system services
-# ---------------
-
-# Common $HOME folder of the service accounts
-# SERVICE_HOME_BASE="/usr/local"
-
-# **experimental**: Set SERVICE_USER to run all services by one account, but be
-# aware that removing discrete components might conflict!
-# SERVICE_USER=searx

+ 1 - 1
.github/workflows/data-update.yml

@@ -26,7 +26,7 @@ jobs:
 
 
       - name: Install Ubuntu packages
       - name: Install Ubuntu packages
         run: |
         run: |
-          sudo ./utils/searx.sh install packages
+          sudo ./utils/searxng.sh install packages
 
 
       - name: Set up Python
       - name: Set up Python
         uses: actions/setup-python@v2
         uses: actions/setup-python@v2

+ 3 - 3
.github/workflows/integration.yml

@@ -19,7 +19,7 @@ jobs:
       uses: actions/checkout@v2
       uses: actions/checkout@v2
     - name: Install Ubuntu packages
     - name: Install Ubuntu packages
       run: |
       run: |
-        sudo ./utils/searx.sh install packages
+        sudo ./utils/searxng.sh install packages
         sudo apt install firefox
         sudo apt install firefox
     - name: Set up Python
     - name: Set up Python
       uses: actions/setup-python@v2
       uses: actions/setup-python@v2
@@ -55,7 +55,7 @@ jobs:
     - name: Checkout
     - name: Checkout
       uses: actions/checkout@v2
       uses: actions/checkout@v2
     - name: Install Ubuntu packages
     - name: Install Ubuntu packages
-      run: sudo ./utils/searx.sh install buildhost
+      run: sudo ./utils/searxng.sh install buildhost
     - name: Set up Python
     - name: Set up Python
       uses: actions/setup-python@v2
       uses: actions/setup-python@v2
       with:
       with:
@@ -82,7 +82,7 @@ jobs:
         fetch-depth: '0'
         fetch-depth: '0'
         persist-credentials: false
         persist-credentials: false
     - name: Install Ubuntu packages
     - name: Install Ubuntu packages
-      run: sudo ./utils/searx.sh install buildhost
+      run: sudo ./utils/searxng.sh install buildhost
     - name: Set up Python
     - name: Set up Python
       uses: actions/setup-python@v2
       uses: actions/setup-python@v2
       with:
       with:

+ 1 - 3
Makefile

@@ -59,7 +59,6 @@ test.shell:
 		utils/brand.env \
 		utils/brand.env \
 		$(MTOOLS) \
 		$(MTOOLS) \
 		utils/lib.sh \
 		utils/lib.sh \
-		utils/lib_install.sh \
 		utils/lib_nvm.sh \
 		utils/lib_nvm.sh \
 		utils/lib_static.sh \
 		utils/lib_static.sh \
 		utils/lib_go.sh \
 		utils/lib_go.sh \
@@ -69,8 +68,7 @@ test.shell:
 		utils/searxng.sh \
 		utils/searxng.sh \
 		utils/morty.sh \
 		utils/morty.sh \
 		utils/lxc.sh \
 		utils/lxc.sh \
-		utils/lxc-searxng.env \
-		.config.sh
+		utils/lxc-searxng.env
 	$(Q)$(MTOOLS) build_msg TEST "$@ OK"
 	$(Q)$(MTOOLS) build_msg TEST "$@ OK"
 
 
 
 

+ 0 - 2
manage

@@ -417,8 +417,6 @@ docs.prebuild() {
         [ "$VERBOSE" = "1" ] && set -x
         [ "$VERBOSE" = "1" ] && set -x
         mkdir -p "${DOCS_BUILD}/includes"
         mkdir -p "${DOCS_BUILD}/includes"
         ./utils/searxng.sh searxng.doc.rst >  "${DOCS_BUILD}/includes/searxng.rst"
         ./utils/searxng.sh searxng.doc.rst >  "${DOCS_BUILD}/includes/searxng.rst"
-        ./utils/filtron.sh doc | cat > "${DOCS_BUILD}/includes/filtron.rst"
-        ./utils/morty.sh doc   | cat > "${DOCS_BUILD}/includes/morty.rst"
         pyenv.cmd searxng_extra/docs_prebuild
         pyenv.cmd searxng_extra/docs_prebuild
     )
     )
     dump_return $?
     dump_return $?

+ 9 - 518
utils/filtron.sh

@@ -4,56 +4,19 @@
 
 
 # shellcheck source=utils/lib.sh
 # shellcheck source=utils/lib.sh
 source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
 source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
-# shellcheck source=utils/lib_go.sh
-source "${REPO_ROOT}/utils/lib_go.sh"
-# shellcheck source=utils/lib_install.sh
-source "${REPO_ROOT}/utils/lib_install.sh"
 
 
 # ----------------------------------------------------------------------------
 # ----------------------------------------------------------------------------
 # config
 # config
 # ----------------------------------------------------------------------------
 # ----------------------------------------------------------------------------
 
 
-PUBLIC_HOST="${PUBLIC_HOST:-$(echo "$PUBLIC_URL" | sed -e 's/[^/]*\/\/\([^@]*@\)\?\([^:/]*\).*/\2/')}"
-
-FILTRON_URL_PATH="${FILTRON_URL_PATH:-$(echo "${PUBLIC_URL}" \
-| sed -e 's,^.*://[^/]*\(/.*\),\1,g')}"
-[[ "${FILTRON_URL_PATH}" == "${PUBLIC_URL}" ]] && FILTRON_URL_PATH=/
-
 FILTRON_ETC="/etc/filtron"
 FILTRON_ETC="/etc/filtron"
-FILTRON_RULES="$FILTRON_ETC/rules.json"
-FILTRON_RULES_TEMPLATE="${FILTRON_RULES_TEMPLATE:-${REPO_ROOT}/utils/templates/etc/filtron/rules.json}"
-
-FILTRON_API="${FILTRON_API:-127.0.0.1:4005}"
-FILTRON_LISTEN="${FILTRON_LISTEN:-127.0.0.1:4004}"
-
-# The filtron target is the SearXNG installation, listenning on server.port at
-# server.bind_address.  The default of FILTRON_TARGET is taken from the YAML
-# configuration, do not change this value without reinstalling the entire
-# SearXNG suite including filtron & morty.
-FILTRON_TARGET="${SEARXNG_BIND_ADDRESS}:${SEARXNG_PORT}"
 
 
 SERVICE_NAME="filtron"
 SERVICE_NAME="filtron"
 SERVICE_USER="${SERVICE_USER:-${SERVICE_NAME}}"
 SERVICE_USER="${SERVICE_USER:-${SERVICE_NAME}}"
-SERVICE_HOME_BASE="${SERVICE_HOME_BASE:-/usr/local}"
-SERVICE_HOME="${SERVICE_HOME_BASE}/${SERVICE_USER}"
 SERVICE_SYSTEMD_UNIT="${SYSTEMD_UNITS}/${SERVICE_NAME}.service"
 SERVICE_SYSTEMD_UNIT="${SYSTEMD_UNITS}/${SERVICE_NAME}.service"
-# shellcheck disable=SC2034
-SERVICE_GROUP="${SERVICE_USER}"
-
-# shellcheck disable=SC2034
-SERVICE_GROUP="${SERVICE_USER}"
 
 
-GO_ENV="${SERVICE_HOME}/.go_env"
-GO_VERSION="go1.17.2"
-
-APACHE_FILTRON_SITE="searxng.conf"
-NGINX_FILTRON_SITE="searxng.conf"
-
-# shellcheck disable=SC2034
-CONFIG_FILES=(
-    "${FILTRON_RULES}"
-    "${SERVICE_SYSTEMD_UNIT}"
-)
+APACHE_FILTRON_SITE="searx.conf"
+NGINX_FILTRON_SITE="searx.conf"
 
 
 # ----------------------------------------------------------------------------
 # ----------------------------------------------------------------------------
 usage() {
 usage() {
@@ -62,248 +25,45 @@ usage() {
     # shellcheck disable=SC1117
     # shellcheck disable=SC1117
     cat <<EOF
     cat <<EOF
 usage::
 usage::
-  $(basename "$0") shell
-  $(basename "$0") install    [all|user|rules]
-  $(basename "$0") reinstall  all
-  $(basename "$0") update     [filtron]
-  $(basename "$0") remove     [all]
-  $(basename "$0") activate   [service]
-  $(basename "$0") deactivate [service]
-  $(basename "$0") inspect    [service]
-  $(basename "$0") option     [debug-on|debug-off]
-  $(basename "$0") apache     [install|remove]
-  $(basename "$0") nginx      [install|remove]
+  $(basename "$0") remove all]
+  $(basename "$0") apache remove
+  $(basename "$0") nginx  remove
 
 
-shell
-  start interactive shell from user ${SERVICE_USER}
-install / remove
-  :all:        complete setup of filtron service
-  :user:       add/remove service user '$SERVICE_USER' ($SERVICE_HOME)
-  :rules:      reinstall filtron rules $FILTRON_RULES
-install
-  :check:      check the filtron installation
-reinstall:
-  :all:        runs 'install/remove all'
-update filtron
-  Update filtron installation ($SERVICE_HOME)
-activate service
-  activate and start service daemon (systemd unit)
-deactivate service
-  stop and deactivate service daemon (systemd unit)
-inspect service
-  show service status and log
-option
-  set one of the available options
-apache (${PUBLIC_URL})
-  :install: apache site with a reverse proxy (ProxyPass)
-  :remove:  apache site ${APACHE_FILTRON_SITE}
-nginx (${PUBLIC_URL})
-  :install: nginx site with a reverse proxy (ProxyPass)
-  :remove:  nginx site ${NGINX_FILTRON_SITE}
-filtron rules: ${FILTRON_RULES_TEMPLATE}
----- sourced ${DOT_CONFIG} :
-  SERVICE_USER        : ${SERVICE_USER}
-  SERVICE_HOME        : ${SERVICE_HOME}
-  FILTRON_TARGET      : ${FILTRON_TARGET}
-  FILTRON_API         : ${FILTRON_API}
-  FILTRON_LISTEN      : ${FILTRON_LISTEN}
-  FILTRON_URL_PATH    : ${FILTRON_URL_PATH}
+remove all     : drop all components of the filtron service
+apache remove  : drop apache site ${APACHE_FILTRON_SITE}
+nginx  remove  : drop nginx site ${NGINX_FILTRON_SITE}
 EOF
 EOF
 
 
-    install_log_searx_instance
     [[ -n ${1} ]] &&  err_msg "$1"
     [[ -n ${1} ]] &&  err_msg "$1"
 }
 }
 
 
 main() {
 main() {
-    required_commands \
-        sudo install git wget curl \
-        || exit
-
     local _usage="unknown or missing $1 command $2"
     local _usage="unknown or missing $1 command $2"
 
 
     case $1 in
     case $1 in
-        --getenv)  var="$2"; echo "${!var}"; exit 0;;
         -h|--help) usage; exit 0;;
         -h|--help) usage; exit 0;;
-
-        shell)
-            sudo_or_exit
-            interactive_shell "${SERVICE_USER}"
-            ;;
-        inspect)
-            case $2 in
-                service)
-                    sudo_or_exit
-                    inspect_service
-                    ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        reinstall)
-            rst_title "re-install $SERVICE_NAME" part
-            sudo_or_exit
-            case $2 in
-                all)
-                    remove_all
-                    install_all
-                    ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        install)
-            rst_title "$SERVICE_NAME" part
-            sudo_or_exit
-            case $2 in
-                check)
-                    rst_title "Check filtron installation" part
-                    install_check
-                    ;;
-                all) install_all ;;
-                user) assert_user ;;
-                rules)
-                    install_rules
-                    systemd_restart_service "${SERVICE_NAME}"
-                    ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        update)
-            sudo_or_exit
-            case $2 in
-                filtron) update_filtron ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
         remove)
         remove)
             sudo_or_exit
             sudo_or_exit
             case $2 in
             case $2 in
                 all) remove_all;;
                 all) remove_all;;
-                user) drop_service_account "${SERVICE_USER}" ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        activate)
-            sudo_or_exit
-            case $2 in
-                service)  systemd_activate_service "${SERVICE_NAME}" ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        deactivate)
-            sudo_or_exit
-            case $2 in
-                service)  systemd_deactivate_service "${SERVICE_NAME}" ;;
                 *) usage "$_usage"; exit 42;;
                 *) usage "$_usage"; exit 42;;
             esac ;;
             esac ;;
         apache)
         apache)
             sudo_or_exit
             sudo_or_exit
             case $2 in
             case $2 in
-                install) install_apache_site ;;
                 remove) remove_apache_site ;;
                 remove) remove_apache_site ;;
                 *) usage "$_usage"; exit 42;;
                 *) usage "$_usage"; exit 42;;
             esac ;;
             esac ;;
         nginx)
         nginx)
             sudo_or_exit
             sudo_or_exit
             case $2 in
             case $2 in
-                install) install_nginx_site ;;
                 remove) remove_nginx_site ;;
                 remove) remove_nginx_site ;;
                 *) usage "$_usage"; exit 42;;
                 *) usage "$_usage"; exit 42;;
             esac ;;
             esac ;;
-        option)
-            sudo_or_exit
-            case $2 in
-                debug-on)  echo; enable_debug ;;
-                debug-off)  echo; disable_debug ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        doc) rst-doc ;;
         *) usage "unknown or missing command $1"; exit 42;;
         *) usage "unknown or missing command $1"; exit 42;;
     esac
     esac
 }
 }
 
 
-install_all() {
-    rst_title "Install $SERVICE_NAME (service)"
-    assert_user
-    wait_key
-    go.golang "${GO_VERSION}" "${SERVICE_USER}"
-    wait_key
-    install_filtron
-    install_rules
-    wait_key
-    systemd_install_service "${SERVICE_NAME}" "${SERVICE_SYSTEMD_UNIT}"
-    wait_key
-    echo
-    if ! service_is_available "http://${FILTRON_LISTEN}" ; then
-        err_msg "Filtron is not listening on: http://${FILTRON_LISTEN}"
-    fi
-    if apache_is_installed; then
-        info_msg "Apache is installed on this host."
-        if ask_yn "Do you want to install a reverse proxy (ProxyPass)" Yn; then
-            install_apache_site
-        fi
-    elif nginx_is_installed; then
-        info_msg "nginx is installed on this host."
-        if ask_yn "Do you want to install a reverse proxy (ProxyPass)" Yn; then
-            install_nginx_site
-        fi
-    fi
-    if ask_yn "Do you want to inspect the installation?" Ny; then
-        inspect_service
-    fi
-
-}
-
-install_check() {
-
-    if service_account_is_available "$SERVICE_USER"; then
-        info_msg "service account $SERVICE_USER available."
-    else
-        err_msg "service account $SERVICE_USER not available!"
-    fi
-    if go_is_available "$SERVICE_USER"; then
-        info_msg "~$SERVICE_USER: go is installed"
-    else
-        err_msg "~$SERVICE_USER: go is not installed"
-    fi
-    if filtron_is_installed; then
-        info_msg "~$SERVICE_USER: filtron app is installed"
-    else
-        err_msg "~$SERVICE_USER: filtron app is not installed!"
-    fi
-
-    if ! service_is_available "http://${FILTRON_API}"; then
-        err_msg "API not available at: http://${FILTRON_API}"
-    fi
-
-    if ! service_is_available "http://${FILTRON_LISTEN}" ; then
-        err_msg "Filtron is not listening on: http://${FILTRON_LISTEN}"
-    fi
-
-    if service_is_available "http://${FILTRON_TARGET}" ; then
-        info_msg "Filtron's target is available at: http://${FILTRON_TARGET}"
-    fi
-
-    if ! service_is_available "${PUBLIC_URL}"; then
-        warn_msg "Public service at ${PUBLIC_URL} is not available!"
-        if ! in_container; then
-            warn_msg "Check if public name is correct and routed or use the public IP from above."
-        fi
-    fi
-
-    if [[ "${GO_VERSION}" > "$(go_version)" ]]; then
-        warn_msg "golang ($(go_version)) needs to be $GO_VERSION at least"
-        warn_msg "you need to reinstall $SERVICE_USER --> $0 reinstall all"
-    else
-        info_msg "golang $(go_version) is installed (min needed is: $GO_VERSION)"
-    fi
-
-    if [ -f "${APACHE_SITES_AVAILABLE}/searx.conf" ]; then
-        warn_msg "old searx.conf apache site exists"
-    fi
-
-    if [ -f "${NGINX_APPS_AVAILABLE}/searx.conf" ]; then
-        warn_msg "old searx.conf nginx site exists"
-    fi
-
-}
-
-go_version(){
-    go.version "${SERVICE_USER}"
-}
-
 remove_all() {
 remove_all() {
     rst_title "De-Install $SERVICE_NAME (service)"
     rst_title "De-Install $SERVICE_NAME (service)"
 
 
@@ -321,219 +81,6 @@ installations that were installed with this script."
     fi
     fi
 }
 }
 
 
-assert_user() {
-    rst_title "user $SERVICE_USER" section
-    echo
-    tee_stderr 1 <<EOF | bash | prefix_stdout
-useradd --shell /bin/bash --system \
- --home-dir "$SERVICE_HOME" \
- --comment 'Reverse HTTP proxy to filter requests' $SERVICE_USER
-mkdir "$SERVICE_HOME"
-chown -R "$SERVICE_GROUP:$SERVICE_GROUP" "$SERVICE_HOME"
-groups $SERVICE_USER
-EOF
-    SERVICE_HOME="$(sudo -i -u "$SERVICE_USER" echo \$HOME)"
-    export SERVICE_HOME
-    echo "export SERVICE_HOME=$SERVICE_HOME"
-
-    tee_stderr <<EOF | sudo -i -u "$SERVICE_USER"
-touch "$GO_ENV"
-grep -qFs -- 'source "$GO_ENV"' ~/.profile || echo 'source "$GO_ENV"' >> ~/.profile
-EOF
-}
-
-filtron_is_installed() {
-    [[ -f $SERVICE_HOME/go-apps/bin/filtron ]]
-}
-
-install_filtron() {
-    rst_title "Install filtron in user's ~/go-apps" section
-    echo
-    go.install github.com/searxng/filtron@latest "${SERVICE_USER}"
-}
-
-update_filtron() {
-    rst_title "Update filtron" section
-    echo
-    go.install github.com/searxng/filtron@latest "${SERVICE_USER}"
-}
-
-install_rules() {
-    rst_title "Install filtron rules"
-    echo
-    if [[ ! -f "${FILTRON_RULES}" ]]; then
-        info_msg "install rules ${FILTRON_RULES_TEMPLATE}"
-        info_msg "  --> ${FILTRON_RULES}"
-        mkdir -p "$(dirname "${FILTRON_RULES}")"
-        cp "${FILTRON_RULES_TEMPLATE}" "${FILTRON_RULES}"
-        return
-    fi
-
-    if cmp --silent "${FILTRON_RULES}" "${FILTRON_RULES_TEMPLATE}"; then
-        info_msg "${FILTRON_RULES} is up to date with"
-        info_msg "${FILTRON_RULES_TEMPLATE}"
-        return
-    fi
-
-    rst_para "Diff between origin's rules file (+) and current (-):"
-    echo "${FILTRON_RULES}" "${FILTRON_RULES_TEMPLATE}"
-    $DIFF_CMD "${FILTRON_RULES}" "${FILTRON_RULES_TEMPLATE}"
-
-    local action
-    choose_one action "What should happen to the rules file? " \
-           "keep configuration unchanged" \
-           "use origin rules" \
-           "start interactive shell"
-    case $action in
-        "keep configuration unchanged")
-            info_msg "leave rules file unchanged"
-            ;;
-        "use origin rules")
-            backup_file "${FILTRON_RULES}"
-            info_msg "install origin rules"
-            cp "${FILTRON_RULES_TEMPLATE}" "${FILTRON_RULES}"
-            ;;
-        "start interactive shell")
-            backup_file "${FILTRON_RULES}"
-            echo -e "// exit with [${_BCyan}CTRL-D${_creset}]"
-            sudo -H -i
-            rst_para 'Diff between new rules file (-) and current (+):'
-            echo
-            $DIFF_CMD "${FILTRON_RULES_TEMPLATE}" "${FILTRON_RULES}"
-            wait_key
-            ;;
-    esac
-}
-
-inspect_service() {
-
-    rst_title "service status & log"
-
-    cat <<EOF
-
-sourced ${DOT_CONFIG} :
-  SERVICE_USER        : ${SERVICE_USER}
-  SERVICE_HOME        : ${SERVICE_HOME}
-  FILTRON_TARGET      : ${FILTRON_TARGET}
-  FILTRON_API         : ${FILTRON_API}
-  FILTRON_LISTEN      : ${FILTRON_LISTEN}
-  FILTRON_URL_PATH    : ${FILTRON_URL_PATH}
-EOF
-    install_log_searx_instance
-
-    install_check
-
-    if in_container; then
-        lxc_suite_info
-    else
-        info_msg "public URL   --> ${PUBLIC_URL}"
-        info_msg "internal URL --> http://${FILTRON_LISTEN}"
-    fi
-
-
-    local _debug_on
-    if ask_yn "Enable filtron debug mode?"; then
-        enable_debug
-        _debug_on=1
-    fi
-    echo
-    systemctl --no-pager -l status "${SERVICE_NAME}"
-    echo
-
-    info_msg "public URL --> ${PUBLIC_URL}"
-    # shellcheck disable=SC2059
-    printf "// use ${_BCyan}CTRL-C${_creset} to stop monitoring the log"
-    read -r -s -n1 -t 5
-    echo
-    while true;  do
-        trap break 2
-        journalctl -f -u "${SERVICE_NAME}"
-    done
-
-    if [[ $_debug_on == 1 ]]; then
-        disable_debug
-    fi
-    return 0
-}
-
-
-enable_debug() {
-    info_msg "try to enable debug mode ..."
-    python <<EOF
-import sys, json
-
-debug = {
-    u'name': u'debug request'
-    , u'filters': []
-    , u'interval': 0
-    , u'limit': 0
-    , u'actions': [{u'name': u'log'}]
-}
-
-with open('$FILTRON_RULES') as rules:
-    j = json.load(rules)
-
-pos = None
-for i in range(len(j)):
-    if j[i].get('name') == 'debug request':
-        pos = i
-        break
-if pos is not None:
-    j[pos] = debug
-else:
-    j.append(debug)
-with open('$FILTRON_RULES', 'w') as rules:
-    json.dump(j, rules, indent=2, sort_keys=True)
-
-EOF
-    systemctl restart "${SERVICE_NAME}.service"
-}
-
-disable_debug() {
-    info_msg "try to disable debug mode ..."
-    python <<EOF
-import sys, json
-with open('$FILTRON_RULES') as rules:
-    j = json.load(rules)
-
-pos = None
-for i in range(len(j)):
-    if j[i].get('name') == 'debug request':
-        pos = i
-        break
-if pos is not None:
-    del j[pos]
-    with open('$FILTRON_RULES', 'w') as rules:
-         json.dump(j, rules, indent=2, sort_keys=True)
-EOF
-    systemctl restart "${SERVICE_NAME}.service"
-}
-
-install_apache_site() {
-
-    rst_title "Install Apache site $APACHE_FILTRON_SITE"
-
-    rst_para "\
-This installs a reverse proxy (ProxyPass) into apache site (${APACHE_FILTRON_SITE})"
-
-    ! apache_is_installed && info_msg "Apache is not installed."
-
-    if ! ask_yn "Do you really want to continue?" Yn; then
-        return
-    else
-        install_apache
-    fi
-
-    "${REPO_ROOT}/utils/searx.sh" install uwsgi
-
-    apache_install_site --variant=filtron "${APACHE_FILTRON_SITE}"
-
-    info_msg "testing public url .."
-    if ! service_is_available "${PUBLIC_URL}"; then
-        err_msg "Public service at ${PUBLIC_URL} is not available!"
-    fi
-}
-
 remove_apache_site() {
 remove_apache_site() {
 
 
     rst_title "Remove Apache site $APACHE_FILTRON_SITE"
     rst_title "Remove Apache site $APACHE_FILTRON_SITE"
@@ -551,35 +98,6 @@ This removes apache site ${APACHE_FILTRON_SITE}."
 
 
 }
 }
 
 
-install_nginx_site() {
-
-    rst_title "Install nginx site $NGINX_FILTRON_SITE"
-
-    rst_para "\
-This installs a reverse proxy (ProxyPass) into nginx site (${NGINX_FILTRON_SITE})"
-
-    ! nginx_is_installed && info_msg "nginx is not installed."
-
-    if ! ask_yn "Do you really want to continue?" Yn; then
-        return
-    else
-        install_nginx
-    fi
-
-    "${REPO_ROOT}/utils/searx.sh" install uwsgi
-
-    # shellcheck disable=SC2034
-    SEARXNG_SRC=$("${REPO_ROOT}/utils/searx.sh" --getenv SEARXNG_SRC)
-    # shellcheck disable=SC2034
-    SEARXNG_URL_PATH=$("${REPO_ROOT}/utils/searx.sh" --getenv SEARXNG_URL_PATH)
-    nginx_install_app --variant=filtron "${NGINX_FILTRON_SITE}"
-
-    info_msg "testing public url .."
-    if ! service_is_available "${PUBLIC_URL}"; then
-        err_msg "Public service at ${PUBLIC_URL} is not available!"
-    fi
-}
-
 remove_nginx_site() {
 remove_nginx_site() {
 
 
     rst_title "Remove nginx site $NGINX_FILTRON_SITE"
     rst_title "Remove nginx site $NGINX_FILTRON_SITE"
@@ -593,35 +111,8 @@ This removes nginx site ${NGINX_FILTRON_SITE}."
         return
         return
     fi
     fi
 
 
-    nginx_remove_site "$FILTRON_FILTRON_SITE"
-
-}
-
-
-rst-doc() {
-
-    eval "echo \"$(< "${REPO_ROOT}/docs/build-templates/filtron.rst")\""
-
-    echo -e "\n.. START install systemd unit"
-    cat <<EOF
-.. tabs::
-
-   .. group-tab:: systemd
-
-      .. code:: bash
-
-EOF
-    eval "echo \"$(< "${TEMPLATES}/${SERVICE_SYSTEMD_UNIT}")\"" | prefix_stdout "         "
-    echo -e "\n.. END install systemd unit"
+    nginx_remove_app "$FILTRON_FILTRON_SITE"
 
 
-    # for DIST_NAME in ubuntu-20.04 arch fedora centos; do
-    #     (
-    #         DIST_ID=${DIST_NAME%-*}
-    #         DIST_VERS=${DIST_NAME#*-}
-    #         [[ $DIST_VERS =~ $DIST_ID ]] && DIST_VERS=
-    #         # ...
-    #     )
-    # done
 }
 }
 
 
 # ----------------------------------------------------------------------------
 # ----------------------------------------------------------------------------

+ 0 - 208
utils/lib_install.sh

@@ -1,208 +0,0 @@
-#!/usr/bin/env bash
-# SPDX-License-Identifier: AGPL-3.0-or-later
-
-# https://github.com/koalaman/shellcheck/issues/356#issuecomment-853515285
-# shellcheck source=utils/lib.sh
-. /dev/null
-
-# Initialize installation procedures:
-#
-# - Modified source_dot_config function that
-#   - loads .config.sh from an existing installation (at SEARXNG_SRC).
-#   - initialize **SEARX_SRC_INIT_FILES**
-# - functions like:
-#   - install_log_searx_instance()
-#   - install_searx_get_state()
-#
-# usage:
-#   source lib_install.sh
-#
-# **Installation scripts**
-#
-# The utils/lib_install.sh is sourced by the installations scripts:
-#
-# - utils/searx.sh
-# - utils/morty.sh
-# - utils/filtron.sh
-#
-# If '${SEARXNG_SRC}/.config.sh' exists, the modified source_dot_config() function
-# loads this configuration (instead of './.config.sh').
-
-# **SEARX_SRC_INIT_FILES**
-#
-# Array of file names to sync into a installation at $SEARXNG_SRC.  The file names
-# are relative to the $REPO_ROOT.  Set by function init_SEARXNG_SRC_INIT_FILES().
-# Most often theses are files like:
-# - .config.sh
-# - searx/settings.yml
-# - utils/brand.env
-# - ...
-
-
-SEARX_SRC_INIT_FILES=()
-
-eval orig_"$(declare -f source_dot_config)"
-
-source_dot_config() {
-
-    # Modified source_dot_config function that
-    # - loads .config.sh from an existing installation (at SEARXNG_SRC).
-    # - initialize SEARX_SRC_INIT_FILES
-
-    if [ -z "$eval_SEARXNG_SRC" ]; then
-        export eval_SEARXNG_SRC='true'
-        SEARXNG_SRC=$("${REPO_ROOT}/utils/searx.sh" --getenv SEARXNG_SRC)
-        SEARXNG_PYENV=$("${REPO_ROOT}/utils/searx.sh" --getenv SEARXNG_PYENV)
-        SEARXNG_SETTINGS_PATH=$("${REPO_ROOT}/utils/searx.sh" --getenv SEARXNG_SETTINGS_PATH)
-        if [ ! -r "${SEARXNG_SRC}" ]; then
-            info_msg "not yet cloned: ${SEARXNG_SRC}"
-            orig_source_dot_config
-            return 0
-        fi
-        info_msg "using instance at: ${SEARXNG_SRC}"
-
-        # set and log DOT_CONFIG
-        if [ -r "${SEARXNG_SRC}/.config.sh" ]; then
-            info_msg "switching to ${SEARXNG_SRC}/.config.sh"
-            DOT_CONFIG="${SEARXNG_SRC}/.config.sh"
-        else
-            info_msg "using local config: ${DOT_CONFIG}"
-        fi
-        init_SEARX_SRC_INIT_FILES
-    fi
-}
-
-init_SEARX_SRC_INIT_FILES(){
-    # init environment SEARX_SRC_INIT_FILES
-
-    # Monitor modified files in the working-tree from the local repository, only
-    # if the local file differs to the corresponding file in the instance.  Most
-    # often theses are files like:
-    #
-    #  - .config.sh
-    #  - searx/settings.yml
-    #  - utils/brand.env
-    #  - ...
-
-    # keep list empty if there is no installation
-    SEARX_SRC_INIT_FILES=()
-    if [ ! -r "$SEARXNG_SRC" ]; then
-        return 0
-    fi
-
-    local fname
-    local msg=""
-    local _prefix=""
-    if [[ -n ${SUDO_USER} ]]; then
-        _prefix="sudo -u ${SUDO_USER}"
-    fi
-
-    # Monitor local modified files from the repository, only if the local file
-    # differs to the corresponding file in the instance
-
-    while IFS= read -r fname; do
-        if [ -z "$fname" ]; then
-            continue
-        fi
-        if [ -r "${SEARXNG_SRC}/${fname}" ]; then
-            # diff  "${REPO_ROOT}/${fname}" "${SEARXNG_SRC}/${fname}"
-            if ! cmp --silent "${REPO_ROOT}/${fname}" "${SEARXNG_SRC}/${fname}"; then
-                SEARX_SRC_INIT_FILES+=("${fname}")
-                info_msg "local clone (workingtree), modified file: ./$fname"
-                msg="to update use:  sudo -H ./utils/searx.sh install init-src"
-            fi
-        fi
-    done <<< "$($_prefix git diff --name-only)"
-    [ -n "$msg" ] &&  info_msg "$msg"
-}
-
-install_log_searx_instance() {
-
-    echo -e "---- SearXNG instance setup ${_BBlue}(status: $(install_searx_get_state))${_creset}"
-    echo -e "  SEARXNG_SETTINGS_PATH : ${_BBlue}${SEARXNG_SETTINGS_PATH}${_creset}"
-    echo -e "  SEARXNG_PYENV         : ${_BBlue}${SEARXNG_PYENV}${_creset}"
-    echo -e "  SEARXNG_SRC           : ${_BBlue}${SEARXNG_SRC:-none}${_creset}"
-    echo -e "  SEARXNG_URL         : ${_BBlue}${SEARXNG_URL:-none}${_creset}"
-
-    if in_container; then
-        # SearXNG is listening on 127.0.0.1 and not available from outside container
-        # in containers the service is listening on 0.0.0.0 (see lxc-searxng.env)
-        echo -e "---- container setup"
-        echo -e "  ${_BBlack}HINT:${_creset} SearXNG only listen on loopback device" \
-             "${_BBlack}inside${_creset} the container."
-        for ip in $(global_IPs) ; do
-            if [[ $ip =~ .*:.* ]]; then
-                echo "  container (IPv6): [${ip#*|}]"
-            else
-                # IPv4:
-                echo "  container (IPv4): ${ip#*|}"
-            fi
-        done
-    fi
-}
-
-install_searx_get_state(){
-
-    # usage: install_searx_get_state
-    #
-    # Prompts a string indicating the status of the installation procedure
-    #
-    # missing-searx-clone:
-    #    There is no clone at ${SEARXNG_SRC}
-    # missing-searx-pyenv:
-    #    There is no pyenv in ${SEARXNG_PYENV}
-    # installer-modified:
-    #    There are files modified locally in the installer (clone),
-    #    see ${SEARX_SRC_INIT_FILES} description.
-    # python-installed:
-    #    Scripts can be executed in instance's environment
-    #    - user:  ${SERVICE_USER}
-    #    - pyenv: ${SEARXNG_PYENV}
-
-    if [ -f /etc/searx/settings.yml ]; then
-        err_msg "settings.yml in /etc/searx/ is deprecated, move file to folder /etc/searxng/"
-    fi
-
-    if ! [ -r "${SEARXNG_SRC}" ]; then
-        echo "missing-searx-clone"
-        return
-    fi
-    if ! [ -f "${SEARXNG_PYENV}/bin/activate" ]; then
-        echo "missing-searx-pyenv"
-        return
-    fi
-    if ! [ -r "${SEARXNG_SETTINGS_PATH}" ]; then
-        echo "missing-settings"
-        return
-    fi
-    if ! [ ${#SEARX_SRC_INIT_FILES[*]} -eq 0 ]; then
-        echo "installer-modified"
-        return
-    fi
-    echo "python-installed"
-}
-
-# Initialization of the installation procedure
-# --------------------------------------------
-
-# shellcheck source=utils/brand.env
-source "${REPO_ROOT}/utils/brand.env"
-
-# SEARXNG_URL aka PUBLIC_URL: the public URL of the instance (e.g.
-# "https://example.org/searx").  The value is taken from environment $SEARXNG_URL
-# in ./utils/brand.env.  This variable is a empty string if server.base_url in
-# the settings.yml is set to 'false'.
-
-SEARXNG_URL="${SEARXNG_URL:-http://$(uname -n)}"
-if in_container; then
-    # hint: Linux containers do not have DNS entries, lets use IPs
-    SEARXNG_URL="http://$(primary_ip)"
-fi
-# shellcheck disable=SC2034
-PUBLIC_URL="${SEARXNG_URL}"
-
-source_dot_config
-
-# shellcheck source=utils/lxc-searxng.env
-source "${REPO_ROOT}/utils/lxc-searxng.env"
-in_container && lxc_set_suite_env

+ 0 - 1
utils/lxc.sh

@@ -4,7 +4,6 @@
 
 
 # shellcheck source=utils/lib.sh
 # shellcheck source=utils/lib.sh
 source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
 source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
-source_dot_config
 # shellcheck source=utils/brand.env
 # shellcheck source=utils/brand.env
 source "${REPO_ROOT}/utils/brand.env"
 source "${REPO_ROOT}/utils/brand.env"
 
 

+ 7 - 450
utils/morty.sh

@@ -3,10 +3,6 @@
 
 
 # shellcheck source=utils/lib.sh
 # shellcheck source=utils/lib.sh
 source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
 source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
-# shellcheck source=utils/lib_go.sh
-source "${REPO_ROOT}/utils/lib_go.sh"
-# shellcheck source=utils/lib_install.sh
-source "${REPO_ROOT}/utils/lib_install.sh"
 
 
 # ----------------------------------------------------------------------------
 # ----------------------------------------------------------------------------
 # config
 # config
@@ -16,24 +12,9 @@ MORTY_LISTEN="${MORTY_LISTEN:-127.0.0.1:3000}"
 PUBLIC_URL_PATH_MORTY="${PUBLIC_URL_PATH_MORTY:-/morty/}"
 PUBLIC_URL_PATH_MORTY="${PUBLIC_URL_PATH_MORTY:-/morty/}"
 PUBLIC_URL_MORTY="${PUBLIC_URL_MORTY:-$(echo "$PUBLIC_URL" |  sed -e's,^\(.*://[^/]*\).*,\1,g')${PUBLIC_URL_PATH_MORTY}}"
 PUBLIC_URL_MORTY="${PUBLIC_URL_MORTY:-$(echo "$PUBLIC_URL" |  sed -e's,^\(.*://[^/]*\).*,\1,g')${PUBLIC_URL_PATH_MORTY}}"
 
 
-# shellcheck disable=SC2034
-MORTY_TIMEOUT=5
-
 SERVICE_NAME="morty"
 SERVICE_NAME="morty"
 SERVICE_USER="${SERVICE_USER:-${SERVICE_NAME}}"
 SERVICE_USER="${SERVICE_USER:-${SERVICE_NAME}}"
-SERVICE_HOME_BASE="${SERVICE_HOME_BASE:-/usr/local}"
-SERVICE_HOME="${SERVICE_HOME_BASE}/${SERVICE_USER}"
 SERVICE_SYSTEMD_UNIT="${SYSTEMD_UNITS}/${SERVICE_NAME}.service"
 SERVICE_SYSTEMD_UNIT="${SYSTEMD_UNITS}/${SERVICE_NAME}.service"
-# shellcheck disable=SC2034
-SERVICE_GROUP="${SERVICE_USER}"
-# shellcheck disable=SC2034
-SERVICE_ENV_DEBUG=false
-
-GO_ENV="${SERVICE_HOME}/.go_env"
-GO_VERSION="go1.17.2"
-
-# shellcheck disable=SC2034
-CONFIG_FILES=()
 
 
 # Apache Settings
 # Apache Settings
 
 
@@ -47,267 +28,45 @@ usage() {
     # shellcheck disable=SC1117
     # shellcheck disable=SC1117
     cat <<EOF
     cat <<EOF
 usage::
 usage::
-  $(basename "$0") shell
-  $(basename "$0") install    [all|check|user]
-  $(basename "$0") reinstall  all
-  $(basename "$0") update     [morty]
-  $(basename "$0") remove     [all]
-  $(basename "$0") activate   [service]
-  $(basename "$0") deactivate [service]
-  $(basename "$0") inspect    [service]
-  $(basename "$0") option     [debug-on|debug-off|new-key]
-  $(basename "$0") apache     [install|remove]
-  $(basename "$0") nginx      [install|remove]
-  $(basename "$0") info       [searx]
+  $(basename "$0") remove all
+  $(basename "$0") apache remove
+  $(basename "$0") nginx  remove
 
 
-shell
-  start interactive shell from user ${SERVICE_USER}
-install / remove
-  :all:        complete setup of morty service
-  :user:       add/remove service user '$SERVICE_USER' ($SERVICE_HOME)
-install
-  :check:      check the morty installation
-reinstall:
-  :all:        runs 'install/remove all'
-update morty
-  Update morty installation ($SERVICE_HOME)
-activate service
-  activate and start service daemon (systemd unit)
-deactivate service
-  stop and deactivate service daemon (systemd unit)
-inspect service
-  show service status and log
-option
-  set one of the available options
-  :new-key:   set new morty key
-apache : ${PUBLIC_URL_MORTY}
-  :install: apache site with a reverse proxy (ProxyPass)
-  :remove:  apache site ${APACHE_MORTY_SITE}
-nginx (${PUBLIC_URL_MORTY})
-  :install: nginx site with a reverse proxy (ProxyPass)
-  :remove:  nginx site ${NGINX_MORTY_SITE}
-----
-sourced ${DOT_CONFIG} :
-  SERVICE_USER        : ${SERVICE_USER}
-  SERVICE_HOME        : ${SERVICE_HOME}
-  PUBLIC_URL_MORTY:   : ${PUBLIC_URL_MORTY}
-  MORTY_LISTEN:       : ${MORTY_LISTEN}
+remove all     : drop all components of the morty service
+apache remove  : drop apache site ${APACHE_MORTY_SITE}
+nginx  remove  : drop nginx site ${NGINX_MORTY_SITE}
 EOF
 EOF
 
 
-    install_log_searx_instance
-    if in_container; then
-        # in containers the service is listening on 0.0.0.0 (see lxc-searxng.env)
-        for ip in $(global_IPs) ; do
-            if [[ $ip =~ .*:.* ]]; then
-                echo "  container URL (IPv6): http://[${ip#*|}]:3000/"
-            else
-                # IPv4:
-                echo "  container URL (IPv4): http://${ip#*|}:3000/"
-            fi
-        done
-    fi
-    echo
-    info_searx
-
     [[ -n ${1} ]] &&  err_msg "$1"
     [[ -n ${1} ]] &&  err_msg "$1"
 }
 }
 
 
-info_searx() {
-    # shellcheck disable=SC1117
-    cat <<EOF
-To activate result and image proxy in SearXNG read:
-  https://docs.searxng.org/admin/morty.html
-Check settings in file ${SEARXNG_SETTINGS_PATH} ...
-  result_proxy:
-      url : ${PUBLIC_URL_MORTY}
-  server:
-      image_proxy : True
-EOF
-}
-
 main() {
 main() {
-    required_commands \
-        sudo install git wget curl \
-        || exit
-
     local _usage="ERROR: unknown or missing $1 command $2"
     local _usage="ERROR: unknown or missing $1 command $2"
 
 
     case $1 in
     case $1 in
-        --getenv)  var="$2"; echo "${!var}"; exit 0;;
         -h|--help) usage; exit 0;;
         -h|--help) usage; exit 0;;
-
-        shell)
-            sudo_or_exit
-            interactive_shell "${SERVICE_USER}"
-            ;;
-        inspect)
-            case $2 in
-                service)
-                    sudo_or_exit
-                    inspect_service
-                    ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        reinstall)
-            rst_title "re-install $SERVICE_NAME" part
-            sudo_or_exit
-            case $2 in
-                all)
-                    remove_all
-                    install_all
-                    ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        install)
-            rst_title "$SERVICE_NAME" part
-            sudo_or_exit
-            case $2 in
-                all) install_all ;;
-                check)
-                    rst_title "Check morty installation" part
-                    install_check
-                    ;;
-                user) assert_user ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        update)
-            sudo_or_exit
-            case $2 in
-                morty) update_morty ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
         remove)
         remove)
             sudo_or_exit
             sudo_or_exit
             case $2 in
             case $2 in
                 all) remove_all;;
                 all) remove_all;;
-                user) drop_service_account "${SERVICE_USER}" ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        activate)
-            sudo_or_exit
-            case $2 in
-                service)  systemd_activate_service "${SERVICE_NAME}" ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        deactivate)
-            sudo_or_exit
-            case $2 in
-                service)  systemd_deactivate_service "${SERVICE_NAME}" ;;
                 *) usage "$_usage"; exit 42;;
                 *) usage "$_usage"; exit 42;;
             esac ;;
             esac ;;
         apache)
         apache)
             sudo_or_exit
             sudo_or_exit
             case $2 in
             case $2 in
-                install) install_apache_site ;;
                 remove) remove_apache_site ;;
                 remove) remove_apache_site ;;
                 *) usage "$_usage"; exit 42;;
                 *) usage "$_usage"; exit 42;;
             esac ;;
             esac ;;
         nginx)
         nginx)
             sudo_or_exit
             sudo_or_exit
             case $2 in
             case $2 in
-                install) install_nginx_site ;;
                 remove) remove_nginx_site ;;
                 remove) remove_nginx_site ;;
                 *) usage "$_usage"; exit 42;;
                 *) usage "$_usage"; exit 42;;
             esac ;;
             esac ;;
-        info)
-            case $2 in
-                searx) info_searx ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        option)
-            sudo_or_exit
-            case $2 in
-                new-key) set_new_key ;;
-                debug-on)  enable_debug ;;
-                debug-off)  disable_debug ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        doc) rst-doc ;;
         *) usage "ERROR: unknown or missing command $1"; exit 42;;
         *) usage "ERROR: unknown or missing command $1"; exit 42;;
     esac
     esac
 }
 }
 
 
-install_all() {
-
-    MORTY_KEY="$(head -c 32 /dev/urandom | base64)"
-
-    rst_title "Install $SERVICE_NAME (service)"
-    assert_user
-    wait_key
-    go.golang "${GO_VERSION}" "${SERVICE_USER}"
-    wait_key
-    install_morty
-    wait_key
-    systemd_install_service "${SERVICE_NAME}" "${SERVICE_SYSTEMD_UNIT}"
-    wait_key
-    if ! service_is_available "http://${MORTY_LISTEN}" ; then
-        err_msg "Morty is not listening on: http://${MORTY_LISTEN}"
-    fi
-    if apache_is_installed; then
-        info_msg "Apache is installed on this host."
-        if ask_yn "Do you want to install a reverse proxy (ProxyPass)" Yn; then
-            install_apache_site
-        fi
-    elif nginx_is_installed; then
-        info_msg "nginx is installed on this host."
-        if ask_yn "Do you want to install a reverse proxy (ProxyPass)" Yn; then
-            install_nginx_site
-        fi
-    fi
-    info_searx
-    if ask_yn "Add image and result proxy to SearXNG settings.yml?" Yn; then
-        "${REPO_ROOT}/utils/searx.sh" option result-proxy "${PUBLIC_URL_MORTY}" "${MORTY_KEY}"
-        "${REPO_ROOT}/utils/searx.sh" option image-proxy-on
-    fi
-
-    if ask_yn "Do you want to inspect the installation?" Ny; then
-        inspect_service
-    fi
-
-}
-
-install_check() {
-
-    if service_account_is_available "$SERVICE_USER"; then
-        info_msg "service account $SERVICE_USER available."
-    else
-        err_msg "service account $SERVICE_USER not available!"
-    fi
-    if go_is_available "$SERVICE_USER"; then
-        info_msg "~$SERVICE_USER: go is installed"
-    else
-        err_msg "~$SERVICE_USER: go is not installed"
-    fi
-    if morty_is_installed; then
-        info_msg "~$SERVICE_USER: morty app is installed"
-    else
-        err_msg "~$SERVICE_USER: morty app is not installed!"
-    fi
-
-    if ! service_is_available "http://${MORTY_LISTEN}" ; then
-        err_msg "Morty is not listening on: http://${MORTY_LISTEN}"
-        echo -e "${_Green}stop with [${_BCyan}CTRL-C${_Green}] or .."
-        wait_key
-    fi
-
-    if ! service_is_available "${PUBLIC_URL_MORTY}"; then
-        warn_msg "Public service at ${PUBLIC_URL_MORTY} is not available!"
-        if ! in_container; then
-            warn_msg "Check if public name is correct and routed or use the public IP from above."
-        fi
-    fi
-
-    if [[ "${GO_VERSION}" > "$(go_version)" ]]; then
-        warn_msg "golang ($(go_version)) needs to be $GO_VERSION at least"
-        warn_msg "you need to reinstall $SERVICE_USER --> $0 reinstall all"
-    else
-        info_msg "golang $(go_version) is installed (min needed is: $GO_VERSION)"
-    fi
-}
-
-go_version(){
-    go.version "${SERVICE_USER}"
-}
 
 
 remove_all() {
 remove_all() {
     rst_title "De-Install $SERVICE_NAME (service)"
     rst_title "De-Install $SERVICE_NAME (service)"
@@ -321,152 +80,6 @@ installations that were installed with this script."
     fi
     fi
 }
 }
 
 
-assert_user() {
-    rst_title "user $SERVICE_USER" section
-    echo
-    tee_stderr 1 <<EOF | bash | prefix_stdout
-useradd --shell /bin/bash --system \
- --home-dir "$SERVICE_HOME" \
- --comment 'Web content sanitizer proxy' $SERVICE_USER
-mkdir "$SERVICE_HOME"
-chown -R "$SERVICE_GROUP:$SERVICE_GROUP" "$SERVICE_HOME"
-groups $SERVICE_USER
-EOF
-    SERVICE_HOME="$(sudo -i -u "$SERVICE_USER" echo \$HOME)"
-    export SERVICE_HOME
-    echo "export SERVICE_HOME=$SERVICE_HOME"
-
-    tee_stderr <<EOF | sudo -i -u "$SERVICE_USER"
-touch $GO_ENV
-grep -qFs -- 'source "$GO_ENV"' ~/.profile || echo 'source "$GO_ENV"' >> ~/.profile
-EOF
-}
-
-morty_is_installed() {
-    [[ -f $SERVICE_HOME/go-apps/bin/morty ]]
-}
-
-install_morty() {
-    rst_title "Install morty in user's ~/go-apps" section
-    echo
-    go.install github.com/asciimoo/morty@latest "${SERVICE_USER}"
-}
-
-update_morty() {
-    rst_title "Update morty" section
-    echo
-    go.install github.com/asciimoo/morty@latest "${SERVICE_USER}"
-}
-
-set_service_env_debug() {
-
-    # usage:  set_service_env_debug [false|true]
-
-    # shellcheck disable=SC2034
-    local SERVICE_ENV_DEBUG="${1:-false}"
-    if systemd_remove_service "${SERVICE_NAME}" "${SERVICE_SYSTEMD_UNIT}"; then
-        systemd_install_service "${SERVICE_NAME}" "${SERVICE_SYSTEMD_UNIT}"
-    fi
-}
-
-inspect_service() {
-
-    rst_title "service status & log"
-
-    cat <<EOF
-
-sourced ${DOT_CONFIG} :
-  SERVICE_USER        : ${SERVICE_USER}
-  SERVICE_HOME        : ${SERVICE_HOME}
-  PUBLIC_URL_MORTY:   : ${PUBLIC_URL_MORTY}
-  MORTY_LISTEN:       : ${MORTY_LISTEN}
-
-EOF
-    install_log_searx_instance
-
-    install_check
-
-    if in_container; then
-        lxc_suite_info
-    else
-        info_msg "public URL --> ${PUBLIC_URL_MORTY}"
-        info_msg "morty URL --> http://${MORTY_LISTEN}"
-    fi
-
-    local _debug_on
-    if ask_yn "Enable morty debug mode (needs reinstall of systemd service)?"; then
-        enable_debug
-        _debug_on=1
-    else
-        systemctl --no-pager -l status "${SERVICE_NAME}"
-    fi
-    echo
-
-    # shellcheck disable=SC2059
-    printf "// use ${_BCyan}CTRL-C${_creset} to stop monitoring the log"
-    read -r -s -n1 -t 5
-    echo
-    while true;  do
-        trap break 2
-        journalctl -f -u "${SERVICE_NAME}"
-    done
-
-    if [[ $_debug_on == 1 ]]; then
-        FORCE_SELECTION=Y disable_debug
-    fi
-    return 0
-}
-
-enable_debug() {
-    warn_msg "Do not enable debug in production environments!!"
-    info_msg "Enabling debug option needs to reinstall systemd service!"
-    set_service_env_debug true
-}
-
-disable_debug() {
-    info_msg "Disabling debug option needs to reinstall systemd service!"
-    set_service_env_debug false
-}
-
-
-set_new_key() {
-    rst_title "Set morty key"
-    echo
-
-    MORTY_KEY="$(head -c 32 /dev/urandom | base64)"
-    info_msg "morty key: '${MORTY_KEY}'"
-
-    warn_msg "this will need to reinstall services .."
-    MSG="${_Green}press any [${_BCyan}KEY${_Green}] to continue // stop with [${_BCyan}CTRL-C${_creset}]" wait_key
-
-    systemd_install_service "${SERVICE_NAME}" "${SERVICE_SYSTEMD_UNIT}"
-    "${REPO_ROOT}/utils/searx.sh" option result-proxy "${PUBLIC_URL_MORTY}" "${MORTY_KEY}"
-    "${REPO_ROOT}/utils/searx.sh" option image-proxy-on
-}
-
-
-install_apache_site() {
-
-    rst_title "Install Apache site $APACHE_MORTY_SITE"
-
-    rst_para "\
-This installs a reverse proxy (ProxyPass) into apache site (${APACHE_MORTY_SITE})"
-
-    ! apache_is_installed && err_msg "Apache is not installed."
-
-    if ! ask_yn "Do you really want to continue?" Yn; then
-        return
-    else
-        install_apache
-    fi
-
-    apache_install_site "${APACHE_MORTY_SITE}"
-
-    info_msg "testing public url .."
-    if ! service_is_available "${PUBLIC_URL_MORTY}"; then
-        err_msg "Public service at ${PUBLIC_URL_MORTY} is not available!"
-    fi
-}
 
 
 remove_apache_site() {
 remove_apache_site() {
 
 
@@ -484,35 +97,6 @@ This removes apache site ${APACHE_MORTY_SITE}."
     apache_remove_site "$APACHE_MORTY_SITE"
     apache_remove_site "$APACHE_MORTY_SITE"
 }
 }
 
 
-install_nginx_site() {
-
-    rst_title "Install nginx site $NGINX_MORTY_SITE"
-
-    rst_para "\
-This installs a reverse proxy (ProxyPass) into nginx site (${NGINX_MORTY_SITE})"
-
-    ! nginx_is_installed && err_msg "nginx is not installed."
-
-    if ! ask_yn "Do you really want to continue?" Yn; then
-        return
-    else
-        install_nginx
-    fi
-
-    "${REPO_ROOT}/utils/searx.sh" install uwsgi
-
-    # shellcheck disable=SC2034
-    SEARXNG_SRC=$("${REPO_ROOT}/utils/searx.sh" --getenv SEARXNG_SRC)
-    # shellcheck disable=SC2034
-    SEARXNG_URL_PATH=$("${REPO_ROOT}/utils/searx.sh" --getenv SEARXNG_URL_PATH)
-    nginx_install_app "${NGINX_MORTY_SITE}"
-
-    info_msg "testing public url .."
-    if ! service_is_available "${PUBLIC_URL_MORTY}"; then
-        err_msg "Public service at ${PUBLIC_URL_MORTY} is not available!"
-    fi
-}
-
 remove_nginx_site() {
 remove_nginx_site() {
 
 
     rst_title "Remove nginx site $NGINX_MORTY_SITE"
     rst_title "Remove nginx site $NGINX_MORTY_SITE"
@@ -526,37 +110,10 @@ This removes nginx site ${NGINX_MORTY_SITE}."
         return
         return
     fi
     fi
 
 
-    nginx_remove_site "$NGINX_MORTY_SITE"
-
-}
-
-rst-doc() {
-
-    eval "echo \"$(< "${REPO_ROOT}/docs/build-templates/morty.rst")\""
-
-    echo -e "\n.. START install systemd unit"
-    cat <<EOF
-.. tabs::
-
-   .. group-tab:: systemd
+    nginx_remove_app "$NGINX_MORTY_SITE"
 
 
-      .. code:: bash
-
-EOF
-    eval "echo \"$(< "${TEMPLATES}/${SERVICE_SYSTEMD_UNIT}")\"" | prefix_stdout "         "
-    echo -e "\n.. END install systemd unit"
-
-    # for DIST_NAME in ubuntu-20.04 arch fedora centos; do
-    #     (
-    #         DIST_ID=${DIST_NAME%-*}
-    #         DIST_VERS=${DIST_NAME#*-}
-    #         [[ $DIST_VERS =~ $DIST_ID ]] && DIST_VERS=
-    #         # ...
-    #     )
-    # done
 }
 }
 
 
-
 # ----------------------------------------------------------------------------
 # ----------------------------------------------------------------------------
 main "$@"
 main "$@"
 # ----------------------------------------------------------------------------
 # ----------------------------------------------------------------------------

+ 4 - 1029
utils/searx.sh

@@ -5,132 +5,14 @@
 # shellcheck source=utils/lib.sh
 # shellcheck source=utils/lib.sh
 source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
 source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
 
 
-# shellcheck source=utils/lib_install.sh
-source "${REPO_ROOT}/utils/lib_install.sh"
-
 # ----------------------------------------------------------------------------
 # ----------------------------------------------------------------------------
 # config
 # config
 # ----------------------------------------------------------------------------
 # ----------------------------------------------------------------------------
 
 
-SEARXNG_INTERNAL_HTTP="${SEARXNG_BIND_ADDRESS}:${SEARXNG_PORT}"
-
-SEARXNG_URL_PATH="${SEARXNG_URL_PATH:-$(echo "${PUBLIC_URL}" \
-| sed -e 's,^.*://[^/]*\(/.*\),\1,g')}"
-[[ "${SEARXNG_URL_PATH}" == "${PUBLIC_URL}" ]] && SEARXNG_URL_PATH=/
-
 SERVICE_NAME="searx"
 SERVICE_NAME="searx"
 SERVICE_USER="${SERVICE_USER:-${SERVICE_NAME}}"
 SERVICE_USER="${SERVICE_USER:-${SERVICE_NAME}}"
-SERVICE_HOME_BASE="${SERVICE_HOME_BASE:-/usr/local}"
-SERVICE_HOME="${SERVICE_HOME_BASE}/${SERVICE_USER}"
-# shellcheck disable=SC2034
-SERVICE_GROUP="${SERVICE_USER}"
-
-GIT_BRANCH="${GIT_BRANCH:-master}"
-SEARXNG_PYENV="${SERVICE_HOME}/searx-pyenv"
-SEARXNG_SRC="${SERVICE_HOME}/searx-src"
-# shellcheck disable=SC2034
-SEARXNG_STATIC="${SEARXNG_SRC}/searx/static"
-SEARXNG_SETTINGS_PATH="/etc/searxng/settings.yml"
-SEARXNG_UWSGI_APP="searxng.ini"
-# shellcheck disable=SC2034
-SEARXNG_UWSGI_SOCKET="/run/uwsgi/app/searxng/socket"
-
-# apt packages
-SEARX_PACKAGES_debian="\
-python3-dev python3-babel python3-venv
-uwsgi uwsgi-plugin-python3
-git build-essential libxslt-dev zlib1g-dev libffi-dev libssl-dev
-shellcheck"
-
-BUILD_PACKAGES_debian="\
-firefox graphviz imagemagick texlive-xetex librsvg2-bin
-texlive-latex-recommended texlive-extra-utils fonts-dejavu
-latexmk"
-
-# pacman packages
-SEARX_PACKAGES_arch="\
-python python-pip python-lxml python-babel
-uwsgi uwsgi-plugin-python
-git base-devel libxml2
-shellcheck"
-
-BUILD_PACKAGES_arch="\
-firefox graphviz imagemagick texlive-bin extra/librsvg
-texlive-core texlive-latexextra ttf-dejavu"
-
-# dnf packages
-SEARX_PACKAGES_fedora="\
-python python-pip python-lxml python-babel python3-devel
-uwsgi uwsgi-plugin-python3
-git @development-tools libxml2 openssl
-ShellCheck"
-
-BUILD_PACKAGES_fedora="\
-firefox graphviz graphviz-gd ImageMagick librsvg2-tools
-texlive-xetex-bin texlive-collection-fontsrecommended
-texlive-collection-latex dejavu-sans-fonts dejavu-serif-fonts
-dejavu-sans-mono-fonts"
-
-# yum packages
-#
-# hint: We do no longer support yum packages, it is to complex to maintain
-#       automate installation of packages like npm.  In the firts step we ignore
-#       CentOS-7 as developer & build platform (the inital patch which brought
-#       CentOS-7 supports was not intended to be a developer platform).
-
-SEARX_PACKAGES_centos="\
-python36 python36-pip python36-lxml python-babel
-uwsgi uwsgi-plugin-python3
-git @development-tools libxml2
-ShellCheck"
-
-BUILD_PACKAGES_centos="\
-firefox graphviz graphviz-gd ImageMagick librsvg2-tools
-texlive-xetex-bin texlive-collection-fontsrecommended
-texlive-collection-latex dejavu-sans-fonts dejavu-serif-fonts
-dejavu-sans-mono-fonts"
-
-case $DIST_ID-$DIST_VERS in
-    ubuntu-16.04|ubuntu-18.04)
-        SEARX_PACKAGES="${SEARX_PACKAGES_debian}"
-        BUILD_PACKAGES="${BUILD_PACKAGES_debian}"
-        APACHE_PACKAGES="$APACHE_PACKAGES libapache2-mod-proxy-uwsgi"
-        ;;
-    ubuntu-20.04)
-        # https://askubuntu.com/a/1224710
-        SEARX_PACKAGES="${SEARX_PACKAGES_debian} python-is-python3"
-        BUILD_PACKAGES="${BUILD_PACKAGES_debian}"
-        ;;
-    ubuntu-*|debian-*)
-        SEARX_PACKAGES="${SEARX_PACKAGES_debian}"
-        BUILD_PACKAGES="${BUILD_PACKAGES_debian}"
-        ;;
-    arch-*)
-        SEARX_PACKAGES="${SEARX_PACKAGES_arch}"
-        BUILD_PACKAGES="${BUILD_PACKAGES_arch}"
-        ;;
-    fedora-*)
-        SEARX_PACKAGES="${SEARX_PACKAGES_fedora}"
-        BUILD_PACKAGES="${BUILD_PACKAGES_fedora}"
-        ;;
-    centos-7)
-        SEARX_PACKAGES="${SEARX_PACKAGES_centos}"
-        BUILD_PACKAGES="${BUILD_PACKAGES_centos}"
-        ;;
-esac
-
-# Apache Settings
-APACHE_SEARX_SITE="searxng.conf"
-
-# shellcheck disable=SC2034
-CONFIG_FILES=(
-    "${uWSGI_APPS_AVAILABLE}/${SEARXNG_UWSGI_APP}"
-)
-
-# shellcheck disable=SC2034
-CONFIG_BACKUP_ENCRYPTED=(
-    "${SEARXNG_SETTINGS_PATH}"
-)
+SEARXNG_SETTINGS_PATH="/etc/searx/settings.yml"
+SEARXNG_UWSGI_APP="searx.ini"
 
 
 # ----------------------------------------------------------------------------
 # ----------------------------------------------------------------------------
 usage() {
 usage() {
@@ -139,286 +21,30 @@ usage() {
     # shellcheck disable=SC1117
     # shellcheck disable=SC1117
     cat <<EOF
     cat <<EOF
 usage::
 usage::
-  $(basename "$0") shell
-  $(basename "$0") install    [all|check|init-src|dot-config|user|searx-src|pyenv|uwsgi|packages|settings|buildhost]
-  $(basename "$0") reinstall  all
-  $(basename "$0") update     [searx]
-  $(basename "$0") remove     [all|user|pyenv|searx-src]
-  $(basename "$0") activate   [service]
-  $(basename "$0") deactivate [service]
-  $(basename "$0") inspect    [service|settings <key>]
-  $(basename "$0") option     [debug-[on|off]|image-proxy-[on|off]|result-proxy <url> <key>]
-  $(basename "$0") apache     [install|remove]
+  $(basename "$0") remove     all
 
 
-shell
-  start interactive shell from user ${SERVICE_USER}
-install / remove
-  :all:        complete (de-) installation of SearXNG service
-  :user:       add/remove service user '$SERVICE_USER' ($SERVICE_HOME)
-  :dot-config: copy ./config.sh to ${SEARXNG_SRC}
-  :searx-src:  clone $GIT_URL
-  :init-src:   copy files (SEARXNG_SRC_INIT_FILES) to ${SEARXNG_SRC}
-  :pyenv:      create/remove virtualenv (python) in $SEARXNG_PYENV
-  :uwsgi:      install SearXNG uWSGI application
-  :settings:   reinstall settings from ${SEARXNG_SETTINGS_PATH}
-  :packages:   install needed packages from OS package manager
-  :buildhost:  install packages from OS package manager needed by buildhosts
-install
-  :check:      check the SearXNG installation
-reinstall:
-  :all:        runs 'install/remove all'
-update searx
-  Update SearXNG installation ($SERVICE_HOME)
-activate service
-  activate and start service daemon (systemd unit)
-deactivate service
-  stop and deactivate service daemon (systemd unit)
-inspect
-  :service:    run some small tests and inspect service's status and log
-  :settings:   inspect YAML setting <key> from SearXNG instance (${SEARXNG_SRC})
-option
-  set one of the available options
-apache
-  :install: apache site with the SearXNG uwsgi app
-  :remove:  apache site ${APACHE_FILTRON_SITE}
----- sourced ${DOT_CONFIG}
-  SERVICE_USER        : ${SERVICE_USER}
-  SERVICE_HOME        : ${SERVICE_HOME}
+remove all:    complete uninstall of SearXNG service
 EOF
 EOF
 
 
-    install_log_searx_instance
     [[ -n ${1} ]] &&  err_msg "$1"
     [[ -n ${1} ]] &&  err_msg "$1"
 }
 }
 
 
 main() {
 main() {
-    required_commands \
-        sudo systemctl install git wget curl \
-        || exit
 
 
     local _usage="unknown or missing $1 command $2"
     local _usage="unknown or missing $1 command $2"
 
 
     case $1 in
     case $1 in
-        --getenv)  var="$2"; echo "${!var}"; exit 0;;
-        -h|--help) usage; exit 0;;
-        shell)
-            sudo_or_exit
-            interactive_shell "${SERVICE_USER}"
-            ;;
-        inspect)
-            case $2 in
-                service)
-                    sudo_or_exit
-                    inspect_service
-                    ;;
-                settings)
-                    prompt_installation_setting "$3"
-                    dump_return $?
-                    ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        reinstall)
-            rst_title "re-install $SERVICE_NAME" part
-            sudo_or_exit
-            case $2 in
-                all)
-                    remove_all
-                    install_all
-                    ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        install)
-            sudo_or_exit
-            case $2 in
-                all)
-                    rst_title "SearXNG (install)" part
-                    install_all
-                    ;;
-                check)
-                    rst_title "SearXNG (check installation)" part
-                    verify_continue_install
-                    install_check
-                    ;;
-                user)
-                    rst_title "SearXNG (install user)"
-                    verify_continue_install
-                    assert_user
-                    ;;
-                pyenv)
-                    rst_title "SearXNG (install pyenv)"
-                    verify_continue_install
-                    create_pyenv
-                    ;;
-                searx-src)
-                    rst_title "SearXNG (install searx-src)"
-                    verify_continue_install
-                    assert_user
-                    clone_searx
-                    install_DOT_CONFIG
-                    init_SEARX_SRC
-                    ;;
-                init-src)
-                    init_SEARX_SRC
-                    ;;
-                dot-config)
-                    install_DOT_CONFIG
-                    ;;
-                settings)
-                    install_settings
-                    ;;
-                uwsgi)
-                    rst_title "SearXNG (install uwsgi)"
-                    verify_continue_install
-                    install_searx_uwsgi
-                    if ! service_is_available "http://${SEARXNG_INTERNAL_HTTP}"; then
-                        err_msg "URL http://${SEARXNG_INTERNAL_HTTP} not available, check SearXNG & uwsgi setup!"
-                    fi
-                    ;;
-                packages)
-                    rst_title "SearXNG (install packages)"
-                    pkg_install "$SEARX_PACKAGES"
-                    ;;
-                buildhost)
-                    rst_title "SearXNG (install buildhost)"
-                    pkg_install "$SEARX_PACKAGES"
-                    pkg_install "$BUILD_PACKAGES"
-                    ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        update)
-            sudo_or_exit
-            case $2 in
-                searx) update_searx;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
         remove)
         remove)
             rst_title "SearXNG (remove)" part
             rst_title "SearXNG (remove)" part
             sudo_or_exit
             sudo_or_exit
             case $2 in
             case $2 in
                 all) remove_all;;
                 all) remove_all;;
-                user) drop_service_account "${SERVICE_USER}";;
-                pyenv) remove_pyenv ;;
-                searx-src) remove_searx ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        activate)
-            sudo_or_exit
-            case $2 in
-                service)
-                    activate_service ;;
                 *) usage "$_usage"; exit 42;;
                 *) usage "$_usage"; exit 42;;
             esac ;;
             esac ;;
-        deactivate)
-            sudo_or_exit
-            case $2 in
-                service)  deactivate_service ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        option)
-            sudo_or_exit
-            case $2 in
-                debug-on)  echo; enable_debug ;;
-                debug-off)  echo; disable_debug ;;
-                result-proxy) set_result_proxy "$3" "$4" ;;
-                image-proxy-on) enable_image_proxy ;;
-                image-proxy-off) disable_image_proxy ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        apache)
-            sudo_or_exit
-            case $2 in
-                install) install_apache_site ;;
-                remove) remove_apache_site ;;
-                *) usage "$_usage"; exit 42;;
-            esac ;;
-        doc) rst-doc;;
         *) usage "unknown or missing command $1"; exit 42;;
         *) usage "unknown or missing command $1"; exit 42;;
     esac
     esac
 }
 }
 
 
-_service_prefix="  ${_Yellow}|$SERVICE_USER|${_creset} "
-
-install_all() {
-    rst_title "Install SearXNG (service)"
-    verify_continue_install
-    pkg_install "$SEARX_PACKAGES"
-    wait_key
-    assert_user
-    wait_key
-    clone_searx
-    wait_key
-    install_DOT_CONFIG
-    wait_key
-    init_SEARX_SRC
-    wait_key
-    create_pyenv
-    wait_key
-    install_settings
-    wait_key
-    test_local_searx
-    wait_key
-    install_searx_uwsgi
-    if ! service_is_available "http://${SEARXNG_INTERNAL_HTTP}"; then
-        err_msg "URL http://${SEARXNG_INTERNAL_HTTP} not available, check SearXNG & uwsgi setup!"
-    fi
-    if ask_yn "Do you want to inspect the installation?" Ny; then
-        inspect_service
-    fi
-}
-
-install_check() {
-    if service_account_is_available "$SERVICE_USER"; then
-        info_msg "Service account $SERVICE_USER exists."
-    else
-        err_msg "Service account $SERVICE_USER does not exists!"
-    fi
-
-    if pyenv_is_available; then
-        info_msg "~$SERVICE_USER: python environment is available."
-    else
-        err_msg "~$SERVICE_USER: python environment is not available!"
-    fi
-
-    if clone_is_available; then
-        info_msg "~$SERVICE_USER: SearXNG software is installed."
-    else
-        err_msg "~$SERVICE_USER: Missing SearXNG software!"
-    fi
-
-    if uWSGI_app_enabled "$SEARXNG_UWSGI_APP"; then
-        info_msg "uWSGI app $SEARXNG_UWSGI_APP is enabled."
-    else
-        err_msg "uWSGI app $SEARXNG_UWSGI_APP not enabled!"
-    fi
-
-    uWSGI_app_available "$SEARXNG_UWSGI_APP" \
-        || err_msg "uWSGI app $SEARXNG_UWSGI_APP not available!"
-
-    sudo -H -u "${SERVICE_USER}" "${SEARXNG_PYENV}/bin/python" "utils/searxng_check.py"
-
-    if uWSGI_app_available 'searx.ini'; then
-        warn_msg "old searx.ini uWSGI app exists"
-        warn_msg "you need to reinstall $SERVICE_USER --> $0 reinstall all"
-    fi
-}
-
-update_searx() {
-    rst_title "Update SearXNG instance"
-
-    rst_para "fetch from $GIT_URL and reset to origin/$GIT_BRANCH"
-    tee_stderr 0.3 <<EOF | sudo -H -u "${SERVICE_USER}" -i 2>&1 |  prefix_stdout "$_service_prefix"
-cd ${SEARXNG_SRC}
-git fetch origin "$GIT_BRANCH"
-git reset --hard "origin/$GIT_BRANCH"
-pip install -U pip
-pip install -U setuptools
-pip install -U wheel
-pip install -U pyyaml
-pip install -U -e .
-EOF
-    install_settings
-    uWSGI_restart "$SEARXNG_UWSGI_APP"
-}
-
 remove_all() {
 remove_all() {
     rst_title "De-Install SearXNG (service)"
     rst_title "De-Install SearXNG (service)"
 
 
@@ -438,250 +64,6 @@ installations that were installed with this script."
     fi
     fi
 }
 }
 
 
-assert_user() {
-    rst_title "user $SERVICE_USER" section
-    echo
-    if getent passwd "$SERVICE_USER"  > /dev/null; then
-       echo "user exists"
-       return 0
-    fi
-
-    tee_stderr 1 <<EOF | bash | prefix_stdout
-useradd --shell /bin/bash --system \
- --home-dir "$SERVICE_HOME" \
- --comment 'Privacy-respecting metasearch engine' $SERVICE_USER
-mkdir "$SERVICE_HOME"
-chown -R "$SERVICE_GROUP:$SERVICE_GROUP" "$SERVICE_HOME"
-groups $SERVICE_USER
-EOF
-    #SERVICE_HOME="$(sudo -i -u "$SERVICE_USER" echo \$HOME)"
-    #export SERVICE_HOME
-    #echo "export SERVICE_HOME=$SERVICE_HOME"
-}
-
-clone_is_available() {
-    [[ -f "$SEARXNG_SRC/.git/config" ]]
-}
-
-# shellcheck disable=SC2164
-clone_searx() {
-    rst_title "Clone SearXNG sources" section
-    echo
-    if ! sudo -i -u "$SERVICE_USER" ls -d "$REPO_ROOT" > /dev/null; then
-        die 42 "user '$SERVICE_USER' missed read permission: $REPO_ROOT"
-    fi
-    SERVICE_HOME="$(sudo -i -u "$SERVICE_USER" echo \$HOME 2>/dev/null)"
-    if [[ ! "${SERVICE_HOME}" ]]; then
-        err_msg "to clone SearXNG sources, user $SERVICE_USER hast to be created first"
-        return 42
-    fi
-    if [[ ! $(git show-ref "refs/heads/${GIT_BRANCH}") ]]; then
-        warn_msg "missing local branch ${GIT_BRANCH}"
-        info_msg "create local branch ${GIT_BRANCH} from start point: origin/${GIT_BRANCH}"
-        git branch "${GIT_BRANCH}" "origin/${GIT_BRANCH}"
-    fi
-    if [[ ! $(git rev-parse --abbrev-ref HEAD) == "${GIT_BRANCH}" ]]; then
-        warn_msg "take into account, installing branch $GIT_BRANCH while current branch is $(git rev-parse --abbrev-ref HEAD)"
-    fi
-    export SERVICE_HOME
-    git_clone "$REPO_ROOT" "$SEARXNG_SRC" \
-              "$GIT_BRANCH" "$SERVICE_USER"
-
-    pushd "${SEARXNG_SRC}" > /dev/null
-    tee_stderr 0.1 <<EOF | sudo -H -u "${SERVICE_USER}" -i 2>&1 | prefix_stdout "$_service_prefix"
-cd "${SEARXNG_SRC}"
-git remote set-url origin ${GIT_URL}
-git config user.email "$ADMIN_EMAIL"
-git config user.name "$ADMIN_NAME"
-git config --list
-EOF
-    popd > /dev/null
-}
-
-prompt_installation_status(){
-
-    # shellcheck disable=SC2034
-    local GIT_URL GIT_BRANCH VERSION_STRING VERSION_TAG
-    local ret_val state branch remote remote_url
-    state="$(install_searx_get_state)"
-
-    case $state in
-        missing-searx-clone|missing-searx-pyenv)
-            info_msg "${_BBlue}(status: $(install_searx_get_state))${_creset}"
-            return 0
-            ;;
-        *)
-            info_msg "SearXNG instance already installed at: $SEARXNG_SRC"
-            info_msg "status:  ${_BBlue}$(install_searx_get_state)${_creset} "
-            branch="$(git name-rev --name-only HEAD)"
-            remote="$(git config branch."${branch}".remote)"
-            remote_url="$(git config remote."${remote}".url)"
-            eval "$(get_installed_version_variables)"
-
-            ret_val=0
-            if ! [ "$GIT_URL" = "$remote_url" ]; then
-                warn_msg "instance's git URL: '${GIT_URL}'" \
-                         "differs from local clone's remote URL: ${remote_url}"
-                ret_val=42
-            fi
-            if ! [ "$GIT_BRANCH" = "$branch" ]; then
-                warn_msg "instance git branch: ${GIT_BRANCH}" \
-                         "differs from local clone's branch: ${branch}"
-                ret_val=42
-            fi
-            return $ret_val
-            ;;
-    esac
-}
-
-verify_continue_install(){
-    if ! prompt_installation_status; then
-        MSG="[${_BCyan}KEY${_creset}] to continue installation / [${_BCyan}CTRL-C${_creset}] to exit" \
-           wait_key
-    fi
-}
-
-prompt_installation_setting(){
-
-    # usage:  prompt_installation_setting brand.docs_url
-    #
-    # Prompts the value of the (YAML) setting in the SearXNG instance.
-
-    local _state
-    _state="$(install_searx_get_state)"
-    case $_state in
-        python-installed|installer-modified)
-            sudo -H -u "${SERVICE_USER}" "${SEARXNG_PYENV}/bin/python" <<EOF
-import sys
-from searx import get_setting
-name = "${1}"
-unset = object()
-value = get_setting(name, unset)
-if value is unset:
-    sys.stderr.write("error: setting '%s' does not exists\n" % name)
-    sys.exit(42)
-print(value)
-sys.exit(0)
-EOF
-            ;;
-        *)
-            return 42
-            ;;
-    esac
-}
-
-get_installed_version_variables() {
-
-    # usage:  eval "$(get_installed_version_variables)"
-    #
-    # Set variables VERSION_STRING, VERSION_TAG, GIT_URL, GIT_BRANCH
-
-    local _state
-    _state="$(install_searx_get_state)"
-    case $_state in
-        python-installed|installer-modified)
-            sudo -H -u "${SERVICE_USER}" "${SEARXNG_PYENV}/bin/python" -m searx.version;;
-        *)
-            return 42
-            ;;
-    esac
-}
-
-init_SEARX_SRC(){
-    rst_title "Update instance: ${SEARXNG_SRC}/" section
-
-    if ! clone_is_available; then
-        err_msg "you have to install SearXNG first"
-        return 1
-    fi
-
-    init_SEARX_SRC_INIT_FILES
-
-    if [ ${#SEARX_SRC_INIT_FILES[*]} -eq 0 ]; then
-        info_msg "no files registered in SEARX_SRC_INIT_FILES"
-        return 2
-    fi
-
-    echo
-    echo "Update instance with file(s) from: ${REPO_ROOT}"
-    echo
-    for i in "${SEARX_SRC_INIT_FILES[@]}"; do
-        echo "- $i"
-    done
-    echo
-    echo "Be careful when modifying an existing installation."
-    if ! ask_yn "Do you really want to update these files in the instance?" Yn; then
-        return 42
-    fi
-    for fname in "${SEARX_SRC_INIT_FILES[@]}"; do
-        while true; do
-            choose_one _reply "choose next step with file ${fname}" \
-                   "replace file" \
-                   "leave file unchanged" \
-                   "diff files" \
-                   "interactive shell"
-
-            case $_reply in
-                "leave file unchanged")
-                    break
-                    ;;
-                "replace file")
-                    info_msg "copy: ${REPO_ROOT}/${fname} --> ${SEARXNG_SRC}/${fname}"
-                    cp "${REPO_ROOT}/${fname}" "${SEARXNG_SRC}/${fname}"
-                    break
-                    ;;
-                "diff files")
-                    $DIFF_CMD "${SEARXNG_SRC}/${fname}" "${REPO_ROOT}/${fname}"
-                    ;;
-                "interactive shell")
-                    backup_file "${SEARXNG_SRC}/${fname}"
-                    echo -e "// edit ${_Red}${dst}${_creset} to your needs"
-                    echo -e "// exit with [${_BCyan}CTRL-D${_creset}]"
-                    sudo -H -u "${SERVICE_USER}" -i
-                    $DIFF_CMD "${SEARXNG_SRC}/${fname}"  "${REPO_ROOT}/${fname}"
-                    echo
-                    echo -e "// ${_BBlack}did you edit file ...${_creset}"
-                    echo -en "//  ${_Red}${dst}${_creset}"
-                    if ask_yn "//${_BBlack}... to your needs?${_creset}"; then
-                        break
-                    fi
-                    ;;
-            esac
-        done
-    done
-}
-
-install_DOT_CONFIG(){
-    rst_title "Update instance: ${SEARXNG_SRC}/.config.sh" section
-
-    if cmp --silent "${REPO_ROOT}/.config.sh" "${SEARXNG_SRC}/.config.sh"; then
-        info_msg "${SEARXNG_SRC}/.config.sh is up to date"
-        return 0
-    fi
-
-    diff "${REPO_ROOT}/.config.sh" "${SEARXNG_SRC}/.config.sh"
-    if ! ask_yn "Do you want to copy file .config.sh into instance?" Yn; then
-        return 42
-    fi
-    backup_file "${SEARXNG_SRC}/.config.sh"
-    cp "${REPO_ROOT}/.config.sh" "${SEARXNG_SRC}/.config.sh"
-}
-
-install_settings() {
-    rst_title "${SEARXNG_SETTINGS_PATH}" section
-
-    if ! clone_is_available; then
-        err_msg "you have to install SearXNG first"
-        exit 42
-    fi
-
-    mkdir -p "$(dirname "${SEARXNG_SETTINGS_PATH}")"
-    install_template --no-eval \
-        "${SEARXNG_SETTINGS_PATH}" \
-        "${SERVICE_USER}" "${SERVICE_GROUP}"
-    configure_searx
-}
-
 remove_settings() {
 remove_settings() {
     rst_title "remove SearXNG settings" section
     rst_title "remove SearXNG settings" section
     echo
     echo
@@ -689,419 +71,12 @@ remove_settings() {
     rm -f "${SEARXNG_SETTINGS_PATH}"
     rm -f "${SEARXNG_SETTINGS_PATH}"
 }
 }
 
 
-remove_searx() {
-    rst_title "Drop SearXNG sources" section
-    if ask_yn "Do you really want to drop SearXNG sources ($SEARXNG_SRC)?"; then
-        rm -rf "$SEARXNG_SRC"
-    else
-        rst_para "Leave SearXNG sources unchanged."
-    fi
-}
-
-pyenv_is_available() {
-    [[ -f "${SEARXNG_PYENV}/bin/activate" ]]
-}
-
-create_pyenv() {
-    rst_title "Create virtualenv (python)" section
-    echo
-    if [[ ! -f "${SEARXNG_SRC}/manage" ]]; then
-        err_msg "to create pyenv for SearXNG, SearXNG has to be cloned first"
-        return 42
-    fi
-    info_msg "create pyenv in ${SEARXNG_PYENV}"
-    tee_stderr 0.1 <<EOF | sudo -H -u "${SERVICE_USER}" -i 2>&1 |  prefix_stdout "$_service_prefix"
-rm -rf "${SEARXNG_PYENV}"
-python3 -m venv "${SEARXNG_PYENV}"
-grep -qFs -- 'source ${SEARXNG_PYENV}/bin/activate' ~/.profile \
-  || echo 'source ${SEARXNG_PYENV}/bin/activate' >> ~/.profile
-EOF
-    info_msg "inspect python's virtual environment"
-    tee_stderr 0.1 <<EOF | sudo -H -u "${SERVICE_USER}" -i 2>&1 |  prefix_stdout "$_service_prefix"
-command -v python && python --version
-EOF
-    wait_key
-    info_msg "install needed python packages"
-    tee_stderr 0.1 <<EOF | sudo -H -u "${SERVICE_USER}" -i 2>&1 |  prefix_stdout "$_service_prefix"
-pip install -U pip
-pip install -U setuptools
-pip install -U wheel
-pip install -U pyyaml
-cd ${SEARXNG_SRC}
-pip install -e .
-EOF
-}
-
-remove_pyenv() {
-    rst_title "Remove virtualenv (python)" section
-    if ! ask_yn "Do you really want to drop ${SEARXNG_PYENV} ?"; then
-        return
-    fi
-    info_msg "remove pyenv activation from ~/.profile"
-    tee_stderr 0.1 <<EOF | sudo -H -u "${SERVICE_USER}" -i 2>&1 |  prefix_stdout "$_service_prefix"
-grep -v 'source ${SEARXNG_PYENV}/bin/activate' ~/.profile > ~/.profile.##
-mv ~/.profile.## ~/.profile
-EOF
-    rm -rf "${SEARXNG_PYENV}"
-}
-
-configure_searx() {
-    rst_title "Configure SearXNG" section
-    rst_para "Setup SearXNG config located at $SEARXNG_SETTINGS_PATH"
-    echo
-    tee_stderr 0.1 <<EOF | sudo -H -i 2>&1 |  prefix_stdout "$_service_prefix"
-cd ${SEARXNG_SRC}
-sed -i -e "s/ultrasecretkey/$(openssl rand -hex 16)/g" "$SEARXNG_SETTINGS_PATH"
-EOF
-}
-
-test_local_searx() {
-    rst_title "Testing SearXNG instance localy" section
-    echo
-
-    if service_is_available "http://${SEARXNG_INTERNAL_HTTP}" &>/dev/null; then
-        err_msg "URL/port http://${SEARXNG_INTERNAL_HTTP} is already in use, you"
-        err_msg "should stop that service before starting local tests!"
-        if ! ask_yn "Continue with local tests?"; then
-            return
-        fi
-    fi
-    sed -i -e "s/debug: false/debug: true/g" "$SEARXNG_SETTINGS_PATH"
-    tee_stderr 0.1 <<EOF | sudo -H -u "${SERVICE_USER}" -i 2>&1 |  prefix_stdout "$_service_prefix"
-export SEARXNG_SETTINGS_PATH="${SEARXNG_SETTINGS_PATH}"
-cd ${SEARXNG_SRC}
-timeout 10 python searx/webapp.py &
-sleep 3
-curl --location --verbose --head --insecure $SEARXNG_INTERNAL_HTTP
-EOF
-    sed -i -e "s/debug: true/debug: false/g" "$SEARXNG_SETTINGS_PATH"
-}
-
-install_searx_uwsgi() {
-    rst_title "Install SearXNG's uWSGI app (searxng.ini)" section
-    echo
-    install_uwsgi
-    uWSGI_install_app "$SEARXNG_UWSGI_APP"
-}
-
 remove_searx_uwsgi() {
 remove_searx_uwsgi() {
     rst_title "Remove SearXNG's uWSGI app (searxng.ini)" section
     rst_title "Remove SearXNG's uWSGI app (searxng.ini)" section
     echo
     echo
     uWSGI_remove_app "$SEARXNG_UWSGI_APP"
     uWSGI_remove_app "$SEARXNG_UWSGI_APP"
 }
 }
 
 
-activate_service() {
-    rst_title "Activate SearXNG (service)" section
-    echo
-    uWSGI_enable_app "$SEARXNG_UWSGI_APP"
-    uWSGI_restart "$SEARXNG_UWSGI_APP"
-}
-
-deactivate_service() {
-    rst_title "De-Activate SearXNG (service)" section
-    echo
-    uWSGI_disable_app "$SEARXNG_UWSGI_APP"
-    uWSGI_restart "$SEARXNG_UWSGI_APP"
-}
-
-enable_image_proxy() {
-    info_msg "try to enable image_proxy ..."
-    tee_stderr 0.1 <<EOF | sudo -H -i 2>&1 |  prefix_stdout "$_service_prefix"
-cd ${SEARXNG_SRC}
-sed -i -e "s/image_proxy: false/image_proxy: true/g" "$SEARXNG_SETTINGS_PATH"
-EOF
-    uWSGI_restart "$SEARXNG_UWSGI_APP"
-}
-
-disable_image_proxy() {
-    info_msg "try to enable image_proxy ..."
-    tee_stderr 0.1 <<EOF | sudo -H -i 2>&1 |  prefix_stdout "$_service_prefix"
-cd ${SEARXNG_SRC}
-sed -i -e "s/image_proxy: true/image_proxy: false/g" "$SEARXNG_SETTINGS_PATH"
-EOF
-    uWSGI_restart "$SEARXNG_UWSGI_APP"
-}
-
-enable_debug() {
-    warn_msg "Do not enable debug in production environments!!"
-    info_msg "try to enable debug mode ..."
-    tee_stderr 0.1 <<EOF | sudo -H -i 2>&1 |  prefix_stdout "$_service_prefix"
-cd ${SEARXNG_SRC}
-sed -i -e "s/debug: false/debug: true/g" "$SEARXNG_SETTINGS_PATH"
-EOF
-    uWSGI_restart "$SEARXNG_UWSGI_APP"
-}
-
-disable_debug() {
-    info_msg "try to disable debug mode ..."
-    tee_stderr 0.1 <<EOF | sudo -H -i 2>&1 |  prefix_stdout "$_service_prefix"
-cd ${SEARXNG_SRC}
-sed -i -e "s/debug: true/debug: false/g" "$SEARXNG_SETTINGS_PATH"
-EOF
-    uWSGI_restart "$SEARXNG_UWSGI_APP"
-}
-
-set_result_proxy() {
-
-    # usage: set_result_proxy <URL> [<key>]
-
-    info_msg "try to set result proxy: '$1' ($2)"
-    cp "${SEARXNG_SETTINGS_PATH}" "${SEARXNG_SETTINGS_PATH}.bak"
-    _set_result_proxy "$1" "$2" > "${SEARXNG_SETTINGS_PATH}"
-}
-
-_set_result_proxy() {
-    local line
-    local stage=0
-    local url="    url: $1"
-    local key="    key: !!binary \"$2\""
-    if [[ -z $2 ]]; then
-       key=
-    fi
-
-    while IFS=  read -r line
-    do
-        if [[ $stage = 0 ]] || [[ $stage = 2 ]] ; then
-            if [[ $line =~ ^[[:space:]]*#*[[:space:]]*result_proxy[[:space:]]*:[[:space:]]*$ ]]; then
-                if [[ $stage = 0 ]]; then
-                    stage=1
-                    echo "result_proxy:"
-                    continue
-                elif [[ $stage = 2 ]]; then
-                    continue
-                fi
-            fi
-        fi
-        if [[ $stage = 1 ]] || [[ $stage = 2 ]] ; then
-            if [[ $line =~ ^[[:space:]]*#*[[:space:]]*url[[:space:]]*:[[:space:]] ]]; then
-                [[ $stage = 1 ]]  && echo "$url"
-                continue
-            elif [[ $line =~ ^[[:space:]]*#*[[:space:]]*key[[:space:]]*:[[:space:]] ]]; then
-                [[ $stage = 1 ]] && [[ -n $key ]] && echo "$key"
-                continue
-            elif [[ $line =~ ^[[:space:]]*$ ]]; then
-                stage=2
-            fi
-        fi
-        echo "$line"
-    done < "${SEARXNG_SETTINGS_PATH}.bak"
-}
-
-function has_substring() {
-   [[ "$1" != "${2/$1/}" ]]
-}
-inspect_service() {
-    rst_title "service status & log"
-    cat <<EOF
-
-sourced ${DOT_CONFIG} :
-  SERVICE_USER        : ${SERVICE_USER}
-  SERVICE_HOME        : ${SERVICE_HOME}
-EOF
-    install_log_searx_instance
-
-    install_check
-    if in_container; then
-        lxc_suite_info
-    else
-        info_msg "public URL   --> ${PUBLIC_URL}"
-        info_msg "internal URL --> http://${SEARXNG_INTERNAL_HTTP}"
-    fi
-
-    if ! service_is_available "http://${SEARXNG_INTERNAL_HTTP}"; then
-        err_msg "uWSGI app (service) at http://${SEARXNG_INTERNAL_HTTP} is not available!"
-        MSG="${_Green}[${_BCyan}CTRL-C${_Green}] to stop or [${_BCyan}KEY${_Green}] to continue"\
-           wait_key
-    fi
-
-    if ! service_is_available "${PUBLIC_URL}"; then
-        warn_msg "Public service at ${PUBLIC_URL} is not available!"
-        if ! in_container; then
-            warn_msg "Check if public name is correct and routed or use the public IP from above."
-        fi
-    fi
-
-    local _debug_on
-    if ask_yn "Enable SearXNG debug mode?"; then
-        enable_debug
-        _debug_on=1
-    fi
-    echo
-
-    case $DIST_ID-$DIST_VERS in
-        ubuntu-*|debian-*)
-            systemctl --no-pager -l status "${SERVICE_NAME}"
-            ;;
-        arch-*)
-            systemctl --no-pager -l status "uwsgi@${SERVICE_NAME%.*}"
-            ;;
-        fedora-*|centos-7)
-            systemctl --no-pager -l status uwsgi
-            ;;
-    esac
-
-    # shellcheck disable=SC2059
-    printf "// use ${_BCyan}CTRL-C${_creset} to stop monitoring the log"
-    read -r -s -n1 -t 5
-    echo
-
-    while true;  do
-        trap break 2
-        case $DIST_ID-$DIST_VERS in
-            ubuntu-*|debian-*) tail -f /var/log/uwsgi/app/searx.log ;;
-            arch-*)  journalctl -f -u "uwsgi@${SERVICE_NAME%.*}" ;;
-            fedora-*|centos-7)  journalctl -f -u uwsgi ;;
-        esac
-    done
-
-    if [[ $_debug_on == 1 ]]; then
-        disable_debug
-    fi
-    return 0
-}
-
-install_apache_site() {
-    rst_title "Install Apache site $APACHE_SEARX_SITE"
-
-    rst_para "\
-This installs the SearXNG uwsgi app as apache site.  If your server is public to
-the internet, you should instead use a reverse proxy (filtron) to block
-excessively bot queries."
-
-    ! apache_is_installed && err_msg "Apache is not installed."
-
-    if ! ask_yn "Do you really want to continue?" Yn; then
-        return
-    else
-        install_apache
-    fi
-
-    apache_install_site --variant=uwsgi "${APACHE_SEARX_SITE}"
-
-    rst_title "Install SearXNG's uWSGI app (searxng.ini)" section
-    echo
-    uWSGI_install_app --variant=socket "$SEARXNG_UWSGI_APP"
-
-    if ! service_is_available "${PUBLIC_URL}"; then
-        err_msg "Public service at ${PUBLIC_URL} is not available!"
-    fi
-}
-
-remove_apache_site() {
-
-    rst_title "Remove Apache site ${APACHE_SEARX_SITE}"
-
-    rst_para "\
-This removes apache site ${APACHE_SEARX_SITE}."
-
-    ! apache_is_installed && err_msg "Apache is not installed."
-
-    if ! ask_yn "Do you really want to continue?" Yn; then
-        return
-    fi
-
-    apache_remove_site "${APACHE_SEARX_SITE}"
-
-    rst_title "Remove SearXNG's uWSGI app (searxng.ini)" section
-    echo
-    uWSGI_remove_app "$SEARXNG_UWSGI_APP"
-}
-
-rst-doc() {
-    local debian="${SEARX_PACKAGES_debian}"
-    local arch="${SEARX_PACKAGES_arch}"
-    local fedora="${SEARX_PACKAGES_fedora}"
-    local centos="${SEARX_PACKAGES_centos}"
-    local debian_build="${BUILD_PACKAGES_debian}"
-    local arch_build="${BUILD_PACKAGES_arch}"
-    local fedora_build="${BUILD_PACKAGES_fedora}"
-    local centos_build="${SEARX_PACKAGES_centos}"
-    debian="$(echo "${debian}" | sed 's/.*/          & \\/' | sed '$ s/.$//')"
-    arch="$(echo "${arch}"     | sed 's/.*/          & \\/' | sed '$ s/.$//')"
-    fedora="$(echo "${fedora}" | sed 's/.*/          & \\/' | sed '$ s/.$//')"
-    centos="$(echo "${centos}" | sed 's/.*/          & \\/' | sed '$ s/.$//')"
-    debian_build="$(echo "${debian_build}" | sed 's/.*/          & \\/' | sed '$ s/.$//')"
-    arch_build="$(echo "${arch_build}"     | sed 's/.*/          & \\/' | sed '$ s/.$//')"
-    fedora_build="$(echo "${fedora_build}" | sed 's/.*/          & \\/' | sed '$ s/.$//')"
-    centos_build="$(echo "${centos_build}" | sed 's/.*/          & \\/' | sed '$ s/.$//')"
-
-    eval "echo \"$(< "${REPO_ROOT}/docs/build-templates/searx.rst")\""
-
-    # I use ubuntu-20.04 here to demonstrate that versions are also suported,
-    # normaly debian-* and ubuntu-* are most the same.
-
-    for DIST_NAME in ubuntu-20.04 arch fedora; do
-        (
-            DIST_ID=${DIST_NAME%-*}
-            DIST_VERS=${DIST_NAME#*-}
-            [[ $DIST_VERS =~ $DIST_ID ]] && DIST_VERS=
-            uWSGI_distro_setup
-
-            echo -e "\n.. START searxng uwsgi-description $DIST_NAME"
-
-            case $DIST_ID-$DIST_VERS in
-                ubuntu-*|debian-*)  cat <<EOF
-
-.. code:: bash
-
-   # 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
-
-   create     ${uWSGI_APPS_AVAILABLE}/${SEARXNG_UWSGI_APP}
-   enable:    sudo -H ln -s ${uWSGI_APPS_AVAILABLE}/${SEARXNG_UWSGI_APP} ${uWSGI_APPS_ENABLED}/
-   start:     sudo -H service uwsgi start   ${SEARXNG_UWSGI_APP%.*}
-   restart:   sudo -H service uwsgi restart ${SEARXNG_UWSGI_APP%.*}
-   stop:      sudo -H service uwsgi stop    ${SEARXNG_UWSGI_APP%.*}
-   disable:   sudo -H rm ${uWSGI_APPS_ENABLED}/${SEARXNG_UWSGI_APP}
-
-EOF
-                ;;
-                arch-*) cat <<EOF
-
-.. code:: bash
-
-   # systemd --> /usr/lib/systemd/system/uwsgi@.service
-   # 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
-
-   create:    ${uWSGI_APPS_ENABLED}/${SEARXNG_UWSGI_APP}
-   enable:    sudo -H systemctl enable   uwsgi@${SEARXNG_UWSGI_APP%.*}
-   start:     sudo -H systemctl start    uwsgi@${SEARXNG_UWSGI_APP%.*}
-   restart:   sudo -H systemctl restart  uwsgi@${SEARXNG_UWSGI_APP%.*}
-   stop:      sudo -H systemctl stop     uwsgi@${SEARXNG_UWSGI_APP%.*}
-   disable:   sudo -H systemctl disable  uwsgi@${SEARXNG_UWSGI_APP%.*}
-
-EOF
-                ;;
-                fedora-*|centos-7) cat <<EOF
-
-.. code:: bash
-
-   # 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
-
-   create:    ${uWSGI_APPS_ENABLED}/${SEARXNG_UWSGI_APP}
-   restart:   sudo -H touch ${uWSGI_APPS_ENABLED}/${SEARXNG_UWSGI_APP}
-   disable:   sudo -H rm ${uWSGI_APPS_ENABLED}/${SEARXNG_UWSGI_APP}
-
-EOF
-                ;;
-            esac
-            echo -e ".. END searxng uwsgi-description $DIST_NAME"
-
-            echo -e "\n.. START searxng uwsgi-appini $DIST_NAME"
-            echo ".. code:: bash"
-            echo
-            eval "echo \"$(< "${TEMPLATES}/${uWSGI_APPS_AVAILABLE}/${SEARXNG_UWSGI_APP}")\"" | prefix_stdout "  "
-            echo -e "\n.. END searxng uwsgi-appini $DIST_NAME"
-
-        )
-    done
-
-}
 
 
 # ----------------------------------------------------------------------------
 # ----------------------------------------------------------------------------
 main "$@"
 main "$@"

+ 0 - 129
utils/templates/etc/filtron/rules.json

@@ -1,129 +0,0 @@
-[
-    {
-        "name": "roboagent limit",
-        "filters": [
-            "Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client|Ruby|UniversalFeedParser)"
-        ],
-        "limit": 0,
-        "stop": true,
-        "actions": [
-            { "name": "log"},
-            { "name": "block",
-              "params": {
-                  "message": "Rate limit exceeded"
-              }
-            }
-        ]
-    },
-    {
-        "name": "botlimit",
-        "filters": [
-            "Header:User-Agent=(Googlebot|bingbot|Baiduspider|yacybot|YandexMobileBot|YandexBot|Yahoo! Slurp|MJ12bot|AhrefsBot|archive.org_bot|msnbot|MJ12bot|SeznamBot|linkdexbot|Netvibes|SMTBot|zgrab|James BOT)"
-        ],
-        "limit": 0,
-        "stop": true,
-        "actions": [
-            { "name": "log"},
-            { "name": "block",
-              "params": {
-                  "message": "Rate limit exceeded"
-              }
-            }
-        ]
-    },
-    {
-        "name": "suspiciously frequent IP",
-        "filters": [],
-        "interval": 600,
-        "limit": 30,
-        "aggregations": [
-            "Header:X-Forwarded-For"
-      ],
-        "actions":[
-            {"name":"log"}
-      ]
-    },
-    {
-        "name": "search request",
-        "filters": [
-            "Param:q",
-            "Path=^(/|/search)$"
-        ],
-        "interval": 61,
-        "limit": 999,
-        "subrules": [
-            {
-                "name": "missing Accept-Language",
-                "filters": ["!Header:Accept-Language"],
-                "limit": 0,
-                "stop": true,
-                "actions": [
-                    {"name":"log"},
-                    {"name": "block",
-                     "params": {"message": "Rate limit exceeded"}}
-                ]
-            },
-            {
-                "name": "suspiciously Connection=close header",
-                "filters": ["Header:Connection=close"],
-                "limit": 0,
-                "stop": true,
-                "actions": [
-                    {"name":"log"},
-                    {"name": "block",
-                     "params": {"message": "Rate limit exceeded"}}
-                ]
-            },
-            {
-                "name": "IP limit",
-                "interval": 61,
-                "limit": 9,
-                "stop": true,
-                "aggregations": [
-                    "Header:X-Forwarded-For"
-                ],
-                "actions": [
-                    { "name": "log"},
-                    { "name": "block",
-                      "params": {
-                          "message": "Rate limit exceeded"
-                      }
-                    }
-                ]
-            },
-            {
-                "name": "rss/json limit",
-                "filters": [
-                    "Param:format=(csv|json|rss)"
-                ],
-                "interval": 121,
-                "limit": 2,
-                "stop": true,
-                "actions": [
-                    { "name": "log"},
-                    { "name": "block",
-                      "params": {
-                          "message": "Rate limit exceeded"
-                      }
-                    }
-                ]
-            },
-            {
-                "name": "useragent limit",
-                "interval": 61,
-                "limit": 199,
-                "aggregations": [
-                    "Header:User-Agent"
-                ],
-                "actions": [
-                    { "name": "log"},
-                    { "name": "block",
-                      "params": {
-                          "message": "Rate limit exceeded"
-                      }
-                    }
-                ]
-            }
-        ]
-    }
-]

+ 0 - 28
utils/templates/etc/httpd/sites-available/morty.conf

@@ -1,28 +0,0 @@
-# -*- coding: utf-8; mode: apache -*-
-
-LoadModule headers_module       ${APACHE_MODULES}/mod_headers.so
-LoadModule proxy_module         ${APACHE_MODULES}/mod_proxy.so
-LoadModule proxy_http_module    ${APACHE_MODULES}/mod_proxy_http.so
-#LoadModule setenvif_module      ${APACHE_MODULES}/mod_setenvif.so
-
-# SetEnvIf Request_URI "${PUBLIC_URL_PATH_MORTY}" dontlog
-# CustomLog /dev/null combined env=dontlog
-
-<Location ${PUBLIC_URL_PATH_MORTY} >
-
-    <IfModule mod_security2.c>
-        SecRuleEngine Off
-    </IfModule>
-
-    Require all granted
-
-    Order deny,allow
-    Deny from all
-    #Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
-    Allow from all
-
-    ProxyPreserveHost On
-    ProxyPass http://${MORTY_LISTEN}
-    RequestHeader set X-Script-Name ${PUBLIC_URL_PATH_MORTY}
-
-</Location>

+ 0 - 33
utils/templates/etc/httpd/sites-available/searxng.conf:filtron

@@ -1,33 +0,0 @@
-# -*- coding: utf-8; mode: apache -*-
-
-LoadModule headers_module       ${APACHE_MODULES}/mod_headers.so
-LoadModule proxy_module         ${APACHE_MODULES}/mod_proxy.so
-LoadModule proxy_http_module    ${APACHE_MODULES}/mod_proxy_http.so
-#LoadModule setenvif_module      ${APACHE_MODULES}/mod_setenvif.so
-
-# SetEnvIf Request_URI "${FILTRON_URL_PATH}" dontlog
-# CustomLog /dev/null combined env=dontlog
-
-# SecRuleRemoveById 981054
-# SecRuleRemoveById 981059
-# SecRuleRemoveById 981060
-# SecRuleRemoveById 950907
-
-<Location ${FILTRON_URL_PATH} >
-
-    <IfModule mod_security2.c>
-        SecRuleEngine Off
-    </IfModule>
-
-    Require all granted
-
-    Order deny,allow
-    Deny from all
-    #Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
-    Allow from all
-
-    ProxyPreserveHost On
-    ProxyPass http://${FILTRON_LISTEN}
-    RequestHeader set X-Script-Name ${FILTRON_URL_PATH}
-
-</Location>

+ 0 - 34
utils/templates/etc/httpd/sites-available/searxng.conf:uwsgi

@@ -1,34 +0,0 @@
-# -*- coding: utf-8; mode: apache -*-
-
-LoadModule headers_module       ${APACHE_MODULES}/mod_headers.so
-LoadModule proxy_module         ${APACHE_MODULES}/mod_proxy.so
-LoadModule proxy_uwsgi_module   ${APACHE_MODULES}/mod_proxy_uwsgi.so
-# LoadModule setenvif_module      ${APACHE_MODULES}/mod_setenvif.so
-#
-# SetEnvIf Request_URI "${SEARXNG_URL_PATH}" dontlog
-# CustomLog /dev/null combined env=dontlog
-
-<Location ${SEARXNG_URL_PATH}>
-
-    <IfModule mod_security2.c>
-        SecRuleEngine Off
-    </IfModule>
-
-    Require all granted
-
-    Order deny,allow
-    Deny from all
-    # Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
-    Allow from all
-
-    ProxyPreserveHost On
-    ProxyPass unix:${SEARXNG_UWSGI_SOCKET}|uwsgi://uwsgi-uds-searx/
-
-</Location>
-
-# uWSGI serves the static files and in settings.yml we use::
-#
-#   ui:
-#     static_use_hash: true
-#
-# Alias ${SEARXNG_URL_PATH}/static/ ${SEARXNG_STATIC}/

+ 0 - 11
utils/templates/etc/nginx/default.apps-available/morty.conf

@@ -1,11 +0,0 @@
-# https://example.org/morty
-
-location /morty {
-    proxy_pass         http://127.0.0.1:3000/;
-
-    proxy_set_header   Host             \$host;
-    proxy_set_header   Connection       \$http_connection;
-    proxy_set_header   X-Real-IP        \$remote_addr;
-    proxy_set_header   X-Forwarded-For  \$proxy_add_x_forwarded_for;
-    proxy_set_header   X-Scheme         \$scheme;
-}

+ 0 - 16
utils/templates/etc/nginx/default.apps-available/searxng.conf:filtron

@@ -1,16 +0,0 @@
-# https://example.org/searx
-
-location ${SEARXNG_URL_PATH} {
-    proxy_pass         http://127.0.0.1:4004/;
-
-    proxy_set_header   Host             \$host;
-    proxy_set_header   Connection       \$http_connection;
-    proxy_set_header   X-Real-IP        \$remote_addr;
-    proxy_set_header   X-Forwarded-For  \$proxy_add_x_forwarded_for;
-    proxy_set_header   X-Scheme         \$scheme;
-    proxy_set_header   X-Script-Name    ${SEARXNG_URL_PATH};
-}
-
-location ${SEARXNG_URL_PATH}/static/ {
-    alias ${SEARXNG_STATIC}/;
-}