mirror of
https://github.com/BigBodyCobain/Shadowbroker.git
synced 2026-04-23 19:16:06 +02:00
d6f97df336
Former-commit-id: f197ec0f20
117 lines
2.8 KiB
Bash
Executable File
117 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
COMPOSE_FILE="$SCRIPT_DIR/docker-compose.yml"
|
|
ENGINE="${SHADOWBROKER_CONTAINER_ENGINE:-auto}"
|
|
COMPOSE_ARGS=()
|
|
COMPOSE_PROVIDER=""
|
|
|
|
find_docker_compose() {
|
|
if command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then
|
|
COMPOSE_CMD=(docker compose)
|
|
COMPOSE_PROVIDER="docker compose"
|
|
return 0
|
|
fi
|
|
|
|
if command -v docker-compose >/dev/null 2>&1; then
|
|
COMPOSE_CMD=(docker-compose)
|
|
COMPOSE_PROVIDER="docker-compose"
|
|
return 0
|
|
fi
|
|
|
|
return 1
|
|
}
|
|
|
|
find_podman_compose() {
|
|
if command -v podman >/dev/null 2>&1 && podman compose version >/dev/null 2>&1; then
|
|
COMPOSE_CMD=(podman compose)
|
|
COMPOSE_PROVIDER="podman compose"
|
|
return 0
|
|
fi
|
|
|
|
if command -v podman-compose >/dev/null 2>&1; then
|
|
COMPOSE_CMD=(podman-compose)
|
|
COMPOSE_PROVIDER="podman-compose"
|
|
return 0
|
|
fi
|
|
|
|
return 1
|
|
}
|
|
|
|
if [ ! -f "$COMPOSE_FILE" ]; then
|
|
echo "[!] ERROR: Missing compose file: $COMPOSE_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
while [ "$#" -gt 0 ]; do
|
|
case "$1" in
|
|
--engine)
|
|
if [ "$#" -lt 2 ]; then
|
|
echo "[!] ERROR: --engine requires a value: docker, podman, or auto."
|
|
exit 1
|
|
fi
|
|
ENGINE="$2"
|
|
shift 2
|
|
;;
|
|
--engine=*)
|
|
ENGINE="${1#*=}"
|
|
shift
|
|
;;
|
|
*)
|
|
COMPOSE_ARGS+=("$1")
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ "${#COMPOSE_ARGS[@]}" -eq 0 ]; then
|
|
COMPOSE_ARGS=(up -d)
|
|
fi
|
|
|
|
if [ "${#COMPOSE_ARGS[@]}" -gt 0 ]; then
|
|
last_index=$((${#COMPOSE_ARGS[@]} - 1))
|
|
if [ "${COMPOSE_ARGS[$last_index]}" = "." ]; then
|
|
echo "[*] Ignoring trailing '.' argument."
|
|
unset "COMPOSE_ARGS[$last_index]"
|
|
fi
|
|
fi
|
|
|
|
if [ "${#COMPOSE_ARGS[@]}" -eq 0 ]; then
|
|
COMPOSE_ARGS=(up -d)
|
|
fi
|
|
|
|
COMPOSE_CMD=()
|
|
|
|
case "$ENGINE" in
|
|
auto)
|
|
find_docker_compose || find_podman_compose
|
|
;;
|
|
docker)
|
|
find_docker_compose
|
|
;;
|
|
podman)
|
|
find_podman_compose
|
|
;;
|
|
*)
|
|
echo "[!] ERROR: Unsupported engine '$ENGINE'. Use docker, podman, or auto."
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
if [ "${#COMPOSE_CMD[@]}" -eq 0 ]; then
|
|
echo "[!] ERROR: No supported compose command found for engine '$ENGINE'."
|
|
echo " Install one of: docker compose, docker-compose, podman compose, or podman-compose."
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$ENGINE" = "podman" ] && [ "$COMPOSE_PROVIDER" = "podman compose" ]; then
|
|
echo "[*] Using (podman): ${COMPOSE_CMD[*]}"
|
|
echo "[*] Note: 'podman compose' is Podman's wrapper command and may delegate to docker-compose based on your local Podman configuration."
|
|
else
|
|
echo "[*] Using ($ENGINE): ${COMPOSE_CMD[*]}"
|
|
fi
|
|
|
|
"${COMPOSE_CMD[@]}" -f "$COMPOSE_FILE" "${COMPOSE_ARGS[@]}"
|