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 ""