namcap
外观
namcap 是用于检查二进制软件包和源代码 PKGBUILD 中常见的打包错误的一个 Arch Linux 工具。
安装[编辑 | 编辑源代码]
用法[编辑 | 编辑源代码]
对某一文件(可为 PKGBUILD
或包二进制文件如 包名.tar.zst
)运行 namcap:
$ namcap 文件路径
使用 --info
(-i
)标志运行 namcap 以输出额外信息:
$ namcap --info 文件路径
namcap 使用一种“标签”系统来分类输出。标签分为三种类型:“错误”(error,表示为 E
)、“警告”(warning,表示为 W
)和“信息”(informational,表示为 I
)。错误十分重要,必须立即修复,其通常有关安全性不充分、缺少许可证或权限问题。
通常,namcap 会打印出一个人类可读的说明(可能包含修复问题的建议)。要使输出更容易由程序解析,向 namcap 传递 --machine-readable
(-m
)标志。
“标签文件” /usr/share/namcap/namcap-tags
(在线源)指定了与代码中使用的带连字符标签相对应的人类可读描述(以 #
开头的行被视为注释):
# 注释 machine-parsable-tag %s :: 标签 %s 的人类可读描述
注意:
::
(双冒号)用于分隔机器可读的标签和人类可读的描述。%s
是一个格式说明符(format specifier),详见#创建模块。
更多信息请参阅 namcap(1)、README 和 NEWS。
创建模块[编辑 | 编辑源代码]
namcap 主程序(namcap.py
)接受一个包文件或 PKGBUILD
作为参数,并创建一个 pkginfo 对象,然后将其传递给在 __tarball__
和 __pkgbuild__
中定义的一系列规则。自定义的模块需要添加到适当的数组中:
__tarball__
定义处理二进制包的规则,__pkgbuild__
定义处理PKGBUILD
的规则。
一个示例的 namcap 模块如下所示:
namcap/url.py
import pacman class package: def short_name(self): return "url" def long_name(self): return "Verifies url is included in a PKGBUILD" def prereq(self): return "" def analyze(self, pkginfo, tar): ret = [[], [], []] if not hasattr(pkginfo, 'url'): ret[0].append(("missing-url", ())) return ret def type(self): return "pkgbuild"
每个 namcap 模块必须具有以下方法:
short_name(self)
⸺返回一个模块短名称的字符串。通常,这与模块文件的 basename(1)(去除扩展名的文件名)相同。
long_name(self)
⸺返回一个包含模块简明描述的字符串。此描述会在使用namcap --rules=规则列表
列出所有规则时使用。
prereq(self)
⸺返回一个包含模块正常运行所需先决条件的字符串。对于处理PKGBUILD
的模块,通常是空字符串(""
);对于处理包文件的模块,则是"tar"
。如果在进一步处理之前需要将包内容提取到临时目录,则应指定"extract"
。
analyze(self, pkginfo, tar)
⸺返回一个包含三个子列表的列表,三个子列表分别对应“错误”、“警告”和“信息”标签。每个标签列表的成员应该是一个元组,包含两个部分:标签的短形式(上文提到的带连字符标签,可带有适当格式说明符(format specifier,如%s
))以及格式说明符所对应的参数元组。
type(self)
⸺对于处理PKGBUILD
的模块,返回"pkgbuild"
;对于处理二进制包文件的模块,返回"tarball"
。