90 lines
3.2 KiB
Bash
Executable File
90 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
||
# ============================================================================
|
||
# install_scripts.sh — установка первичных скриптов в систему
|
||
# ----------------------------------------------------------------------------
|
||
# Копирует скрипты этого репозитория в /usr/local/bin и настраивает
|
||
# автозапуск:
|
||
# * /usr/local/bin/init-system -> первичная инициализация (ручной запуск)
|
||
# * /usr/local/bin/cleanup-system -> очистка системы (ручной запуск)
|
||
# * /etc/systemd/system/bbox-firstboot.service -> автозапуск при первой загрузке
|
||
# * /root/firstboot.log -> журнал автозапуска
|
||
# ============================================================================
|
||
|
||
set -euo pipefail
|
||
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m'
|
||
|
||
BIN_DIR="/usr/local/bin"
|
||
SERVICE_DIR="/etc/systemd/system"
|
||
MARKER="/var/lib/bbox-firstboot-done"
|
||
|
||
log() { echo -e "${GREEN}[install-scripts]${NC} $*"; }
|
||
warn() { echo -e "${YELLOW}[install-scripts][warn]${NC} $*"; }
|
||
fail() { echo -e "${RED}[install-scripts][error]${NC} $*"; exit 1; }
|
||
|
||
SCRIPT_SRC_DIR="$(cd "$(dirname "$(readlink -f "$0")")" && pwd)"
|
||
|
||
install_script() {
|
||
local src="$1" dst="$2"
|
||
if [ ! -f "$src" ]; then
|
||
warn "Не найден: $src"
|
||
return 1
|
||
fi
|
||
install -m 0755 "$src" "$dst"
|
||
log "Установлен: $dst"
|
||
}
|
||
|
||
install_firstboot_service() {
|
||
local unit="$SERVICE_DIR/bbox-firstboot.service"
|
||
cat > "$unit" <<EOF
|
||
[Unit]
|
||
Description=BBox first boot initialization (bbox.wtf)
|
||
After=network-online.target docker.service
|
||
Wants=network-online.target
|
||
ConditionPathExists=!/var/lib/bbox-firstboot-done
|
||
|
||
[Service]
|
||
Type=oneshot
|
||
ExecStart=/usr/local/bin/init-system --firstboot
|
||
RemainAfterExit=no
|
||
StandardOutput=journal+console
|
||
StandardError=journal+console
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
systemctl daemon-reload
|
||
systemctl enable bbox-firstboot.service
|
||
log "Сервис автозапуска включён: $unit"
|
||
}
|
||
|
||
main() {
|
||
if [ "$(id -u)" -ne 0 ]; then
|
||
fail "Запустите скрипт от root: sudo ./install_scripts.sh"
|
||
fi
|
||
|
||
log "Установка скриптов из: $SCRIPT_SRC_DIR"
|
||
|
||
install_script "$SCRIPT_SRC_DIR/init_system.sh" "$BIN_DIR/init-system" || true
|
||
install_script "$SCRIPT_SRC_DIR/cleanup_system.sh" "$BIN_DIR/cleanup-system" || true
|
||
install_script "$SCRIPT_SRC_DIR/install_scripts.sh" "$BIN_DIR/install-bbox-scripts" || true
|
||
|
||
# tmux-конфиг
|
||
if [ -f "$SCRIPT_SRC_DIR/tmux/.tmux.conf" ]; then
|
||
install -m 0644 "$SCRIPT_SRC_DIR/tmux/.tmux.conf" /root/.tmux.conf
|
||
log "tmux-конфиг установлен в /root/.tmux.conf"
|
||
fi
|
||
|
||
install_firstboot_service
|
||
|
||
log "Готово. Запуск вручную:"
|
||
log " init-system — первичная инициализация"
|
||
log " cleanup-system — очистка системы"
|
||
log " systemctl start bbox-firstboot.service — запустить автозапуск сейчас"
|
||
}
|
||
|
||
main "$@"
|