109 lines
4.8 KiB
Markdown
109 lines
4.8 KiB
Markdown
# Автоматическое разрешение зависимостей в 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
|
||
- **Надежность** - транзакционная установка с откатом
|
||
- **Безопасность** - валидация путей и проверка целостности
|
||
- **Гибкость** - поддержка разных источников пакетов
|
||
- **Производительность** - кэширование и параллельная обработка
|
||
|
||
Теперь твой пакетный менеджер может самостоятельно управлять зависимостями без необходимости в сторонних инструментах!
|