Пакеты, хранилище, сообщество
Иcтория:
- Нужна успешная сборка ⇒ патчи+спеки = src-пакет
- Инструмент накатывания патчей+выполнения спеков (FreeBSD: makefile)
+сборочные зависимости — насколько точные? (релиз, версия, API)
- Пакеты исходников
- если не соберётся — соберём! (не вполне та система)
- подправим при сборке по вкусу
- а бинарник может и не запуститься (почему?)
- ⇒ Бинарные пакеты: тестирование и согласование
⇒ установочные зависимости — насколько точные? (версия, ABI)
А лучше всего, если зависимости актуально те же самые
а если и сборочные одинаковые — воспроизводимая сборка
- Безопасность: подписи
- Инсталлятор
- LFS, Gentoo
- Иное (+Конфигуратор)
Принципы:
- Тушкой
- Core system + дополниетльное ПО
- Всё — пакеты
Пакет:
- Комплект файлов (архив)
- Один upstream
- «неделимый» — делить не нужно или не выходит
- для одного назначения (библиотеки/devel-библиотеки/документация разработчика; библиотеки/бинарники)
- архитектурно зависим/независим (лучше не смешивать в больших объёмах)
Пакет — термин «пользователя дистрибутива», то есть деталь конструктора.
Свойства:
- Архив (FHS и наследники)
- Установка/удаление (регистрация/дерегистрация) — общесистемные действия
- Установочные сценарии
- pre/post, install/config (например, активация в системе, потоковое редактирование файлов)
- триггеры (общесистемные действия на основании свойств пакета)
- Установочные зависимости
- на другие пакеты
- на файлы
- на «что-то«:
- пакет явно предоставляет (provides) «что-то»
- другой пакет это требует (requires)
- Например, модули Python
- Конфликты и альтернативы
Установка/удаление — установщик пакетов (rpm, dpkg, …)
Отслеживание зависимостей — свойство пакета, но
- где все пакеты-то? в репозитории (-ях)
- построение и обсчёт дерева зависимостей?
- доставка?
- рекурсивная установка / удаление
- обновление
⇒ пакетный диспетчер (apt, yum, DNF, …)
Итого: пакеты и инструменты работы с ними обеспечивают Top half (сторону пользователя) задач дистрибуции:
- Доставка
- Деплоймент
- Сопровождение