Browse Source

utils/filtron.sh: generalize systemd, accounts and golang tasks

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
Markus Heiser 5 years ago
parent
commit
709ac51d33
3 changed files with 134 additions and 116 deletions
  1. 10 89
      utils/filtron.sh
  2. 119 4
      utils/lib.sh
  3. 5 23
      utils/searx.sh

+ 10 - 89
utils/filtron.sh

@@ -109,7 +109,7 @@ main() {
 
 
         shell)
         shell)
             sudo_or_exit
             sudo_or_exit
-            interactive_shell
+            interactive_shell "${SERVICE_USER}"
             ;;
             ;;
         inspect)
         inspect)
             case $2 in
             case $2 in
@@ -136,19 +136,19 @@ main() {
             sudo_or_exit
             sudo_or_exit
             case $2 in
             case $2 in
                 all) remove_all;;
                 all) remove_all;;
-                user) remove_user ;;
+                user) drop_service_account "${SERVICE_USER}" ;;
                 *) usage "$_usage"; exit 42;;
                 *) usage "$_usage"; exit 42;;
             esac ;;
             esac ;;
         activate)
         activate)
             sudo_or_exit
             sudo_or_exit
             case $2 in
             case $2 in
-                service)  activate_service ;;
+                service)  systemd_activate_service "${SERVICE_NAME}" ;;
                 *) 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 ;;
+                service)  systemd_deactivate_service "${SERVICE_NAME}" ;;
                 *) usage "$_usage"; exit 42;;
                 *) usage "$_usage"; exit 42;;
             esac ;;
             esac ;;
         apache)
         apache)
@@ -174,11 +174,11 @@ install_all() {
     rst_title "Install $SERVICE_NAME (service)"
     rst_title "Install $SERVICE_NAME (service)"
     assert_user
     assert_user
     wait_key
     wait_key
-    install_go
+    install_go "${GO_PKG_URL}" "${GO_TAR}" "${SERVICE_USER}"
     wait_key
     wait_key
     install_filtron
     install_filtron
     wait_key
     wait_key
-    install_service
+    systemd_install_service "${SERVICE_NAME}" "${SERVICE_SYSTEMD_UNIT}"
     wait_key
     wait_key
     echo
     echo
     if ! service_is_available "http://${FILTRON_LISTEN}" ; then
     if ! service_is_available "http://${FILTRON_LISTEN}" ; then
@@ -203,56 +203,15 @@ remove_all() {
 It goes without saying that this script can only be used to remove
 It goes without saying that this script can only be used to remove
 installations that were installed with this script."
 installations that were installed with this script."
 
 
-    remove_service
+    systemd_remove_service "${SERVICE_NAME}" "${SERVICE_SYSTEMD_UNIT}"
     wait_key
     wait_key
-    remove_user
+    drop_service_account "${SERVICE_USER}"
     rm -r "$FILTRON_ETC" 2>&1 | prefix_stdout
     rm -r "$FILTRON_ETC" 2>&1 | prefix_stdout
     if service_is_available "${PUBLIC_URL}"; then
     if service_is_available "${PUBLIC_URL}"; then
         MSG="** Don't forget to remove your public site! (${PUBLIC_URL}) **" wait_key 10
         MSG="** Don't forget to remove your public site! (${PUBLIC_URL}) **" wait_key 10
     fi
     fi
 }
 }
 
 
-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 <<EOF | bash 2>&1
-systemctl enable $SERVICE_NAME.service
-systemctl restart $SERVICE_NAME.service
-EOF
-    tee_stderr <<EOF | bash 2>&1
-systemctl status --no-pager $SERVICE_NAME.service
-EOF
-}
-
-deactivate_service() {
-    rst_title "De-Activate $SERVICE_NAME (service)" section
-    echo
-    tee_stderr <<EOF | bash 2>&1 | prefix_stdout
-systemctl stop $SERVICE_NAME.service
-systemctl disable $SERVICE_NAME.service
-EOF
-}
-
-user_is_available() {
-    sudo -i -u "$SERVICE_USER" echo \$HOME &>/dev/null
-}
-
 assert_user() {
 assert_user() {
     rst_title "user $SERVICE_USER" section
     rst_title "user $SERVICE_USER" section
     echo
     echo
@@ -277,44 +236,6 @@ grep -qFs -- 'source $GO_ENV' ~/.profile || echo 'source $GO_ENV' >> ~/.profile
 EOF
 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 ${_BCyan}CTRL-D${_creset}"
-    sudo -H -u ${SERVICE_USER} -i
-}
-
-_service_prefix="  |$SERVICE_USER| "
-
-go_is_available() {
-    sudo -i -u "$SERVICE_USER" which go &>/dev/null
-}
-
-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 <<EOF | sudo -i -u "$SERVICE_USER" | prefix_stdout "$_service_prefix"
-echo \$PATH
-echo \$GOPATH
-mkdir -p \$HOME/local
-rm -rf \$HOME/local/go
-tar -C \$HOME/local -xzf ${CACHE}/${GO_TAR}
-EOF
-    sudo -i -u "$SERVICE_USER" <<EOF | prefix_stdout
-! which go >/dev/null &&  echo "ERROR - Go Installation not found in PATH!?!"
-which go >/dev/null &&  go version && echo "congratulations -- Go installation OK :)"
-EOF
-}
 
 
 filtron_is_installed() {
 filtron_is_installed() {
     [[ -f $SERVICE_HOME/go-apps/bin/filtron ]]
     [[ -f $SERVICE_HOME/go-apps/bin/filtron ]]
@@ -356,12 +277,12 @@ EOF
 
 
     apache_is_installed && info_msg "Apache is installed."
     apache_is_installed && info_msg "Apache is installed."
 
 
-    if user_is_available; then
+    if service_account_is_available "$SERVICE_USER"; then
         info_msg "service account $SERVICE_USER available."
         info_msg "service account $SERVICE_USER available."
     else
     else
         err_msg "service account $SERVICE_USER not available!"
         err_msg "service account $SERVICE_USER not available!"
     fi
     fi
-    if go_is_available; then
+    if go_is_available "$SERVICE_USER"; then
         info_msg "~$SERVICE_USER: go is installed"
         info_msg "~$SERVICE_USER: go is installed"
     else
     else
         err_msg "~$SERVICE_USER: go is not installed"
         err_msg "~$SERVICE_USER: go is not installed"

+ 119 - 4
utils/lib.sh

@@ -25,10 +25,6 @@ if [[ -z "$CACHE" ]]; then
     CACHE="${REPO_ROOT}/cache"
     CACHE="${REPO_ROOT}/cache"
 fi
 fi
 
 
-if [[ -z "$SYSTEMD_UNITS" ]]; then
-    SYSTEMD_UNITS="/lib/systemd/system"
-fi
-
 if [[ -z ${DIFF_CMD} ]]; then
 if [[ -z ${DIFF_CMD} ]]; then
     DIFF_CMD="diff -u"
     DIFF_CMD="diff -u"
     if command -v colordiff >/dev/null;  then
     if command -v colordiff >/dev/null;  then
@@ -477,6 +473,125 @@ service_is_available() {
     return "$exit_val"
     return "$exit_val"
 }
 }
 
 
+# golang
+# ------
+
+go_is_available() {
+
+    # usage:  go_is_available $SERVICE_USER && echo "go is installed!"
+
+    sudo -i -u "${1}" which go &>/dev/null
+}
+
+install_go() {
+
+    # usage:  install_go "${GO_PKG_URL}" "${GO_TAR}" "${SERVICE_USER}"
+
+    local _service_prefix="  |${3}| "
+
+    rst_title "Install Go in user's HOME" section
+
+    rst_para "download and install go binary .."
+    cache_download "${1}" "${2}"
+
+    tee_stderr 0.1 <<EOF | sudo -i -u "${3}" | prefix_stdout "$_service_prefix"
+echo \$PATH
+echo \$GOPATH
+mkdir -p \$HOME/local
+rm -rf \$HOME/local/go
+tar -C \$HOME/local -xzf ${CACHE}/${2}
+EOF
+    sudo -i -u "${3}" <<EOF | prefix_stdout
+! which go >/dev/null &&  echo "ERROR - Go Installation not found in PATH!?!"
+which go >/dev/null &&  go version && echo "congratulations -- Go installation OK :)"
+EOF
+}
+
+# system accounts
+# ---------------
+
+service_account_is_available() {
+
+    # usage:  service_account_is_available "$SERVICE_USER" && echo "OK"
+
+    sudo -i -u "$1" echo \$HOME &>/dev/null
+}
+
+drop_service_account() {
+
+    # usage:  drop_service_account "${SERVICE_USER}"
+
+    rst_title "Drop ${1} HOME" section
+    if ask_yn "Do you really want to drop ${1} home folder?"; then
+        userdel -r -f "${1}" 2>&1 | prefix_stdout
+    else
+        rst_para "Leave HOME folder $(du -sh "${1}") unchanged."
+    fi
+}
+
+interactive_shell(){
+
+    # usage:  interactive_shell "${SERVICE_USER}"
+
+    echo "// exit with ${_BCyan}CTRL-D${_creset}"
+    sudo -H -u "${1}" -i
+}
+
+
+# systemd
+# -------
+
+SYSTEMD_UNITS="${SYSTEMD_UNITS:-/lib/systemd/system}"
+
+systemd_install_service() {
+
+    # usage:  systemd_install_service "${SERVICE_NAME}" "${SERVICE_SYSTEMD_UNIT}"
+
+    rst_title "Install System-D Unit ${1}" section
+    echo
+    install_template "${2}" root root 644
+    wait_key
+    systemd_activate_service "${1}"
+}
+
+systemd_remove_service() {
+
+    # usage:  systemd_remove_service "${SERVICE_NAME}" "${SERVICE_SYSTEMD_UNIT}"
+
+    if ! ask_yn "Do you really want to deinstall ${1}?"; then
+        return
+    fi
+    systemd_deactivate_service "${1}"
+    rm "${2}"  2>&1 | prefix_stdout
+}
+
+systemd_activate_service() {
+
+    # usage:  systemd_activate_service "${SERVICE_NAME}"w
+
+    rst_title "Activate ${1} (service)" section
+    echo
+    tee_stderr <<EOF | bash 2>&1
+systemctl enable  ${1}.service
+systemctl restart ${1}.service
+EOF
+    tee_stderr <<EOF | bash 2>&1
+systemctl status --no-pager ${1}.service
+EOF
+}
+
+systemd_deactivate_service() {
+
+    # usage:  systemd_deactivate_service "${SERVICE_NAME}"
+
+    rst_title "De-Activate ${1} (service)" section
+    echo
+    tee_stderr <<EOF | bash 2>&1 | prefix_stdout
+systemctl stop    ${1}.service
+systemctl disable ${1}.service
+EOF
+}
+
 
 
 # Apache
 # Apache
 # ------
 # ------

+ 5 - 23
utils/searx.sh

@@ -124,7 +124,7 @@ main() {
 
 
         shell)
         shell)
             sudo_or_exit
             sudo_or_exit
-            interactive_shell
+            interactive_shell "${SERVICE_USER}"
             ;;
             ;;
         inspect)
         inspect)
             case $2 in
             case $2 in
@@ -153,7 +153,7 @@ main() {
             sudo_or_exit
             sudo_or_exit
             case $2 in
             case $2 in
                 all) remove_all;;
                 all) remove_all;;
-                user) remove_user ;;
+                user) drop_service_account "${SERVICE_USER}";;
                 pyenv) remove_pyenv ;;
                 pyenv) remove_pyenv ;;
                 searx-src) remove_searx ;;
                 searx-src) remove_searx ;;
                 *) usage "$_usage"; exit 42;;
                 *) usage "$_usage"; exit 42;;
@@ -250,7 +250,7 @@ cp -f ${SEARX_SETTINGS}.backup ${SEARX_SETTINGS}
 EOF
 EOF
             ;;
             ;;
         "start interactiv shell")
         "start interactiv shell")
-            interactive_shell
+            interactive_shell "${SERVICE_USER}"
             ;;
             ;;
     esac
     esac
     chown "${SERVICE_USER}:${SERVICE_USER}" "${SEARX_SETTINGS}"
     chown "${SERVICE_USER}:${SERVICE_USER}" "${SEARX_SETTINGS}"
@@ -275,16 +275,12 @@ installations that were installed with this script."
     fi
     fi
     remove_searx_uwsgi
     remove_searx_uwsgi
     wait_key
     wait_key
-    remove_user
+    drop_service_account "${SERVICE_USER}"
     if service_is_available "${PUBLIC_URL}"; then
     if service_is_available "${PUBLIC_URL}"; then
         MSG="** Don't forgett to remove your public site! (${PUBLIC_URL}) **" wait_key 10
         MSG="** Don't forgett to remove your public site! (${PUBLIC_URL}) **" wait_key 10
     fi
     fi
 }
 }
 
 
-user_is_available() {
-    sudo -i -u "$SERVICE_USER" echo \$HOME &>/dev/null
-}
-
 assert_user() {
 assert_user() {
     rst_title "user $SERVICE_USER" section
     rst_title "user $SERVICE_USER" section
     echo
     echo
@@ -299,15 +295,6 @@ EOF
     #echo "export SERVICE_HOME=$SERVICE_HOME"
     #echo "export SERVICE_HOME=$SERVICE_HOME"
 }
 }
 
 
-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
-}
-
 clone_is_available() {
 clone_is_available() {
     [[ -f "$SEARX_SETTINGS" ]]
     [[ -f "$SEARX_SETTINGS" ]]
 }
 }
@@ -445,11 +432,6 @@ deactivate_service() {
     uWSGI_restart
     uWSGI_restart
 }
 }
 
 
-interactive_shell(){
-    echo "// exit with ${_BCyan}CTRL-D${_creset}"
-    sudo -H -u ${SERVICE_USER} -i
-}
-
 git_diff() {
 git_diff() {
     sudo -H -u "${SERVICE_USER}" -i <<EOF
     sudo -H -u "${SERVICE_USER}" -i <<EOF
 cd ${SEARX_REPO_FOLDER}
 cd ${SEARX_REPO_FOLDER}
@@ -491,7 +473,7 @@ EOF
 
 
     apache_is_installed && info_msg "Apache is installed."
     apache_is_installed && info_msg "Apache is installed."
 
 
-    if user_is_available; then
+    if service_account_is_available "$SERVICE_USER"; then
         info_msg "Service account $SERVICE_USER exists."
         info_msg "Service account $SERVICE_USER exists."
     else
     else
         err_msg "Service account $SERVICE_USER does not exists!"
         err_msg "Service account $SERVICE_USER does not exists!"