為什麼“dir-or-file-in-usr-local”是錯誤而不是警告?
我正在建構一些 rpm 包並使用
rpmlint
. 這些軟體包特定於我工作地點的系統,它們不會被推送到上游。我們的軟體包包括各種軟體,包括內部軟體、儲存庫中的軟體更新檔版本以及官方儲存庫中不可用的軟體。我們安裝本地包/usr/local
有很多原因:
- 避免與官方包的命名衝突
- 防止
yum update
破壞本地包- 允許本地包存在於單獨的分區或磁碟上和/或通過 NFS 共享,以便可以在主機之間共享包和配置
- 允許我們更好地控制從官方儲存庫之外的源安裝的軟體包,其中許多不符合標準安裝路徑(
bin
、lib
、include
、share
等)但是,
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")
資料來源: