#!/usr/bin/env bash # Pre-flight checks: root, Ubuntu release, RAM and disk. # # Network is informational here and never a gate: an offline install takes its # packages from the local bundle, so it needs neither the Internet nor the # central endpoint. Three things are reported separately for the operator: # 1. local network link — no intent, not used by the install, # 2. Internet — NOT required for an offline install (no warning), # 3. central connection — not needed during install; that is the enrollment # stage's job. # This module therefore never fails because a network probe failed. # # Idempotent: safe to re-run. Supports --check for read-only verification. # Exit codes: 0 = OK, 3 = SKIP (optional step, nothing to do), 1 = real failure. set -euo pipefail MODULE="01-precheck" LOG_FILE="${LOG_FILE:-/var/log/blueforce-install.log}" DEALER_ID="${DEALER_ID:-}" BF_HOSTNAME="${BF_HOSTNAME:-}" BF_DEVICE="${BF_DEVICE:-}" STATE_DIR="${STATE_DIR:-/var/lib/blueforce}" log() { local msg="$1" mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null || true echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) [01-precheck] $msg" | tee -a "$LOG_FILE" } CHECK_MODE=0 if [[ "${1:-}" == "--check" ]]; then CHECK_MODE=1; fi MIN_RAM_MB=2048 MIN_DISK_MB=20480 fail() { log "FAIL: $1"; echo "FAIL: $1" >&2; exit 1; } info() { log "BİLGİ: $1"; } # Read-only network report. Nothing here can fail the install. report_network() { if ip -o link show up 2>/dev/null | grep -qv ' lo:'; then info "yerel ağ: bağlantı var (kurulum için gerekmiyor, kullanılmıyor)" else info "yerel ağ: bağlantı görünmüyor (kurulum için gerekmiyor, kullanılmıyor)" fi if [[ "${BF_OFFLINE:-0}" == 1 ]]; then # Offline install: no probe at all, and no warning either. info "internet: kurulum yerel paket deposundan yapılır; internet GEREKMEZ" elif getent hosts archive.ubuntu.com >/dev/null 2>&1; then info "internet: erişilebilir (geliştirme/test kipi)" else info "internet: erişilemiyor (bu kurulum için gerekmez)" fi info "merkez bağlantısı: kurulum sırasında gerekmez; enrollment aşamasında doğrulanır" } run_checks() { if [[ "$CHECK_MODE" -eq 0 ]]; then [[ "$(id -u)" -eq 0 ]] || fail "must run as root" else info "yönetici yetkisi: salt-okunur denetim; root gerekmiyor" fi if [[ -f /etc/os-release ]]; then # shellcheck disable=SC1091 . /etc/os-release [[ "${VERSION_ID:-}" == 26.04* ]] || fail "unsupported OS: ${NAME:-unknown} ${VERSION_ID:-unknown} (need Ubuntu 26.04)" else fail "/etc/os-release not found" fi local ram_mb disk_mb ram_mb=$(awk '/MemTotal/ {printf "%d", $2/1024}' /proc/meminfo) [[ "$ram_mb" -ge "$MIN_RAM_MB" ]] || fail "RAM too low: ${ram_mb}MB (need >= ${MIN_RAM_MB}MB)" disk_mb=$(df -m / --output=avail | tail -1 | tr -d ' ') [[ "$disk_mb" -ge "$MIN_DISK_MB" ]] || fail "disk too low: ${disk_mb}MB free on / (need >= ${MIN_DISK_MB}MB)" report_network log "OK: ön denetim geçti (Ubuntu ${VERSION_ID}, RAM ${ram_mb}MB, disk ${disk_mb}MB boş; yerel kurulum=$([[ "${BF_OFFLINE:-0}" == 1 ]] && echo evet || echo hayır))" } run_checks