#!/usr/bin/env bash # Публичная точка входа провижининга гриба. Безопасна для публикации (логика, не секреты). # Запуск на СВЕЖЕМ грибе (root, временный интернет — ethernet на столе): # curl -fsSL https://bootstrap.mushrooms.devgroup.software | bash -s -- '<пароль>' # Пароль гейтит доступ к секрет-бандлу (basic-auth). Без верного пароля — ничего не ставится. set -euo pipefail [ "$(id -u)" = 0 ] || { echo "Запусти как root."; exit 1; } # Проверка платформы (защита от ошибки, не от злоумышленника): это должен быть гриб (Orange Pi, aarch64). ARCH="$(uname -m)" [ "$ARCH" = aarch64 ] || { echo "Провижининг только для гриба (Orange Pi, aarch64). Тут: $ARCH. Выход."; exit 1; } command -v nmcli >/dev/null 2>&1 || { echo "Нет nmcli (NetworkManager) — это точно гриб? Выход."; exit 1; } BASE="${BOOTSTRAP_BASE:-https://bootstrap.mushrooms.devgroup.software}" PASS="${1:-}" if [ -z "$PASS" ]; then read -rsp "Пароль провижининга: " PASS /dev/null \ | awk -F: '$1!=""' | sort -t: -k2 -rn | awk -F: '!seen[$1]++') if [ "${#WIFIS[@]}" -eq 0 ]; then echo "Сетей не видно. (r — пересканировать, q — пропустить Wi-Fi)" else i=1; for w in "${WIFIS[@]}"; do ssid="${w%%:*}"; sig="$(echo "$w" | cut -d: -f2)"; sec="$(echo "$w" | cut -d: -f3-)" printf " %2d) %-30s сигнал:%3s%% %s\n" "$i" "$ssid" "$sig" "${sec:-открытая}"; i=$((i+1)) done fi read -rp "Номер сети (r — пересканировать, q — пропустить): " CH /dev/null 2>&1; then echo "✅ Wi-Fi '$SSID' подключён и интернет есть"; break else echo "⚠ подключился, но интернета через Wi-Fi нет (пароль? сеть?) — ретрай" fi done echo "[bootstrap] запускаю provision-satellite.sh …" HN="$HN" bash "$TMP/provisioning/provision-satellite.sh" "$TMP"