У меня есть система Solaris 11.3 без (в настоящее время) контракта на поддержку. Поэтому я использую репозиторий IPS по адресу http://pkg.oracle.com/solaris/release/, который я теперь отразил локально, используя pkgrecv
.
Я использую pkg change-facet
изменить version-lock
значение false для большого количества пакетов, чтобы я мог обновить эти пакеты до их последней версии. Это прекрасно работает.
«Проблема» в том, что эти измененные аспекты не наследуются моими неглобальными зонами. Таким образом, в то время как в глобальной зоне я вижу измененный аспект и могу обновить затронутые пакеты, то же самое нельзя сказать о любой неглобальной зоне, которую я создаю позже: он показывает исходный, неизмененный аспект и не может обновить затронутые пакеты.
pkg(5)
указывает, что изменения фасетов наследуются дочерними изображениями, например, неглобальная зона, наследуемая от глобальной зоны. Но со мной этого не происходит.
Первоначально я думал, что это проблема, но после дальнейшего размышления я понял, что на самом деле я, вероятно, не хотел бы, чтобы фасетные изменения в глобальном всегда наследовались неглобальными. Это было мне доказано, когда вскоре после этого я обнаружил, что хочу установить тестовые зоны с базовым программным обеспечением, не изменяя эти аспекты.
Тем не менее, меня все еще смущает документация, указывающая, что они наследуют, и я считаю, что в идеале должен быть способ настроить определенные аспекты для наследования.
Поэтому мои вопросы:
Вот что я делаю полностью:
Я исследовал возможности использования новых пакетов FOSS, которые предоставляет Oracle. Я следил за руководством здесь: Как получить доступ к избранным оценочным пакетам FOSS для Oracle Solaris 11.3.
В этом руководстве объясняется, что необходимо изменить фасет version-lock
значение false, прежде чем пакеты могут быть обновлены, и что обновленные пакеты FOSS можно найти в большом количестве в репозитории Release с совпадающей строкой номера версии \*@\*-5.12.0.0.0.122
. В документе рекомендуется изменять вывод pkg list
создавать pkg change-facet
команды для разблокировки всех версий.
Я сделал это в своей глобальной зоне, а затем делаю pkg update --accept
успешно приводит к большому количеству обновленных пакетов.
Но если я затем установлю новую неглобальную зону, по умолчанию будет использоваться базовая версия для этих пакетов. Если в этой глобальной зоне я бегу pkg facet
, Я увижу, что грани в зоне не изменились. Например, здесь зона показывает неизменную версию-lock = True для Bash:
root@goldenzone:~# pkg facet -a | grep version-lock.shell/bash
version-lock.shell/bash True system
В то время как его global показывает правильную, недавно измененную блокировку версии = False:
root@magrathea:/system/zones# pkg facet -a | grep version-lock.shell/bash
version-lock.shell/bash False local
Обходной путь:
Согласно моему комментарию ниже, теперь я решаю эту проблему, устанавливая свою золотую зону с настраиваемым манифестом auto_install, который включает <facet set="false">facet.version-lock.*</facet>
.
Это работает нормально (хотя и за счет разблокировки все блокировки версий, а не только тех, которые имеют обновления FOSS), но все же было бы хорошо знать, есть ли способ сделать фасеты наследованными между глобальными и неглобальными объектами, поскольку документация, кажется, указывает, что они должны.
Заранее спасибо.
Я один из основных авторов и дизайнеров системы упаковки изображений.
Я полагаю, что ваше замешательство связано с неправильным пониманием того, что говорится в документации. В частности, обратите внимание на то, что говорит это предложение из pkg (5):
... неглобальная зона может унаследовать фасет от глобальной зоны. Унаследованные фасеты оцениваются раньше и имеют приоритет над любыми локально установленными фасетами.
Обратите внимание, это говорит жестяная банкане воля. Итак, в документации описывается, что произойдет, когда фасеты унаследованы, но намеренно (я считаю) не говорится когда они будут переданы по наследству. То есть, он говорит вам, как определить, унаследованы ли они (путем поиска «parent» в столбце SRC «pkg facet»), но не при каких условиях они будут унаследованы:
https://docs.oracle.com/cd/E53394_01/html/E54739/glmke.html
Теперь о недостающей части - в общем, унаследованные фасеты обычно применяются только к фасетам facet.version-lock. *, Используемым в пакетах, потому что некоторые из связанных пакетов имеют родительские зависимости от самих себя, например:
тип зависимости = родительский fmri = функция / пакет / зависимость / себя
Родительская зависимость, описанная выше, просто утверждает, что для установки этого пакета в неглобальной зоне тот же пакет должен сначала присутствовать в той же версии в глобальной зоне. Это используется для пакетов, которые должны быть синхронизированы между глобальной и неглобальной зоной (зонами).
Короче говоря, наследование обычно не применяется к большинству аспектов. Логику определения того, какие фасеты будут унаследованы, можно найти здесь:
https://github.com/oracle/solaris-ips/blob/master/src/modules/client/linkedimage/common.py#L3462
Это было сделано намеренно, поскольку зоны представляют собой контейнерную технологию, предназначенную для создания изолированных сред, в которых администраторы могут настраивать конфигурации, отличные от глобальной зоны.
Теперь с учетом сказанного, если вы хотеть Чтобы применить операцию изменения фасета к глобальной зоне и всем неглобальным зонам, вы можете сделать это, используя параметр '-r' (рекурсивный) для изменения фасета:
pkg изменить-фасет -r ...
(См. Pkg (1), поскольку очевидно, что я не могу разместить более двух ссылок.)
Вы даже можете применить его к определенным зонам, используя -z.
Ну и наконец ты действительно не хочу устанавливать для фасетов значение False для всех блокировок версий. Это не только сделает обновление системы невероятно медленным, но и вы потеряете все меры безопасности, которые гарантируют, что вы действительно используете проверенную комбинацию компонентов.