Files
docker-migrate/install.sh
T

104 lines
3.8 KiB
Bash

#!/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