사용자 정의 Perl 모듈 설치

사용자 정의 Perl 모듈 설치

독점 소프트웨어 컬렉션을 사용하여 CentOS 7 환경에서 RPM을 구축했지만 구축 프로세스에는 .pm소스 코드 자체에 있는 일부 Perl 모듈(파일)을 실행해야 합니다. 실행하면 rpm -Uvh rpm-name.rpm소스 코드에 있는 정확한 Perl 모듈에 대한 종속성이 실패합니다. 그래서 질문은 맞춤 Perl 모듈을 어떻게 설치합니까?입니다.

일부 .pm파일은 패키지를 정의하고 다른 파일은 서브루틴을 정의합니다. 스크립트 디렉토리를 복사해 보았지만 /usr/lib64/perl5/작동하지 않았습니다. cpan -D Module::Name나에게주세요 Can't call method userid on an undefined value at /usr/share/perl5/App/Cpan.pm line 836. Perl 모듈에서 RPM을 생성하려고 검색했지만 모두가 CPAN모듈에서 RPM을 생성하는 방법을 설명하는 것 같습니다.

답변1

귀하의 설명에서는 정확히 무슨 일이 일어나고 있는지 명확하지 않지만(특정 오류 메시지가 도움이 되거나 문제를 재현하는 샘플 패키지 사양이 있음) RPM 종속성이 어떻게든 잘못된 것처럼 들립니다. 문제의 세부 사항에 따라 여러 가지 옵션이 있습니다.

분실된 패키지 제공

패키지가 *.spec파일에 누락된 모듈을 제공함을 나타냅니다.

Provides: perl(Module::Name)
...

*.spec이는 소프트웨어 파일에서 수행할 수 있습니다. 때로는 이것이 필요할 수도 있습니다누락된 종속성을 제공하는 것 외에는 아무 작업도 수행하지 않는 심 RPM특히 종속성을 수정하기 위해 수정할 수 없거나 수정하고 싶지 않은 타사 패키지가 있는 경우 더욱 그렇습니다.

자동 요청 비활성화

큰 망치 타격은 패키지를 닫으려면 자동으로 필요합니다.

Autoreq: 0

그러면 BuildRequires패키지에 대한 적절한 종속성을 설정하기 위해 파일에 적절한 및 기타 명령문이 필요할 수 있습니다(또는 구성 관리에서 설치해야 하는 패키지를 처리할 수 있습니다). 로컬로 유지 관리하는 133개 모듈 패키지 중 4개에 이 플래그를 설정해야 합니다. 예를 들면 다음과 같습니다.Requires*.specperl-*perl-File-ChangeNotify.spec

# KLUGE don't pull in IO::KQueue which in turn needs *BSD
Autoreq: 0
BuildRequires:  perl(Carp)
...
Requires:       perl(Carp)
...

자동 종속성 스크립트 변경 또는 필터링

요구 사항을 결정하기 위해 RPM이 실행하는 코드의 출력을 변경하거나 필터링해야 하기 때문에 더 많은 작업이 필요합니다.타코미터 문서find-*내 Centos 7 테스트 시스템에는 더 이상 해당 페이지에 언급된 스크립트가 없기 때문에 오래된 것 같습니다 . 따라서 이 절차에서 뭔가 변경된 것이 의심할 여지가 없으며 현재 어디에 있는지 또는 문서화되어 있는지 누가 알겠습니까? 대신 요구 사항 스크립트에 대한 변경 사항을 추적할 시간이 없기 때문에 위의 두 가지 방법 중 하나를 사용합니다.

답변2

__requires_exclude나는 사양 파일에 매크로를 추가하는 것이 이 상황에 매우 유용하다는 것을 발견했습니다 . 바라보다https://docs.fedoraproject.org/en-US/packaging-guidelines/AutoProvidesAndRequiresFiltering/상세 사항은

관련 정보