69 lines
2.3 KiB
Bash
69 lines
2.3 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
|
|
|
|
for url in \
|
|
https://archive.ubuntu.com \
|
|
https://download.docker.com \
|
|
https://registry-1.docker.io \
|
|
https://github.com \
|
|
https://signoz.io; do
|
|
if curl -4fsSI --connect-timeout 8 --max-time 15 "$url" >/dev/null; then
|
|
ok "доступен $url"
|
|
else
|
|
fail "нет доступа к $url"
|
|
fi
|
|
done
|
|
|
|
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 "Проверка завершена успешно."
|