#!/usr/bin/env bash # install.sh — Docker Migrate Tool Installer # Запуск: wget -qO- https://giteas.stitch505.su/Stitch505/docker-migrate/raw/main/install.sh | bash # После установки сразу запустится интерактивное меню (если есть терминал). # Если терминала нет — выведет инструкцию. # set -e REPO_URL="https://giteas.stitch505.su/Stitch505/docker-migrate" BRANCH="main" INSTALL_DIR="/opt/docker-migrate" log() { echo "[migrate-install] $*"; } # Проверка Python3 if ! command -v python3 &>/dev/null; then log "Python3 не найден. Пытаемся установить ..." if command -v apt-get &>/dev/null; then apt-get update -qq apt-get install -y -qq python3 python3-pip elif command -v yum &>/dev/null; then yum install -y python3 else echo "[FATAL] Не удалось найти/install Python3. Установите вручную." exit 1 fi fi # Проверка версии Python pyver=$(python3 -c 'import sys; print(".".join(map(str,sys.version_info[:2])))') log "Python3 версия: $pyver" # Проверка wget/curl/git if command -v git &>/dev/null; then METHOD=git elif command -v curl &>/dev/null; then METHOD=curl elif command -v wget &>/dev/null; then METHOD=wget else echo "[FATAL] Нужен git, curl или wget" exit 1 fi # Установка if [ -d "$INSTALL_DIR" ]; then log "Директория $INSTALL_DIR уже существует. Перезаписываем ..." rm -rf "$INSTALL_DIR" fi mkdir -p "$INSTALL_DIR" case "$METHOD" in git) log "Клонируем через git ..." git clone --depth=1 --branch "$BRANCH" "$REPO_URL" "$INSTALL_DIR" ;; curl) log "Скачиваем через curl ..." tmpzip=$(mktemp /tmp/migrate-XXXXX.zip) curl -fsSL "${REPO_URL}/archive/refs/heads/${BRANCH}.zip" -o "$tmpzip" || { curl -fsSL "${REPO_URL}/archive/${BRANCH}.zip" -o "$tmpzip" } python3 -c "import zipfile; zipfile.ZipFile('$tmpzip').extractall('/tmp')" mv /tmp/docker-migrate-*/* "$INSTALL_DIR/" rm -f "$tmpzip" ;; wget) log "Скачиваем через wget ..." tmpzip=$(mktemp /tmp/migrate-XXXXX.zip) wget -q "${REPO_URL}/archive/refs/heads/${BRANCH}.zip" -O "$tmpzip" || { wget -q "${REPO_URL}/archive/${BRANCH}.zip" -O "$tmpzip" } python3 -c "import zipfile; zipfile.ZipFile('$tmpzip').extractall('/tmp')" mv /tmp/docker-migrate-*/* "$INSTALL_DIR/" rm -f "$tmpzip" ;; esac log "Установлено в $INSTALL_DIR" # Создаём symlink в /usr/local/bin ln -sf "$INSTALL_DIR/migrate" /usr/local/bin/docker-migrate 2>/dev/null || true if [ -e /dev/tty ]; then # Если есть терминал — запускаем migrate с перехваченным stdin log "Запускаем docker-migrate ..." cd "$INSTALL_DIR" exec < /dev/tty python3 migrate "$@" else # Нет терминала (pipe без tty) — показываем инструкцию echo "" echo "==========================================" echo "Установка завершена!" echo "" echo "Запустите интерактивный режим:" echo " docker-migrate" echo "" echo "Или напрямую:" echo " docker-migrate --mode=source # подготовка к переносу" echo " docker-migrate --mode=target # восстановление на новом сервере" echo " docker-migrate --resume # продолжить после ошибки" echo "==========================================" fi