openSUSE:软件包命名指南
软件包命名的通用字符集
RPM 将软件包名称限制为 ASCII 加上一些标点符号。其中,'{}%' 由于 rpm-4.18 和 obs-build-20230502 中的错误也无法使用。最终,openSUSE 中软件包名称的可接受字符集是
abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789-._+
当上游命名超出指定字符集时
openSUSE 认识到将文本转换为指定的 ASCII 字符集(又称转写)是一项困难的任务。因此,当上游名称超出指定的 ASCII 字符集时,openSUSE 软件包维护者应首先联系该软件的上游,并要求他们提供 openSUSE 可以使用的名称转写。
如果(且仅当)上游项目无法、不愿或无法提供转写名称时,openSUSE 封装者
- 必须选择执行自己的转写,或从 openSUSE 的考虑范围中撤回该软件包。
- 应查看其他发行版如何为该软件包命名,并将其纳入考虑范围。
转写后的软件包可以提供:原始的、未转写的名称,但并非强制要求。
通用命名
在命名软件包时,名称应与该软件来自的上游 tarball 或项目名称匹配。在某些情况下,此命名选择可能会更加复杂。如果其他发行版/封装者过去已经对该软件包进行过封装,那么您应该尝试匹配他们的名称以保持一致性。无论如何,请尽力发挥您的判断力,其他开发人员将在最终决定中提供帮助。
此外,上游名称可能不属于 通用字符集。如果是这样,请参阅 当上游命名超出指定字符集 部分。
增强其他软件包/插件
为了使插件所服务的对象显而易见,通常的做法是先命名插件所针对的软件包,然后是字面上的 '-plugin-',最后是插件的功能/名称。
例如:plymouth-plugin-script 通过提供脚本功能的方式扩展了 plymouth 的功能。
分隔符
在为 openSUSE 命名软件包时,维护者必须使用连字符 '-' 作为名称部分的定界符。维护者不得使用下划线 '_'、加号 '+' 或句点 '.' 作为定界符。
对下划线 '_' 规则有一些例外
- httpd、pam 和 SDL 附加软件包除外,请参阅 附加软件包(httpd、pam 和 SDL)。
- 使用区域设置的名称的特定于区域设置的软件包除外,请参阅 附加软件包(区域设置)。
- 上游名称自然包含下划线的软件包除外。
这些软件包的示例包括
java_cup libart_lgpl microcode_ctl nss_ldap sg3_utils
如有疑问,请在 opensuse-packaging 邮件列表中提问。
同一软件的多个软件包
出于许多原因,有时将同一软件的多个版本保留在 openSUSE 中以同时安装是有利的或必要的。以下内容适用于软件包源名称和二进制软件包名称,共享库二进制软件包除外——它们有 自己的指南。
当提供同一软件的多个版本时,软件包名称应反映这一事实。使用主名称且不带版本的软件包应使用主名称,而所有其他附加软件包应在其名称中注明其版本。目前已知主名称有两个例外
- gcc/gcc33/gcc8:未带版本的软件包名称是一个元软件包,它为默认安装选择特定版本的另一个软件包。
- ffmpeg-4:所有 ffmpeg 实例都有一个数字,没有未带版本的名称。这被认为对与 Leap 更新同步有用(对于安全问题频繁且通常不会尝试补丁回移植的软件包)。
由于某些软件包名称可能将数字作为上游名称的一部分(例如clanbomber2),应应用共享库包装指南的建议,即使用连字符作为分隔符,并将其他分隔符替换为下划线(例如love-0_7_2软件包)。
存在一些由于缺乏定界符而模棱两可的历史软件包名称,例如gcc33, celt051.
命名选择示例
- 当需要同时存在多个版本的开发软件包时wxWidgets-3_0-devel
- 当需要同时存在多个版本的程序时love-0_7_2, love, ffmpeg-3, ffmpeg-4
区分大小写
在 openSUSE 封装中,维护者在考虑如何命名软件包时应尽其所能。虽然区分大小写不是强制要求,但只有在必要时才应使用大小写。请记住尊重上游维护者的意愿。如果他们将他们的应用程序称为“ORBit”,您应该使用“ORBit”作为软件包名称,而不是“orbit”。但是,如果他们不表达任何大小写偏好,您应该默认使用小写命名。
此规则的例外情况是 perl 模块封装。CPAN 组和类型应在名称中大写,就像它们是专有名词一样。(有关详细信息,请参阅 附加软件包(perl 模块)。)
Spec 文件名
Spec 文件应使用 %{name}.spec 方案命名。如果您的软件包名为 foo-1.0-1.src.rpm,那么 spec 文件应命名为 foo.spec。
重命名/替换现有软件包
在 软件包依赖项:重命名软件包 中描述。
文档子软件包
大型文档文件应放在子软件包中。此子软件包必须以 %{name}-doc 格式命名。“大型”的定义由封装者自行判断,但不受大小限制。大型可以指大小或数量。
附加软件包(通用)
如果一个新软件包被认为是增强或添加现有 openSUSE 软件包的新功能的“附加”软件包,而本身没有用处,那么它的名称应反映这一事实。
新的软件包(“子软件包”)应在其名称中添加“父软件包”,格式为:%{parent}-%{child}。
示例
gnome-applet-netmon (netmon applet for gnome, relies on gnome) php-adodb (adodb functionality for php, relies on php) python-twisted (the twisted module for python, relies on python) xmms-cdread (direct cd read functionality for xmms, relies on xmms)