Files
glchat/scripts/test-install.sh
T
grendervill 99e0f72844 fix(deploy): надёжный рендер шаблонов и устойчивый цикл подстановки
- render_template: значения передаются через окружение (envsubst), а не
  подставляются в variadic-аргументы — многострочные значения больше не
  ломают разбор, неполный список не уводит bash в бесконечный цикл
- export "$pair": bash сам разбирает KEY=value (было export "${pair}")
- шаблоны переведены на ${VAR}-синтаксис, добавлен compose.test.yaml.tpl
  для тестового режима установщика (--skip-tls без публикации портов)
- dry-run не требует root и работает вне Linux (проверка ОС пропускается)
- install.sh: учитываются --livekit-*-порты и --turn-*-порты в livekit.yaml,
  исправлено экранирование апострофа в итоговой сводке
- scripts/debug-install.sh: трассировка установщика в контейнере
2026-09-19 19:26:26 +03:00

83 lines
3.5 KiB
Bash
Executable File
Raw 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
# Прогон deploy/install.sh в чистом контейнере Ubuntu 24.04 (AGENT.md 11.3).
# Требуется Docker с поддержкой привилегированных контейнеров (systemd внутри).
set -euo pipefail
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
IMAGE="${GLCHAT_TEST_IMAGE:-jrei/systemd-ubuntu:24.04}"
CONTAINER="${GLCHAT_TEST_CONTAINER:-glchat-install-test-$$}"
log() { printf '\n=== %s ===\n' "$*"; }
cleanup() {
docker rm -f "$CONTAINER" >/dev/null 2>&1 || true
}
trap cleanup EXIT
log "запуск ${IMAGE} как systemd-контейнера"
docker rm -f "$CONTAINER" >/dev/null 2>&1 || true
docker run -d --name "$CONTAINER" \
--privileged \
--cgroupns=host \
--tmpfs /tmp:exec,size=2g --tmpfs /run --tmpfs /run/lock \
-v /sys/fs/cgroup:/sys/fs/cgroup:rw \
"$IMAGE" /sbin/init >/dev/null
log "ожидание systemd"
for _ in $(seq 1 30); do
if docker exec "$CONTAINER" systemctl is-system-running 2>/dev/null | grep -qE 'running|degraded'; then
break
fi
sleep 1
done
docker exec "$CONTAINER" systemctl is-system-running || true
docker exec "$CONTAINER" bash -lc '. /etc/os-release && echo "тестовое окружение: $PRETTY_NAME"'
log "копируем репозиторий внутрь контейнера"
docker exec "$CONTAINER" mkdir -p /opt/glchat-src
docker cp "${REPO_DIR}/." "${CONTAINER}:/opt/glchat-src/"
# stdin закрыт: иначе установщик может ждать интерактивного подтверждения.
run_install() {
local label="$1"
shift
log "$label"
if ! timeout 1500 docker exec -i "$CONTAINER" bash -lc "
cd /opt/glchat-src && GLCHAT_ETC_DIR=/opt/glchat \
bash deploy/install.sh --domain gl.test.local --email admin@gl.test.local \
--admin admin@gl.test.local --password 'test-password-123' \
--skip-tls --app-port 8080 --no-turn --yes $*
" </dev/null; then
echo "install.sh завершился с ошибкой (${label})" >&2
docker exec "$CONTAINER" bash -lc 'tail -40 /opt/glchat/install.log 2>/dev/null || true' || true
exit 1
fi
}
log "1/4 install.sh --dry-run"
timeout 600 docker exec -i "$CONTAINER" bash -lc '
cd /opt/glchat-src && GLCHAT_ETC_DIR=/tmp/dryrun \
bash deploy/install.sh --dry-run --domain gl.test.local --email admin@gl.test.local \
--admin admin@gl.test.local --password "test-password-123" --yes
' </dev/null
run_install "2/4 install.sh (боевой прогон: TLS и публичные порты не трогаем)"
run_install "3/4 идемпотентность: повторный запуск с --reconfigure" --reconfigure
log "4/4 проверки состояния"
docker exec "$CONTAINER" bash -lc '
set -e
echo "--- healthz"; curl -fsS http://127.0.0.1:8080/healthz; echo
echo "--- readyz"; curl -fsS http://127.0.0.1:8080/readyz; echo
echo "--- meta"; curl -fsS http://127.0.0.1:8080/api/v1/meta; echo
echo "--- index"; curl -fsS http://127.0.0.1:8080/ | head -c 120; echo
test -x /usr/local/bin/glchat && echo "CLI: ok"
test -f /opt/glchat/compose.yaml && echo "compose: ok"
test -f /opt/glchat/external-proxy.conf && echo "external-proxy fragment: ok"
stat -c "perms %a %n" /opt/glchat/.env
systemctl is-enabled glchat.service
glchat version
'
log "ОК: прогон установщика в чистом Ubuntu 24.04 завершён"