From af6acd3417bf53c151b9ba6068186c1e472a2776 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Wed, 26 Feb 2020 19:07:55 +0100 Subject: [PATCH] LXC: install searx-suite installs searx, filtron & morty on all containers Signed-off-by: Markus Heiser --- utils/filtron.sh | 3 +- utils/lib.sh | 9 +++ utils/lxc.sh | 55 ++++++++++++++++--- utils/morty.sh | 3 +- utils/searx.sh | 22 +++++--- .../etc/uwsgi/apps-archlinux/searx.ini | 2 +- 6 files changed, 74 insertions(+), 20 deletions(-) diff --git a/utils/filtron.sh b/utils/filtron.sh index ba284787e..56b27dc78 100755 --- a/utils/filtron.sh +++ b/utils/filtron.sh @@ -204,7 +204,7 @@ install_all() { install_apache_site fi fi - if ask_yn "Do you want to inspect the installation?" Yn; then + if ask_yn "Do you want to inspect the installation?" Ny; then inspect_service fi @@ -253,7 +253,6 @@ grep -qFs -- 'source $GO_ENV' ~/.profile || echo 'source $GO_ENV' >> ~/.profile EOF } - filtron_is_installed() { [[ -f $SERVICE_HOME/go-apps/bin/filtron ]] } diff --git a/utils/lib.sh b/utils/lib.sh index 39b9134d0..aeb38e150 100755 --- a/utils/lib.sh +++ b/utils/lib.sh @@ -290,6 +290,15 @@ cache_download() { fi } +backup_file() { + + # usage: backup_file /path/to/file.foo + + local stamp=$(date +"_%Y%m%d_%H%M%S") + info_msg "create backup: ${1}${stamp}" + cp -a "${1}" "${1}${stamp}" +} + choose_one() { # usage: diff --git a/utils/lxc.sh b/utils/lxc.sh index 502f25366..58528d591 100755 --- a/utils/lxc.sh +++ b/utils/lxc.sh @@ -19,6 +19,7 @@ HOST_PREFIX="${HOST_PREFIX:-searx}" # where all folders from HOST are mounted LXC_SHARE_FOLDER="/share" +LXC_REPO_ROOT="${LXC_SHARE_FOLDER}/$(basename "${REPO_ROOT}")" TEST_IMAGES=( "$LINUXCONTAINERS_ORG_NAME:ubuntu/18.04" "ubu1804" @@ -71,6 +72,7 @@ usage() { usage:: $(basename "$0") build [containers] + $(basename "$0") install [searx-suite] $(basename "$0") remove [containers|subordinate] $(basename "$0") [start|stop] [containers] $(basename "$0") inspect [info|config] @@ -87,6 +89,8 @@ inspect :config: show config of all containers cmd ... run commandline ... in all containers +install + :searx-suite: install searx suite, includes morty & filtron all LXC containers: ${LOCAL_IMAGES[@]} @@ -110,14 +114,24 @@ EOF main() { local exit_val - - if ! required_commands lxc; then - lxd_info - exit 42 - fi - local _usage="unknown or missing $1 command $2" + case $1 in + __install) + sudo_or_exit + case $2 in + searx-suite) install_searx_suite ;; + esac + exit + ;; + *) + if ! required_commands lxc; then + lxd_info + exit 42 + fi + ;; + esac + case $1 in --source-only) ;; -h|--help) usage; exit 0;; @@ -161,6 +175,7 @@ main() { sudo_or_exit shift for i in "${LOCAL_IMAGES[@]}"; do + exit_val= info_msg "[${_BBlue}${i}${_creset}] ${_BGreen}${*}${_creset}" lxc exec "${i}" -- "$@" exit_val=$? @@ -171,11 +186,37 @@ main() { fi done ;; + install) + sudo_or_exit + case $2 in + searx-suite) + for i in "${LOCAL_IMAGES[@]}"; do + info_msg "[${_BBlue}${i}${_creset}] ${_BGreen}${LXC_REPO_ROOT}/utils/lxc.sh install $2${_creset}" + lxc exec "${i}" -- "${LXC_REPO_ROOT}/utils/lxc.sh" __install "$2" + done + ;; + *) usage "$_usage"; exit 42;; + esac ;; *) usage "unknown or missing command $1"; exit 42;; esac } +install_searx_suite() { + export FILTRON_API="0.0.0.0:4005" + export FILTRON_LISTEN="0.0.0.0:4004" + export MORTY_LISTEN="0.0.0.0:3000" + FORCE_TIMEOUT=0 "${LXC_REPO_ROOT}/utils/searx.sh" install all + FORCE_TIMEOUT=0 "${LXC_REPO_ROOT}/utils/morty.sh" install all + FORCE_TIMEOUT=0 "${LXC_REPO_ROOT}/utils/filtron.sh" install all + rst_title "[$(hostname)] searx-suite installation finished" part + rst_para "IPs of the container ..." + echo + ip addr show | grep "inet\s*[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" + echo +} + + build_instances() { rst_title "Build LXC instances" @@ -271,7 +312,7 @@ lxc_config_containers() { # https://lxd.readthedocs.io/en/latest/instances/#type-disk lxc config device add "$i" repo_share disk \ source="${REPO_ROOT}" \ - path="${LXC_SHARE_FOLDER}/$(basename "${REPO_ROOT}")" &>/dev/null + path="${LXC_REPO_ROOT}" &>/dev/null # lxc config show "$i" && wait_key done } diff --git a/utils/morty.sh b/utils/morty.sh index 1ce15608f..fcc9dc728 100755 --- a/utils/morty.sh +++ b/utils/morty.sh @@ -207,7 +207,7 @@ install_all() { install_apache_site fi fi - if ask_yn "Do you want to inspect the installation?" Yn; then + if ask_yn "Do you want to inspect the installation?" Ny; then inspect_service fi @@ -408,6 +408,7 @@ This removes apache site ${APACHE_MORTY_SITE}." apache_remove_site "$APACHE_MORTY_SITE" } + # ---------------------------------------------------------------------------- main "$@" # ---------------------------------------------------------------------------- diff --git a/utils/searx.sh b/utils/searx.sh index c6f58b6a9..270c30ace 100755 --- a/utils/searx.sh +++ b/utils/searx.sh @@ -43,9 +43,6 @@ case $DIST_ID in git build-essential libxslt-dev zlib1g-dev libffi-dev libssl-dev " ;; arch) # pacman packages - # FIXME: - # - /usr/lib/uwsgi/http_plugin.so: cannot open shared object file: No such file or directory !!! - # - /usr/lib/uwsgi/systemd_logger_plugin.so: cannot open shared object file: No such file or directory !!! SEARX_PACKAGES="\ python python-pip python-lxml python-babel \ uwsgi uwsgi-plugin-python \ @@ -233,7 +230,7 @@ install_all() { if ! service_is_available "http://$SEARX_INTERNAL_URL"; then err_msg "URL http://$SEARX_INTERNAL_URL not available, check searx & uwsgi setup!" fi - if ask_yn "Do you want to inspect the installation?" Yn; then + if ask_yn "Do you want to inspect the installation?" Ny; then inspect_service fi } @@ -331,19 +328,26 @@ install_settings() { return fi - rst_para "Diff between origin's setting file (-) and current (+):" + rst_para "Diff between origin's setting file (+) and current (-):" echo - $DIFF_CMD "${SEARX_SRC}/searx/settings.yml" "${SEARX_SETTINGS_PATH}" + $DIFF_CMD "${SEARX_SETTINGS_PATH}" "${SEARX_SRC}/searx/settings.yml" local action choose_one action "What should happen to the settings file? " \ - "keep new configuration" \ + "keep configuration unchanged" \ + "use origin settings" \ "start interactiv shell" case $action in - "keep new configuration") - info_msg "continue using new settings file" + "keep configuration unchanged") + info_msg "leave settings file unchanged" + ;; + "use origin settings") + backup_file "${SEARX_SETTINGS_PATH}" + info_msg "install origin settings" + cp "${SEARX_SRC}/searx/settings.yml" "${SEARX_SETTINGS_PATH}" ;; "start interactiv shell") + backup_file "${SEARX_SETTINGS_PATH}" echo -e "// exit with [${_BCyan}CTRL-D${_creset}]" sudo -H -i rst_para 'Diff between new setting file (-) and current (+):' diff --git a/utils/templates/etc/uwsgi/apps-archlinux/searx.ini b/utils/templates/etc/uwsgi/apps-archlinux/searx.ini index 08873cf0f..78ad50443 100644 --- a/utils/templates/etc/uwsgi/apps-archlinux/searx.ini +++ b/utils/templates/etc/uwsgi/apps-archlinux/searx.ini @@ -32,7 +32,7 @@ master = true lazy-apps = true # load uWSGI plugins -plugin = python,http,systemd_logger +plugin = python # By default the Python plugin does not initialize the GIL. This means your # app-generated threads will not run. If you need threads, remember to enable