#!/usr/bin/env bash # -*- coding: utf-8; mode: sh indent-tabs-mode: nil -*- # SPDX-License-Identifier: AGPL-3.0-or-later # shellcheck source=utils/lib.sh source "$(dirname "${BASH_SOURCE[0]}")/lib.sh" source_dot_config # ---------------------------------------------------------------------------- # config # ---------------------------------------------------------------------------- PUBLIC_URL_PATH_MORTY="/morty" PUBLIC_URL_MORTY="$(dirname ${PUBLIC_URL})${PUBLIC_URL_PATH_MORTY}" MORTY_LISTEN="${MORTY_LISTEN:-127.0.0.1:3000}" MORTY_TIMEOUT=5 SERVICE_NAME="morty" SERVICE_USER="${SERVICE_USER:-${SERVICE_NAME}}" SERVICE_HOME="/home/${SERVICE_USER}" SERVICE_SYSTEMD_UNIT="${SYSTEMD_UNITS}/${SERVICE_NAME}.service" # shellcheck disable=SC2034 SERVICE_GROUP="${SERVICE_USER}" SERVICE_ENV_DEBUG=false GO_ENV="${SERVICE_HOME}/.go_env" GO_PKG_URL="https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz" GO_TAR=$(basename "$GO_PKG_URL") # shellcheck disable=SC2034 CONFIG_FILES=() # Apache Settings APACHE_MORTY_SITE="morty.conf" # ---------------------------------------------------------------------------- usage() { # ---------------------------------------------------------------------------- # shellcheck disable=SC1117 cat < "$GO_ENV" <> ~/.profile EOF } morty_is_installed() { [[ -f $SERVICE_HOME/go-apps/bin/morty ]] } _svcpr=" |${SERVICE_USER}| " 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] 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 < http://${MORTY_LISTEN}" info_msg "public URL --> ${PUBLIC_URL_MORTY}" printf "// use ${_BCyan}CTRL-C${_creset} to stop monitoring the log" read -r -s -n1 -t 2 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 enviroments!!" 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 } 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?"; then return fi a2enmod headers a2enmod proxy a2enmod proxy_http echo 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?"; then return fi apache_remove_site "$APACHE_MORTY_SITE" } # ---------------------------------------------------------------------------- main "$@" # ----------------------------------------------------------------------------