utils/searx.sh & filtron.sh: misc changes from first tests (WIP)

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
This commit is contained in:
Markus Heiser 2020-01-29 20:00:50 +01:00
parent 971a8264b2
commit 924bf65517
6 changed files with 286 additions and 102 deletions

1
.gitignore vendored
View File

@ -25,3 +25,4 @@ dist/
local/ local/
gh-pages/ gh-pages/
searx.egg-info/ searx.egg-info/
.config

8
utils/dot_config Normal file
View File

@ -0,0 +1,8 @@
# -*- coding: utf-8; mode: sh -*-
# SPDX-License-Identifier: AGPL-3.0-or-later
#
# Set environment used by ./utils scripts like filtron.sh or searx.sh
#
# Public URL of the searx instance
PUBLIC_URL="${PUBLIC_URL:-https://$(uname -n)/searx}"

View File

@ -5,6 +5,7 @@
# 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
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# config # config
@ -30,7 +31,9 @@ GO_ENV="${SERVICE_HOME}/.go_env"
GO_PKG_URL="https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz" GO_PKG_URL="https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz"
GO_TAR=$(basename "$GO_PKG_URL") GO_TAR=$(basename "$GO_PKG_URL")
APACHE_SITE="searx.conf" # Apache Settings
APACHE_FILTRON_SITE="searx.conf"
# shellcheck disable=SC2034 # shellcheck disable=SC2034
CONFIG_FILES=( CONFIG_FILES=(
@ -53,22 +56,32 @@ usage:
$(basename "$0") remove [all] $(basename "$0") remove [all]
$(basename "$0") activate [service] $(basename "$0") activate [service]
$(basename "$0") deactivate [service] $(basename "$0") deactivate [service]
$(basename "$0") show [service] $(basename "$0") inspect [service]
$(basename "$0") apache [install|remove]
shell shell
start interactive shell from user ${SERVICE_USER} start interactive shell from user ${SERVICE_USER}
install / remove all install / remove
complete setup of filtron service all: complete setup of filtron service
user: add/remove service user '$SERVICE_USER' at $SERVICE_HOME
update filtron update filtron
Update filtron installation of user ${SERVICE_USER} Update filtron installation of user ${SERVICE_USER}
activate activate service
activate and start service daemon (systemd unit) activate and start service daemon (systemd unit)
deactivate service deactivate service
stop and deactivate service daemon (systemd unit) stop and deactivate service daemon (systemd unit)
install user inspect service
add service user '$SERVICE_USER' at $SERVICE_HOME
show service
show service status and log show service status and log
apache
install: apache site with a reverse proxy (ProxyPass)
remove: apache site ${APACHE_FILTRON_SITE}
If needed change the environment variable PUBLIC_URL of your WEB service in the
${DOT_CONFIG#"$REPO_ROOT/"} file:
PUBLIC_URL : ${PUBLIC_URL}
EOF EOF
[ ! -z ${1+x} ] && echo -e "$1" [ ! -z ${1+x} ] && echo -e "$1"
} }
@ -76,6 +89,10 @@ EOF
main() { main() {
rst_title "$SERVICE_NAME" part rst_title "$SERVICE_NAME" part
required_commands \
dpkg apt-get 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
@ -86,11 +103,11 @@ main() {
sudo_or_exit sudo_or_exit
interactive_shell interactive_shell
;; ;;
show) inspect)
case $2 in case $2 in
service) service)
sudo_or_exit sudo_or_exit
show_service inspect_service
;; ;;
*) usage "$_usage"; exit 42;; *) usage "$_usage"; exit 42;;
esac ;; esac ;;
@ -126,6 +143,14 @@ main() {
service) deactivate_service ;; service) deactivate_service ;;
*) usage "$_usage"; exit 42;; *) usage "$_usage"; exit 42;;
esac ;; esac ;;
apache)
sudo_or_exit
case $2 in
install) install_apache_site ;;
remove) remove_apache_site ;;
*) usage "$_usage"; exit 42;;
esac ;;
*) usage "ERROR: unknown or missing command $1"; exit 42;; *) usage "ERROR: unknown or missing command $1"; exit 42;;
esac esac
} }
@ -140,14 +165,29 @@ install_all() {
wait_key wait_key
install_service install_service
wait_key wait_key
if apache_is_installed; then echo
install_apache_site if ! service_is_available "http://${FILTRON_LISTEN}" ; then
wait_key err_msg "Filtron does not listening on: http://${FILTRON_LISTEN}"
fi 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
fi
if ask_yn "Do you want to inspect the installation?" Yn; then
inspect_service
fi
} }
remove_all() { remove_all() {
rst_title "De-Install $SERVICE_NAME (service)" rst_title "De-Install $SERVICE_NAME (service)"
rst_para "\
It goes without saying that this script can only be used to remove
installations that were installed with this script."
remove_service remove_service
wait_key wait_key
remove_user remove_user
@ -155,18 +195,6 @@ remove_all() {
wait_key wait_key
} }
filtron_is_available() {
curl --insecure "http://${FILTRON_LISTEN}" &>/dev/null
}
api_is_available() {
curl --insecure "http://${FILTRON_API}" &>/dev/null
}
target_is_available() {
curl --insecure "http://${FILTRON_TARGET}" &>/dev/null
}
install_service() { install_service() {
rst_title "Install System-D Unit ${SERVICE_NAME}.service" section rst_title "Install System-D Unit ${SERVICE_NAME}.service" section
echo echo
@ -191,7 +219,7 @@ systemctl enable $SERVICE_NAME.service
systemctl restart $SERVICE_NAME.service systemctl restart $SERVICE_NAME.service
EOF EOF
tee_stderr <<EOF | bash 2>&1 tee_stderr <<EOF | bash 2>&1
systemctl status $SERVICE_NAME.service systemctl status --no-pager $SERVICE_NAME.service
EOF EOF
} }
@ -265,9 +293,8 @@ mkdir -p \$HOME/local
rm -rf \$HOME/local/go rm -rf \$HOME/local/go
tar -C \$HOME/local -xzf ${CACHE}/${GO_TAR} tar -C \$HOME/local -xzf ${CACHE}/${GO_TAR}
EOF EOF
echo
sudo -i -u "$SERVICE_USER" <<EOF | prefix_stdout sudo -i -u "$SERVICE_USER" <<EOF | prefix_stdout
! which go >/dev/null && echo "Go Installation not found in PATH!?!" ! which go >/dev/null && echo "ERROR - Go Installation not found in PATH!?!"
which go >/dev/null && go version && echo "congratulations -- Go installation OK :)" which go >/dev/null && go version && echo "congratulations -- Go installation OK :)"
EOF EOF
} }
@ -293,9 +320,20 @@ go get -v -u github.com/asciimoo/filtron
EOF EOF
} }
show_service() { inspect_service() {
rst_title "service status & log" rst_title "service status & log"
echo
cat <<EOF
sourced ${DOT_CONFIG#"$REPO_ROOT/"} :
PUBLIC_URL : ${PUBLIC_URL}
FILTRON_API : ${FILTRON_API}
FILTRON_LISTEN : ${FILTRON_LISTEN}
FILTRON_TARGET : ${FILTRON_TARGET}
EOF
apache_is_installed && info_msg "Apache is installed." apache_is_installed && info_msg "Apache is installed."
@ -314,20 +352,21 @@ show_service() {
else else
err_msg "~$SERVICE_USER: filtron app is not installed!" err_msg "~$SERVICE_USER: filtron app is not installed!"
fi fi
if api_is_available; then
info_msg "API available at: http://${FILTRON_API}" if ! service_is_available "http://${FILTRON_API}"; then
else
err_msg "API not available at: http://${FILTRON_API}" err_msg "API not available at: http://${FILTRON_API}"
fi fi
if filtron_is_available; then
info_msg "Filtron listening on: http://${FILTRON_LISTEN}" if ! service_is_available "http://${FILTRON_LISTEN}" ; then
else
err_msg "Filtron does not listening on: http://${FILTRON_LISTEN}" err_msg "Filtron does not listening on: http://${FILTRON_LISTEN}"
fi fi
if target_is_available; then
if ! service_is_available ""http://${FILTRON_TARGET}"" ; then
info_msg "Filtron's target is available at: http://${FILTRON_TARGET}" info_msg "Filtron's target is available at: http://${FILTRON_TARGET}"
else fi
err_msg "Filtron's target is not available at: http://${FILTRON_TARGET}"
if ! service_is_available "${PUBLIC_URL}"; then
err_msg "Public service at ${PUBLIC_URL} is not available!"
fi fi
wait_key wait_key
@ -344,10 +383,44 @@ show_service() {
} }
install_apache_site() { install_apache_site() {
rst_title "Install Apache site $APACHE_SITE" section
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 && err_msg "Apache is not installed."
if ! ask_yn "Do you really want to continue?"; then
return
fi
a2enmod proxy
a2enmod proxy_http
echo echo
err_msg "not yet implemented (${APACHE_SITE})"; return 42 apache_install_site --variant=filtron "${APACHE_FILTRON_SITE}"
# apache_install_site "${APACHE_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() {
rst_title "Remove Apache site $APACHE_FILTRON_SITE"
rst_para "\
This removes apache site ${APACHE_FILTRON_SITE}."
! apache_is_installed && err_msg "Apache is not installed."
if ! ask_yn "Do you really want to continue?"; then
return
fi
apache_remove_site "$APACHE_FILTRON_SITE"
} }
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# -*- coding: utf-8; mode: sh indent-tabs-mode: nil -*- # -*- coding: utf-8; mode: sh indent-tabs-mode: nil -*-
# shellcheck disable=SC2059,SC1117,SC2162,SC2004 # SPDX-License-Identifier: AGPL-3.0-or-later
# shellcheck disable=SC2059,SC1117
ADMIN_NAME="${ADMIN_NAME:-$(git config user.name)}" ADMIN_NAME="${ADMIN_NAME:-$(git config user.name)}"
ADMIN_NAME="${ADMIN_NAME:-$USER}" ADMIN_NAME="${ADMIN_NAME:-$USER}"
@ -35,6 +36,20 @@ if [[ -z ${DIFF_CMD} ]]; then
fi fi
fi fi
DOT_CONFIG="${DOT_CONFIG:-${REPO_ROOT}/.config}"
source_dot_config() {
if [[ ! -e "$DOT_CONFIG" ]]; then
info_msg "installing $DOT_CONFIG"
cp "$(dirname "${BASH_SOURCE[0]}")/dot_config" "$DOT_CONFIG"
if [[ ! -z ${SUDO_USER} ]]; then
chown "${SUDO_USER}:${SUDO_USER}" "$DOT_CONFIG"
fi
fi
# shellcheck disable=SC1090
source "${REPO_ROOT}/.config"
}
sudo_or_exit() { sudo_or_exit() {
# usage: sudo_or_exit # usage: sudo_or_exit
@ -44,6 +59,22 @@ sudo_or_exit() {
fi fi
} }
required_commands() {
# usage: requires_commands [cmd1 ...]
local exit_val=0
while [ ! -z "$1" ]; do
if ! command -v "$1" &>/dev/null; then
err_msg "missing command $1"
exit_val=42
fi
shift
done
return $exit_val
}
rst_title() { rst_title() {
# usage: rst_title <header-text> [part|chapter|section] # usage: rst_title <header-text> [part|chapter|section]
@ -81,7 +112,7 @@ info_msg() { echo -e "INFO: $*"; }
clean_stdin() { clean_stdin() {
if [[ $(uname -s) != 'Darwin' ]]; then if [[ $(uname -s) != 'Darwin' ]]; then
while read -n1 -t 0.1; do : ; done while read -r -n1 -t 0.1; do : ; done
fi fi
} }
@ -93,7 +124,7 @@ wait_key(){
[[ ! -z $FORCE_TIMEOUT ]] && _t=$FORCE_TIMEOUT [[ ! -z $FORCE_TIMEOUT ]] && _t=$FORCE_TIMEOUT
[[ ! -z $_t ]] && _t="-t $_t" [[ ! -z $_t ]] && _t="-t $_t"
# shellcheck disable=SC2086 # shellcheck disable=SC2086
read -s -n1 $_t -p "** press any [KEY] to continue **" read -r -s -n1 $_t -p "** press any [KEY] to continue **"
echo echo
clean_stdin clean_stdin
} }
@ -124,7 +155,7 @@ ask_yn() {
clean_stdin clean_stdin
printf "$1 ${choice} " printf "$1 ${choice} "
# shellcheck disable=SC2086 # shellcheck disable=SC2086
read -n1 $_t read -r -n1 $_t
if [[ -z $REPLY ]]; then if [[ -z $REPLY ]]; then
printf "$default\n"; break printf "$default\n"; break
elif [[ $REPLY =~ ^[Yy]$ ]]; then elif [[ $REPLY =~ ^[Yy]$ ]]; then
@ -156,7 +187,7 @@ tee_stderr () {
local _t="0"; local _t="0";
if [[ ! -z $1 ]] ; then _t="$1"; fi if [[ ! -z $1 ]] ; then _t="$1"; fi
(while read line; do (while read -r line; do
# shellcheck disable=SC2086 # shellcheck disable=SC2086
sleep $_t sleep $_t
echo -e "$line" >&2 echo -e "$line" >&2
@ -171,6 +202,7 @@ prefix_stdout () {
if [[ ! -z $1 ]] ; then prefix="$1"; fi if [[ ! -z $1 ]] ; then prefix="$1"; fi
# shellcheck disable=SC2162
(while IFS= read line; do (while IFS= read line; do
echo -e "${prefix}$line" echo -e "${prefix}$line"
done) done)
@ -214,7 +246,7 @@ cache_download() {
else else
wget --progress=bar -O "${CACHE}/$2" "$1" ; exit_value=$? wget --progress=bar -O "${CACHE}/$2" "$1" ; exit_value=$?
fi fi
if $exit_value; then if [[ $exit_value = 0 ]]; then
err_msg "failed to download: $1" err_msg "failed to download: $1"
fi fi
fi fi
@ -238,7 +270,7 @@ choose_one() {
list=("$@") list=("$@")
echo -e "Menu::" echo -e "Menu::"
for ((i=1; i<= $(($max -1)); i++)); do for ((i=1; i<= $((max -1)); i++)); do
if [[ "$i" == "$default" ]]; then if [[ "$i" == "$default" ]]; then
echo -e " $i.) ${list[$i]} [default]" echo -e " $i.) ${list[$i]} [default]"
else else
@ -249,15 +281,15 @@ choose_one() {
clean_stdin clean_stdin
printf "$1 [$default] " printf "$1 [$default] "
if (( 10 > $max )); then if (( 10 > max )); then
# shellcheck disable=SC2086 # shellcheck disable=SC2086
read -n1 $_t read -r -n1 $_t
else else
# shellcheck disable=SC2086,SC2229 # shellcheck disable=SC2086,SC2229
read $_t read -r $_t
fi fi
# selection fits # selection fits
[[ $REPLY =~ ^-?[0-9]+$ ]] && (( $REPLY > 0 )) && (( $REPLY < $max )) && break [[ $REPLY =~ ^-?[0-9]+$ ]] && (( REPLY > 0 )) && (( REPLY < max )) && break
# take default # take default
[[ -z $REPLY ]] && REPLY=$default && break [[ -z $REPLY ]] && REPLY=$default && break
@ -386,6 +418,28 @@ install_template() {
done done
} }
service_is_available() {
# usage: service_is_available <URL>
local URL="$1"
if [[ -z $URL ]]; then
err_msg "service_is_available: missing arguments"
return 42
fi
http_code=$(curl -H 'Cache-Control: no-cache' \
--silent -o /dev/null --head --write-out '%{http_code}' --insecure \
"${URL}")
exit_val=$?
if [[ $exit_val = 0 ]]; then
info_msg "got $http_code from ${URL}"
fi
return $exit_val
}
# Apache # Apache
# ------ # ------
@ -430,18 +484,32 @@ apache_install_site() {
root root 644 root root 644
apache_enable_site "${pos_args[1]}" apache_enable_site "${pos_args[1]}"
apache_reload
info_msg "installed apache site: ${pos_args[1]}" info_msg "installed apache site: ${pos_args[1]}"
} }
apache_remove_site() {
# usage: apache_remove_site <mysite.conf>
info_msg "remove apache site: $1"
apache_dissable_site "$1"
rm -f "${APACHE_SITES_AVAILABE}/$1"
}
apache_enable_site() { apache_enable_site() {
info_msg "enable apache site $1 .."
# usage: apache_enable_site <mysite.conf>
info_msg "enable apache site: $1"
sudo -H a2ensite -q "$1" sudo -H a2ensite -q "$1"
apache_reload apache_reload
} }
apache_dissable_site() { apache_dissable_site() {
info_msg "disable apache site $1 .."
# usage: apache_disable_site <mysite.conf>
info_msg "disable apache site: $1"
sudo -H a2dissite -q "$1" sudo -H a2dissite -q "$1"
apache_reload apache_reload
} }
@ -456,7 +524,7 @@ uWSGI_restart() {
# usage: uWSGI_restart() # usage: uWSGI_restart()
info_msg "restart uWSGI service" info_msg "restart uWSGI service"
sudo -H systemctl restart uwsgi systemctl restart uwsgi
} }
uWSGI_app_available() { uWSGI_app_available() {
@ -498,10 +566,10 @@ uWSGI_remove_app() {
# usage: uWSGI_remove_app <myapp.ini> # usage: uWSGI_remove_app <myapp.ini>
local CONF="$1" local CONF="$1"
info_msg "remove uWSGI app: ${CONF}"
uWSGI_disable_app "${CONF}" uWSGI_disable_app "${CONF}"
uWSGI_restart uWSGI_restart
rm -f "${uWSGI_SETUP}/apps-available/${CONF}" rm -f "${uWSGI_SETUP}/apps-available/${CONF}"
info_msg "removed uWSGI app: ${CONF}"
} }
uWSGI_app_enabled() { uWSGI_app_enabled() {
@ -542,6 +610,9 @@ uWSGI_disable_app() {
return 42 return 42
fi fi
rm -f "${uWSGI_SETUP}/apps-enabled/${CONF}" rm -f "${uWSGI_SETUP}/apps-enabled/${CONF}"
# FIXME: restart uwsgi service won't stop wsgi forked processes of user searx.
# I had to kill them manually here ...
pkill -f "${uWSGI_SETUP}/apps-enabled/${CONF}" -9
info_msg "disabled uWSGI app: ${CONF} (restart uWSGI required)" info_msg "disabled uWSGI app: ${CONF} (restart uWSGI required)"
} }

View File

@ -1,19 +1,20 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# -*- coding: utf-8; mode: sh indent-tabs-mode: nil -*- # -*- coding: utf-8; mode: sh indent-tabs-mode: nil -*-
# SPDX-License-Identifier: AGPL-3.0-or-later # SPDX-License-Identifier: AGPL-3.0-or-later
# shellcheck disable=SC2119 # shellcheck disable=SC2001
# 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
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# config # config
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
SEARX_PUBLIC_URL="${SEARX_PUBLIC_URL:-https://$(uname -n)/searx}" SEARX_URL_PATH="${SEARX_URL_PATH:-$(echo "${PUBLIC_URL}" \
SEARX_URL_PATH="${SEARX_URL_PATH:-$(echo "$SEARX_PUBLIC_URL" \ | sed -e 's,^.*://[^/]*\(/.*\),\1,g')}"
| sed -e 's,^.*://[^/]*\(/.*\),\1,g') }" [[ "${SEARX_URL_PATH}" == "${PUBLIC_URL}" ]] && SEARX_URL_PATH=/
SEARX_INSTANCE_NAME="${SEARX_INSTANCE_NAME:-searx@$(echo "$SEARX_PUBLIC_URL" \ SEARX_INSTANCE_NAME="${SEARX_INSTANCE_NAME:-searx@$(echo "$PUBLIC_URL" \
| sed -e 's,^.*://\([^\:/]*\).*,\1,g') }" | sed -e 's,^.*://\([^\:/]*\).*,\1,g') }"
SERVICE_USER="searx" SERVICE_USER="searx"
@ -42,10 +43,10 @@ SEARX_APT_PACKAGES="\
# Apache Settings # Apache Settings
APACHE_APT_PACKAGES="\ APACHE_APT_PACKAGES="\
apache2 libapache2-mod-uwsgi \ libapache2-mod-uwsgi \
" "
SEARX_APACHE_SITE="searx.conf" APACHE_SEARX_SITE="searx.conf"
# shellcheck disable=SC2034 # shellcheck disable=SC2034
CONFIG_FILES=( CONFIG_FILES=(
@ -74,6 +75,7 @@ usage:
$(basename "$0") deactivate [service] $(basename "$0") deactivate [service]
$(basename "$0") inspect [service] $(basename "$0") inspect [service]
$(basename "$0") option [debug-on|debug-off] $(basename "$0") option [debug-on|debug-off]
$(basename "$0") apache [install|remove]
shell shell
start interactive shell from user ${SERVICE_USER} start interactive shell from user ${SERVICE_USER}
@ -82,23 +84,25 @@ install / remove
user: add/remove service user '$SERVICE_USER' at $SERVICE_HOME user: add/remove service user '$SERVICE_USER' at $SERVICE_HOME
searx-src: clone $SEARX_GIT_URL searx-src: clone $SEARX_GIT_URL
pyenv: create/remove virtualenv (python) in $SEARX_PYENV pyenv: create/remove virtualenv (python) in $SEARX_PYENV
apache: install apache site for searx-uwsgi app
update searx update searx
Update searx installation of user ${SERVICE_USER} Update searx installation of user ${SERVICE_USER}
activate activate service
activate and start service daemon (systemd unit) activate and start service daemon (systemd unit)
deactivate service deactivate service
stop and deactivate service daemon (systemd unit) stop and deactivate service daemon (systemd unit)
inspect service inspect service
run some small tests and inspect service's status and log run some small tests and inspect service's status and log
option option
set one of te available options set one of the available options
apache
install: apache site with the searx uwsgi app
remove: apache site ${APACHE_FILTRON_SITE}
Use environment SEARX_PUBLIC_URL to set public URL of your WEB-Server: If needed change the environment variable PUBLIC_URL of your WEB service in the
${DOT_CONFIG#"$REPO_ROOT/"} file:
SEARX_PUBLIC_URL : ${SEARX_PUBLIC_URL} PUBLIC_URL : ${PUBLIC_URL}
SEARX_URL_PATH : ${SEARX_URL_PATH} SEARX_INSTANCE_NAME : ${SEARX_INSTANCE_NAME}
SEARX_INSTANCE_NAME : ${SEARX_INSTANCE_NAME}
EOF EOF
[ ! -z ${1+x} ] && echo -e "$1" [ ! -z ${1+x} ] && echo -e "$1"
@ -107,6 +111,10 @@ EOF
main() { main() {
rst_title "$SEARX_INSTANCE_NAME" part rst_title "$SEARX_INSTANCE_NAME" part
required_commands \
dpkg systemctl apt-get 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
@ -132,7 +140,6 @@ main() {
user) assert_user ;; user) assert_user ;;
pyenv) create_pyenv ;; pyenv) create_pyenv ;;
searx-src) clone_searx ;; searx-src) clone_searx ;;
apache) install_apache_site ;;
*) usage "$_usage"; exit 42;; *) usage "$_usage"; exit 42;;
esac ;; esac ;;
update) update)
@ -154,13 +161,13 @@ main() {
sudo_or_exit sudo_or_exit
case $2 in case $2 in
service) service)
activate_service; uWSGI_restart ;; activate_service ;;
*) usage "$_usage"; exit 42;; *) usage "$_usage"; exit 42;;
esac ;; esac ;;
deactivate) deactivate)
sudo_or_exit sudo_or_exit
case $2 in case $2 in
service) deactivate_service; uWSGI_restart ;; service) deactivate_service ;;
*) usage "$_usage"; exit 42;; *) usage "$_usage"; exit 42;;
esac ;; esac ;;
option) option)
@ -170,6 +177,14 @@ main() {
debug-off) echo; disable_debug ;; debug-off) echo; disable_debug ;;
*) usage "$_usage"; exit 42;; *) usage "$_usage"; exit 42;;
esac ;; esac ;;
apache)
sudo_or_exit
case $2 in
install) install_apache_site ;;
remove) remove_apache_site ;;
*) usage "$_usage"; exit 42;;
esac ;;
*) usage "ERROR: unknown or missing command $1"; exit 42;; *) usage "ERROR: unknown or missing command $1"; exit 42;;
esac esac
} }
@ -191,9 +206,7 @@ install_all() {
test_local_searx test_local_searx
wait_key wait_key
install_searx_uwsgi install_searx_uwsgi
if service_is_available "http://$SEARX_INTERNAL_URL" &>/dev/null; then if ! service_is_available "http://$SEARX_INTERNAL_URL"; then
info_msg "URL http://$SEARX_INTERNAL_URL is available."
else
err_msg "URL http://$SEARX_INTERNAL_URL not available, check searx & uwsgi setup!" err_msg "URL http://$SEARX_INTERNAL_URL not available, check searx & uwsgi setup!"
fi fi
if ask_yn "Do you want to inspect the installation?" Yn; then if ask_yn "Do you want to inspect the installation?" Yn; then
@ -418,12 +431,14 @@ activate_service() {
rst_title "Activate $SEARX_INSTANCE_NAME (service)" section rst_title "Activate $SEARX_INSTANCE_NAME (service)" section
echo echo
uWSGI_enable_app "$SEARX_UWSGI_APP" uWSGI_enable_app "$SEARX_UWSGI_APP"
uWSGI_restart
} }
deactivate_service() { deactivate_service() {
rst_title "De-Activate $SEARX_INSTANCE_NAME (service)" section rst_title "De-Activate $SEARX_INSTANCE_NAME (service)" section
echo echo
uWSGI_disable_app "$SEARX_UWSGI_APP" uWSGI_disable_app "$SEARX_UWSGI_APP"
uWSGI_restart
} }
interactive_shell() { interactive_shell() {
@ -438,12 +453,6 @@ git --no-pager diff
EOF EOF
} }
service_is_available() {
curl -H 'Cache-Control: no-cache' -o /dev/null \
--silent --head --write-out '%{http_code}' --insecure \
"${1?missing URL argument}"
}
enable_debug() { enable_debug() {
info_msg "try to enable debug mode ..." info_msg "try to enable debug mode ..."
tee_stderr 0.1 <<EOF | sudo -H -u "${SERVICE_USER}" -i 2>&1 | prefix_stdout "$_service_prefix" tee_stderr 0.1 <<EOF | sudo -H -u "${SERVICE_USER}" -i 2>&1 | prefix_stdout "$_service_prefix"
@ -464,7 +473,16 @@ EOF
inspect_service() { inspect_service() {
rst_title "service status & log" rst_title "service status & log"
echo cat <<EOF
sourced ${DOT_CONFIG#"$REPO_ROOT/"} :
PUBLIC_URL : ${PUBLIC_URL}
SEARX_URL_PATH : ${SEARX_URL_PATH}
SEARX_INSTANCE_NAME : ${SEARX_INSTANCE_NAME}
SEARX_INTERNAL_URL : ${SEARX_INTERNAL_URL}
EOF
apache_is_installed && info_msg "Apache is installed." apache_is_installed && info_msg "Apache is installed."
@ -475,15 +493,15 @@ inspect_service() {
fi fi
if pyenv_is_available; then if pyenv_is_available; then
info_msg "${SEARX_PYENV}/bin/activate is available." info_msg "~$SERVICE_USER: python environment is available."
else else
err_msg "${SEARX_PYENV}/bin/activate not available!" err_msg "~$SERVICE_USER: python environment is not available!"
fi fi
if clone_is_available; then if clone_is_available; then
info_msg "Searx software is installed." info_msg "~$SERVICE_USER: Searx software is installed."
else else
err_msg "Missing searx software!" err_msg "~$SERVICE_USER: Missing searx software!"
fi fi
if uWSGI_app_enabled "$SEARX_UWSGI_APP"; then if uWSGI_app_enabled "$SEARX_UWSGI_APP"; then
@ -495,16 +513,12 @@ inspect_service() {
uWSGI_app_available "$SEARX_UWSGI_APP" \ uWSGI_app_available "$SEARX_UWSGI_APP" \
|| err_msg "uWSGI app $SEARX_UWSGI_APP not available!" || err_msg "uWSGI app $SEARX_UWSGI_APP not available!"
if service_is_available "http://$SEARX_INTERNAL_URL" &>/dev/null; then if ! service_is_available "http://$SEARX_INTERNAL_URL"; then
info_msg "uWSGI app (service) at http://$SEARX_INTERNAL_URL is available"
else
err_msg "uWSGI app (service) at http://$SEARX_INTERNAL_URL is not available!" err_msg "uWSGI app (service) at http://$SEARX_INTERNAL_URL is not available!"
fi fi
if service_is_available "${SEARX_PUBLIC_URL}" &>/dev/null; then if ! service_is_available "${PUBLIC_URL}"; then
info_msg "Public service at ${SEARX_PUBLIC_URL} is available" err_msg "Public service at ${PUBLIC_URL} is not available!"
else
err_msg "Public service at ${SEARX_PUBLIC_URL} is not available!"
fi fi
local _debug_on local _debug_on
@ -530,7 +544,7 @@ inspect_service() {
} }
install_apache_site() { install_apache_site() {
rst_title "Install Apache site $SEARX_APACHE_SITE" rst_title "Install Apache site $APACHE_SEARX_SITE"
rst_para "\ rst_para "\
This installs the searx uwsgi app as apache site. If your server ist public to This installs the searx uwsgi app as apache site. If your server ist public to
@ -547,15 +561,29 @@ excessively bot queries."
a2enmod uwsgi a2enmod uwsgi
echo echo
apache_install_site --variant=uwsgi "${SEARX_APACHE_SITE}" apache_install_site --variant=uwsgi "${APACHE_SEARX_SITE}"
if service_is_available "${SEARX_PUBLIC_URL}" &>/dev/null; then if ! service_is_available "${PUBLIC_URL}"; then
info_msg "Public service at ${SEARX_PUBLIC_URL} is available" err_msg "Public service at ${PUBLIC_URL} is not available!"
else
err_msg "Public service at ${SEARX_PUBLIC_URL} is not available!"
fi 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?"; then
return
fi
apache_remove_site "${APACHE_SEARX_SITE}"
}
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
main "$@" main "$@"
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8; mode: apache -*-
ProxyPass "/searx" "http://127.0.0.1:4004/"