104 lines
3.8 KiB
Bash
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
|