FedoraでGNUFello WorldRPMパッケージを作成する方法


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

この記事では、RPMファイルの記述について説明し、単純なソースおよびバイナリソフトウェアパッケージ(Fedora LinuxディストリビューションのGNU“ Hello World” RPMパッケージなど)を簡単に作成する方法を示します。事前に作成されたRPMパッケージと、無料のオープンソースソフトウェアの構築プロセスについて基本的な知識があることを前提としています。

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

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

$ sudo dnf install fedora-packager @development-tools

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

$ sudo usermod -a -G mock tecmint

次に、〜/ rpmbuild ディレクトリにRPMビルドを作成し、次のコマンドを使用してビルドを確認します。プロジェクトのソースコード、RPM構成ファイル、バイナリパッケージを含むサブディレクトリのリストが表示されます。

$ rpmdev-setuptree
$ tree ~/rpmbuild/

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

  1. BUILD – stores various %buildroot directories when packages are built.
  2. RPMS – will contain binary RPMs in sub-directories of Architecture.
  3. SOURCES – stores compressed source archives and any patches, this is where the rpmbuild command will look for them.
  4. SPECS – stores the SPEC files.
  5. SRPMS – stores the Source RPM instead of a Binary RPM.

「HelloWorld」RPMの構築

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

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

次に、rpmdev-を使用して、〜/ rpmbuild/SPECSディレクトリの .spec ファイル(この場合は hello.spec という名前を付けます)を使用してRPMパッケージを構成しましょう。 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 ファイルのデフォルトパラメータについて簡単に説明しましょう。

  • Name – used to set a name for the package.
  • Version – should mirror upstream.
  • Release – numbers you work within Fedora.
  • Summary – is a brief one-line description of the package, the first letter should be uppercase to avoid rpmlint complaints.
  • License – check the License status of the software by inspecting the source files and/or their LICENSE files, and/or by talking to the authors.
  • URL – specifies the home page of the software package.
  • Source0 – specifies the source files. It can be a direct URL or a path of the software’s compressed source code.
  • BuildRequires – specifies the dependencies needed to build the software.
  • Requires – specifies the dependencies needed to run the software.
  • %prep – is used to create the environment for building the rpm package.
  • %build – is used to compile and to build the source codes.
  • %install – this is used to install the programs. It lists command(s) to needed to copy the resultant file from the build process to the BUILDROOT directory.
  • %files – this section lists the files provided by the package, which will be installed on the system.
  • %changelog – should stores the work on preparing the RPM, especially if there are security and bug patches included on top of the base upstream source. It’s automatically generated while creating the hello.spec file. The changelog data is usually displayed by 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} – is used in the %build section of the spec file, it runs the make command.
  • %{name} – defines package or directory name.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, same as $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info, default: /usr/share/info
  • %{_mandir} – %{_datarootdir}/man, default: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, default: /usr/bin

これらのマクロの値は/ usr/lib/rpm/platform/*/macrosにあるか、Packaging Guidelines:RPMMacrosを参照してください。

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 WordRPMパッケージの作成方法も示しました。以下のフィードバックフォームを使用して、質問やコメントについてお問い合わせください。