Kompletne odstraneno: - Emoji (smajliky, symboly, boxes, arrows) z README - Emoji ze skriptu (sipky, symboly) - Emoji z docker-compose (adresare) Nahrano za: - Textove alternativy (sipky -> '->', boxes -> '+', atd.) - ASCII pouze kde to slo Ciste vsechny 7 repo (overeno Python skriptem).
97 lines
2.8 KiB
Bash
97 lines
2.8 KiB
Bash
#!/bin/bash
|
||
#
|
||
# update.sh - aktualizace systemu (apt update + upgrade) + restart pokud nutny
|
||
# + Telegram notifikace o vysledku.
|
||
#
|
||
# Spust jednou rucne: sudo bash update.sh
|
||
# Spust automaticky: systemd timer update-rpi.timer (kazdy patek 18:00)
|
||
#
|
||
# Konfigurace: /home/mates/.telegram.conf (nebo nastav TELEGRAM_BOT_TOKEN a TELEGRAM_CHAT_ID v env)
|
||
#
|
||
|
||
set -euo pipefail
|
||
|
||
# === KONFIGURACE ===
|
||
CONFIG_FILE="/home/mates/.telegram.conf"
|
||
USER_NAME="mates"
|
||
WORK_DIR="/home/$USER_NAME"
|
||
LOG_FILE="$WORK_DIR/update.log"
|
||
HOST=$(hostname)
|
||
RESTART_REQUIRED="/var/run/reboot-required"
|
||
|
||
# === TELEGRAM KONFIGURACE ===
|
||
if [[ -f "$CONFIG_FILE" ]]; then
|
||
# shellcheck disable=SC1090
|
||
source "$CONFIG_FILE"
|
||
fi
|
||
TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN:-}"
|
||
TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}"
|
||
|
||
# === TELEGRAM HELPER ===
|
||
send_msg() {
|
||
local TEXT="$1"
|
||
|
||
if [[ -z "$TELEGRAM_BOT_TOKEN" || -z "$TELEGRAM_CHAT_ID" ]]; then
|
||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Telegram neni nakonfigurovan, preskakuji notifikaci" >> "$LOG_FILE"
|
||
return 0
|
||
fi
|
||
|
||
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
|
||
-d chat_id="${TELEGRAM_CHAT_ID}" \
|
||
-d text="$TEXT" \
|
||
-d parse_mode="Markdown" \
|
||
--max-time 10 \
|
||
--retry 3 > /dev/null || echo "[$(date '+%Y-%m-%d %H:%M:%S')] ️ Telegram chyba" >> "$LOG_FILE"
|
||
}
|
||
|
||
# === PROMENNE ===
|
||
START_TIME=$(date +%s)
|
||
|
||
# === CHYBA HANDLER ===
|
||
on_error() {
|
||
local exit_code=$?
|
||
local end_time=$(date +%s)
|
||
local duration=$((end_time - START_TIME))
|
||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] CHYBA: update.sh skončil s chybou (exit code $exit_code)" >> "$LOG_FILE"
|
||
send_msg " *[$HOST]* Aktualizace systému selhala (${duration}s).
|
||
Zkontroluj log:
|
||
\`$LOG_FILE\`"
|
||
exit "$exit_code"
|
||
}
|
||
trap on_error ERR
|
||
|
||
# === HLAVNI LOGIKA ===
|
||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] === update.sh spusten ===" >> "$LOG_FILE"
|
||
|
||
# Notifikace o zacatku
|
||
send_msg " *[$HOST]* Spoustim aktualizaci systemu..."
|
||
|
||
# Aktualizace baliku
|
||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] apt update..." >> "$LOG_FILE"
|
||
sudo apt-get update -qq 2>>"$LOG_FILE"
|
||
|
||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] apt upgrade..." >> "$LOG_FILE"
|
||
sudo apt-get upgrade -y -qq 2>>"$LOG_FILE"
|
||
|
||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] apt autoremove..." >> "$LOG_FILE"
|
||
sudo apt-get autoremove -y -qq 2>>"$LOG_FILE"
|
||
|
||
END_TIME=$(date +%s)
|
||
DURATION=$((END_TIME - START_TIME))
|
||
|
||
# Restart?
|
||
if [[ -f "$RESTART_REQUIRED" ]]; then
|
||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Restart required" >> "$LOG_FILE"
|
||
send_msg "️ *[$HOST]* Aktualizace systemu dokoncena (${DURATION}s).
|
||
**Restart serveru je nutny!** Reboot bude proveden za 1 minutu."
|
||
|
||
# Naplanovany restart za 1 minutu (at muzes kanclovat)
|
||
sudo shutdown -r +1 "Systemovy restart po update"
|
||
else
|
||
send_msg " *[$HOST]* Aktualizace systemu dokoncena (${DURATION}s).
|
||
Restart nutny neni."
|
||
fi
|
||
|
||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] === update.sh dokoncen (${DURATION}s) ===" >> "$LOG_FILE"
|
||
exit 0
|