diff --git a/refresh_toolbox.sh b/refresh_toolbox.sh new file mode 100755 index 0000000..75521a1 --- /dev/null +++ b/refresh_toolbox.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash + +set -e + +TOOLBOX_NAME="vllm" +IMAGE="docker.io/kyuz0/vllm-therock-gfx1151:latest" + +# Base options +OPTIONS="--device /dev/dri --device /dev/kfd --group-add video --group-add render --security-opt seccomp=unconfined" + +# Check for InfiniBand devices +if [ -d "/dev/infiniband" ]; then + echo "๐Ÿ”Ž InfiniBand devices detected! Adding RDMA support..." + OPTIONS="$OPTIONS --device /dev/infiniband --group-add rdma --ulimit memlock=-1" +else + echo "โ„น๏ธ No InfiniBand devices detected." +fi + +# Check dependencies +for cmd in podman toolbox; do + command -v "$cmd" > /dev/null || { echo "Error: '$cmd' is not installed." >&2; exit 1; } +done + +echo "๐Ÿ”„ Refreshing $TOOLBOX_NAME (image: $IMAGE)" + +# Remove the toolbox if it exists +if toolbox list 2>/dev/null | grep -q "$TOOLBOX_NAME"; then + echo "๐Ÿงน Removing existing toolbox: $TOOLBOX_NAME" + toolbox rm -f "$TOOLBOX_NAME" +fi + +echo "โฌ‡๏ธ Pulling latest image: $IMAGE" +podman pull "$IMAGE" + +# Identify current image ID/digest for this tag +new_id="$(podman image inspect --format '{{.Id}}' "$IMAGE" 2>/dev/null || true)" +new_digest="$(podman image inspect --format '{{.Digest}}' "$IMAGE" 2>/dev/null || true)" + +echo "๐Ÿ“ฆ Recreating toolbox: $TOOLBOX_NAME" +echo " Options: $OPTIONS" +# Note: toolbox create passes arguments after '--' to podman create +toolbox create "$TOOLBOX_NAME" --image "$IMAGE" -- $OPTIONS + +# --- Cleanup: keep only the most recent image for this tag --- +repo="${IMAGE%:*}" + +# Remove any other local images still carrying this exact tag but not the newest digest +while read -r id ref dig; do + if [[ "$id" != "$new_id" ]]; then + podman image rm -f "$id" >/dev/null 2>&1 || true + fi +done < <(podman images --digests --format '{{.ID}} {{.Repository}}:{{.Tag}} {{.Digest}}' \ + | awk -v ref="$IMAGE" -v ndig="$new_digest" '$2==ref && $3!=ndig') + +# Remove dangling images from this repository (typically prior pulls of this tag) +while read -r id; do + podman image rm -f "$id" >/dev/null 2>&1 || true +done < <(podman images --format '{{.ID}} {{.Repository}}:{{.Tag}}' \ + | awk -v r="$repo" '$2==r":" {print $1}') +# --- end cleanup --- + +echo "โœ… $TOOLBOX_NAME refreshed"