setup-system-update.sh

Skript pre kapitolu Prvý kontakt — audit a housekeeping

Veľkosť: 5005 B
Upravené: 2026-05-01 17:22 UTC
SHA256: 9f8dcc5fa8b4…
  1#!/usr/bin/env bash
  2#
  3# VCS Akademia — Level 1 / CH 1: System update & first survey
  4# https://vcs-akademia.net/kurz/level-1/system-update
  5#
  6# Idempotentný skript pre prvú aktualizáciu nového servera.
  7# Identifikuje systém, urobí baseline survey, aktualizuje balíky,
  8# vyčistí cache, vytvorí /root/server-baseline.txt
  9#
 10# Podporované distribúcie: Ubuntu (20.04+), Debian (11+)
 11#
 12# Spustenie:
 13#   curl -sL https://vcs-akademia.net/script/level-1/system-update/setup-system-update.sh | bash
 14
 15set -euo pipefail
 16
 17# ----- farbenie výstupu -----
 18RED='\033[0;31m'
 19GRN='\033[0;32m'
 20YLW='\033[0;33m'
 21BLU='\033[0;34m'
 22NC='\033[0m' # no color
 23
 24step()  { echo -e "\n${BLU}==>${NC} $*"; }
 25ok()    { echo -e "${GRN}${NC} $*"; }
 26warn()  { echo -e "${YLW}!${NC} $*"; }
 27err()   { echo -e "${RED}${NC} $*" >&2; }
 28
 29# ----- pre-flight checks -----
 30
 31if [[ $EUID -ne 0 ]]; then
 32    err "Tento skript musí bežať ako root."
 33    err "Skús: sudo bash <(curl -sL ...)"
 34    exit 1
 35fi
 36
 37if [[ ! -f /etc/os-release ]]; then
 38    err "Súbor /etc/os-release neexistuje."
 39    err "Tento skript funguje iba na Ubuntu/Debian."
 40    exit 1
 41fi
 42
 43# shellcheck source=/dev/null
 44. /etc/os-release
 45
 46case "${ID:-}" in
 47    ubuntu|debian)
 48        ok "Detekovaná distribúcia: ${PRETTY_NAME:-$ID}"
 49        ;;
 50    *)
 51        err "Distribúcia '${ID:-unknown}' nie je podporovaná."
 52        err "Tento skript funguje iba na Ubuntu/Debian."
 53        exit 1
 54        ;;
 55esac
 56
 57# ----- baseline file -----
 58
 59BASELINE="/root/server-baseline.txt"
 60TIMESTAMP=$(date -u +"%Y-%m-%d %H:%M:%S UTC")
 61
 62step "Vytváram baseline survey: $BASELINE"
 63
 64{
 65    echo "==============================================="
 66    echo "  VCS Akademia — Server baseline"
 67    echo "  Vygenerované: $TIMESTAMP"
 68    echo "==============================================="
 69    echo ""
 70    echo "## Systém"
 71    echo "Distribúcia:  ${PRETTY_NAME:-unknown}"
 72    echo "Verzia:       ${VERSION:-unknown}"
 73    echo "Codename:     ${VERSION_CODENAME:-unknown}"
 74    echo "Architektúra: $(uname -m)"
 75    echo "Kernel:       $(uname -r)"
 76    echo "Hostname:     $(hostname)"
 77    echo ""
 78    echo "## Hardware"
 79    echo "CPU:          $(nproc) jadier"
 80    echo "CPU model:    $(grep -m1 'model name' /proc/cpuinfo | sed 's/.*: //' || echo unknown)"
 81    echo "RAM:          $(free -h | awk '/^Mem:/ {print $2}')"
 82    echo "Disk /:       $(df -h / | awk 'NR==2 {print $2 " total, " $3 " used, " $4 " free"}')"
 83    echo ""
 84    echo "## Sieť"
 85    ip -brief address show | grep -v "^lo" || echo "(žiadne sieťové rozhrania)"
 86    echo ""
 87    echo "## Uptime a posledné prihlásenia"
 88    echo "Uptime:       $(uptime -p)"
 89    echo ""
 90    echo "Posledné prihlásenia:"
 91    last -n 5 -F | head -n 6 || echo "(žiadne záznamy)"
 92    echo ""
 93} > "$BASELINE"
 94
 95ok "Baseline uložený do $BASELINE"
 96
 97# ----- apt update -----
 98
 99step "Aktualizujem zoznam balíkov (apt update)..."
100DEBIAN_FRONTEND=noninteractive apt-get update -qq
101
102UPGRADABLE=$(apt list --upgradable 2>/dev/null | grep -c upgradable || true)
103ok "Zoznam aktualizovaný. Dostupných updates: $UPGRADABLE"
104
105# ----- apt upgrade -----
106
107if [[ $UPGRADABLE -gt 0 ]]; then
108    step "Inštalujem $UPGRADABLE updates (apt upgrade)..."
109    DEBIAN_FRONTEND=noninteractive apt-get upgrade -y \
110        -o Dpkg::Options::="--force-confdef" \
111        -o Dpkg::Options::="--force-confold"
112    ok "Updates nainštalované."
113else
114    ok "Systém je aktuálny, žiadne updates."
115fi
116
117# ----- detekcia rebootu -----
118
119REBOOT_NEEDED=0
120if [[ -f /var/run/reboot-required ]]; then
121    REBOOT_NEEDED=1
122    warn "Systém vyžaduje reboot (kernel alebo kritická knižnica updatovaná)."
123    if [[ -f /var/run/reboot-required.pkgs ]]; then
124        echo "  Balíky vyžadujúce reboot:"
125        sed 's/^/    /' /var/run/reboot-required.pkgs
126    fi
127fi
128
129# ----- cleanup -----
130
131step "Vyčistenie systému (autoremove + autoclean)..."
132DEBIAN_FRONTEND=noninteractive apt-get autoremove -y -qq
133DEBIAN_FRONTEND=noninteractive apt-get autoclean -qq
134ok "Cache a nepotrebné balíky odstránené."
135
136# ----- baseline append: post-update state -----
137
138{
139    echo "## Stav po update — $TIMESTAMP"
140    echo "Updates aplikované: $UPGRADABLE"
141    echo "Reboot potrebný:    $([ $REBOOT_NEEDED -eq 1 ] && echo ÁNO || echo nie)"
142    echo ""
143    echo "==============================================="
144} >> "$BASELINE"
145
146# ----- final summary -----
147
148echo ""
149echo "==============================================="
150echo "  Hotovo — CH 1 dokončená"
151echo "==============================================="
152echo ""
153ok "Baseline:   $BASELINE"
154ok "Updates:    $UPGRADABLE aplikované"
155
156if [[ $REBOOT_NEEDED -eq 1 ]]; then
157    echo ""
158    warn "DÔLEŽITÉ: Systém potrebuje reboot."
159    warn "Spusti: reboot"
160    warn ""
161    warn "Po reboote sa prihlás znova a pokračuj na CH 2."
162else
163    echo ""
164    ok "Reboot nie je potrebný."
165    ok "Pokračuj na CH 2 — Hostname, timezone, locale:"
166    echo "    https://vcs-akademia.net/kurz/level-1/hostname-locale"
167fi
168
169echo ""
⤓ Stiahni raw skript ← Späť na kapitolu