#!/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" } echo "Sleeping for a bit" sleep 5 GARAGE_COMMAND_EXEC="$GARAGE_BIN -c /etc/garage.toml server" # Check if setup already completed if [ -f "$SETUP_DONE" ]; then echo "â„šī¸ Setup already completed. Starting Garage..." exec $GARAGE_COMMANDS_EXEC fi echo "🔧 First-time setup - initializing Garage..." # Start Garage in background for setup (just the binary, no daemon subcommand) echo "âŗ Starting Garage in background..." echo "GARAGE_BIN: $GARAGE_COMMAND_EXEC" # $GARAGE_BIN "$@" & # GARAGE_PID=$! # $GARAGE_BIN -c /etc/garage.toml & GARAGE_PID=$! $GARAGE_COMMAND_EXEC & GARAGE_PID=$! echo "GARAGE_PID: $GARAGE_PID" # echo "Command: $GARAGE_BIN $@" # 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) echo "Node ID: $NODE_ID" sleep 5 echo "Assigning layout" # $GARAGE_BIN layout assign --version 1 -z ny1 -c 4G $NODE_ID $GARAGE_BIN layout assign -z ny1 -c 4G $NODE_ID # $GARAGE_BIN status sleep 5 # $GARAGE_BIN status echo "Show layout" $GARAGE_BIN layout show sleep 5 echo "Applying layout" $GARAGE_BIN layout apply --version 1 echo " ✅ Layout applied" sleep 10 else echo "â„šī¸ Layout already applied" fi # Create bucket echo "Bucket: $BUCKET_NAME" if ! $GARAGE_BIN bucket info "$BUCKET_NAME" 2>/dev/null; then echo "đŸ“Ļ Creating bucket: $BUCKET_NAME" $GARAGE_BIN bucket create "$BUCKET_NAME" sleep 10 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 sleep 15 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" # Wait for Garage to be ready echo "âŗ Waiting for Garage API..." until curl -s -f "http://localhost:3900/v0/status" > /dev/null 2>&1; do echo " Not ready yet, sleeping 2s..." sleep 2 done echo "✅ Garage API is responding!" # 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 "$@" exec $GARAGE_COMMANDS_EXEC