Files
RUSTDESK-AP-SERVER-SUNLIX/docs/CLIENT_BUILD_INTEGRATION.md

7.8 KiB
Raw Blame History

Интеграция генератора клиентов RustDesk

Обзор

Интегрирован функционал генерации и компиляции кастомных клиентов RustDesk на основе проекта VenimK/creator.

API Endpoints

Генерация клиента

POST /api/admin/client_build/generate

Тело запроса:

{
  "platform": "windows",
  "version": "1.4.3",
  "app_name": "MyRemoteDesktop",
  "file_name": "myclient",
  "server_ip": "192.168.1.66:21116",
  "api_server": "http://192.168.1.66:21114",
  "key": "your-key-here",
  "description": "Описание клиента",
  "config": "{}"
}

Платформы:

  • windows - Windows 64-bit
  • linux - Linux
  • macos - macOS (Apple Silicon)
  • macos-x86 - macOS (Intel)
  • android - Android

Версии:

  • master - последняя версия из master ветки
  • 1.4.3, 1.4.2, 1.4.1, 1.4.0 - стабильные версии
  • 1.3.9, 1.3.8, 1.3.7, 1.3.6, 1.3.5, 1.3.4, 1.3.3 - старые версии

Список задач компиляции

GET /api/admin/client_build/list?page=1&page_size=10&platform=windows&status=success

Статус компиляции

GET /api/admin/client_build/status/{uuid}

Ответ:

{
  "code": 0,
  "message": "success",
  "data": {
    "build_uuid": "uuid-here",
    "status": "building",
    "progress": 50,
    "log": "Build log...",
    "error_msg": "",
    "file_url": "/api/admin/client_build/download/{uuid}"
  }
}

Статусы:

  • pending - ожидает начала компиляции
  • building - компилируется
  • success - успешно скомпилирован
  • failed - ошибка компиляции

Скачивание клиента

GET /api/admin/client_build/download/{uuid}

Удаление задачи

POST /api/admin/client_build/delete/{id}

Настройка локальной компиляции

Требования

Для локальной компиляции RustDesk клиентов необходимо:

  1. Rust toolchain (для Windows, Linux, macOS):

    # Установка Rust
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    
  2. Исходный код RustDesk:

    git clone https://github.com/rustdesk/rustdesk.git
    cd rustdesk
    
  3. Дополнительные инструменты:

    • Windows: Visual Studio Build Tools, WiX Toolset (для установщика)
    • Linux: build-essential, libssl-dev, libgtk-3-dev
    • macOS: Xcode Command Line Tools
    • Android: Android SDK, NDK

Интеграция реальной компиляции

Для реализации реальной компиляции необходимо модифицировать методы в service/clientBuild.go:

Пример для Windows:

func (cbs *ClientBuildService) buildWindows(build *model.ClientBuild, config BuildConfig, buildDir string) (string, error) {
    cbs.appendLog(build, "Building Windows client...\n")
    
    // Путь к исходникам RustDesk
    rustdeskSourceDir := "/path/to/rustdesk"
    
    // Создаем конфигурационный файл
    customConfig := cbs.generateCustomConfig(config)
    customPath := filepath.Join(buildDir, "custom.txt")
    if err := os.WriteFile(customPath, []byte(customConfig), 0644); err != nil {
        return "", fmt.Errorf("failed to write custom.txt: %v", err)
    }
    
    // Копируем custom.txt в исходники
    targetCustomPath := filepath.Join(rustdeskSourceDir, "custom.txt")
    if err := os.WriteFile(targetCustomPath, []byte(customConfig), 0644); err != nil {
        return "", err
    }
    
    // Компилируем
    cmd := exec.Command("cargo", "build", "--release", "--target", "x86_64-pc-windows-msvc")
    cmd.Dir = rustdeskSourceDir
    cmd.Env = append(os.Environ(), "RUSTFLAGS=-C target-feature=+crt-static")
    
    output, err := cmd.CombinedOutput()
    cbs.appendLog(build, string(output))
    
    if err != nil {
        return "", fmt.Errorf("build failed: %v", err)
    }
    
    // Копируем скомпилированный файл
    exePath := filepath.Join(rustdeskSourceDir, "target", "x86_64-pc-windows-msvc", "release", "rustdesk.exe")
    outputPath := filepath.Join(buildDir, config.FileName+".exe")
    
    if err := copyFile(exePath, outputPath); err != nil {
        return "", err
    }
    
    return outputPath, nil
}

Конфигурационный файл custom.txt

Формат файла custom.txt для RustDesk:

rendezvous-server = 192.168.1.66:21116
api-server = http://192.168.1.66:21114
key = your-key-here
app-name = MyRemoteDesktop
password = default-password
approve-mode = password-click
enable-lan-discovery = Y

Дополнительные настройки

В поле config можно передать JSON с дополнительными настройками:

{
  "config": "{\"password\":\"mypass\",\"approve-mode\":\"password\",\"enable-keyboard\":\"Y\",\"enable-clipboard\":\"Y\"}"
}

Структура файлов

resources/
  builds/
    {build_uuid}/
      custom.txt          # Конфигурация
      {filename}.exe      # Скомпилированный клиент (Windows)
      {filename}.dmg      # Скомпилированный клиент (macOS)
      {filename}.deb      # Скомпилированный клиент (Linux)
      {filename}.apk      # Скомпилированный клиент (Android)

Безопасность

  • Все задачи компиляции привязаны к пользователю
  • Пользователь может видеть и скачивать только свои клиенты
  • Файлы хранятся в защищенной директории
  • Логи компиляции доступны только владельцу задачи

Примечания

  1. Время компиляции: В зависимости от платформы компиляция может занимать 15-30 минут
  2. Ресурсы: Компиляция требует значительных ресурсов (CPU, RAM, диск)
  3. Параллельные сборки: Рекомендуется ограничить количество одновременных сборок
  4. Очистка: Старые файлы сборок можно удалять через API или вручную

Расширение функционала

Для добавления поддержки кастомных иконок и логотипов:

  1. Добавьте поля icon_path и logo_path в BuildConfig
  2. Реализуйте обработку изображений в методе buildClient
  3. Интегрируйте с инструментами замены ресурсов RustDesk

Troubleshooting

Ошибка "Rust toolchain not found":

  • Установите Rust: https://rustup.rs/
  • Убедитесь, что cargo доступен в PATH

Ошибка компиляции:

  • Проверьте логи в поле build_log
  • Убедитесь, что исходники RustDesk актуальны
  • Проверьте наличие всех зависимостей

Файл не найден после компиляции:

  • Проверьте путь к исходникам RustDesk
  • Убедитесь, что компиляция завершилась успешно
  • Проверьте права доступа к директориям