3.4. RPM のサニティーチェック
パッケージを作成したら、パッケージの品質を確認します。
パッケージの品質をチェックする主要なツールは、rpmlint です。
rpmlint
ツールは、以下のことを行います。
- RPM の保守性の向上。
- RPM の静的な分析の実行によるサニティーチェック。
- RPM の静的な分析の実行による、エラーチェック。
rpmlint
ツールはバイナリー RPM、ソース RPM (SRPMS) 、SPEC ファイルをチェックできるため、以下の例で示すように、パッケージ化のすべての段階で役に立ちます。
rpmlint
には非常に厳密なガイドラインがあるため、以下の例にあるように、一部のエラーや警告をスキップできる場合もあることに注意してください。
以下の例では、rpmlint
はオプションを指定せずに実行し、詳細でない出力を生成します。それぞれのエラーや警告の詳細な説明は、rpmlint -i
を実行してください。
3.4.1. 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 に到達できないことを示す警告が 1 つのみあります。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
は以下の項目をチェックします。
- ドキュメント
- man ページ
- ファイルシステム階層規格の一貫した使用
例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 にドキュメントや man ページがないことが表示されます。これは指定しないため当然です。上記の警告とは別に、RPM は rpmlint
チェックに合格しています。
3.4.2. 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
は以下の項目をチェックします。
- ドキュメント
- man ページ
- ファイルシステム階層規格の一貫した使用
例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-manual-page-for-binary
の警告では、RPM にドキュメントや man ページがないことが表示されます。これは指定しないため当然です。
only-non-binary-in-usr-lib
警告では、/usr/lib/
にバイナリーでないアーティクトのみを提供していることが表示されます。このディレクトリーは通常、バイナリーファイルである共有オブジェクトファイル用に予約されています。したがって、rpmlint
は、/usr/lib/
ディレクトリー内の少なくとも 1 つ以上のファイルがバイナリーであることを想定します。
これは、ファイルシステム階層規格への準拠についての rpmlint
チェック例です。通常、ファイルを正しく配置するには RPM マクロを使用します。この例では、この警告は無視しても問題はありません。
non-executable-script
エラーは、/usr/lib/pello/pello.py
ファイルに実行権限がないことを警告します。ファイルにシバンが含まれているため、rpmlint
ツールは、ファイルが実行ファイルであること想定します。この例では、このファイルは実行権限なしのままにし、このエラーを無視します。
上記の警告およびエラーとは別に、RPM は rpmlint
チェックに合格しています。
3.4.3. cello のサニティーチェック
本セクションでは、cello の SPEC ファイルおよび pello のバイナリー RPM の例で RPM のサニティーチェックを行う際に発生する可能性のある警告およびエラーを示します。
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 に到達できないことを示す警告が 1 つのみあります。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
は以下の項目をチェックします。
- ドキュメント
- man ページ
- ファイルシステム階層規格の一貫した使用
例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-manual-page-for-binary
の警告では、RPM にドキュメントや man ページがないことが表示されます。これは指定しないため当然です。上記の警告とは別に、RPM は rpmlint
チェックに合格しています。