Add download progress pulse to install entrypoint
Этот коммит содержится в:
+39
-4
@@ -11,6 +11,7 @@ set -euo pipefail
|
|||||||
|
|
||||||
INSTALL_URL="${VIRTUALITY_BOOTSTRAP_URL:-https://raw.githubusercontent.com/viktor138irk/virtuality/main/bootstrap.sh}"
|
INSTALL_URL="${VIRTUALITY_BOOTSTRAP_URL:-https://raw.githubusercontent.com/viktor138irk/virtuality/main/bootstrap.sh}"
|
||||||
TMP_FILE="/tmp/virtuality-install-$$.sh"
|
TMP_FILE="/tmp/virtuality-install-$$.sh"
|
||||||
|
DOWNLOAD_LOG="/tmp/virtuality-install-download-$$.log"
|
||||||
|
|
||||||
ESC="\033"
|
ESC="\033"
|
||||||
RESET="${ESC}[0m"
|
RESET="${ESC}[0m"
|
||||||
@@ -21,13 +22,38 @@ CYAN="${ESC}[36m"
|
|||||||
GRAY="${ESC}[90m"
|
GRAY="${ESC}[90m"
|
||||||
|
|
||||||
cleanup() {
|
cleanup() {
|
||||||
rm -f "$TMP_FILE" 2>/dev/null || true
|
rm -f "$TMP_FILE" "$DOWNLOAD_LOG" 2>/dev/null || true
|
||||||
}
|
}
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
|
||||||
ok() { echo -e "${GREEN}✓${RESET} $*"; }
|
ok() { echo -e "${GREEN}✓${RESET} $*"; }
|
||||||
fail() { echo -e "${RED}✗${RESET} $*"; exit 1; }
|
fail() { echo -e "${RED}✗${RESET} $*"; exit 1; }
|
||||||
|
|
||||||
|
run_with_pulse() {
|
||||||
|
local text="$1"
|
||||||
|
shift
|
||||||
|
local pid code start_ts elapsed i symbol
|
||||||
|
local spinner=("⠋" "⠙" "⠹" "⠸" "⠼" "⠴" "⠦" "⠧" "⠇" "⠏")
|
||||||
|
|
||||||
|
"$@" >"$DOWNLOAD_LOG" 2>&1 &
|
||||||
|
pid=$!
|
||||||
|
start_ts="$(date +%s)"
|
||||||
|
i=0
|
||||||
|
|
||||||
|
while kill -0 "$pid" 2>/dev/null; do
|
||||||
|
elapsed=$(( $(date +%s) - start_ts ))
|
||||||
|
symbol="${spinner[$((i % ${#spinner[@]}))]}"
|
||||||
|
printf "\r ${CYAN}%s${RESET} %s... ${GRAY}%ss${RESET} ${GRAY}(%s)${RESET}" "$symbol" "$text" "$elapsed" "$INSTALL_URL"
|
||||||
|
sleep 1
|
||||||
|
i=$((i + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
wait "$pid"
|
||||||
|
code=$?
|
||||||
|
printf "\r%*s\r" 140 ""
|
||||||
|
return "$code"
|
||||||
|
}
|
||||||
|
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
${CYAN}${BOLD}Virtuality installer${RESET}
|
${CYAN}${BOLD}Virtuality installer${RESET}
|
||||||
${GRAY}Bootstrap:${RESET} ${INSTALL_URL}
|
${GRAY}Bootstrap:${RESET} ${INSTALL_URL}
|
||||||
@@ -37,9 +63,19 @@ echo
|
|||||||
|
|
||||||
echo "[1/3] Загружаем основной установщик..."
|
echo "[1/3] Загружаем основной установщик..."
|
||||||
if command -v curl >/dev/null 2>&1; then
|
if command -v curl >/dev/null 2>&1; then
|
||||||
curl -fL --show-error "$INSTALL_URL" -o "$TMP_FILE" || fail "Не удалось скачать bootstrap. Проверь, что репозиторий публичный и URL доступен."
|
if run_with_pulse "Скачиваем bootstrap" curl -fL --show-error "$INSTALL_URL" -o "$TMP_FILE"; then
|
||||||
|
ok "Установщик скачан: $TMP_FILE"
|
||||||
|
else
|
||||||
|
cat "$DOWNLOAD_LOG" 2>/dev/null || true
|
||||||
|
fail "Не удалось скачать bootstrap. Проверь, что репозиторий публичный и URL доступен."
|
||||||
|
fi
|
||||||
elif command -v wget >/dev/null 2>&1; then
|
elif command -v wget >/dev/null 2>&1; then
|
||||||
wget -O "$TMP_FILE" "$INSTALL_URL" || fail "Не удалось скачать bootstrap. Проверь, что репозиторий публичный и URL доступен."
|
if run_with_pulse "Скачиваем bootstrap" wget -O "$TMP_FILE" "$INSTALL_URL"; then
|
||||||
|
ok "Установщик скачан: $TMP_FILE"
|
||||||
|
else
|
||||||
|
cat "$DOWNLOAD_LOG" 2>/dev/null || true
|
||||||
|
fail "Не удалось скачать bootstrap. Проверь, что репозиторий публичный и URL доступен."
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
fail "Нужен curl или wget для загрузки установщика Virtuality."
|
fail "Нужен curl или wget для загрузки установщика Virtuality."
|
||||||
fi
|
fi
|
||||||
@@ -49,7 +85,6 @@ if [[ ! -s "$TMP_FILE" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
chmod +x "$TMP_FILE"
|
chmod +x "$TMP_FILE"
|
||||||
ok "Установщик скачан: $TMP_FILE"
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "[2/3] Проверяем режим запуска..."
|
echo "[2/3] Проверяем режим запуска..."
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user