139 lines
5.2 KiB
Bash
Executable File
139 lines
5.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"
|
||
MOTD_HEADER="/etc/update-motd.d/10-armbian-header"
|
||
MOTD_TPL_REPO="motd/10-armbian-header.tpl"
|
||
MOTD_SHARE_DIR="/usr/local/share/bbox/motd"
|
||
|
||
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)"
|
||
|
||
# Версия/URL — единый источник (должны совпадать с init_system.sh)
|
||
BBOX_VERSION="${BBOX_VERSION:-1.2}"
|
||
BBOX_URL="${BBOX_URL:-bbox.wtf}"
|
||
|
||
install_script() {
|
||
local src="$1" dst="$2"
|
||
if [ ! -f "$src" ]; then
|
||
warn "Не найден: $src"
|
||
return 1
|
||
fi
|
||
install -m 0755 "$src" "$dst"
|
||
log "Установлен: $dst"
|
||
}
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# Баннер BBox: установка из шаблона репозитория (motd/10-armbian-header.tpl)
|
||
# ---------------------------------------------------------------------------
|
||
install_motd_template() {
|
||
local tpl_src=""
|
||
for candidate in \
|
||
"$SCRIPT_SRC_DIR/$MOTD_TPL_REPO" \
|
||
"$SCRIPT_SRC_DIR/../$MOTD_TPL_REPO" \
|
||
"$SCRIPT_SRC_DIR/motd/10-armbian-header.tpl"
|
||
do
|
||
if [ -f "$candidate" ]; then
|
||
tpl_src="$candidate"
|
||
break
|
||
fi
|
||
done
|
||
|
||
if [ -z "$tpl_src" ]; then
|
||
warn "Шаблон баннера не найден ($MOTD_TPL_REPO), баннер не изменён."
|
||
return 1
|
||
fi
|
||
|
||
# Бэкап дефолтного баннера Armbian (один раз)
|
||
if [ -f "$MOTD_HEADER" ] && [ ! -f "${MOTD_HEADER}.bak" ]; then
|
||
cp -f "$MOTD_HEADER" "${MOTD_HEADER}.bak"
|
||
log "Бэкап дефолтного баннера: ${MOTD_HEADER}.bak"
|
||
fi
|
||
|
||
# Подстановка версии/URL и установка
|
||
sed -e "s|__BBOX_VERSION__|${BBOX_VERSION}|g" \
|
||
-e "s|__BBOX_URL__|${BBOX_URL}|g" "$tpl_src" > "$MOTD_HEADER"
|
||
chmod 755 "$MOTD_HEADER"
|
||
log "Баннер BBox v${BBOX_VERSION} установлен из шаблона ($tpl_src)"
|
||
|
||
# Копия шаблона для последующих запусков init-system из /usr/local/bin
|
||
mkdir -p "$MOTD_SHARE_DIR"
|
||
install -m 0644 "$tpl_src" "$MOTD_SHARE_DIR/$(basename "$tpl_src")"
|
||
log "Шаблон баннера сохранён: $MOTD_SHARE_DIR/$(basename "$tpl_src")"
|
||
}
|
||
|
||
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
|
||
|
||
# Баннер BBox — всегда переустанавливается из шаблона репозитория
|
||
install_motd_template
|
||
|
||
install_firstboot_service
|
||
|
||
log "Готово. Запуск вручную:"
|
||
log " init-system — первичная инициализация"
|
||
log " cleanup-system — очистка системы"
|
||
log " systemctl start bbox-firstboot.service — запустить автозапуск сейчас"
|
||
}
|
||
|
||
main "$@"
|