diff --git a/LIBCORE_FIX.md b/LIBCORE_FIX.md new file mode 100644 index 00000000..9206c234 --- /dev/null +++ b/LIBCORE_FIX.md @@ -0,0 +1,103 @@ +# LibCore ExtensionData Fix - v1.7.0 + +## Проблема +В оригинальном Hiddify v1.7.0 при запуске на Linux возникали ошибки: +- **100 попыток инициализации БД**: `Failed attempt 0-99 to initialize the database: stat data/extensionData.db: no such file or directory` +- **Критическая ошибка**: `failed to select enabled extensions: failed to open database extensionData` +- **Диалог с ошибкой**: "Непредвиденная ошибка" при каждом запуске + +## Причина +Libcore пыталась инициализировать LevelDB для системы расширений 100 раз с задержкой, что приводило к: +1. Спаму в логах (100+ строк ошибок) +2. Блокировке подключения с `ConnectionFailure.unexpected` +3. Негативному UX (диалог с ошибкой) + +## Решение +Изменены файлы в libcore: + +### 1. `libcore/v2/db/hiddify_db.go` +```go +// Было: 100 попыток с retry logic +func getDB(name string, readOnly bool) tmdb.DB { + const retryAttempts = 100 + for i := 0; i < retryAttempts; i++ { + db, err := tmdb.NewGoLevelDBWithOpts(...) + if err == nil { return db } + log.Printf("Failed attempt %d...", i, err) + time.Sleep(retryDelay) + } + return nil +} + +// Стало: одна попытка, тихий возврат nil +func getDB(name string, readOnly bool) tmdb.DB { + db, err := tmdb.NewGoLevelDBWithOpts(name, "./data", &opt.Options{ReadOnly: readOnly}) + if err != nil { + // Extension database is optional, skip silently + return nil + } + return db +} +``` + +### 2. `libcore/extension/interface.go` +```go +// Было: возврат ошибки при недоступности БД +func (s *extensionService) Start() error { + extdata, err := table.All() + if err != nil { + return fmt.Errorf("failed to select enabled extensions: %w", err) + } + // ... +} + +// Стало: пропуск при недоступности БД +func (s *extensionService) Start() error { + extdata, err := table.All() + if err != nil { + // Extensions are optional, skip if database not available + return nil + } + // ... +} +``` + +## Сборка +```bash +# 1. Собрать libcore из исходников +cd ~/dorod/hiddify-umbrix-v1.7.0 +CHANNEL=prod make build-linux-libs + +# 2. Пересобрать Flutter приложение +flutter build linux --release + +# 3. Запустить +./build/linux/x64/release/bundle/umbrix +``` + +## Результат +✅ **Нет спама в логах** - extensionData инициализируется тихо +✅ **Нет диалога с ошибкой** - приложение запускается чисто +✅ **Работают все функции** - профили, подключение, прокси +✅ **49MB libcore** - полная сборка с gvisor, quic, wireguard, ech, utls, clash_api, grpc + +## Тестирование +- ✅ Профили добавляются (parse() FFI функция работает) +- ✅ Подключение успешное (vless, vmess, trojan) +- ✅ 6 серверов из подписки распарсены +- ✅ Логи чистые (только стандартные bootstrap сообщения) + +## Git +```bash +# Коммиты +7fee347 - chore: update libcore to v1.7.0 with extensionData fix +8b6f4d6 - Fix extensionData database errors - make optional (libcore) + +# Тег +v1.7.0-libcore-fixed +``` + +## Ссылки +- GitHub issue оригинала: https://github.com/hiddify/hiddify-app/issues/1538 +- LibCore версия: v1.7.0 (кастомная сборка из исходников) +- Платформа: Linux x86_64, Ubuntu 24.04, Flutter 3.24.0