ウェブサイト検索

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


RPM(RPMパッケージマネージャの再帰的頭字語)は、Linux用の無料かつオープンソースのパッケージ管理システムです。当初はRed Hat Linux用に作成されましたが、現在ではCentOS、Fedora、OpenSuseなど、さまざまなLinuxディストリビューションで使用されています。重要なことに、RPMという名前はパッケージマネージャプログラムを指し、.rpmはファイルフォーマットです。

この記事では、RPMファイルの作成方法について説明し、例えばGNU「Hello World」 RPMパッケージをFedora Linuxディストリビューションで簡単に作成する方法を示します。事前に用意されたRPMパッケージと、フリーオープンソースソフトウェアのビルドプロセスについて、基本的な理解があることを前提としています。

Fedoraに開発ツールをインストールする

RPMをビルドするために必要なツールをインストールするために、以下のコマンドを実行してFedora Linuxで開発環境をセットアップすることから始めましょう。

$ sudo dnf install fedora-packager @development-tools

次に、非特権アカウントを「mock」グループに以下のように追加します(tecmintを実際のユーザー名に置き換えてください)。これにより、クリーンなchroot環境でビルド手順をテストできるようになります。

$ sudo usermod -a -G mock tecmint

今、あなたの~/rpmbuildディレクトリにRPMビルドを作成し、以下のコマンドを使用してビルドを確認してください。それはプロジェクトのソースコード、RPMの設定ファイル、およびバイナリパッケージを含むサブディレクトリのリストを表示します。

$ rpmdev-setuptree
tree ~/rpmbuild/

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

  1. BUILD – パッケージがビルドされるときにさまざまな %buildroot ディレクトリを保存します。
  2. RPMS – アーキテクチャのサブディレクトリにバイナリRPMが含まれます。
  3. ソース – 圧縮されたソースアーカイブとパッチが格納されており、rpmbuildコマンドはここでそれらを探します。
  4. スペック – SPECファイルを保存します。
  5. SRPMS – バイナリRPMの代わりにソースRPMを格納します。

「Hello World」RPMの構築

このステップでは、Hello Worldプロジェクトのソースコード(「アップストリーム」ソースとも呼ばれます)を、次のwgetコマンドを使用して~/rpmbuild/SOURCEディレクトリにダウンロードする必要があります。

$ cd ~/rpmbuild/SOURCES
wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz -P ~/rpmbuild/SOURCES

次に、rpmdev-newspecプログラムを使用して、~/rpmbuild/SPECSディレクトリに.specファイル(この場合はhello.specと名付けます)を使用してRPMパッケージを設定しましょう。

$ 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内で作業する数値。
  • 概要 - パッケージの簡潔な一行説明であり、最初の文字は大文字にして、rpmlintの苦情を避けるべきです。
  • ライセンス – ソフトウェアのライセンス状況をソースファイルやそれらのLICENSEファイルを調べること、または著者に話すことで確認してください。
  • URL – ソフトウェアパッケージのホームページを指定します。
  • Source0 – ソースファイルを指定します。それは直接のURLまたはソフトウェアの圧縮ソースコードのパスである可能性があります。
  • BuildRequires – ソフトウェアをビルドするために必要な依存関係を指定します。
  • 要件 – ソフトウェアを実行するために必要な依存関係を指定します。
  • %prep – rpmパッケージをビルドするための環境を作成するために使用されます。
  • %build – ソースコードをコンパイルし、ビルドするために使用されます。
  • %install – これはプログラムをインストールするために使用されます。ビルドプロセスから結果ファイルをBUILDROOTディレクトリにコピーするために必要なコマンドを列挙します。
  • %files – このセクションでは、パッケージによって提供されたファイルがリストされており、それらはシステムにインストールされます。
  • %changelog – RPMの作成作業を保存する必要があります。特に、ベースのアップストリームソースにセキュリティおよびバグパッチが含まれている場合は特に重要です。これは、hello.specファイルを作成する際に自動的に生成されます。changelogデータは通常、rpm --changelog -q <packagename>によって表示されます。

今、あなたの .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} – は、specファイルの%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プログラムを使用して、作成されたspecファイルと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 パッケージを作成する方法も示しました。質問やコメントがある場合は、下のフィードバックフォームを使用してご連絡ください。

関連記事: