4.7. RPM の一般的なエラーのチェック
パッケージを作成したら、パッケージの品質を確認することを推奨します。パッケージの品質をチェックするための主なツールは rpmlint
です。
rpmlint
ツールを使用すると、次のアクションを実行できます。
- RPM の保守性を向上する。
- RPM の静的分析を実行してコンテンツの検証を可能にする。
- RPM の静的分析を実行してエラーチェックを可能にする。
rpmlint
では、バイナリー RPM、ソース RPM (SRPM)、および spec
ファイルをチェックできます。したがって、このツールはパッケージ化のすべての段階で役立ちます。
rpmlint
のガイドラインは厳密なものです。したがって、次のセクションに示すように、一部のエラーと警告をスキップすることが許容される場合もあります。
以下のセクションで説明する例では、rpmlint
にオプションを指定せずに実行しており、詳細な出力が得られません。各エラーまたは警告の詳細な説明は、代わりに rpmlint -i
を実行してください。
4.7.1. サンプル Bash プログラムで一般的なエラーをチェックする
次のセクションでは、bello
spec
ファイルと bello
バイナリー RPM の例で RPM の一般的なエラーをチェックするときに発生する可能性のある警告とエラーを調査します。
4.7.1.1. bello spec ファイルで一般的なエラーをチェックする
次の例の出力を調べて、bello
spec
ファイルで一般的なエラーをチェックする方法を確認してください。
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
の場合、invalid-url Source0
という警告が 1 つだけ出力されます。この警告は、Source0
ディレクティブにリストされている URL にアクセスできないことを意味します。example.com
URL は存在しないため、この出力は当然です。この URL が今後有効になると仮定して、この警告を無視します。
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 の場合、新しい invalid-url URL
警告が出力されます。これは、URL
ディレクティブで指定された URL にアクセスできないことを意味します。この URL が今後有効になると仮定して、この警告を無視します。
4.7.1.2. bello バイナリー RPM で一般的なエラーをチェックする
バイナリー RPM をチェックする場合、rpmlint
コマンドは次の項目をチェックします。
- ドキュメント
- man ページ
- ファイルシステム階層規格の一貫した使用
次の例の出力を調べて、bello
バイナリー RPM で一般的なエラーをチェックする方法を確認してください。
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
という警告は、ユーザーがドキュメントや man ページを提供しなかったため、RPM にドキュメントや man ページがないことを意味します。出力の警告を別にすれば、RPM は rpmlint
チェックに合格しています。
4.7.2. サンプル Python プログラムで一般的なエラーをチェックする
次のセクションでは、pello
spec
ファイルと pello
バイナリー RPM の例で RPM コンテンツを検証するときに発生する可能性のある警告とエラーを調査します。
4.7.2.1. pello spec ファイルで一般的なエラーをチェックする
次の例の出力を調べて、pello
spec
ファイルで一般的なエラーをチェックする方法を確認してください。
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}
マクロを使用することを提案しています。この例では、これらのエラーは無視しても問題はありません。ただし、実稼働環境に導入するパッケージの場合は、すべてのエラーを慎重に確認してください。
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 にアクセスできないことを意味します。この URL が今後有効になると仮定して、この警告を無視します。
4.7.2.2. pello バイナリー RPM で一般的なエラーをチェックする
バイナリー RPM をチェックする場合、rpmlint
コマンドは次の項目をチェックします。
- ドキュメント
- man ページ
- ファイルシステム階層規格の一貫した使用
次の例の出力を調べて、pello
バイナリー RPM で一般的なエラーをチェックする方法を確認してください。
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
という警告は、ドキュメントや man ページが指定されていないため、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
チェックに合格しています。
4.7.3. サンプル C プログラムで一般的なエラーをチェックする
次のセクションでは、cello
spec
ファイルと cello
バイナリー RPM の例で RPM コンテンツを検証するときに発生する可能性のある警告とエラーを調査します。
4.7.3.1. cello spec ファイルで一般的なエラーをチェックする
次の例の出力を調べて、cello
spec
ファイルで一般的なエラーをチェックする方法を確認してください。
cello
spec
ファイルで rpmlint
コマンドを実行した場合の出力
$ rpmlint ~/rpmbuild/SPECS/cello.spec /home/admiller/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
の場合、invalid-url Source0
という警告が 1 つだけ出力されます。この警告は、Source0
ディレクティブにリストされている URL にアクセスできないことを意味します。example.com
URL は存在しないため、この出力は当然です。この URL が今後有効になると仮定して、この警告を無視します。
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 については、invalid-url URL
という新しい警告があります。この警告は、URL
ディレクティブで指定された URL に到達できないことを意味します。この URL が今後有効になると仮定して、この警告を無視します。
4.7.3.2. cello バイナリー RPM で一般的なエラーをチェックする
バイナリー RPM をチェックする場合、rpmlint
コマンドは次の項目をチェックします。
- ドキュメント
- man ページ
- ファイルシステム階層規格の一貫した使用
次の例の出力を調べて、cello
バイナリー RPM で一般的なエラーをチェックする方法を確認してください。
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
という警告は、ドキュメントや man ページが指定されていないため、RPM にドキュメントや man ページがないことを意味します。
出力の警告を別にすれば、RPM は rpmlint
チェックに合格しています。