Rpm

模擬重建 srpm 自動計算不需要的依賴項

  • September 14, 2016

當使用 mock 建構 srpm 然後重建它以創建 rpm mock 時,會自動生成一些依賴項。在大多數情況下這很好,但因為我正在嘗試建構的東西已經帶來了它需要的一切,所以我不想要這種行為。我無法解決的自動要求是 libffmpeg.so()(64bit) - 但正如我所說,它是作為文件包含的。

我已經嘗試過(在規範文件中)

  • %define __requires_exclude libffmpeg.so
  • 自動請求:否 | 0
  • AutoReqProv: 否|0

以上所有內容,無論是否手動指定要求(例如 coreutils)。

使用的命令:

mock -r epel-7-x86_64 --buildsrpm --no-clean --no-cleanup-after --spec="${RPM_NAME}.spec" --source="${WORKING_DIR}" --resultdir="${WORKING_DIR}" -v
mock -r epel-7-x86_64 --rebuild --no-clean --no-cleanup-after "${WORKING_DIR}"/${RPM_NAME}*.src.rpm --resultdir="${WORKING_DIR}" -v

這與 Mock 沒有嚴格的關係。在內部模擬使用 rpmbuild,並且這種自動依賴關係由 rpmbuild 計算。

如果您將 libffmpeg.so 放在系統路徑中,那麼您可以(順便說一句應該自動完成):

Provides: libffmpeg.so()(64bit)

但如果它不在系統路徑中,您應該只過濾 Require。這是綜合指南: https ://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering

我想指出您可能會犯錯誤的兩件事:

1)它不是累積的。只使用最後一個宏,它取代了前一個。

2)它是需要匹配整個字元串的正則表達式。即 libffmpeg.so 將不匹配“libffmpeg.so()(64bit)”。所以你必須:

%global __requires_exclude ^libffmpeg\\.so.*$

此外,您應該添加:

Provides: bundled(<libname>) = <version>

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