openSUSE:软件包命名指南

跳转到:导航搜索
openSUSE 软件包命名指南将帮助您正确地命名您的软件包和 spec 文件。

软件包命名的通用字符集

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 命名软件包时,维护者必须使用连字符 '-' 作为名称部分的定界符。维护者不得使用下划线 '_'、加号 '+' 或句点 '.' 作为定界符。

对下划线 '_' 规则有一些例外

这些软件包的示例包括

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)