#!/usr/bin/env bash # SPDX-License-Identifier: AGPL-3.0-or-later # shellcheck source=utils/lib.sh source "$(dirname "${BASH_SOURCE[0]}")/lib.sh" # shellcheck source=utils/lib_install.sh source "${REPO_ROOT}/utils/lib_install.sh" # ---------------------------------------------------------------------------- # config # ---------------------------------------------------------------------------- MORTY_LISTEN="${MORTY_LISTEN:-127.0.0.1:3000}" 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}}" # shellcheck disable=SC2034 MORTY_TIMEOUT=5 SERVICE_NAME="morty" 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" # 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" GO_PKG_URL="https://golang.org/dl/${GO_VERSION}.linux-amd64.tar.gz" GO_TAR=$(basename "$GO_PKG_URL") # shellcheck disable=SC2034 CONFIG_FILES=() # Apache Settings APACHE_MORTY_SITE="morty.conf" NGINX_MORTY_SITE="morty.conf" # ---------------------------------------------------------------------------- usage() { # ---------------------------------------------------------------------------- # shellcheck disable=SC1117 cat < "$(go_version)" ]]; then warn_msg "golang ($(go_version)) needs to be $GO_VERSION at least" else info_msg "golang $(go_version) is installed (min needed is: $GO_VERSION)" fi } go_version(){ sudo -i -u "$SERVICE_USER" < "$GO_ENV" <> ~/.profile EOF } morty_is_installed() { [[ -f $SERVICE_HOME/go-apps/bin/morty ]] } _svcpr=" ${_Yellow}|${SERVICE_USER}|${_creset} " install_morty() { rst_title "Install morty in user's ~/go-apps" section echo tee_stderr <&1 | prefix_stdout "$_svcpr" go get -v -u github.com/asciimoo/morty EOF tee_stderr <&1 | prefix_stdout "$_svcpr" cd \$GOPATH/src/github.com/asciimoo/morty go test go test -benchmem -bench . EOF } update_morty() { rst_title "Update morty" section echo tee_stderr <&1 | prefix_stdout "$_svcpr" go get -v -u github.com/asciimoo/morty EOF tee_stderr <&1 | prefix_stdout "$_svcpr" cd \$GOPATH/src/github.com/asciimoo/morty go test go test -benchmem -bench . EOF } 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 < ${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() { rst_title "Remove Apache site $APACHE_MORTY_SITE" rst_para "\ This removes 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 fi 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 SEARX_SRC=$("${REPO_ROOT}/utils/searx.sh" --getenv SEARX_SRC) # shellcheck disable=SC2034 SEARX_URL_PATH=$("${REPO_ROOT}/utils/searx.sh" --getenv SEARX_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() { rst_title "Remove nginx site $NGINX_MORTY_SITE" rst_para "\ This removes 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 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 <