86 lines
3.0 KiB
Bash
86 lines
3.0 KiB
Bash
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
PRIVATE_IP="${PRIVATE_IP:-192.168.0.5}"
|
|
MIN_MEMORY_KIB=$((4 * 1024 * 1024))
|
|
MIN_DISK_KIB=$((30 * 1024 * 1024))
|
|
errors=0
|
|
|
|
ok() { printf 'OK %s\n' "$*"; }
|
|
warn() { printf 'WARN %s\n' "$*" >&2; }
|
|
fail() { printf 'FAIL %s\n' "$*" >&2; errors=$((errors + 1)); }
|
|
|
|
echo "=== ОС и ресурсы ==="
|
|
. /etc/os-release
|
|
[[ "${ID:-}" == ubuntu && "${VERSION_ID:-}" == "24.04" ]] \
|
|
&& ok "Ubuntu ${VERSION_ID}" || warn "Проверено для Ubuntu 24.04; найдено ${PRETTY_NAME:-unknown}"
|
|
|
|
memory_kib="$(awk '/MemTotal/ {print $2}' /proc/meminfo)"
|
|
((memory_kib >= MIN_MEMORY_KIB)) && ok "RAM не менее 4 GiB" || fail "SigNoz требует не менее 4 GiB RAM"
|
|
|
|
disk_kib="$(df -Pk /opt 2>/dev/null | awk 'NR==2 {print $4}')"
|
|
((disk_kib >= MIN_DISK_KIB)) && ok "/opt: свободно не менее 30 GiB" \
|
|
|| fail "Для начальной установки рекомендуется не менее 30 GiB свободно в /opt"
|
|
|
|
echo
|
|
echo "=== Сеть ==="
|
|
ip -br -4 address
|
|
ip -4 route
|
|
ip -4 addr show | grep -Fq "inet ${PRIVATE_IP}/" \
|
|
&& ok "Приватный адрес ${PRIVATE_IP} назначен" \
|
|
|| fail "Адрес ${PRIVATE_IP} не найден ни на одном интерфейсе"
|
|
|
|
if getent hosts archive.ubuntu.com registry-1.docker.io ghcr.io >/dev/null; then
|
|
ok "DNS работает"
|
|
else
|
|
fail "DNS не разрешает адреса репозиториев"
|
|
fi
|
|
|
|
probe_https() {
|
|
local label="$1"
|
|
local url="$2"
|
|
shift 2
|
|
local code
|
|
code="$(curl -4sS -o /dev/null -w '%{http_code}' \
|
|
--connect-timeout 8 --max-time 15 "$url" || true)"
|
|
local expected
|
|
for expected in "$@"; do
|
|
if [[ "$code" == "$expected" ]]; then
|
|
ok "доступен $label"
|
|
return 0
|
|
fi
|
|
done
|
|
fail "нет доступа к $label (HTTP ${code:-нет ответа})"
|
|
}
|
|
|
|
# Сайты отвечают 2xx/3xx. Docker Registry API на /v2/ без токена штатно
|
|
# отдаёт 401; корень registry-1.docker.io часто даёт 404 — это не отказ сети.
|
|
probe_https https://archive.ubuntu.com https://archive.ubuntu.com \
|
|
200 301 302 303 307 308
|
|
probe_https https://download.docker.com https://download.docker.com \
|
|
200 301 302 303 307 308
|
|
probe_https https://registry-1.docker.io https://registry-1.docker.io/v2/ \
|
|
200 401
|
|
probe_https https://github.com https://github.com \
|
|
200 301 302 303 307 308
|
|
probe_https https://signoz.io https://signoz.io \
|
|
200 301 302 303 307 308
|
|
|
|
echo
|
|
echo "=== Занятость портов ==="
|
|
for port in 8080 4317 4318; do
|
|
if ss -H -lnt "( sport = :$port )" | grep -q .; then
|
|
fail "TCP-порт $port уже занят: $(ss -H -lntp "( sport = :$port )")"
|
|
else
|
|
ok "TCP-порт $port свободен"
|
|
fi
|
|
done
|
|
|
|
echo
|
|
timedatectl show --property=NTPSynchronized --property=Timezone --no-pager
|
|
if ((errors)); then
|
|
printf '\nОбнаружено ошибок: %d\n' "$errors" >&2
|
|
exit 1
|
|
fi
|
|
echo "Проверка завершена успешно."
|