#!/usr/bin/env bash # -*- coding: utf-8; mode: sh -*- # shellcheck disable=SC2119 # shellcheck source=utils/lib.sh source "$(dirname "${BASH_SOURCE[0]}")/lib.sh" # ---------------------------------------------------------------------------- # config # ---------------------------------------------------------------------------- FILTRON_ETC="/etc/filtron" FILTRON_RULES="$FILTRON_ETC/rules.json" # shellcheck disable=SC2034 FILTRON_API="127.0.0.1:4005" # shellcheck disable=SC2034 FILTRON_LISTEN="127.0.0.1:4004" # shellcheck disable=SC2034 FILTRON_TARGET="127.0.0.1:8888" SERVICE_NAME="filtron" SERVICE_USER="${SERVICE_NAME}" SERVICE_HOME="/home/${SERVICE_USER}" SERVICE_SYSTEMD_UNIT="${SYSTEMD_UNITS}/${SERVICE_NAME}.service" # shellcheck disable=SC2034 SERVICE_GROUP="${SERVICE_USER}" 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=( "${FILTRON_RULES}" "${SERVICE_SYSTEMD_UNIT}" ) # ---------------------------------------------------------------------------- usage(){ # ---------------------------------------------------------------------------- # shellcheck disable=SC1117 cat <&1 | prefix_stdout wait_key } install_service() { rst_title "Install System-D Unit ${SERVICE_NAME}.service" section echo install_template ${SERVICE_SYSTEMD_UNIT} root root 644 wait_key activate_service } remove_service() { if ! ask_yn "Do you really want to deinstall $SERVICE_NAME?"; then return fi deactivate_service rm "${SERVICE_SYSTEMD_UNIT}" 2>&1 | prefix_stdout } activate_service () { rst_title "Activate $SERVICE_NAME (service)" section echo tee_stderr <&1 | prefix_stdout systemctl enable $SERVICE_NAME.service systemctl restart $SERVICE_NAME.service EOF tee_stderr <&1 | prefix_stdout systemctl status $SERVICE_NAME.service EOF } deactivate_service () { rst_title "De-Activate $SERVICE_NAME (service)" section echo tee_stderr <&1 | prefix_stdout systemctl stop $SERVICE_NAME.service systemctl disable $SERVICE_NAME.service EOF } assert_user() { rst_title "user $SERVICE_USER" section echo tee_stderr 1 < "$GO_ENV" <> ~/.profile EOF } remove_user() { rst_title "Drop $SERVICE_USER HOME" section if ask_yn "Do you really want to drop $SERVICE_USER home folder?"; then userdel -r -f "$SERVICE_USER" 2>&1 | prefix_stdout else rst_para "Leave HOME folder $(du -sh "$SERVICE_HOME") unchanged." fi } interactive_shell(){ echo "// exit with CTRL-D" sudo -H -u ${SERVICE_USER} -i } _service_prefix=" |$SERVICE_USER| " install_go(){ rst_title "Install Go in user's HOME" section rst_para "download and install go binary .." cache_download "${GO_PKG_URL}" "${GO_TAR}" tee_stderr 0.1 </dev/null && echo "Go Installation not found in PATH!?!" which go >/dev/null && go version && echo "congratulations -- Go installation OK :)" EOF } install_filtron() { rst_title "Install filtron in user's ~/go-apps" section echo tee_stderr <&1 | prefix_stdout "$_service_prefix" go get -v -u github.com/asciimoo/filtron EOF install_template --no-eval "$FILTRON_RULES" root root 644 } update_filtron() { rst_title "Update filtron" section echo tee_stderr <&1 | prefix_stdout "$_service_prefix" go get -v -u github.com/asciimoo/filtron EOF } show_service () { rst_title "service status & log" echo systemctl status filtron.service echo read -r -s -n1 -t 5 -p "// use CTRL-C to stop monitoring the log" echo while true; do trap break 2 journalctl -f -u filtron done return 0 } # ---------------------------------------------------------------------------- main "$@" # ----------------------------------------------------------------------------