#!/bin/bash # Распаковка образа игры из dir-дампа skopeo в версионированный каталог nginx. # Использование: unpack-release.sh <тег> set -euo pipefail TAG="$1" IMG="$2" DEST="/opt/game/releases/${TAG}" [ -d "$IMG" ] || { echo "нет дампа $IMG"; exit 1; } rm -rf /tmp/rootfs-${TAG} mkdir -p /tmp/rootfs-${TAG} cd "$IMG" # слои из manifest.json в правильном порядке /usr/bin/python3 - <<'PY' > /tmp/layers-${TAG}.txt import json m = json.load(open('manifest.json')) for l in m['layers']: print(l['digest'].split(':', 1)[1]) PY while read -r layer; do [ -z "$layer" ] && continue case "$layer" in *tar.gz|*tgz) tar -xzf "$layer" -C /tmp/rootfs-${TAG} ;; *tar.zst) tar --zstd -xf "$layer" -C /tmp/rootfs-${TAG} ;; *) tar -xf "$layer" -C /tmp/rootfs-${TAG} ;; esac done < /tmp/layers-${TAG}.txt SRC="/tmp/rootfs-${TAG}/usr/share/nginx/html" [ -d "$SRC" ] || { echo "нет $SRC в образе"; ls /tmp/rootfs-${TAG}/usr/share/nginx 2>/dev/null; exit 1; } mkdir -p "$DEST" cp -a "$SRC/." "$DEST/" chmod -R a+rX /opt/game/releases rm -rf /tmp/rootfs-${TAG} /tmp/layers-${TAG}.txt echo "=== релиз ${TAG} разложен в ${DEST} ===" ls -la "$DEST" du -sh "$DEST"