Files
umbrix/LIBCORE_FIX.md
2026-01-17 12:51:54 +03:00

104 lines
3.7 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.
# 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