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

3.7 KiB
Raw Blame History

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

// Было: 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

Ссылки