# Интеграция генератора клиентов RustDesk ## Обзор Интегрирован функционал генерации и компиляции кастомных клиентов RustDesk на основе проекта [VenimK/creator](https://github.com/VenimK/creator.git). ## API Endpoints ### Генерация клиента ``` POST /api/admin/client_build/generate ``` **Тело запроса:** ```json { "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} ``` **Ответ:** ```json { "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): ```bash # Установка Rust curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` 2. **Исходный код RustDesk**: ```bash 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: ```go 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 с дополнительными настройками: ```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 - Убедитесь, что компиляция завершилась успешно - Проверьте права доступа к директориям