3.7 KiB
3.7 KiB
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 раз с задержкой, что приводило к:
- Спаму в логах (100+ строк ошибок)
- Блокировке подключения с
ConnectionFailure.unexpected - Негативному UX (диалог с ошибкой)
Решение
Изменены файлы в libcore:
1. libcore/v2/db/hiddify_db.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
// Было: возврат ошибки при недоступности БД
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
}
// ...
}
Сборка
# 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
# Коммиты
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