#!/usr/bin/env bash # ============================================================================= # MapSystem — kümeye node ekleme # # curl -fsSL https://mapsystem.com.tr/indir/node-ekle.sh | sudo bash -s -- \ # --kume http://192.168.0.105 --anahtar # # --kume Kümedeki çalışan herhangi bir node'un adresi. # --anahtar Kümenin KATILIM ANAHTARI. Bunu siz belirlemezsiniz: kümenin ilk node'u # "kur.sh --kume" ile kurulurken rastgele üretir (64 karakterlik onaltılık bir dizi) # ve kurulumun sonunda ekrana basar. Rastgele bir değer yazarsanız küme node'u # kabul etmez. Anahtarı kümedeki herhangi bir node'da şu komutla görebilirsiniz: # sudo mapsystem-deploy --anahtar # # Betik kümenin erişilebilir olduğunu kontrol eder, aynı sürümü indirir, doğrular ve bu # makineyi kümeye katar. Node kimliği ve kümenin verdiği node token'ı veri dizinine # yazılır; kimlik bilgisini elle taşımanız gerekmez. # # Copyright (C) 2026 KBM Bilgisayar İletişim San. ve Tic. Ltd. Şti. (E-Sistem) # SPDX-License-Identifier: GPL-3.0-or-later # ============================================================================= set -euo pipefail BASE_URL="${MAPSYSTEM_URL:-https://mapsystem.com.tr/indir}" CLUSTER_URL="" JOIN_TOKEN="" VERSION="" PACKAGE="" PASS=() usage() { sed -n '2,23p' "$0" 2>/dev/null | sed 's/^# \{0,1\}//' cat <<'U' Seçenekler: --kume Kümedeki bir node (zorunlu), ör. http://192.168.0.105 --anahtar Kümenin katılım anahtarı (zorunlu). İlk node kurulurken üretilir; kümedeki bir node'da "sudo mapsystem-deploy --anahtar" ile görülür. --surum Kurulacak sürüm (varsayılan: kümedeki node'un sürümü, bulunamazsa en güncel) --paket İndirmek yerine elinizdeki paketi kullanır --adres İndirme adresi (varsayılan https://mapsystem.com.tr/indir) Diğer her seçenek install-mapsystem.sh'a aktarılır (ör. --node-id node4 --labels ssd). U } while [[ $# -gt 0 ]]; do case "$1" in --kume|--cluster) CLUSTER_URL="${2%/}"; shift 2;; --anahtar|--join-token) JOIN_TOKEN="$2"; shift 2;; --surum|--version) VERSION="$2"; shift 2;; --paket|--package) PACKAGE="$2"; shift 2;; --adres|--url) BASE_URL="$2"; shift 2;; -h|--help) usage; exit 0;; *) PASS+=("$1"); shift;; esac done log() { printf '\033[1;36m==>\033[0m %s\n' "$*"; } warn() { printf '\033[1;33m[!]\033[0m %s\n' "$*"; } die() { printf '\033[1;31m[X]\033[0m %s\n' "$*" >&2; exit 1; } [[ $EUID -eq 0 ]] || die "root gerekli: sudo ile çalıştırın." [[ -n "$CLUSTER_URL" ]] || die "--kume gerekli (ör. --kume http://192.168.0.105)." [[ -n "$JOIN_TOKEN" ]] || die "--anahtar gerekli. Anahtarı kümenin ilk node'u üretir; kümedeki herhangi bir node'da görmek için: sudo mapsystem-deploy --anahtar" [[ "$JOIN_TOKEN" =~ ^[0-9a-fA-F]{32,}$ ]] || warn "Anahtar beklenen biçimde değil (ilk node 64 karakterlik onaltılık bir anahtar üretir). Kopyalarken eksik kalmış olabilir." [[ "$CLUSTER_URL" == http://* || "$CLUSTER_URL" == https://* ]] || CLUSTER_URL="http://$CLUSTER_URL" command -v apt-get >/dev/null || die "Bu betik Ubuntu / Debian içindir." command -v curl >/dev/null || { apt-get update -qq && apt-get install -y -qq curl >/dev/null; } log "Küme kontrol ediliyor: $CLUSTER_URL" curl -fsS -m 8 "$CLUSTER_URL/health" >/dev/null \ || die "$CLUSTER_URL/health yanıt vermiyor. Adresi, güvenlik duvarını ve node'un çalıştığını kontrol edin." # Kümeyle aynı sürümü kurmak en güvenlisi; node sürümünü sağlık ucundan okumayı deneriz. if [[ -z "$VERSION" && -z "$PACKAGE" ]]; then VERSION="$(curl -fsS -m 8 "$CLUSTER_URL/health/version" 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || true)" [[ -n "$VERSION" ]] && log "Kümedeki sürüm: $VERSION" fi KUR_ARGS=() [[ -n "$VERSION" ]] && KUR_ARGS+=(--surum "$VERSION") [[ -n "$PACKAGE" ]] && KUR_ARGS+=(--paket "$PACKAGE") KUR="$(mktemp /tmp/mapsystem-kur.XXXXXX.sh)" trap 'rm -f "$KUR"' EXIT if [[ -f "$(dirname "$0")/kur.sh" ]]; then cp "$(dirname "$0")/kur.sh" "$KUR" else curl -fsSL -o "$KUR" "$BASE_URL/kur.sh" || die "kur.sh indirilemedi."; fi MAPSYSTEM_URL="$BASE_URL" bash "$KUR" "${KUR_ARGS[@]}" \ --cluster-mode mesh \ --join-token "$JOIN_TOKEN" \ --join-address "$CLUSTER_URL" \ --peers "$CLUSTER_URL" \ "${PASS[@]}" # Küme node'u kabul ettiyse kendisine bir node token'ı verir ve node onu veri dizinine yazar. DATA_DIR="/opt/mapsystem/data-directory" for ((i = 0; i < ${#PASS[@]}; i++)); do [[ "${PASS[$i]}" == "--data-dir" ]] && DATA_DIR="${PASS[$((i + 1))]:-$DATA_DIR}" done for _ in $(seq 1 15); do [[ -s "$DATA_DIR/node.token" ]] && break; sleep 2; done echo if [[ -s "$DATA_DIR/node.token" ]]; then log "Node kümeye eklendi. Yönetim arayüzünde Küme ekranından doğrulayabilirsiniz: $CLUSTER_URL/cluster" else die "MapSystem kuruldu ama küme bu node'u kabul etmedi. En sık nedeni yanlış katılım anahtarıdır. Doğru anahtarı kümedeki bir node'da görün: sudo mapsystem-deploy --anahtar Sonra bu betiği doğru anahtarla yeniden çalıştırın. Ayrıntı: journalctl -u mapsystem -n 50" fi