A. kb-autosync.sh переписан: pull → regenerate index → commit → push. После каждого push с Mac индекс objects-map.json и _index.md обновляются автоматически на code-server (LXC 132). B. kb-objects-map.py + kb-objects-audit.py добавлены в воскресный weekly cron на LXC 132 — health-check автогенерируется раз в неделю. C. Чистка битых wiki-ссылок (score 84 → 9): - notes/govru-diagnosis → projects/niikn/govru-quickfix-playbook (2) - claude-memory/podkop → 2026-04-17-peredelki-podkop-stability-fix - [[../snippets/clients/]] → snippets/clients/ (текстом, 2) - [[feedback_*]] (user memory) → backtick-cited (2) - [[../znamenskoye/]] → [[../znamenskoye/README]] (4) Скрипт kb-objects-audit.py улучшен: regex теперь требует [[...]] с двойной скобкой (не одной), исключает audit/ и CLAUDE.md (placeholder и autogen). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
9.3 KiB
date, type, tags
| date | type | tags | |||||
|---|---|---|---|---|---|---|---|
| 2026-04-29 | deployment |
|
RustDesk client deployment package — Nextcloud RustDesk install/
Цель
Удобное развёртывание ~30-50 клиентских машин (НИИКН + клиенты) с pre-настроенным RustDesk. Клиент должен после установки сразу подключаться к remot.dttb.ru, без ручной настройки api/relay/key.
Что сделано
В корне Nextcloud (Nextcloud-admin@dttb․ru) создана папка RustDesk install/ с готовыми установщиками + автоматическими скриптами + конфигом.
Структура
RustDesk install/ ~766 MB total
├── README.md инструкция для клиента
├── RustDesk2.toml шаблон конфига (ID/relay/api/key)
├── windows/
│ ├── rustdesk-1.4.6-x86_64.exe 23 MB - основной installer
│ ├── rustdesk-1.4.6-x86_64.msi 23 MB - MSI для GPO
│ ├── Install-Windows.ps1 PowerShell автоустановка
│ └── Install-Windows.bat wrapper, двойной клик → UAC → автоинстал
├── linux/
│ ├── rustdesk-1.4.6-x86_64.deb 22 MB
│ ├── rustdesk-1.4.6-aarch64.deb 20 MB
│ ├── rustdesk-1.4.6-x86_64.rpm 30 MB
│ ├── rustdesk-1.4.6-aarch64.rpm 29 MB
│ ├── rustdesk-1.4.6-x86_64.AppImage 81 MB - для дистрибутивов без apt/dnf
│ └── install-linux.sh bash, авто-detect arch + pkg manager
├── macos/
│ ├── rustdesk-1.4.6-aarch64.dmg 24 MB - Apple Silicon
│ ├── rustdesk-1.4.6-x86_64.dmg 31 MB - Intel
│ └── install-macos.sh bash, mount dmg + copy to /Applications
└── android/
└── rustdesk-1.4.6-universal.apk 67 MB
Версия RustDesk 1.4.6 (latest stable, релиз 2026-03-05). Совпадает с тем что у Олега на Mac и Windows-сервере.
Что делает скрипт
- Установка — silent через системный пакетный менеджер
- Остановка сервиса перед перезаписью конфига (
Stop-Service RustDesk/systemctl stop rustdesk) - Копирование
RustDesk2.tomlв правильное место:- Windows service mode:
C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config\ - Windows user mode (fallback):
%APPDATA%\RustDesk\config\ - Linux service:
/root/.config/rustdesk/ - Linux user:
~/.config/rustdesk/ - macOS:
~/Library/Preferences/com.carriez.RustDesk/
- Windows service mode:
- Генерация permanent password (10 символов, случайный per-machine) через
rustdesk --password <pw> - Сохранение creds в файл (chmod 600):
- Windows:
C:\Users\Public\rustdesk-credentials.txt+C:\Users\Public\Desktop\RustDesk-ID.txt - Linux:
/root/rustdesk-credentials.txt
- Windows:
- Запуск сервиса —
Start-Service RustDesk/systemctl start rustdesk - Вывод ID + пароля для пользователя
macOS — без auto-password (sandboxing) — пользователь устанавливает permanent password сам через UI.
Конфиг сервера (RustDesk2.toml)
rendezvous_server = "remot.dttb.ru:21116"
nat_type = 1
serial = 1
[options]
custom-rendezvous-server = "remot.dttb.ru"
relay-server = "remot.dttb.ru"
api-server = "https://remot.dttb.ru"
key = "R0lA4r77hAGw6YRL1qG3JioVqQ0Q0fJfzkwlAGqR6jU="
allow-websocket = "Y"
verification-method = "use-permanent-password"
approve-mode = "password"
Способы развёртывания
Текущий (offline-friendly)
- Олег делает в Nextcloud public share-link (пока не сделано — отдельная ручная задача)
- Шлёт ссылку клиенту/технику
- Тот скачивает свою папку → запускает скрипт → готово
Будущее — one-liner
Положить скрипт на rustdesk-api сервер (или public path в NPM):
irm https://remot.dttb.ru/install/win.ps1 | iex(Win)curl -sL https://remot.dttb.ru/install/linux.sh | sudo bash(Linux)
Скрипт автоматически качает installer с github.
Будущее — Strategy
В админке /_admin/ → Configuration Strategy → создать policy с настройками. Push'ит конфиг существующим клиентам автоматически. Требует чтобы клиент изначально знал api-server URL — то есть всё равно первичная установка нужна.
Будущее — rustdesk-licensed-XXXXXXXX.exe trick
RustDesk при первом запуске парсит своё имя файла, если оно соответствует formату — применяет встроенный config. Требует утилиту шифрования config (rustdesk-utils 2.x от lejianwen-pro). Наш rustdesk-utils 1.1.14 этого не умеет — нужно скачать pro-версию отдельно или использовать веб-инструмент https://aps.lejianwen.com.
Будущее — WinRM/SSH push для существующих машин
Уже есть NetBird-подключение к большинству Windows-клиентов (Volkkent, Glavtorg, ММФБ, Зеленоград). Можно через Invoke-Command или pywinrm развернуть скрипт удалённо без участия пользователя.
Безопасность
- Public link на скачивание лучше с паролем — в установщике зашит
key=R0lA..., кто угодно скачавший может зарегистрировать себя как peer на нашем сервере. MUST_LOGIN отбивает подключения, но heartbeat-флуд возможен. - Permanent password случайный per-машина, в файле с chmod 600
MUST_LOGIN=Yна сервере — каждый peer должен залогиниться в API после установки. Скрипт этого пока не делает — клиент должен залогиниться вручную в RustDesk UI (Settings → Account) или через web/_admin/. Автоматизация login через скрипт = отдельная задача (нужен service-token / OIDC).
Известные ограничения
- Windows ARM64 — не поддерживается RustDesk 1.4.6 (нет нативного installer'а). Используется x86_64 в эмуляции.
- Android — apk без auto-config; пользователь вручную вводит ID/relay/api/key. Автоматизация для Android = другая задача (Intent URL scheme или MDM push).
- iOS — RustDesk через App Store, конфиг через QR-код или Universal Link. Не покрыто текущим пакетом.
- macOS — без auto-permanent-password (sandboxing CLI ограничен). Пользователь делает через UI.
MUST_LOGINpost-install — после установки клиент вынуждены вручную залогиниться. Без login peer виден как online в hbbs, но connections к нему отбрасываются.
TODO / следующие шаги
- Олег создаёт public share-link в Nextcloud (с паролем), кладёт ссылку в
snippets/clients/ - Подготовить one-liner-скрипты на сервере (NPM static path
/install/→ S3 или rustdesk-api resources/public) - Configuration Strategy в админке lejianwen-api — push config existing peers
- Скачать
rustdesk-utils2.x (lejianwen-pro) для генерацииrustdesk-licensed-*.exe— single-file deployment без скриптов - Auto-login через скрипт — создать service-юзера в API с фиксированным password, скрипт логинится этим юзером во время install. После установки админ через
/_admin/переносит peer в нужную группу. - WinRM bulk-deploy — список существующих NetBird-managed Windows-машин + Ansible/PowerShell job по разворачиванию
Связанные файлы
- projects/dttb/rustdesk — справочник по серверу
- ../decisions/2026-04-28-rustdesk-lejianwen-pro-migration — миграция с OSS на pro
- В Nextcloud:
RustDesk install/(этот пакет) - На LXC 116:
/root/RustDesk2.toml(шаблон) - На LXC 116:
/root/rustdesk-backup-20260428-1134/admin-password.txt(admin pw для api)