ウェブサイト検索

Fedora で GNU Hello World RPM パッケージを作成する方法


RPM (RPM Package Manager の再帰的頭字語) は、Linux 用の無料のオープンソース パッケージ管理システムです。元々はRed Hat Linuxで使用するために作成されましたが、現在ではCentOSFedoraなどの多くのLinuxディストリビューションで使用されています。 > オープンスースです。重要なのは、RPM という名前はパッケージ マネージャー プログラムを指し、.rpm はファイル形式であることです。

この記事では、RPM ファイルの作成について説明し、Fedora LinuxGNU「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/

各ディレクトリの目的は次のとおりです。

  1. BUILD – パッケージのビルド時にさまざまな %buildroot ディレクトリを保存します。
  2. RPMS – Architecture のサブディレクトリにバイナリ RPM が含まれます。
  3. ソース – 圧縮されたソース アーカイブとパッチを保存します。rpmbuild コマンドはここでそれらを検索します。
  4. SPECS – SPEC ファイルを保存します。
  5. 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 パッケージの作成方法も示しました。ご質問やご意見がございましたら、以下のフィードバック フォームをご利用ください。