From 1984b4fe7074f794cca68f999463d6305c6fea4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20GUEZO?= Date: Tue, 17 Jun 2025 22:34:57 +0200 Subject: [PATCH] feat: finish install scripts all .sh scripts -> /usr/local/bin/ all .yml / .env -> /etc/serverconfig/ add [y/n] to override information add --true argument to ignore [y/n] input --- install.sh | 113 ++++++++++++++++++++++++-- scripts/{aws-bak.sh => aws-backup.sh} | 0 scripts/common.sh | 2 +- scripts/docker-compose.yml | 4 +- scripts/telegram.sh | 0 5 files changed, 111 insertions(+), 8 deletions(-) rename scripts/{aws-bak.sh => aws-backup.sh} (100%) create mode 100644 scripts/telegram.sh diff --git a/install.sh b/install.sh index 1572219..2369c03 100644 --- a/install.sh +++ b/install.sh @@ -2,12 +2,115 @@ source "./scripts/common.sh" +SCRIPT_FILE="/usr/local/bin" + +AUTO_CONFIRM=false +[[ "$1" == "--true" ]] && AUTO_CONFIRM=true + if [[ $EUID -ne 0 ]]; then - echo "the script needs to be as root." + echo "The script needs to run as root." exit 1 fi -# if [ ! -d "$ENV_DIR" ]; then -# echo "$ENV_DIR is missing..., " -# mkdir -p $ENV_DIR -# fi \ No newline at end of file +touch "$LOG" || { echo "Cannot create log file $LOG"; exit 1; } +chmod 644 "$LOG" + +datetime_print "-- Starting ServerConfig installation v(1.0.0) --" + +mkdir -p "$ETC_DIR" && \ +datetime_print "$ETC_DIR ensured." + +datetime_print "Installing scripts to $SCRIPT_FILE..." + +install_file() { + local filename="$1" + local pathname="$2" + local argument="${3:--Dm755}" + + datetime_print "Installing $filename to $pathname..." + + if [[ ! -f "scripts/$filename" ]]; then + datetime_print "Source file scripts/$filename not found." "ERROR" + exit 1 + fi + + if [[ -e "$pathname/$filename" ]]; then + if $AUTO_CONFIRM; then + yn="y" + else + read -p "$pathname/$filename already set, overwrite? (y/N): " yn + fi + case "$yn" in + [Yy]*) + ;; + *) + datetime_print "$pathname/$filename not changed." + return + ;; + esac + fi + + install $argument "scripts/$filename" "$pathname/$filename" && \ + datetime_print "$filename installed." || \ + { datetime_print "Error while installing $filename" "ERROR"; exit 1; } +} +echo +datetime_print "------------- install files -------------" +install_file "aws-backup.sh" "$SCRIPT_FILE" -Dm755 +install_file "disk-monitor.sh" "$SCRIPT_FILE" -Dm755 +install_file "sshd-login.sh" "$SCRIPT_FILE" -Dm755 +install_file "telegram.sh" "$SCRIPT_FILE" -Dm755 +install_file "docker-compose.yml" "$ETC_DIR" -Dm644 + +create_env_variable() { + local key="$1" + local value="$2" + + if [[ -z "$value" ]]; then + datetime_print "$key not set (empty input)." + return + fi + + if grep -q "^$key=" "$ENV_FILE" 2>/dev/null; then + if $AUTO_CONFIRM; then + yn="y" + else + read -p "$key already set, overwrite? (y/N): " yn + fi + case "$yn" in + [Yy]*) + sed -i "s/^$key=.*/$key=$value/" "$ENV_FILE" + datetime_print "$key updated." + ;; + *) + datetime_print "$key not changed." + ;; + esac + else + echo "$key=$value" >> "$ENV_FILE" + datetime_print "$key set." + fi +} + +echo +datetime_print "--------- define .env variables ---------" + +ENV_LIST=("AWS" "TELEGRAM_CHAT_ID" "TELEGRAM_TOKEN" "EMAIL" "WG_HOSTNAME_VPN") + +for env in "${ENV_LIST[@]}"; do + read -p "Enter value for $env: " value + create_env_variable "$env" "$value" +done + +while true; do + read -p "Add another env variable? (key or leave empty to quit): " key + [[ -z "$key" ]] && break + read -p "Enter value for $key: " value + create_env_variable "$key" "$value" +done + +echo +datetime_print "--------- Installation complete ---------" +datetime_print "All config files are in $ETC_DIR" +datetime_print "All scripts are in $SCRIPT_FILE" +echo "Log file written at: $LOG" \ No newline at end of file diff --git a/scripts/aws-bak.sh b/scripts/aws-backup.sh similarity index 100% rename from scripts/aws-bak.sh rename to scripts/aws-backup.sh diff --git a/scripts/common.sh b/scripts/common.sh index 61ab9df..6ec32b4 100644 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -2,7 +2,7 @@ FILENAME="serverconfig" -ENV_DIR="/etc/$FILENAME" +ETC_DIR="/etc/$FILENAME" ENV_FILE="$ENV_DIR/.env" LOG="/var/log/$FILENAME.log" diff --git a/scripts/docker-compose.yml b/scripts/docker-compose.yml index 2857765..7d64862 100644 --- a/scripts/docker-compose.yml +++ b/scripts/docker-compose.yml @@ -28,8 +28,8 @@ services: - net.ipv6.conf.all.forwarding=1 - net.ipv6.conf.default.forwarding=1 environment: - - VIRTUAL_HOST=${HOSTNAME_VPN} - - LETSENCRYPT_HOST=${HOSTNAME_VPN} + - VIRTUAL_HOST=${WG_HOSTNAME_VPN} + - LETSENCRYPT_HOST=${WG_HOSTNAME_VPN} - LETSENCRYPT_EMAIL=${EMAIL} - VIRTUAL_PORT=51821 depends_on: diff --git a/scripts/telegram.sh b/scripts/telegram.sh new file mode 100644 index 0000000..e69de29