3.4. 심각도를 위한 RPM 확인
패키지를 만든 후 패키지의 품질을 확인합니다.
패키지 품질을 확인하는 주요 도구는 rpmlint 입니다.
rpmlint
툴은 다음을 수행합니다.
- RPM 유지 관리 기능 개선.
- RPM의 정적 분석을 수행하여 온전성 검사를 활성화합니다.
- RPM의 정적 분석을 수행하여 오류 검사를 활성화합니다.
rpmlint
툴은 바이너리 RPM, 소스 RPM(SRPM) 및 SPEC 파일을 확인할 수 있으므로 다음 예와 같이 패키지의 모든 단계에 유용합니다.
rpmlint
에는 매우 엄격한 지침이 있으므로 다음 예제와 같이 일부 오류 및 경고를 건너뛸 수 있습니다.
다음 예에서 rpmlint
는 옵션 없이 실행되며, 이는 비점적 출력을 생성합니다. 각 오류 또는 경고에 대한 자세한 설명을 위해 rpmlint -i
를 대신 실행할 수 있습니다.
3.4.1. sanity에 대한 bello 확인
이 섹션에서는 bello SPEC 파일 예와 bello 바이너리 RPM에서 RPM의 심각도를 확인할 때 발생할 수 있는 경고 및 오류를 보여줍니다.
3.4.1.1. bello SPEC 파일 확인
예 3.2. bello용 SPEC 파일에서 rpmlint
명령을 실행하는 출력
$ rpmlint bello.spec
bello.spec: W: invalid-url Source0: https://www.example.com/bello/releases/bello-0.1.tar.gz HTTP Error 404: Not Found
0 packages and 1 specfiles checked; 0 errors, 1 warnings.
bello.spec
의 경우 하나의 경고만 있습니다. 이 경고는 Source0
지시문에 나열된 URL에 연결할 수 없음을 나타냅니다. 지정된 example.com
URL이 존재하지 않기 때문에 이 문제가 예상됩니다. 나중에 이 URL이 작동할 것으로 가정하면 이 경고를 무시할 수 있습니다.
예 3.3. bello SRPM에서 rpmlint
명령을 실행하는 출력
$ rpmlint ~/rpmbuild/SRPMS/bello-0.1-1.el8.src.rpm bello.src: W: invalid-url URL: https://www.example.com/bello HTTP Error 404: Not Found bello.src: W: invalid-url Source0: https://www.example.com/bello/releases/bello-0.1.tar.gz HTTP Error 404: Not Found 1 packages and 0 specfiles checked; 0 errors, 2 warnings.
bello
SRPM의 경우 새로운 경고가 있습니다. 이 경고는 URL 지시문에 지정된 URL
에 연결할 수 없음을 나타냅니다. 향후에 링크가 작동할 것으로 가정하면 이 경고를 무시할 수 있습니다.
3.4.1.2. bello 바이너리 RPM 확인
바이너리 RPM을 확인할 때 rpmlint
는 다음 항목을 확인합니다.
- 문서
- 수동 페이지
- 파일 시스템 계층 구조 표준을 일관되게 사용
예 3.4. bello의 바이너리 RPM에서 rpmlint
명령을 실행하는 출력
$ rpmlint ~/rpmbuild/RPMS/noarch/bello-0.1-1.el8.noarch.rpm
bello.noarch: W: invalid-url URL: https://www.example.com/bello HTTP Error 404: Not Found
bello.noarch: W: no-documentation
bello.noarch: W: no-manual-page-for-binary bello
1 packages and 0 specfiles checked; 0 errors, 3 warnings.
no-documentation
및 no-manual-page-for-binary
경고는 RPM에 문서 또는 수동 페이지가 없음을 나타냅니다. 위의 경고 외에 RPM은 rpmlint
검사를 통과했습니다.
3.4.2. sanity에 대한 pello 확인
이 섹션에서는 pello SPEC 파일 및 pello 바이너리 RPM의 예에서 RPM의 심각도를 확인할 때 발생할 수 있는 경고 및 오류를 보여줍니다.
3.4.2.1. pello SPEC 파일 확인
예 3.5. pello용 SPEC 파일에서 rpmlint
명령을 실행하는 출력
$ rpmlint pello.spec
pello.spec:30: E: hardcoded-library-path in %{buildroot}/usr/lib/%{name}
pello.spec:34: E: hardcoded-library-path in /usr/lib/%{name}/%{name}.pyc
pello.spec:39: E: hardcoded-library-path in %{buildroot}/usr/lib/%{name}/
pello.spec:43: E: hardcoded-library-path in /usr/lib/%{name}/
pello.spec:45: E: hardcoded-library-path in /usr/lib/%{name}/%{name}.py*
pello.spec: W: invalid-url Source0: https://www.example.com/pello/releases/pello-0.1.2.tar.gz HTTP Error 404: Not Found
0 packages and 1 specfiles checked; 5 errors, 1 warnings.
invalid-url Source0
경고에 따라 Source0
지시문에 나열된 URL에 연결할 수 없습니다. 지정된 example.com
URL이 존재하지 않기 때문에 이 문제가 예상됩니다. 이 URL이 나중에 작동할 것으로 가정하면 이 경고를 무시할 수 있습니다.
hardcoded-library-path
오류는 라이브러리 경로를 하드 코딩하는 대신 %{_libdir}
매크로를 사용하도록 제안합니다. 이 예제에서는 이러한 오류를 무시해도 됩니다. 그러나 프로덕션으로 전환하는 패키지의 경우 모든 오류를 주의 깊게 확인하십시오.
예 3.6. pello SRPM에서 rpmlint
명령을 실행하는 출력
$ rpmlint ~/rpmbuild/SRPMS/pello-0.1.2-1.el8.src.rpm pello.src: W: invalid-url URL: https://www.example.com/pello HTTP Error 404: Not Found pello.src:30: E: hardcoded-library-path in %{buildroot}/usr/lib/%{name} pello.src:34: E: hardcoded-library-path in /usr/lib/%{name}/%{name}.pyc pello.src:39: E: hardcoded-library-path in %{buildroot}/usr/lib/%{name}/ pello.src:43: E: hardcoded-library-path in /usr/lib/%{name}/ pello.src:45: E: hardcoded-library-path in /usr/lib/%{name}/%{name}.py* pello.src: W: invalid-url Source0: https://www.example.com/pello/releases/pello-0.1.2.tar.gz HTTP Error 404: Not Found 1 packages and 0 specfiles checked; 5 errors, 2 warnings.
여기에 새로운 invalid-url URL
오류는 연결할 수 없는 URL
지시문에 대한 것입니다. 나중에 URL이 유효한 것으로 가정하면 이 오류를 무시해도 됩니다.
3.4.2.2. pello 바이너리 RPM 확인
바이너리 RPM을 확인할 때 rpmlint
는 다음 항목을 확인합니다.
- 문서
- 수동 페이지
- 파일 시스템 계층 구조 표준을 일관되게 사용
예 3.7. pello의 바이너리 RPM에서 rpmlint
명령을 실행하는 출력
$ rpmlint ~/rpmbuild/RPMS/noarch/pello-0.1.2-1.el8.noarch.rpm
pello.noarch: W: invalid-url URL: https://www.example.com/pello HTTP Error 404: Not Found
pello.noarch: W: only-non-binary-in-usr-lib
pello.noarch: W: no-documentation
pello.noarch: E: non-executable-script /usr/lib/pello/pello.py 0644L /usr/bin/env
pello.noarch: W: no-manual-page-for-binary pello
1 packages and 0 specfiles checked; 1 errors, 4 warnings.
no-documentation
및 no-ECDHE-page-for-binary
경고는 RPM에 문서 또는 수동 페이지가 없음을 나타냅니다.
only-non-binary-in-usr-lib
경고는 /usr/lib/
에 바이너리가 아닌 아티팩트만 제공했음을 나타냅니다. 이 디렉터리는 일반적으로 바이너리 파일인 공유 개체 파일용으로 예약되어 있습니다. 따라서 rpmlint
는 /usr/lib/
디렉토리에 있는 하나 이상의 파일이 바이너리여야 합니다.
이는 rpmlint
검사에서 파일 시스템 계층 구조 표준을 준수하는 예입니다. 일반적으로 RPM 매크로를 사용하여 파일을 올바르게 배치하십시오. 이 예제에서는 이 경고를 무시해도 됩니다.
실행 불가능한-script
오류는 /usr/lib/pello/pello.py
파일에 실행 권한이 없음을 경고합니다. 파일에hebang이 포함되어 있으므로 rpmlint
툴에서 파일을 실행할 수 있어야 합니다. 이 예제에서는 실행 권한 없이 이 파일을 그대로 두고 이 오류를 무시할 수 있습니다.
위의 경고와 오류 외에 RPM은 rpmlint
검사를 통과했습니다.
3.4.3. 유일성을 위해 cello 확인
이 섹션에서는 cello SPEC 파일 및 pello 바이너리 RPM의 예에서 RPM sanity를 확인할 때 발생할 수 있는 경고 및 오류를 보여줍니다.
3.4.3.1. cello SPEC 파일 확인
예 3.8. cello에 대한 SPEC 파일에서 rpmlint
명령을 실행하는 출력
$ rpmlint ~/rpmbuild/SPECS/cello.spec
/home/<username>/rpmbuild/SPECS/cello.spec: W: invalid-url Source0: https://www.example.com/cello/releases/cello-1.0.tar.gz HTTP Error 404: Not Found
0 packages and 1 specfiles checked; 0 errors, 1 warnings.
cello.spec
의 경우 하나의 경고만 있습니다. 이 경고는 Source0
지시문에 나열된 URL에 연결할 수 없음을 나타냅니다. 지정된 example.com
URL이 존재하지 않기 때문에 이 문제가 예상됩니다. 이 URL이 나중에 작동할 것으로 가정하면 이 경고를 무시할 수 있습니다.
예 3.9. cello용 SRPM에서 rpmlint
명령을 실행하는 출력
$ rpmlint ~/rpmbuild/SRPMS/cello-1.0-1.el8.src.rpm cello.src: W: invalid-url URL: https://www.example.com/cello HTTP Error 404: Not Found cello.src: W: invalid-url Source0: https://www.example.com/cello/releases/cello-1.0.tar.gz HTTP Error 404: Not Found 1 packages and 0 specfiles checked; 0 errors, 2 warnings.
cello
SRPM의 경우 새로운 경고가 있습니다. 이는 URL 지시문에 지정된 URL
에 연결할 수 없음을 나타냅니다. 나중에 링크가 작동한다고 가정하면 이 경고를 무시할 수 있습니다.
3.4.3.2. cello 바이너리 RPM 확인
바이너리 RPM을 확인할 때 rpmlint
는 다음 항목을 확인합니다.
- 문서
- 수동 페이지
- 파일 시스템 계층 구조 표준을 일관되게 사용
예 3.10. cello의 바이너리 RPM에서 rpmlint
명령을 실행하는 출력
$ rpmlint ~/rpmbuild/RPMS/x86_64/cello-1.0-1.el8.x86_64.rpm
cello.x86_64: W: invalid-url URL: https://www.example.com/cello HTTP Error 404: Not Found
cello.x86_64: W: no-documentation
cello.x86_64: W: no-manual-page-for-binary cello
1 packages and 0 specfiles checked; 0 errors, 3 warnings.
no-documentation
및 no-ECDHE-page-for-binary
경고는 해당 RPM에 문서 또는 수동 페이지가 없음을 나타냅니다. 위의 경고 외에 RPM은 rpmlint
검사를 통과했습니다.