149 lines
5.9 KiB
Bash
Executable File
149 lines
5.9 KiB
Bash
Executable File
#!/bin/bash
|
||
# ============================================================================
|
||
# install.sh — ЕДИНАЯ КОМАНДА установки BBox из репозитория
|
||
# ----------------------------------------------------------------------------
|
||
# Запускается одной командой прямо из репозитория:
|
||
#
|
||
# bash <(curl -s https://git.softuniq.eu/OpenDoor/opendoor-base-install/raw/branch/main/install.sh)
|
||
#
|
||
# Последовательно выполняет:
|
||
# 1. init_system.sh — первичная инициализация (обновление, утилиты,
|
||
# Docker, hostname, баннер BBox, сброс ID)
|
||
# 2. cleanup_system.sh — очистка системы от мусора
|
||
# 3. install_scripts.sh — установка скриптов в /usr/local/bin
|
||
# + сервис автозапуска bbox-firstboot.service
|
||
#
|
||
# Все диалоги имеют автовыбор по умолчанию через 5 секунд (BBOX_TIMEOUT).
|
||
# Флаг --yes выполняет всё без вопросов.
|
||
#
|
||
# Аргументы:
|
||
# --yes|-y полный автозапуск без диалогов
|
||
# --init-only только инициализация (без чистки)
|
||
# --cleanup-only только чистка
|
||
# --scripts-only только установка скриптов/автозапуска
|
||
# --timeout=N таймер подтверждения (сек), по умолчанию 5
|
||
# --repo=URL альтернативный репозиторий (по умолчанию OpenDoor)
|
||
# ============================================================================
|
||
|
||
set -uo pipefail
|
||
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m'
|
||
|
||
log() { echo -e "${GREEN}[install]${NC} $*"; }
|
||
warn() { echo -e "${YELLOW}[install][warn]${NC} $*"; }
|
||
fail() { echo -e "${RED}[install][error]${NC} $*"; exit 1; }
|
||
|
||
# Параметры по умолчанию
|
||
REPO_URL="https://git.softuniq.eu/OpenDoor/opendoor-base-install"
|
||
BRANCH="main"
|
||
WORK_DIR="/tmp/bbox-install-$$"
|
||
DO_INIT=1
|
||
DO_CLEANUP=1
|
||
DO_SCRIPTS=1
|
||
ALL_YES=0
|
||
TIMEOUT=5
|
||
|
||
usage() {
|
||
cat <<EOF
|
||
BBox (bbox.wtf) — единая установка из репозитория
|
||
|
||
--yes|-y полный автозапуск без диалогов (дефолты через $TIMEOUT сек)
|
||
--init-only только первичная инициализация
|
||
--cleanup-only только очистка системы
|
||
--scripts-only только установка скриптов/автозапуска
|
||
--timeout=N таймер подтверждения, сек (по умолчанию 5)
|
||
--repo=URL альтернативный репозиторий
|
||
-h, --help справка
|
||
EOF
|
||
}
|
||
|
||
# Парсинг аргументов
|
||
for arg in "$@"; do
|
||
case "$arg" in
|
||
--yes|-y) ALL_YES=1 ;;
|
||
--init-only) DO_CLEANUP=0; DO_SCRIPTS=0 ;;
|
||
--cleanup-only) DO_INIT=0; DO_SCRIPTS=0 ;;
|
||
--scripts-only) DO_INIT=0; DO_CLEANUP=0 ;;
|
||
--timeout=*) TIMEOUT="${arg#*=}" ;;
|
||
--repo=*) REPO_URL="${arg#*=}" ;;
|
||
-h|--help) usage; exit 0 ;;
|
||
*) warn "Неизвестный аргумент: $arg (игнорируется)" ;;
|
||
esac
|
||
done
|
||
|
||
export BBOX_TIMEOUT="$TIMEOUT"
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# Загрузка скриптов из репозитория
|
||
# ---------------------------------------------------------------------------
|
||
fetch_scripts() {
|
||
log "Загрузка скриптов из: $REPO_URL ($BRANCH)"
|
||
mkdir -p "$WORK_DIR"
|
||
|
||
local base="$REPO_URL/raw/branch/$BRANCH"
|
||
local files=("init_system.sh" "cleanup_system.sh" "install_scripts.sh" "motd/10-armbian-header.tpl")
|
||
local ok=1
|
||
|
||
for f in "${files[@]}"; do
|
||
mkdir -p "$(dirname "$WORK_DIR/$f")"
|
||
if curl -fsSL "$base/$f" -o "$WORK_DIR/$f"; then
|
||
case "$f" in
|
||
*.sh) chmod +x "$WORK_DIR/$f" ;;
|
||
esac
|
||
log " ✓ $f загружен"
|
||
else
|
||
warn " ✗ не удалось загрузить $f"
|
||
ok=0
|
||
fi
|
||
done
|
||
|
||
[ $ok -eq 1 ] || fail "Не удалось загрузить скрипты из репозитория."
|
||
}
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# MAIN
|
||
# ---------------------------------------------------------------------------
|
||
main() {
|
||
if [ "$(id -u)" -ne 0 ]; then
|
||
fail "Запустите от root: sudo bash install.sh"
|
||
fi
|
||
|
||
log "=== BBox (bbox.wtf) — установка из репозитория ==="
|
||
log "Таймер подтверждения: ${TIMEOUT} сек, автовыбор по умолчанию"
|
||
[ $ALL_YES -eq 1 ] && log "Режим: полный автозапуск (--yes)"
|
||
|
||
fetch_scripts
|
||
|
||
if [ $DO_INIT -eq 1 ]; then
|
||
echo
|
||
log ">>> Шаг 1/3: первичная инициализация (init_system.sh)"
|
||
if [ $ALL_YES -eq 1 ]; then
|
||
"$WORK_DIR/init_system.sh" --yes
|
||
else
|
||
"$WORK_DIR/init_system.sh"
|
||
fi
|
||
fi
|
||
|
||
if [ $DO_CLEANUP -eq 1 ]; then
|
||
echo
|
||
log ">>> Шаг 2/3: очистка системы (cleanup_system.sh)"
|
||
"$WORK_DIR/cleanup_system.sh"
|
||
fi
|
||
|
||
if [ $DO_SCRIPTS -eq 1 ]; then
|
||
echo
|
||
log ">>> Шаг 3/3: установка скриптов и автозапуска (install_scripts.sh)"
|
||
"$WORK_DIR/install_scripts.sh"
|
||
fi
|
||
|
||
rm -rf "$WORK_DIR"
|
||
echo
|
||
log "=== Установка завершена. Добро пожаловать в BBox (bbox.wtf) ==="
|
||
log "Свободные люди для свободного мира, во имя приватности и безопасности."
|
||
}
|
||
|
||
main "$@"
|