모의를 사용하여 srpm을 빌드한 다음 다시 빌드하여 rpm 모의를 생성하면 일부 종속성이 자동으로 생성됩니다. 대부분의 경우 이것은 완벽하게 괜찮지만, 제가 구축하려는 것은 이미 필요한 모든 것을 갖추고 있기 때문에 이 동작을 원하지 않습니다. 내가 해결할 수 없는 자동 요구 사항은 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
답변1
이는 Mock과 엄연히 관련이 없습니다. 내부적으로 시뮬레이션은 rpmbuild를 사용하며 이 자동 종속성은 rpmbuild에 의해 계산됩니다.
libffmpeg.so를 시스템 경로에 넣으면 다음을 수행할 수 있습니다(그러나 이 작업은 자동으로 수행되어야 합니다).
Provides: libffmpeg.so()(64bit)
그러나 시스템 경로에 없는 경우에만 필요를 필터링해야 합니다. 포괄적인 가이드는 다음과 같습니다. https://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering
나는 당신이 저지를 수 있는 두 가지 실수를 지적하고 싶습니다.
1) 누적되지 않습니다. 마지막 매크로만 사용되며 이전 매크로를 대체합니다.
2) 전체 문자열을 일치시켜야 하는 정규식입니다. 즉, libffmpeg.so는 "libffmpeg.so()(64bit)"와 일치하지 않습니다. 따라서 다음을 수행해야 합니다.
%global __requires_exclude ^libffmpeg\\.so.*$
추가적으로 다음을 추가해야 합니다:
Provides: bundled(<libname>) = <version>