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"。