跳转到主要内容

检查RPM包中的常见错误

项目描述

rpmlint

Build and Test Build and Test 2 build result repology Coverage Status

rpmlint 是一个用于检查RPM包中常见错误的工具。 rpmlint 可用于在上传之前测试单个包,或检查整个发行版。

rpmlint 可以检查二进制RPM、源RPM和普通spec文件,但并非所有检查都适用于所有参数类型。为了获得最佳的检查覆盖率,请对源RPM而不是普通spec文件运行 rpmlint

rpmlint 的想法来自Debian项目的lintian工具。所有检查都位于 rpmlint/checks 文件夹中。请随时在

https://github.com/rpm-software-management/rpmlint

安装

在您的机器上安装,您需要以下软件包

必需

  • Python 3.8 或更高版本
  • python3-setuptools, python3-tomli(对于 python3 < 3.11),python3-tomli-w, python3-pyxdg, python3-pybeam
  • rpm及其Python绑定
  • binutils, cpio, gzip, bzip, xz和zstd

可选,用于运行测试套件

  • devscripts
  • dash
  • 在64位架构上,需要一个32位glibc
  • desktop-file-utils
  • libmagic及其Python绑定
  • enchant及其Python绑定,以及en_US和cs_CZ词典
  • appstream-util,是appstream-glib的一部分

rpmlint是大多数发行版的一部分,作为用户,您可以简单地

dnf install rpmlint

测试

您需要拥有上面安装部分列出的所有必需模块。您还需要pytestpytest-covpytest-xdist,您可以单独安装,或者通过运行

pip install -e ".[test]"

如果所有依赖项都存在,您可以使用以下命令执行测试

python3 -m pytest

或者甚至可以使用pytest选择其中一个测试

python3 -m pytest test/test_config.py

错误修复和贡献

当然,任何帮助都是受欢迎的,但老实说,您访问此页面的最可能原因是rpmlint将某些内容标记为无效,而它本不应该这样做,或者它将某些内容标记为正确,而实际上它不应该这样做 :)

现在有一个简单的方法来解决这个问题。我们的测试套件只需要扩展以考虑上述问题。

首先,我们只需要有问题的rpm文件(最好是您能找到的最小的一个,否则我们会很快占用几个GB的空间来提取)和一些基本预期应该发生什么。

构建可安装的rpm并安装

本节重点介绍如何在开发过程中构建工具。

要构建工具,我们将使用一个名为packit的工具。首先,在您的系统上安装packit

dnf install packit

然后,使用以下命令构建项目

packit build locally

如果您遇到任何错误,安装缺少的依赖项,然后再次运行相同的命令。构建成功后,您将在noarch目录下找到一个RPM文件。要在系统上安装该软件包,请运行

dnf install <the_rpm_you_just_built>

或者,构建的二进制文件可以在rpmlint目录下的.packit目录中找到,您可以直接运行。

测试功能的工作流程示例

  1. 我有一个rpm文件,它应该报告无法读取的zip文件
  2. 我将此文件存储在git中,在test/binary/texlive-codepage-doc-2018.151.svn21126-38.1.noarch.rpm
  3. 现在,我需要找出check应该测试什么,在这种情况下是test_zip.py
  4. 为了进行测试,我将必须设计一个小的函数来验证我的预期
@pytest.mark.parametrize('package', ['binary/texlive-codepage-doc'])
def test_zip2(tmpdir, package, zipcheck):
    output, test = zipcheck
    test.check(get_tested_package(package, tmpdir))
    out = output.print_results(output.results)
    assert 'W: unable-to-read-zip' in out

如您所见,这并不困难,并且随着每个添加的测试,我们可以在真正期望从rpmlint中获得的内容上获得更好的覆盖率,并在长期运行中避免不良的回归。

对于二进制软件包,首选的方法是创建人工测试用例(以保持二进制文件小而简单)。我们目前正在使用OBS来生成二进制文件:https://build.opensuse.org/project/show/devel:openSUSE:Factory:rpmlint:tests

有关示例软件包,请参阅:https://build.opensuse.org/package/show/devel:openSUSE:Factory:rpmlint:tests/non-position-independent-exec

配置

如果您想更改配置选项或检查列表,可以使用以下位置

/etc/xdg/rpmlint/*toml

$XDG_CONFIG_HOME/rpmlint/*toml

配置本身是一个toml文件,其中一些基本灵感可以参考rpmlint/configdefaults.toml,它指定了格式/默认值。

还可以通过使用--config选项包含额外的配置文件(或目录)。请注意,所有TOML配置值都是合并的,而不是被覆盖。所以例如,列表中的值是连接的。如果您需要覆盖,请使用*.override.*toml配置文件,其中所有定义的值都作为默认值。

控制rpmlint行为的额外选项是添加rpmlintrc文件,该文件使用旧语法以兼容旧版rpmlint发行版,但如果您愿意,它也可以是正常的toml文件。

setBadness('check', 0)
addFilter('test-i-ignore')

rpmlintrc的位置可以使用--rpmlintrc选项设置。或者它可以加载位于检查RPM文件(或spec文件)同一文件夹中的任何*.rpmlintrc*-rpmlintrc。注意,自动加载仅在使用一个RPM文件(或spec文件)时发生。最佳实践是将名称存储在$PACKAGE_NAME.rpmlintrc中。

setBadness覆盖了给定检查的默认不良度,而addFilter则忽略所有与给定正则表达式匹配的错误(无法过滤掉配置文件中在BlockedFilters中列出的错误)。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源分发

rpmlint-2.6.1.tar.gz (6.8 MB 查看哈希)

上传时间

由以下组织支持