#!/usr/bin/env bash # Вшивает адрес сервера и публичный ключ в клон RustDesk перед сборкой. # Патчит две константы в сабмодуле hbb_common: # pub const RENDEZVOUS_SERVERS: &[&str] = &["rs-ny.rustdesk.com"]; # pub const RS_PUB_KEY: &str = "OeVu..."; # # Значения берутся из окружения (см. config/server.env.example): # RUSTDESK_SERVER — хост(ы) hbbs. Несколько — через запятую. Порт по умолчанию 21116, # нестандартный указывать как host:port. # RUSTDESK_PUB_KEY — публичный ключ сервера (содержимое id_ed25519.pub, base64). # RUSTDESK_API_SERVER — (опц.) URL API-сервера (RustDesk Server Pro). Пусто — пропустить. # # Использование: RUSTDESK_SERVER=... RUSTDESK_PUB_KEY=... ./scripts/preconfigure.sh <путь-к-клону-rustdesk> set -euo pipefail SRC="${1:?укажи путь к клону rustdesk первым аргументом}" CFG="$SRC/libs/hbb_common/src/config.rs" [ -f "$CFG" ] || { echo "ОШИБКА: не найден $CFG — сабмодуль hbb_common не инициализирован?" >&2; exit 1; } : "${RUSTDESK_SERVER:?не задан RUSTDESK_SERVER}" : "${RUSTDESK_PUB_KEY:?не задан RUSTDESK_PUB_KEY}" # Собираем Rust-массив &["a", "b"] из запятой-разделённого списка серверов. IFS=',' read -ra SRV <<< "$RUSTDESK_SERVER" ARR="" for s in "${SRV[@]}"; do s="$(echo -n "$s" | tr -d '[:space:]')" [ -n "$s" ] && ARR="${ARR}\"${s}\", " done ARR="&[${ARR%, }]" # Экранируем спецсимволы sed-замены (& | \) в подставляемых значениях. esc() { printf '%s' "$1" | sed -e 's/[\\&|]/\\&/g'; } ARR_ESC="$(esc "$ARR")" KEY_ESC="$(esc "$RUSTDESK_PUB_KEY")" # Патч RENDEZVOUS_SERVERS sed -i -E "s|^pub const RENDEZVOUS_SERVERS: &\[&str\] = .*;|pub const RENDEZVOUS_SERVERS: \&[\&str] = ${ARR_ESC};|" "$CFG" # Патч RS_PUB_KEY sed -i -E "s|^pub const RS_PUB_KEY: &str = .*;|pub const RS_PUB_KEY: \&str = \"${KEY_ESC}\";|" "$CFG" # Проверяем, что патч применился (значения не печатаем целиком — только факт). grep -q "^pub const RENDEZVOUS_SERVERS: &\[&str\] = &\[\"" "$CFG" || { echo "ОШИБКА: не удалось пропатчить RENDEZVOUS_SERVERS" >&2; exit 1; } if grep -q "OeVuKk5nlHiXp" "$CFG"; then echo "ОШИБКА: RS_PUB_KEY остался дефолтным RustDesk" >&2; exit 1 fi echo "[preconfigure] RENDEZVOUS_SERVERS -> ${#SRV[@]} сервер(ов), RS_PUB_KEY вшит." # Опциональный API-сервер (RustDesk Server Pro). По умолчанию у hbbs/hbbr его нет. if [ -n "${RUSTDESK_API_SERVER:-}" ]; then # В 1.4.9 отдельной const API_SERVER нет; дефолт задаётся через overrideConfig/filename. # Оставляем маркер для ручной доработки, если понадобится Pro-API. echo "[preconfigure] RUSTDESK_API_SERVER задан ($RUSTDESK_API_SERVER) — вшивание API требует доп. патча (см. docs/CODEMAP.md)." fi