12. Ревизии системы

Формирование состава пакетов

По мере установки новых программ формируется системный файл (/var/lib/portage/world), содержащий список установленных пакетов. Файл содержит неполный список пакетов, установленных в системе. В нём отсутствуют пакеты, вычисляемые по зависимостям, например библиотеки.

В качестве примера, установим электронные таблицы Gnumeric, выполнив:

emerge -a gnumeric

при выполнении пакетный менеджер может предложить установить несколько пакетов - сам app-office/gnumeric, а так же необходимые для работы пакеты gnome-extra/libgsf и x11-libs/goffice. В world-файл будет добавлен только пакет app-office/gnumeric, - пакет, который вы указали в качестве параметра emerge.

При удалении Gnumeric:

emerge -C gnumeric

пакет app-office/gnumeric будет удалён из world-файла, при этом все зависимые пакеты останутся в системе.

Для удаления зависимостей, выполните:

emerge -ac

При выполнении этой команды сформируется дерево пакетов исходя из списка в world-файле, с включением зависимостей и, в случае наличия в системе установленных и не связанных пакетов, будет предложено их удалить.

Управление world-файлом при помощи шаблонов

Начиная с 13-й версии Calculate Linux изменилась система управления составом пакетов дистрибутива. В предыдущих версиях системы дерево зависимостей формировалось через так называемые мета-пакеты, содержащие только необходимые зависимости. Такой подход имел свои плюсы и минусы. В любой момент новая версия одного из мета-пакетов могла включить новую программу или исключить либо принудительно удалить другую. Мета-пакеты также успешно справлялись с возможными блокировками, которые могут возникнуть при формировании дерева зависимостей. Основной недостаток же был в сложности удаления предустановленных программ пользователем.

Сейчас помимо пакетного менеджера, в world-файл могут вносить изменения утилиты Calculate. Это позволило избавиться от мета-пакетов. Во время выполнения синхронизации дерева портежей и оверлея, содержащего шаблоны утилит Calculate командой eix-sync, происходит вызов cl-core, который в свою очередь обрабатывает шаблоны.

При помощи шаблонов формируются версии состава пакетов дистрибутива. К примеру, в случае замены одной программы на другую, вторая будет записана в world-файл вместо первой. Шаблоны позволяют гибко формировать world-файл, учитывая наличие заменяемой программы в системе.

Версию world-файла можно посмотреть в /etc/calculate/ini.env, пример:

[update]
world = 22

Шаблоны формирования world на данный момент можно посмотреть здесь:

/var/lib/layman/calculate/profiles/templates/3.1/6_ac_update_sync/world/

Шаблоны делятся на две группы:
  • Формирование world-файла с нуля;
  • Обновление текущего world: удаление, замена, добавление пакетов;

Шаблоны разделяются на категории, такие как graphics, network, multimedia, и т.д., в каждой из них перечислены необходимые для дистрибутива пакеты.

Шаблоны разделены на версии таким образом, что в каждом из них описаны правила обновления с предыдущей версии, пример:

#удалить geeqie в CLD
#?os_linux_shortname==CLD#
!media-gfx/geeqie
#os_linux_shortname#

# добавить catfish в CLDX
#?os_linux_shortname==CLDX#
dev-util/catfish
#os_linux_shortname#

# заменить chromium на firefox
#?pkg(www-client/chromium)!=#
www-client/firefox
#pkg#

Обновить world-файл можно выполнить и вручную, при помощи команды:

cl-update --update-rev

Заново сформировать world-файл, без учёта установленных программ:

cl-update --rebuild-world

Сформировать world-файл исходя из лога установленных программ, без учёта предустановленных программ:

regenworld

Ревизии системы

Изменения в формировании файла world также повлияли на систему исправления ошибок/настроек в дистрибутиве. Ранее исправление ошибок происходило при обновлении пакетов и имело следующие недостатки:
  • создание новых ревизии пакетов (чаще мета пакетов), для исправления во время полного обновления системы
  • переустановка мета пакетов вызывала повторное наложение шаблонов для исправления
  • создание ревизий для пакетов, не связанных с этой ошибкой, если исправление нужно внести до выполнения обновлений определенных пакетов
  • ошибка не будет исправлена если не будет переустановлен необходимый пакет

Новое исправление ошибок и настроек запускается командой cl-udpate --update-rev и не привязана к конкретным пакетам. Команда запускается с обновлением world файла, при выполнении eix-sync.

Все исправления содержатся в шаблонах 6_ac_update_sync/revision. Исправление может быть как скриптом, так и указанием списка пакетов, которые нужно перенастроить. Каждое исправление привязано к конкретной ревизии.
Установленный дистрибутив содержит ревизию системы в файле /etc/calculate/ini.env, поэтому одни и те же исправления не будут применены несколько раз.

Еще одним преимуществом такого подхода является то, что обновление рабочих систем и подготовка образа дистрибутива происходит по одной схеме, что позволяет уменьшить количество ошибок при обновлении системы, не проявляющихся в стейджах.

Спасибо!