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