跳至內容
出自 Arch Linux 中文维基

namcap 是用於檢查二進制軟體包和原始碼 PKGBUILD 中常見的打包錯誤的一個 Arch Linux 工具

安裝

安裝 namcap

用法

對某一文件(可為 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)READMENEWS

創建模塊

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"