属于主体的软件的一些部分可能是可选的,一些用户可能不想安装这些部分。示例包括不同语言环境、手册页和其他文档的本地化文件,以及只有开发者或 DTrace 用户需要的头文件。
过去,可选内容通过单独的软件包交付,软件包名称中附加 -dev 或 -devel 标识符。管理员通过安装这些可选软件包安装可选内容。此解决方案的一个问题是管理员必须通过检查可用软件包列表来发现要安装的可选软件包。
IPS 通过实现称为侧面的机制来交付可选软件包内容。侧面与变量相似:每个侧面有一个名称和值,操作可以针对不同侧面名称包含多个标记。在映像中,所有侧面的缺省值为 tru,特定侧面的缺省值可以显式设为 true 或 false。侧面名称空间是按层次结构组织的。pkg 客户机隐式将映像的 facet.* 设置为 true。映像中特定侧面的值是最长匹配侧面名称的值。
以下示例显示管理员如何能够包括手册页但排除在该映像中安装所有其他文档。手册页和其他文档可以与软件和其他管理员想要安装的内容在同一个软件包中。在软件包清单中,手册页使用 facet.doc.man=true 进行标记。例如,其他文档操作可以使用 facet.doc.pdf=true 或 facet.doc.html=true 进行标记。在映像中,管理员可以使用以下命令来包括手册页但排除所有其他文档:
$ pkg change-facet facet.doc.*=false $ pkg change-facet facet.doc.man=true
同样,软件包清单中的操作可以用语言环境侧面来标记,如 facet.locale.de=true 或 facet.locale.fr=true。下列命令只在该映像中安装德语本地化。
$ pkg change-facet facet.locale.*=false $ pkg change-facet facet.locale.de=true
如果操作包含多个侧面标记,任一侧面标记的值为 true 时,将安装该操作。使用 pkg facet 命令显示在映像中显式设置的侧面。
$ pkg facet FACETS VALUE facet.doc.* False facet.doc.man True facet.locale.* False facet.locale.de True
使用 pkgmogrify 快速准确地将侧面标记添加至您的软件包清单,使用正则表达式匹配不同类型的文件。这将在Chapter 6, 以编程方式修改软件包清单中详细描述。
侧面还可以用于管理相关项,打开/关闭相关项取决于是否设置了侧面。有关 facet.version-lock.* 的讨论,请参见约束和冻结。
下列侧面对软件开发者可能有用:
facet.devel facet.locale.es_BO facet.locale.lt_LT facet.doc facet.locale.es_CL facet.locale.lv facet.doc.man facet.locale.es_CO facet.locale.lv_LV facet.doc.pdf facet.locale.es_CR facet.locale.mk facet.doc.info facet.locale.es_DO facet.locale.mk_MK facet.doc.html facet.locale.es_EC facet.locale.ml facet.locale.* facet.locale.es_ES facet.locale.ml_IN facet.locale.af facet.locale.es_GT facet.locale.mr facet.locale.af_ZA facet.locale.es_HN facet.locale.mr_IN facet.locale.ar facet.locale.es_MX facet.locale.ms facet.locale.ar_AE facet.locale.es_NI facet.locale.ms_MY facet.locale.ar_BH facet.locale.es_PA facet.locale.mt facet.locale.ar_DZ facet.locale.es_PE facet.locale.mt_MT facet.locale.ar_EG facet.locale.es_PR facet.locale.nb facet.locale.ar_IQ facet.locale.es_PY facet.locale.nb_NO facet.locale.ar_JO facet.locale.es_SV facet.locale.nl facet.locale.ar_KW facet.locale.es_US facet.locale.nl_BE facet.locale.ar_LY facet.locale.es_UY facet.locale.nl_NL facet.locale.ar_MA facet.locale.es_VE facet.locale.nn facet.locale.ar_OM facet.locale.et facet.locale.nn_NO facet.locale.ar_QA facet.locale.et_EE facet.locale.no facet.locale.ar_SA facet.locale.eu facet.locale.or facet.locale.ar_TN facet.locale.fi facet.locale.or_IN facet.locale.ar_YE facet.locale.fi_FI facet.locale.pa facet.locale.as facet.locale.fr facet.locale.pa_IN facet.locale.as_IN facet.locale.fr_BE facet.locale.pl facet.locale.az facet.locale.fr_CA facet.locale.pl_PL facet.locale.az_AZ facet.locale.fr_CH facet.locale.pt facet.locale.be facet.locale.fr_FR facet.locale.pt_BR facet.locale.be_BY facet.locale.fr_LU facet.locale.pt_PT facet.locale.bg facet.locale.ga facet.locale.ro facet.locale.bg_BG facet.locale.gl facet.locale.ro_RO facet.locale.bn facet.locale.gu facet.locale.ru facet.locale.bn_IN facet.locale.gu_IN facet.locale.ru_RU facet.locale.bs facet.locale.he facet.locale.ru_UA facet.locale.bs_BA facet.locale.he_IL facet.locale.rw facet.locale.ca facet.locale.hi facet.locale.sa facet.locale.ca_ES facet.locale.hi_IN facet.locale.sa_IN facet.locale.cs facet.locale.hr facet.locale.sk facet.locale.cs_CZ facet.locale.hr_HR facet.locale.sk_SK facet.locale.da facet.locale.hu facet.locale.sl facet.locale.da_DK facet.locale.hu_HU facet.locale.sl_SI facet.locale.de facet.locale.hy facet.locale.sq facet.locale.de_AT facet.locale.hy_AM facet.locale.sq_AL facet.locale.de_BE facet.locale.id facet.locale.sr facet.locale.de_CH facet.locale.id_ID facet.locale.sr_ME facet.locale.de_DE facet.locale.is facet.locale.sr_RS facet.locale.de_LI facet.locale.is_IS facet.locale.sv facet.locale.de_LU facet.locale.it facet.locale.sv_SE facet.locale.el facet.locale.it_CH facet.locale.ta facet.locale.el_CY facet.locale.it_IT facet.locale.ta_IN facet.locale.el_GR facet.locale.ja facet.locale.te facet.locale.en facet.locale.ja_JP facet.locale.te_IN facet.locale.en_AU facet.locale.ka facet.locale.th facet.locale.en_BW facet.locale.ka_GE facet.locale.th_TH facet.locale.en_CA facet.locale.kk facet.locale.tr facet.locale.en_GB facet.locale.kk_KZ facet.locale.tr_TR facet.locale.en_HK facet.locale.kn facet.locale.uk facet.locale.en_IE facet.locale.kn_IN facet.locale.uk_UA facet.locale.en_IN facet.locale.ko facet.locale.vi facet.locale.en_MT facet.locale.ko_KR facet.locale.vi_VN facet.locale.en_NZ facet.locale.ks facet.locale.zh facet.locale.en_PH facet.locale.ks_IN facet.locale.zh_CN facet.locale.en_SG facet.locale.ku facet.locale.zh_HK facet.locale.en_US facet.locale.ku_TR facet.locale.zh_SG facet.locale.en_ZW facet.locale.ky facet.locale.zh_TW facet.locale.eo facet.locale.ky_KG facet.locale.es_AR facet.locale.lg