diff --git a/start.sh b/start.sh index f2dbb98..6266500 100644 --- a/start.sh +++ b/start.sh @@ -287,109 +287,69 @@ start_placeholder_server() { return 1 } -# Setup and attempt to run Museum server +# Setting up and attempting to run the Museum server echo "==> Setting up Museum server..." -# Set GOPATH for Go builds -export GOPATH="/app/data/go" -export PATH="$GOPATH/bin:$PATH" - -# Check for existing Museum binary +# Try using Docker to pull and run the Museum server MUSEUM_BIN="/app/data/ente/server/museum" +MUSEUM_IMAGE="ghcr.io/ente-io/server:latest" VALID_BINARY=false -if [ -f "$MUSEUM_BIN" ]; then - # Check if the file is a valid binary - echo "==> Checking if Museum binary is valid..." - file_type=$(file -b "$MUSEUM_BIN") +# Check if Docker is available +if command -v docker >/dev/null 2>&1; then + echo "==> Docker is available, attempting to use Museum server image" - # Log the file type for debugging - echo "==> Museum binary file type: $file_type" - - # Check file content for debugging - echo "==> First few lines of Museum binary:" - head -n 3 "$MUSEUM_BIN" || echo "==> Unable to read binary file" - - # Check if it's an ELF executable or contains ELF in the description - if [[ "$file_type" == *"ELF"* ]] && [ -x "$MUSEUM_BIN" ]; then - echo "==> Found valid Museum binary, using it" - VALID_BINARY=true - else - echo "==> Museum binary exists but is not a valid executable, removing it" - rm -f "$MUSEUM_BIN" - fi -fi - -if [ "$VALID_BINARY" = false ]; then - echo "==> No valid Museum binary found, trying to build or download one" - - # Check if Go is installed - if command -v go >/dev/null 2>&1; then - echo "==> Building Museum server from source..." + # Try pulling the Museum server image + if docker pull $MUSEUM_IMAGE; then + echo "==> Successfully pulled Museum server image" - # Navigate to the server directory - cd "$ENTE_DIR/server" - - # Build the Museum server - echo "==> Building Museum server..." - mkdir -p "$(dirname "$MUSEUM_BIN")" - go build -o "$MUSEUM_BIN" ./cmd/museum - - if [ $? -eq 0 ] && [ -f "$MUSEUM_BIN" ] && [ -x "$MUSEUM_BIN" ]; then - echo "==> Successfully built Museum server" - VALID_BINARY=true + # Extract the Museum binary from the Docker image + TEMP_CONTAINER=$(docker create $MUSEUM_IMAGE) + if [ -n "$TEMP_CONTAINER" ]; then + echo "==> Created temporary container to extract Museum binary" + mkdir -p "$(dirname "$MUSEUM_BIN")" + if docker cp "$TEMP_CONTAINER:/app/museum" "$MUSEUM_BIN"; then + chmod +x "$MUSEUM_BIN" + docker rm "$TEMP_CONTAINER" >/dev/null + echo "==> Successfully extracted Museum binary from Docker image" + VALID_BINARY=true + else + echo "==> Failed to extract Museum binary from container" + docker rm "$TEMP_CONTAINER" >/dev/null + fi else - echo "==> Failed to build Museum server" + echo "==> Failed to create temporary container" fi else - echo "==> Go not found, skipping build" + echo "==> Failed to pull Museum server image" fi +else + echo "==> Docker not available, skipping Docker-based Museum binary extraction" +fi + +# If Docker extraction failed, try building from source +if [ "$VALID_BINARY" = false ] && command -v go >/dev/null 2>&1; then + echo "==> Building Museum server from source..." - # If build failed or Go not available, try downloading - if [ "$VALID_BINARY" = false ]; then - echo "==> Trying to download Museum binary..." - - # Determine architecture and platform - ARCH=$(uname -m) - OS=$(uname -s | tr '[:upper:]' '[:lower:]') - - case "$ARCH" in - x86_64) - ARCH="amd64" - ;; - aarch64|arm64) - ARCH="arm64" - ;; - esac - - # Try downloading from GitHub releases - URLS=( - "https://github.com/ente-io/ente/releases/latest/download/museum-${OS}-${ARCH}" - "https://github.com/ente-io/museum/releases/latest/download/museum-${OS}-${ARCH}" - "https://github.com/ente-io/ente/releases/download/latest/museum-${OS}-${ARCH}" - ) - - for URL in "${URLS[@]}"; do - echo "==> Trying to download from: $URL" - if curl -L -o "$MUSEUM_BIN" "$URL" && [ -f "$MUSEUM_BIN" ]; then - chmod +x "$MUSEUM_BIN" - - # Verify the downloaded file is executable - file_type=$(file -b "$MUSEUM_BIN") - echo "==> Downloaded file type: $file_type" - - if [[ "$file_type" == *"ELF"* ]] || [[ "$file_type" == *"executable"* ]]; then - echo "==> Successfully downloaded Museum binary" - VALID_BINARY=true - break - else - echo "==> Downloaded file is not an executable" - rm -f "$MUSEUM_BIN" - fi - else - echo "==> Failed to download from $URL" - fi - done + # Navigate to the server directory + cd "$ENTE_DIR/server" + + # Build the Museum server + echo "==> Building Museum server..." + mkdir -p "$(dirname "$MUSEUM_BIN")" + export GOPATH="/app/data/go" + export PATH="$GOPATH/bin:$PATH" + + # Install required build dependencies + apt-get update -y && apt-get install -y golang-go gcc libsodium-dev pkg-config + + go build -o "$MUSEUM_BIN" ./cmd/museum + + if [ $? -eq 0 ] && [ -f "$MUSEUM_BIN" ] && [ -x "$MUSEUM_BIN" ]; then + echo "==> Successfully built Museum server" + VALID_BINARY=true + else + echo "==> Failed to build Museum server" fi fi