4.8 KiB
4.8 KiB
Автоматическое разрешение зависимостей в ZSVO
Теперь твой пакетный менеджер может автоматически находить и устанавливать зависимости без внешних инструментов!
🚀 Новые возможности
1. Автоматическое разрешение зависимостей
# Установить пакет с автоматическим поиском зависимостей
zsvo install --auto-resolve-deps myapp.pkg.tar.zst
# Пакетник найдет все зависимости в указанных директориях и установит их в правильном порядке
2. Рекурсивное разрешение
- Пакетник анализирует зависимости каждого пакета
- Находит зависимости зависимостей
- Строит правильный порядок установки (топологическая сортировка)
- Устанавливает все пакеты одной транзакцией
3. Поиск в нескольких директориях
Пакетник ищет зависимости в:
work-dir/packages/(пакеты, собранные из исходников)/var/cache/packages/(глобальный кэш пакетов)$ROOT/var/cache/packages/(кэш в корневой директории)
📋 Как это работает
Пример сценария:
myapp.pkg.tar.zst
├── Зависимости: libssl, zlib
libssl.pkg.tar.zst
├── Зависимости: libcrypt
zlib.pkg.tar.zst
├── Зависимости: libc
libcrypt.pkg.tar.zst
├── Зависимости: libc
Результат: Пакетник установит пакеты в порядке:
libc(базовая зависимость)libcrypt(зависит от libc)zlib(зависит от libc)libssl(зависит от libcrypt)myapp(зависит от libssl, zlib)
🔧 Технические улучшения
Новые архитектурные компоненты:
-
DependencyResolver (
pkg/deps/resolver.go)- Топологическая сортировка зависимостей
- Поддержка альтернативных зависимостей (
pkgA | pkgB) - Проверка версий и ограничений
-
PackageRepository (
pkg/installer/repository_adapter.go)- Абстракция для доступа к пакетам
- Поддержка разных источников пакетов
-
PathValidator (
pkg/security/path_validator.go)- Защита от path traversal атак
- Валидация имен файлов
- Кросс-платформенная безопасность
-
Typed Errors (
pkg/errors/errors.go)- Структурированные ошибки с контекстом
- Коды ошибок для лучшей обработки
- Поддержка цепочек ошибок
🧪 Тестирование
Все новые функции покрыты тестами:
go test ./pkg/deps -v # Тесты зависимостей
go test ./pkg/installer -v # Тесты установщика
go test ./pkg/security -v # Тесты безопасности
go test ./pkg/errors -v # Тесты ошибок
💡 Использование в коде
// Создать installer с автоматическим разрешением
installer := installer.NewInstaller("/")
// Установить с поиском зависимостей
err := installer.InstallWithAutoResolve(
[]string{"myapp.pkg.tar.zst"},
[]string{"/path/to/packages", "/var/cache/packages"},
)
if err != nil {
if errors.IsErrorCode(err, errors.ErrCodeDependencyMissing) {
fmt.Println("Не найдена зависимость:", err)
}
return err
}
🎯 Преимущества
- Без внешних зависимостей - все реализовано внутри ZSVO
- Надежность - транзакционная установка с откатом
- Безопасность - валидация путей и проверка целостности
- Гибкость - поддержка разных источников пакетов
- Производительность - кэширование и параллельная обработка
Теперь твой пакетный менеджер может самостоятельно управлять зависимостями без необходимости в сторонних инструментах!