Алексей Федорчук
В предыдущих материалах несколько раз упоминалось о пакетах, установленных вручную (mfnual) или автоматически (automatic), как зависимости других пакетов, а также о пакетах с зафиксированной (hold) версией. Однако ни слова не было сказано о том, как эти статусы пакетам присваиваются или изменяются.
А ведь первая пара статусов весьма важна при удалении пакетов — удаление автоматически установленного пакета влечёт за собой удаление его обратных зависимостей. А поскольку, как говорилось, в XBPS нет разделения на зависимости «жёсткие» и «мягкие», далеко не всегда это действительно необходимо. В частности, обычно удаление какого-либо компонента метапакета требует удаления и всех остальных входящих в него пакетов, хотя на самом деле они вполне могут функционировать независимо друг от друга.
И, напротив, деинсталляция базового пакета, если не прибегнуть к опции рекурсивного удаления, оставляет после себя его «осиротелые» зависимости, которые только загромождают систему и путаются под ногами.
Что же до фиксации версий — она необходима для того, чтобы собственноручно пресобранный с собственными опциями пакет не был заменён базовым его вариантом при общем обновлении системы. Или просто для сохранения старой версии пакета — всем известны примеры того, как в новых версиях появляются и новые ошибки, а иногда имеет место быть и деградация функциональности.
Так что управление статусами пакетов может быть важной частью пакетного менеджмента. И в XBPS оно осуществляется с помощью утилиты xbps-pkgdb
. Запущенная как одноимённая команда в «голом» виде, она выведет список своих опций. Они немногочисленны, а реально из них востребованы в повседневной жизни только две — -m
(или --mode
) и -a
(или --all
).
Первая опция может принимать одну из пар значений: auto
или manual
, hold
или unhold, repolock
или repounlock
. Очевидно, что первые две пары обеспечивают присвоение и снятие одномённых статусов, а о последней надо сказать пару слов. Это — некий аналог статуса hold
, но на уровне репозитория. То есть пакет, установленный из некоего репозитория (например, самодельного локального), бубед обновляться только из него же, не принимая обновлений из репозиторией официальных.
Что же до опции -a
— как следует из её полного имени, она распространяет действие опции -m
на все установленные пакеты. Правда, я с трудом представляю ситуацию, в которой это может понадобиться, тем более в rolling-системе, каковой является Void Linux.
Вообще, не смотря на теоретическую важность управления статусами, отмеченную выше, я не нашёл применений для утилиты xbps-pkgdb
в свежеустановленной системе: удалять из базовой инсталляции (что является моим любимыфм занятием в более иных дистрибутивах) просто нечего (даже иксовых драйверов для реликтовых видеочипов в ней нет), самосборных пакетов и тем более самодельных репозиториев нет… Поэтому и конкретных примеров использования xbps-pkgdb
в это заметке нет тоже. Как только необходимость в ней появится — появятся и примеры.