7.8 KiB
7.8 KiB
Интеграция генератора клиентов 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-bitlinux- Linuxmacos- 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 клиентов необходимо:
-
Rust toolchain (для Windows, Linux, macOS):
# Установка Rust curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -
Исходный код RustDesk:
git clone https://github.com/rustdesk/rustdesk.git cd rustdesk -
Дополнительные инструменты:
- 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)
Безопасность
- Все задачи компиляции привязаны к пользователю
- Пользователь может видеть и скачивать только свои клиенты
- Файлы хранятся в защищенной директории
- Логи компиляции доступны только владельцу задачи
Примечания
- Время компиляции: В зависимости от платформы компиляция может занимать 15-30 минут
- Ресурсы: Компиляция требует значительных ресурсов (CPU, RAM, диск)
- Параллельные сборки: Рекомендуется ограничить количество одновременных сборок
- Очистка: Старые файлы сборок можно удалять через API или вручную
Расширение функционала
Для добавления поддержки кастомных иконок и логотипов:
- Добавьте поля
icon_pathиlogo_pathвBuildConfig - Реализуйте обработку изображений в методе
buildClient - Интегрируйте с инструментами замены ресурсов RustDesk
Troubleshooting
Ошибка "Rust toolchain not found":
- Установите Rust: https://rustup.rs/
- Убедитесь, что
cargoдоступен в PATH
Ошибка компиляции:
- Проверьте логи в поле
build_log - Убедитесь, что исходники RustDesk актуальны
- Проверьте наличие всех зависимостей
Файл не найден после компиляции:
- Проверьте путь к исходникам RustDesk
- Убедитесь, что компиляция завершилась успешно
- Проверьте права доступа к директориям