Files
opendoor-base-install/install.sh

149 lines
5.9 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 "$@"