Fedora で GNU Hello World RPM パッケージを作成する方法
RPM (RPM Package Manager の再帰的頭字語) は、Linux 用の無料のオープンソース パッケージ管理システムです。元々はRed Hat Linuxで使用するために作成されましたが、現在ではCentOS、Fedora、などの多くのLinuxディストリビューションで使用されています。 > オープンスースです。重要なのは、RPM という名前はパッケージ マネージャー プログラムを指し、.rpm
はファイル形式であることです。
この記事では、RPM ファイルの作成について説明し、Fedora Linux のGNU「Hello World」 RPM パッケージなど、単純なソースおよびバイナリ ソフトウェア パッケージを簡単に作成する方法を示します。強い>分布。既製の RPM パッケージと、無料のオープンソース ソフトウェアの構築プロセスについて、ある程度の基本を理解していることを前提としています。
Fedora に開発ツールをインストールする
次のコマンドを実行して RPM の構築に必要なツールをインストールし、Fedora Linux で開発環境をセットアップすることから始めましょう。
sudo dnf install fedora-packager @development-tools
次に、次のように非特権アカウントを「モック」グループに追加します (tecmint を実際のユーザー名に置き換えます)。これにより、クリーンな chroot でビルド手順をテストできるようになります。
sudo usermod -a -G mock tecmint
ここで、~/rpmbuild
ディレクトリに RPM ビルドを作成し、次のコマンドを使用してビルドを確認します。プロジェクトのソース コード、RPM 構成ファイル、バイナリ パッケージを含むサブディレクトリのリストが表示されます。
rpmdev-setuptree
tree ~/rpmbuild/
各ディレクトリの目的は次のとおりです。
- BUILD – パッケージのビルド時にさまざまな %buildroot ディレクトリを保存します。
- RPMS – Architecture のサブディレクトリにバイナリ RPM が含まれます。
- ソース – 圧縮されたソース アーカイブとパッチを保存します。rpmbuild コマンドはここでそれらを検索します。
- SPECS – SPEC ファイルを保存します。
- SRPMS – バイナリ RPM の代わりにソース RPM を保存します。
「Hello World」RPM の構築
このステップでは、パッケージ化している Hello World プロジェクトのソース コード (「アップストリーム」ソースとも呼ばれます) を ~/rpmbuild/SOURCE にダウンロードする必要があります。 >ディレクトリに次のwgetコマンドを実行します。
cd ~/rpmbuild/SOURCES
wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz -P ~/rpmbuild/SOURCES
次に、~/rpmbuild/SPECS 内の .spec
ファイル (この場合は hello.spec
という名前にします) を使用して RPM パッケージを構成しましょう。 > ディレクトリに移動し、rpmdev-newspec プログラムを使用します。
cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls
次に、好みのエディタを使用して hello.spec
ファイルを開きます。
vim hello.spec
デフォルトのテンプレートは次のようになります。
Name: hello
Version:
Release: 1%{?dist}
Summary:
License:
URL:
Source0:
BuildRequires:
Requires:
%description
%prep
%autosetup
%build
%configure
%make_build
%install
rm -rf $RPM_BUILD_ROOT
%make_install
%files
%license add-license-file-here
%doc add-docs-here
%changelog
* Tue May 28 2019 Aaron Kili
.spec
ファイルのデフォルトのパラメータについて簡単に説明します。
- 名前 – パッケージの名前を設定するために使用されます。
- バージョン – 上流にミラーリングする必要があります。
- リリース – Fedora 内で作業する番号。
- 概要 – パッケージの簡単な 1 行説明です。rpmlint の苦情を避けるために、最初の文字は大文字にする必要があります。
- ライセンス – ソース ファイルやその LICENSE ファイルを調べたり、作成者に問い合わせたりして、ソフトウェアのライセンス ステータスを確認します。
- URL – ソフトウェア パッケージのホームページを指定します。
- Source0 – ソース ファイルを指定します。直接 URL またはソフトウェアの圧縮ソース コードのパスを指定できます。
- BuildRequires – ソフトウェアのビルドに必要な依存関係を指定します。
- 必須 – ソフトウェアの実行に必要な依存関係を指定します。
- %prep – rpm パッケージを構築するための環境を作成するために使用されます。
- %build – ソース コードのコンパイルとビルドに使用されます。
- %install – これはプログラムのインストールに使用されます。ここには、ビルド プロセスの結果ファイルを BUILDROOT ディレクトリにコピーするために必要なコマンドがリストされています。
- %files – このセクションには、パッケージによって提供され、システムにインストールされるファイルがリストされます。
- %changelog – 特にベースアップストリーム ソースにセキュリティ パッチやバグ パッチが含まれている場合、RPM の準備に関する作業を保存する必要があります。これは、hello.spec ファイルの作成中に自動的に生成されます。変更ログ データは通常、
rpm --changelog -q
によって表示されます。
次に、.spec
ファイルを編集し、次のように変更します。
Name: hello
Version: 2.10
Release: 1%{?dist}
Summary: The "Hello World" program from GNU
License: GPLv3+
URL: http://ftp.gnu.org/gnu/%{name}
Source0: http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz
BuildRequires: gettext
Requires(post): info
Requires(preun): info
%description
The "Hello World" program package
%prep
%autosetup
%build
%configure
make %{make_build}
%install
%make_install
%find_lang %{name}
rm -f %{buildroot}/%{_infodir}/dir
%post
/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || :
%preun
if [ $1 = 0 ] ; then
/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || :
fi
%files -f %{name}.lang
%{_mandir}/man1/hello.1.*
%{_infodir}/hello.info.*
%{_bindir}/hello
%doc AUTHORS ChangeLog NEWS README THANKS TODO
%license COPYING
%changelog
* Tue May 28 2019 Aaron Kili
上記のファイルでは説明されていないいくつかの新しいパラメータが使用されていることがわかります。これらはマクロと呼ばれ、RPM によって定義されたシステム呼び出しを構築してパッケージのインストール パスを設定するために使用されます。したがって、通常は、これらのパスを仕様ファイルにハードコードせず、一貫性を保つために同じマクロを使用することが望ましいです。
以下は、RPM ビルドおよびディレクトリ マクロとその定義およびデフォルト値です。
- %{make_build} – 仕様ファイルの %build セクションで使用され、make コマンドを実行します。
- %{name} – パッケージまたはディレクトリ名を定義します。
- %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}、$BUILDROOT と同じ
- %{_infodir} – %{_datarootdir}/info、デフォルト: /usr/share/info
- %{_mandir} – %{_datarootdir}/man、デフォルト: /usr/share/man
- %{_bindir} – %{_exec_prefix}/bin、デフォルト: /usr/bin
これらのマクロの値は/usr/lib/rpm/platform/*/macrosで見つけるか、パッケージ化ガイドライン:RPMマクロを参照してください。
RPM パッケージの構築
ソース、バイナリ、およびデバッグ パッケージをビルドするには、次の rpmbuild コマンドを実行します。
rpmbuild -ba hello.spec
ビルド プロセスの後、ソース RPM とバイナリ RPM がそれぞれ ../SRPMS/
ディレクトリと ../RPMS/
ディレクトリに作成されます。 rpmlint プログラムを使用すると、作成されたスペック ファイルと RPM ファイルが RPM 設計ルールに準拠していることを確認できます。
rpmlint hello.spec ../SRPMS/hello* ../RPMS/*/hello*
上のスクリーンショットに示されているようなエラーがある場合は、続行する前にそれらを修正してください。
最後に重要なことですが、モック プログラムを使用して、Fedora 制限付きビルド環境でパッケージのビルドが成功するかどうかを確認します。
mock --verbose ../SRPMS/hello-2.10-1.fc29.src.rpm
詳細については、Fedora のドキュメント「RPM パッケージの作成」を参照してください。
それだけです!この記事では、Fedora システムをステップアップして、単純なソースとバイナリ ソフトウェア パッケージを作成する方法を説明しました。 GUN Hello Word RPM パッケージの作成方法も示しました。ご質問やご意見がございましたら、以下のフィードバック フォームをご利用ください。