srpm 재구축을 시뮬레이션하여 불필요한 종속성을 자동으로 계산

srpm 재구축을 시뮬레이션하여 불필요한 종속성을 자동으로 계산

모의를 사용하여 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>

관련 정보