Files
nixos/todo.md
T

53 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Состояние и следующий шаг (после /compact)
## Где мы
- В `modules/containers/3x-ui.nix`:
- `patchScript` (костыльник patcher) **заменён** на `migrateScript` — идемпотентная миграция БД, перемещает `publicKey/fingerprint/serverName/spiderX/mldsa65Verify` из nested `realitySettings.settings` в **top-level** `realitySettings`
- systemd-сервис `patch-3xui-xray-config` **заменён** на `migrate-3xui-reality` (oneshot, after=`podman-3xui_app.service`)
- **timer удалён** (больше не нужен)
- Image остался `v3.8.5` (но v3.8.5 и v3.9.0 имеют один баг — раздельные поля на top-level в БД решают)
- Комментарий к image обновлён — объясняет что баг в обоих версиях, лечится миграцией
## Что делать (А → Б → В)
### A. Доразвернуть текущий rebuild
Текущая команда зависла с `nixos-rebuild-switch-to-configuration.service was already loaded` (предыдущий прогон не очистился).
Что сделать:
```bash
sudo systemctl stop nixos-rebuild-switch-to-configuration.service 2>/dev/null
sudo pkill -f switch-to-configuration 2>/dev/null
sleep 3
sudo nixos-rebuild switch
```
### Б. Проверить что миграция работает
После успешного rebuild и старта контейнера:
1. `sudo systemctl status migrate-3xui-reality` — должен быть `inactive (dead)` (success)
2. `sudo journalctl -u migrate-3xui-reality --since 5m` — должно быть `migrated=0` (idempotent, второй раз)
3. `sudo podman exec 3xui_app python3 -c "import json; c=json.load(open('/app/bin/config.json')); ib=c['inbounds'][1]; rs=ib['streamSettings']['realitySettings']; print(rs.get('publicKey','MISSING')[:25])"` — должно быть `K0Ra5yH4Ll_bB-dBmwZcPvYxr`
4. `sudo podman exec 3xui_app python3 -c "import sqlite3,json; c=sqlite3.connect('/etc/x-ui/x-ui.db'); rs=json.loads(c.execute('SELECT stream_settings FROM inbounds WHERE id=53').fetchone()[0])['realitySettings']; print('top publicKey:', 'YES' if rs.get('publicKey') else 'NO'); print('nested settings:', rs.get('settings','NONE'))"` — должно быть `YES` и `NONE`
### В. Итоговый commit
После успешного теста:
```bash
cd /etc/nixos
sudo git add modules/containers/3x-ui.nix
sudo git commit -m "3x-ui: migrate Reality fields to top-level (root-cause fix for panel config-gen bug)"
```
## Контекст
- Container: `ghcr.io/mhsanaei/3x-ui:v3.8.5`, xray 26.9.30
- nginx stream :8443 → podman-proxy :15380 → xray :8443 (ранее подтверждена)
- DB уже мигрирована (поля на top-level) — миграция только идемпотентно проверяет на повторе
- Тест с 5 регенерациями подтвердил: publicKey/fingerprint/spiderX/mldsa65Verify остаются в config.json
- Otreca (VDS) — ssh затянут на tailscale-only, deploy-rs деплоит
## Ключевые файлы
- `/etc/nixos/modules/containers/3x-ui.nix` — NixOS-модуль (требует deploy)
- `/etc/nixos/configurations/vds.nix` — VDS ssh на tailscale (уже закоммичен и задеплоен)
- `/mnt/services/nodes/sapphira/3x-ui/db/x-ui.db` — БД панели (миграция уже применена)
- `/etc/nixos/deploy/default.nix` — deploy-rs конфиг (otreca → vds config)
## Известное замечание
Внутри podman exec bash tool убивает backgrounded процессы. Для тестов с долгоживущим xray-клиентом используй systemd-run --scope или делай inline тесты (без background). Для проверки config.json хватает быстрого `podman exec python3 -c`.