Files
docker-migrate/install.sh

104 lines
3.8 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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