#!/usr/bin/env bash # ============================================================================= # SCADA STACK — Tek Komut Kurulum (Public Gist) # # Kullanım: # curl -fsSL https://install-server.datarapor.com | sudo bash # # Bu script: # 1. GitHub Device Flow ile tek seferlik yetki alır # 2. Private repo'yu klonlar # 3. install-portainer.sh'ı çalıştırır # 4. Tüm credential'ları siler # ============================================================================= set -euo pipefail GITHUB_CLIENT_ID="Ov23liBWl57nd2wsKP0k" STACK_REPO="https://github.com/zakeGit/scada-stack.git" STACK_BRANCH="main" INSTALL_DIR="/opt/scada-stack" GITHUB_TOKEN="" if [ "$(id -u)" -ne 0 ]; then echo "Bu script root olarak çalıştırılmalı: sudo bash install.sh" exit 1 fi # Gerekli paketler apt-get update -y -qq apt-get install -y -qq curl git >/dev/null echo "=============================================" echo " SCADA STACK — KURULUM BAŞLATILIYOR" echo "=============================================" # ── GitHub Device Flow ─────────────────────────────────────────────────────── echo "" echo "─── GitHub Yetkilendirme ───" echo "Private repo ve imajlar için GitHub yetkisi gerekiyor." echo "Tarayıcıda GitHub hesabınızla onay vereceksiniz." echo "" DEVICE_RESPONSE=$(curl -sS -X POST "https://github.com/login/device/code" \ -H "Accept: application/json" \ -d "client_id=${GITHUB_CLIENT_ID}&scope=repo,read:packages") DEVICE_CODE=$(echo "$DEVICE_RESPONSE" | grep -o '"device_code":"[^"]*"' | cut -d'"' -f4) USER_CODE=$(echo "$DEVICE_RESPONSE" | grep -o '"user_code":"[^"]*"' | cut -d'"' -f4) VERIFY_URL=$(echo "$DEVICE_RESPONSE" | grep -o '"verification_uri":"[^"]*"' | cut -d'"' -f4) INTERVAL=$(echo "$DEVICE_RESPONSE" | grep -o '"interval":[0-9]*' | cut -d: -f2) INTERVAL=${INTERVAL:-5} if [ -z "$DEVICE_CODE" ] || [ -z "$USER_CODE" ]; then echo " ✘ Device flow başlatılamadı." echo " Yanıt: $DEVICE_RESPONSE" exit 1 fi echo "┌─────────────────────────────────────────────┐" echo "│ 1. Tarayıcıda bu adresi açın: │" echo "│ → ${VERIFY_URL} │" echo "│ │" echo "│ 2. Bu kodu girin: ${USER_CODE} │" echo "└─────────────────────────────────────────────┘" echo "" echo "Yetkilendirme bekleniyor... (tarayıcıda onaylayın)" while true; do sleep "$INTERVAL" TOKEN_RESPONSE=$(curl -sS -X POST "https://github.com/login/oauth/access_token" \ -H "Accept: application/json" \ -d "client_id=${GITHUB_CLIENT_ID}&device_code=${DEVICE_CODE}&grant_type=urn:ietf:params:oauth:grant-type:device_code") ACCESS_TOKEN=$(echo "$TOKEN_RESPONSE" | grep -o '"access_token":"[^"]*"' | cut -d'"' -f4 || true) ERROR=$(echo "$TOKEN_RESPONSE" | grep -o '"error":"[^"]*"' | cut -d'"' -f4 || true) if [ -n "$ACCESS_TOKEN" ]; then GITHUB_TOKEN="$ACCESS_TOKEN" echo " → GitHub yetkilendirme başarılı!" break elif [ "$ERROR" = "slow_down" ]; then INTERVAL=$((INTERVAL + 5)) elif [ "$ERROR" = "authorization_pending" ]; then continue else echo " ✘ Yetkilendirme başarısız: $ERROR" exit 1 fi done # ── Repo Klonla ───────────────────────────────────────────────────────────── echo "" echo "Repo klonlanıyor..." REPO_WITH_TOKEN="https://x-access-token:${GITHUB_TOKEN}@github.com/zakeGit/scada-stack.git" if [ -d "$INSTALL_DIR/.git" ]; then git -C "$INSTALL_DIR" remote set-url origin "$REPO_WITH_TOKEN" git -C "$INSTALL_DIR" fetch origin "$STACK_BRANCH" git -C "$INSTALL_DIR" reset --hard "origin/$STACK_BRANCH" else rm -rf "$INSTALL_DIR" git clone --branch "$STACK_BRANCH" --single-branch "$REPO_WITH_TOKEN" "$INSTALL_DIR" fi git -C "$INSTALL_DIR" remote set-url origin "$STACK_REPO" unset REPO_WITH_TOKEN echo " → Repo hazır: $INSTALL_DIR" # ── Kurulumu Başlat ────────────────────────────────────────────────────────── export GH_TOKEN="$GITHUB_TOKEN" cd "$INSTALL_DIR" bash install-portainer.sh