# Автоматическое разрешение зависимостей в ZSVO Теперь твой пакетный менеджер может автоматически находить и устанавливать зависимости без внешних инструментов! ## 🚀 Новые возможности ### 1. Автоматическое разрешение зависимостей ```bash # Установить пакет с автоматическим поиском зависимостей 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 ``` **Результат:** Пакетник установит пакеты в порядке: 1. `libc` (базовая зависимость) 2. `libcrypt` (зависит от libc) 3. `zlib` (зависит от libc) 4. `libssl` (зависит от libcrypt) 5. `myapp` (зависит от libssl, zlib) ## 🔧 Технические улучшения ### Новые архитектурные компоненты: 1. **DependencyResolver** (`pkg/deps/resolver.go`) - Топологическая сортировка зависимостей - Поддержка альтернативных зависимостей (`pkgA | pkgB`) - Проверка версий и ограничений 2. **PackageRepository** (`pkg/installer/repository_adapter.go`) - Абстракция для доступа к пакетам - Поддержка разных источников пакетов 3. **PathValidator** (`pkg/security/path_validator.go`) - Защита от path traversal атак - Валидация имен файлов - Кросс-платформенная безопасность 4. **Typed Errors** (`pkg/errors/errors.go`) - Структурированные ошибки с контекстом - Коды ошибок для лучшей обработки - Поддержка цепочек ошибок ## 🧪 Тестирование Все новые функции покрыты тестами: ```bash go test ./pkg/deps -v # Тесты зависимостей go test ./pkg/installer -v # Тесты установщика go test ./pkg/security -v # Тесты безопасности go test ./pkg/errors -v # Тесты ошибок ``` ## 💡 Использование в коде ```go // Создать 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 - **Надежность** - транзакционная установка с откатом - **Безопасность** - валидация путей и проверка целостности - **Гибкость** - поддержка разных источников пакетов - **Производительность** - кэширование и параллельная обработка Теперь твой пакетный менеджер может самостоятельно управлять зависимостями без необходимости в сторонних инструментах!