Добавить install.sh (единая команда запуска) и таймеры подтверждения 5s в init_system.sh
This commit is contained in:
@@ -24,11 +24,37 @@ NC='\033[0m'
|
||||
BBOX_VERSION="1.2"
|
||||
BBOX_URL="bbox.wtf"
|
||||
HOSTNAME_DEFAULT="bbox-node"
|
||||
DEFAULT_TIMEOUT="${BBOX_TIMEOUT:-5}" # секунд на подтверждение (переопределяется env BBOX_TIMEOUT)
|
||||
|
||||
log() { echo -e "${GREEN}[init]${NC} $*"; }
|
||||
warn() { echo -e "${YELLOW}[init][warn]${NC} $*"; }
|
||||
fail() { echo -e "${RED}[init][error]${NC} $*"; exit 1; }
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Подтверждение с таймером: если пользователь не ответил за TIMEOUT секунд,
|
||||
# принимается DEFAULT (автовыбор). Возвращает 0 = yes, 1 = no.
|
||||
# usage: confirm_default "Вопрос" y|n [timeout]
|
||||
# ---------------------------------------------------------------------------
|
||||
confirm_default() {
|
||||
local msg="$1" default="$2" timeout="${3:-$DEFAULT_TIMEOUT}"
|
||||
local ans
|
||||
case "$default" in
|
||||
y|Y|yes) default="y"; prompt="[Y/n]";;
|
||||
*) default="n"; prompt="[y/N]";;
|
||||
esac
|
||||
printf " %s %s (авто: %s через %ss): " "$msg" "$prompt" "$default" "$timeout"
|
||||
if ! read -r -t "$timeout" ans 2>/dev/null; then
|
||||
echo ""
|
||||
echo " → таймаут, принято значение по умолчанию: $default"
|
||||
ans="$default"
|
||||
fi
|
||||
case "${ans,,}" in
|
||||
y|yes) return 0 ;;
|
||||
n|no) return 1 ;;
|
||||
*) [ "$default" = "y" ] ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 1. Определение дистрибутива и архитектуры
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -185,9 +211,16 @@ main() {
|
||||
fail "Запустите скрипт от root: sudo ./init_system.sh"
|
||||
fi
|
||||
|
||||
# --firstboot: режим автозапуска (из bbox-firstboot.service)
|
||||
if [ "${1:-}" = "--firstboot" ]; then
|
||||
FIRSTBOOT=1
|
||||
# Парсинг аргументов
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--firstboot) FIRSTBOOT=1 ;;
|
||||
--yes|-y) ALL_YES=1 ;;
|
||||
--timeout=*) DEFAULT_TIMEOUT="${arg#*=}" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ $FIRSTBOOT -eq 1 ]; then
|
||||
log "Режим firstboot (автозапуск при первой загрузке)"
|
||||
if [ -f "$FIRSTBOOT_MARKER" ]; then
|
||||
log "Инициализация уже выполнялась, пропуск."
|
||||
@@ -196,23 +229,61 @@ main() {
|
||||
fi
|
||||
|
||||
log "=== BBox (bbox.wtf) v${BBOX_VERSION} — первичная инициализация ==="
|
||||
echo
|
||||
echo " Будет выполнено:"
|
||||
echo " 1. Обновление системы"
|
||||
echo " 2. Установка базовых утилит (tmux, mc, git, net-tools, curl, wget, build-essential, btop)"
|
||||
echo " 3. Установка Docker + Docker Compose"
|
||||
echo " 4. Настройка hostname"
|
||||
echo " 5. Установка баннера BBox (bbox.wtf)"
|
||||
echo " 6. Установка вспомогательных скриптов и автозапуска"
|
||||
echo
|
||||
|
||||
# Подтверждение запуска (автовыбор YES через 5 сек)
|
||||
if [ "${ALL_YES:-0}" -eq 1 ] || confirm_default "Начать инициализацию?" "y"; then
|
||||
log "Запуск инициализации..."
|
||||
else
|
||||
fail "Отменено пользователем."
|
||||
fi
|
||||
|
||||
detect_distro
|
||||
update_system
|
||||
install_base_utils
|
||||
install_docker
|
||||
setup_hostname
|
||||
setup_motd
|
||||
|
||||
# Выбор hostname (автовыбор bbox-node через 5 сек)
|
||||
if [ "${ALL_YES:-0}" -eq 1 ] || confirm_default "Сменить hostname на '${HOSTNAME:-bbox-node}'?" "y"; then
|
||||
setup_hostname
|
||||
else
|
||||
log "Hostname оставлен прежним: $(hostname)"
|
||||
fi
|
||||
|
||||
# Баннер BBox (автовыбор YES через 5 сек)
|
||||
if [ "${ALL_YES:-0}" -eq 1 ] || confirm_default "Установить баннер BBox (bbox.wtf)?" "y"; then
|
||||
setup_motd
|
||||
else
|
||||
warn "Баннер не установлен."
|
||||
fi
|
||||
|
||||
if [ $FIRSTBOOT -eq 1 ]; then
|
||||
# При автозапуске не трогаем ssh/machine-id до перезагрузки
|
||||
warn "Режим firstboot: сброс идентификаторов выполняется при следующем запуске"
|
||||
touch "$FIRSTBOOT_MARKER"
|
||||
else
|
||||
reset_unique_ids
|
||||
# Сброс идентификаторов (автовыбор YES — иначе клоны будут одинаковыми)
|
||||
if [ "${ALL_YES:-0}" -eq 1 ] || confirm_default "Сбросить machine-id и SSH host keys (для клонирования)?" "y"; then
|
||||
reset_unique_ids
|
||||
else
|
||||
warn "Идентификаторы не сброшены."
|
||||
fi
|
||||
fi
|
||||
|
||||
install_helper_scripts
|
||||
# Установка вспомогательных скриптов (автовыбор YES через 5 сек)
|
||||
if [ "${ALL_YES:-0}" -eq 1 ] || confirm_default "Установить вспомогательные скрипты и автозапуск?" "y"; then
|
||||
install_helper_scripts
|
||||
else
|
||||
warn "Скрипты не установлены."
|
||||
fi
|
||||
|
||||
log "Инициализация завершена."
|
||||
if [ $FIRSTBOOT -eq 1 ]; then
|
||||
|
||||
Reference in New Issue
Block a user