12. Ревизии системы¶
- Ревизии системы
- Формирование состава пакетов
- Управление world-файлом при помощи шаблонов
- Ревизии системы
Формирование состава пакетов¶
По мере установки новых программ формируется системный файл (/var/lib/portage/world), содержащий список установленных пакетов. Файл содержит неполный список пакетов, установленных в системе. В нём отсутствуют пакеты, вычисляемые по зависимостям, например библиотеки.
В качестве примера, установим электронные таблицы Gnumeric, выполнив:
emerge -a gnumeric
при выполнении пакетный менеджер может предложить установить несколько пакетов - сам app-office/gnumeric
, а так же необходимые для работы пакеты gnome-extra/libgsf
и x11-libs/goffice
. В world-файл будет добавлен только пакет app-office/gnumeric
, - пакет, который вы указали в качестве параметра
При удалении 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
, поэтому одни и те же исправления не будут применены несколько раз.
Еще одним преимуществом такого подхода является то, что обновление рабочих систем и подготовка образа дистрибутива происходит по одной схеме, что позволяет уменьшить количество ошибок при обновлении системы, не проявляющихся в стейджах.