#!/bin/sh set -e BUCKET_NAME="${BUCKET_NAME:-soaricarus-storage}" CREDENTIALS_FILE="/shared/garage-credentials.env" SETUP_DONE="/shared/setup.done" GARAGE_BIN="/usr/local/bin/garage" # Function to write credentials write_credentials() { local access_key="$1" local secret_key="$2" mkdir -p "$(dirname "$CREDENTIALS_FILE")" cat > "$CREDENTIALS_FILE" << EOF GARAGE_ACCESS_KEY_ID=$access_key GARAGE_SECRET_ACCESS_KEY=$secret_key GARAGE_BUCKET_NAME=$BUCKET_NAME GARAGE_ENDPOINT=http://localhost:3900 EOF touch "$SETUP_DONE" echo "✅ Credentials saved to $CREDENTIALS_FILE" } # Check if setup already completed if [ -f "$SETUP_DONE" ]; then echo "â„šī¸ Setup already completed. Starting Garage..." exec $GARAGE_BIN "$@" fi echo "🔧 First-time setup - initializing Garage..." # Start Garage in background for setup (just the binary, no daemon subcommand) echo "âŗ Starting Garage in background..." $GARAGE_BIN "$@" & GARAGE_PID=$! # Wait for Garage to be ready echo "âŗ Waiting for Garage API..." until curl -s -f "http://localhost:3901/v0/status" > /dev/null 2>&1; do echo " Not ready yet, sleeping 2s..." sleep 2 done echo "✅ Garage API is responding!" # Apply cluster layout if ! $GARAGE_BIN layout show 2>/dev/null | grep -q "Current cluster layout"; then echo "đŸ“Ļ Applying cluster layout..." NODE_ID=$($GARAGE_BIN node id | head -n1) $GARAGE_BIN layout assign --version 1 "$NODE_ID" $GARAGE_BIN layout apply --version 1 echo " ✅ Layout applied" sleep 2 else echo "â„šī¸ Layout already applied" fi # Create bucket if ! $GARAGE_BIN bucket info "$BUCKET_NAME" 2>/dev/null; then echo "đŸ“Ļ Creating bucket: $BUCKET_NAME" $GARAGE_BIN bucket create "$BUCKET_NAME" else echo "â„šī¸ Bucket $BUCKET_NAME already exists" fi # Handle key if [ -n "$AWS_ACCESS_KEY_ID" ] && [ -n "$AWS_SECRET_ACCESS_KEY" ]; then echo "🔑 Using pre-defined credentials from .env" if ! $GARAGE_BIN key info "$AWS_ACCESS_KEY_ID" 2>/dev/null; then $GARAGE_BIN key import "$AWS_ACCESS_KEY_ID" "$AWS_SECRET_ACCESS_KEY" "app-key" echo " ✅ Key imported: $AWS_ACCESS_KEY_ID" else echo " â„šī¸ Key already exists: $AWS_ACCESS_KEY_ID" fi ACCESS_KEY="$AWS_ACCESS_KEY_ID" SECRET_KEY="$AWS_SECRET_ACCESS_KEY" else echo "🔑 Generating new key..." KEY_OUTPUT=$($GARAGE_BIN key create --name "app-key") echo "$KEY_OUTPUT" ACCESS_KEY=$(echo "$KEY_OUTPUT" | grep 'Key ID:' | awk '{print $3}') SECRET_KEY=$(echo "$KEY_OUTPUT" | grep 'Secret key:' | awk '{print $3}') echo " ✅ Key generated: $ACCESS_KEY" fi # Grant permissions $GARAGE_BIN bucket allow --read --write --owner "$BUCKET_NAME" --key "$ACCESS_KEY" echo " ✅ Permissions granted" # Save credentials write_credentials "$ACCESS_KEY" "$SECRET_KEY" echo "🎉 Setup complete!" echo " Bucket: $BUCKET_NAME" echo " Access Key: $ACCESS_KEY" # Stop background Garage echo "âšī¸ Stopping background Garage..." kill "$GARAGE_PID" wait "$GARAGE_PID" 2>/dev/null || true # Start Garage in foreground echo "🚀 Starting Garage in foreground..." exec $GARAGE_BIN "$@"