为什么“dir-or-file-in-usr-local”是错误而不是警告?

为什么“dir-or-file-in-usr-local”是错误而不是警告?

我正在构建一些 rpm 包并使用rpmlint.这些软件包是特定于我工作地点的系统的,它们不会被推送到上游。我们的软件包包括各种软件,包括内部软件、存储库中的软件补丁版本以及官方存储库中未提供的软件。我们安装本地包/usr/local有很多原因:

  • 避免与官方包的命名冲突
  • 防止yum update破坏本地包
  • 允许本地包驻留在单独的分区或磁盘上和/或通过 NFS 共享,以便可以在主机之间共享包和配置
  • 允许我们更好地控制从官方存储库之外的来源安装的软件包,其中许多不符合标准安装路径(binlibincludeshare等)

然而,rpmlint当在将文件安装到/usr/local.例如,在 GNU Hello World 的自定义构建中,rpmlint -i必须说的是:

hello.x86_64: E: dir-or-file-in-usr-local /usr/local/hello-2.8/bin/hello
A file in the package is located in /usr/local. It's not permitted for
packages to install files in this directory.

我知道文件系统层次结构标准, 根据该:

“/usr/local”背后的最初想法是除了“/usr”之外,在每台计算机上都有一个单独的(“本地”)“/usr”目录,该目录可能只是从其他地方以只读方式安装。它复制“/usr”的结构。如今,“/usr/local”被广泛认为是保存自编译或第三方程序的好地方。 /usr/local 层次结构供系统管理员在本地安装软件时使用。当系统软件更新时,它需要确保不被覆盖。它可用于可在一组主机之间共享但在 /usr 中找不到的程序和数据。本地安装的软件必须放置在 /usr/local 而不是 /usr 中,除非安装它是为了替换或升级 /usr 中的软件。

事实上,/usr/local出于这些原因,我们遵循这些标准并将本地软件安装到,所以我不明白为什么使用包管理器将包安装到/usr/local.然而,我也希望我们的软件包符合标准,如果没有其他原因,除了我们本地软件包之间的一致性。那么为什么rpmlint中的文件会抛出错误呢/usr/local?这不应该由包装商决定吗?我可以忽略这个错误或者至少打印rpmlint一个警告吗?

答案1

rpmlint是一个根据某种打包策略检查 RPM 的工具。它的配置通常与发行版相关,并且根据特定的发行版策略检查包。检查你自己的包就可以了,只要这是你想要的。

如果您的策略与分发策略不同,您必须进行rpmlint相应配置、避免使用它或忽略特定错误。

/etc/rpmlint/config当添加到or ~/.config/rpmlint(未测试)时,以下内容应该可以解决问题:

addFilter("E: dir-or-file-in-usr-local")

资料来源:

答案2

你没有遵循标准。/usr/local旨在包含本地编译的文件,即在本地计算机中构建的文件。

创建包时,目标是将其分发到其他计算机。

如果您在一台计算机上安装软件包,然后在同一台计算机上从源代码构建相同的软件,如果两个目标都是/usr/local.这是rpmlint我们试图避免的冲突。

对于您的情况,我建议创建一个在/opt/hello2.8.后一个目录不会与上游包或本地构建的文件冲突。

相关内容