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

Речь пойдёт о так называемых шаблонах (patterns) — группах пакетов целевого назначения, предназначенных для инсталляции, как они определяются в документации. При первом знакомстве с openSUSE мне показалось, что это самые обычные метапакеты, в изобилии встречавшиеся в подавляющем большинстве систем и дистрибутивов. Здесь можно вспомнить

  • и метапакеты FreeBSD, производные от метапортов — собственно, из системы её портов и пошло это понятие;
  • и задачи (tasks) deb-based дистрибутивов;
  • и группы (groups) в Fedora и соплеменных дистрибутивах;
  • и очень многие другие, часто со своими именами, которые я за давностью лет и ненадобностью забыл.

Вне зависимости от названия, суть их одна: объединение пакетов по некоему принципу таким образом, чтобы пользователь мог лёгким движением руки (то есть одной командой или одним щелчком мыши) получить в своё распоряжение, скажем, готовую к употреблению среду KDE, а не заниматься нудной попакетной её установкой.

Пакеты в метапакете связаны между собой зависимостями, похожими на обычные межпакетные (которые тоже никто не отменял). То есть метапакет может быть установлен только целиком — и так же, только целиком, удалён. И потому приходится мириться с наличием в системе всех компонентов, которые майнтайнеры данного дистрибутива посчитали нужным в него включить. Разумеется, компоненты метапакета можно установить и помимо него, но тогда мы возвращаемся к той же попакетной инсталляции.

До своего логического завершения «метапакетная концепция» доведена в дистрибутивах семейства Ubuntu — каждая его ветвь и представляет собой один большой метапакет: ubuntu-desktop, kubuntu-desktop, xubuntu-desktop и кто ещё есть у них там.

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

Да, поскольку шаблон не включает в себя ни малейших «настоящих» пакетов, он тоже являет собой метапакет, так как содержит метаинформацию о пакетах. Однако она существенно иного рода, чем метаинформация в «традиционных» метапакетах.

Начать с того, что шаблон не представляет собой чего-то жесткого. Пакеты, входящие в шаблон, не связаны между собой жёсткими зависимостями — это главное его отличие от «традиционного» метапакета. И, соответственно, не все пакеты шаблона обязательны для установки.

Список пакетов, отмеченных для установки по умолчанию, определяется разработчиками шаблона, и он может быть разным в тех или иных случаях. Так, в шаблоне office в одних ситуациях «заказывается» установка так называемого Gnome Office (AbiWord и Gnumeric), в других же — LibreOffice (впрочем, последних ситуаций — очень подавляющее большинство).

Однако вполне допустимо и вмешательство пользователя: в предопределённый список подлежащих установке пакетов он может добавить необходимые ему лично. Или, напротив, удалить ненужные — если, конечно, они не связаны с оставленными собственными зависимостями, как это имеет место быть для почти всех компонентов LibreOffice. А вот для Gnome Office это очень даже проходит: можно оставить AbiWord, вычеркнув Gnumeric (хотя оба они входят в субшаблон gnome_office). В этом второе отличие шаблонов от метапакетов.

После установки в систему компоненты шаблона начинают жить (почти) самостоятельной жизнью. То есть любой из них может быть удалён, не трогая никого, только свои собственные зависимости. А обновление, напротив, распространяется на все пакеты шаблона; при этом попыток доустановить что-то из ранее вычеркнутого или удалённого не происходит.

А вот удалить шаблон нельзя. Можно удалить его описание — пакет вида pattern-*.rpm, что приведёт к дезинтеграции шаблона: все его пакеты будут вести себя совсем уже так, как если бы они были установлены по отдельности. И в некоторых случаях это целесообразно. Но сами входящие в шаблон пакеты при необходимости надо удалять в индивидуальном порядке. И это третье отличие шаблонов от метапакетов. Что некоторыми рассматривается как недостаток, и в документации имеются смутные намёки на добавление этой возможности в будущем.

Полагаю, что это будущее светлое, и лежит в отдалённой перспективе. Потому что отсутствие возможности удаления никак не мешает существованию. В сущности, шаблон нужен только на стадии установки — его самого или системы в целом, дабы не забыть что-нибудь очень необходимое. А в дальнейшей жизни он иногда может даже мешать.

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


К содержанию