检查RPM包中的常见错误
项目描述
rpmlint
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
测试
您需要拥有上面安装部分列出的所有必需模块。您还需要pytest
、pytest-cov
和pytest-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
目录中找到,您可以直接运行。
测试功能的工作流程示例
- 我有一个rpm文件,它应该报告无法读取的zip文件
- 我将此文件存储在git中,在
test/binary/texlive-codepage-doc-2018.151.svn21126-38.1.noarch.rpm
- 现在,我需要找出
check
应该测试什么,在这种情况下是test_zip.py
- 为了进行测试,我将必须设计一个小的函数来验证我的预期
@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的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e8744b0f330361c124334e92bd3b0a2f8cdc3b3e76868dde4c0876fac070ad85 |
|
MD5 | 8f4c96da8277b4940c7cbfbe9ca9a53d |
|
BLAKE2b-256 | 71771c5574d8501a73881f99fcce6e0981fd75fc01486cd92ace52b024961b03 |