Rpm

為什麼“dir-or-file-in-usr-local”是錯誤而不是警告?

  • April 18, 2014

我正在建構一些 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’ 之外的每台機器上都有一個單獨的(’local’)’/usr’ 目錄,它可能只是從其他地方以只讀方式掛載。它複製’/usr’的結構。如今,’/usr/local’ 被廣泛認為是保存自編譯或第三方程序的好地方。/usr/local 層次結構供系統管理員在本地安裝軟體時使用。當系統軟體更新時,它需要安全,不會被覆蓋。它可用於可在一組主機之間共享但在 /usr 中找不到的程序和數據。本地安裝的軟體必須放在 /usr/local 而不是 /usr 中,除非安裝它是為了替換或升級 /usr 中的軟體。

事實上,我們遵循這些標準並安裝我們的本地軟體/usr/local正是出於這些原因,所以我不明白為什麼使用包管理器將包安裝到/usr/local. 但是,我也希望我們的包符合標準,如果沒有其他原因,只是我們本地包之間的一致性。那麼為什麼會rpmlint為 中的文件拋出錯誤/usr/local呢?這不應該由包裝商決定嗎?我可以忽略這個錯誤或者至少rpmlint列印一個警告嗎?

rpmlint是一種根據某種打包策略檢查 RPM 的工具。它的配置通常依賴於分發,它會根據特定的分發策略檢查包。只要這是您想要的,檢查您自己的包裹就可以了。

如果您的策略與分發策略不同,您要麼必須進行rpmlint相應配置,要麼避免使用它,要麼忽略特定錯誤。

/etc/rpmlint/config添加到或~/.config/rpmlint(未測試)時,以下內容應該可以解決問題:

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

資料來源:

引用自:https://unix.stackexchange.com/questions/125120