diff --git a/misc/build.func b/misc/build.func index d8b0ee0..de144aa 100644 --- a/misc/build.func +++ b/misc/build.func @@ -4,6 +4,12 @@ # Co-Author: michelroegl-brunner # License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE +set -Eeuo pipefail + +trap '__handle_general_error "${BASH_SOURCE[0]}:${LINENO}"' ERR +trap '__handle_signal_exit' SIGINT SIGTERM +trap '__handle_exit' EXIT + variables() { NSAPP=$(echo "${APP,,}" | tr -d ' ') # This function sets the NSAPP variable by converting the value of the APP variable to lowercase and removing any spaces. var_install="${NSAPP}-install" # sets the var_install variable by appending "-install" to the value of NSAPP. @@ -1075,7 +1081,7 @@ EOF' pct exec "$CTID" -- bash -c "apt-get update >/dev/null && apt-get install -y sudo curl mc gnupg2 >/dev/null" fi msg_ok "Customized LXC Container" - lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/install/$var_install.sh)" $? + run_container_safe "curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/install/$var_install.sh" } diff --git a/misc/core.func b/misc/core.func index 4972b79..c1fbcba 100644 --- a/misc/core.func +++ b/misc/core.func @@ -439,3 +439,14 @@ msg_progress() { printf "\n" >&2 fi } + +run_container_safe() { + local ct="$1" + shift + local cmd="$*" + + lxc-attach -n "$ct" -- bash -euo pipefail -c " + trap 'echo Aborted in container; exit 130' SIGINT SIGTERM + $cmd + " || __handle_general_error "lxc-attach to CT $ct" +} diff --git a/misc/install.func b/misc/install.func index 0f23430..52774bd 100644 --- a/misc/install.func +++ b/misc/install.func @@ -13,6 +13,18 @@ fi source <(curl -fsSL https://git.community-scripts.org/community-scripts/ProxmoxVED/raw/branch/main/misc/core.func) load_functions +__handle_general_error() { + local location="$1" + local code="$?" + msg_error "Error at ${location} (exit code ${code})" + exit "$code" +} + +__handle_signal_exit() { + msg_error "Script aborted by signal (SIGINT or SIGTERM)" + exit 130 +} + # # Function to set STD mode based on verbosity # set_std_mode() { # if [ "$VERBOSE" = "yes" ]; then