rpmbuildとは?初心者向けRPMパッケージ作成の基本ガイド共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
rpmbuildとは?初心者向けRPMパッケージ作成の基本ガイド共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)


rpmbuildとは何かを理解するための基本

rpmbuild は Linux の RPM パッケージを作るためのツールです。RPM は Red Hat Package Manager の略で、Red Hat 系のディストリビューションでソフトウェアを配布する標準的な形式です。rpmbuild を使うとソースコードから実行ファイルを含む .rpm ファイルを作成できます。

rpmbuild を正しく使うには SPEC ファイル の仕組みを知ることが大切です。SPEC ファイルはパッケージの名前やバージョン、ビルド方法、ファイルの配置などを記述する設計図のようなものです。SPEC ファイルにはヘッダ部分と呼ばれる情報と実際のビルド手順を記述するセクションがあり、%prep%build%install%files などの区分が現れます。

rpmbuild を使う前に、開発用のツールをインストールします。代表的なパッケージは rpm-buildrpmdevtools です。 Fedora や CentOS/RHEL では次のようにインストールします。
初心者はまずビルドツリーを作るところから始めます。

実際の環境では以下のようなコマンドを実行しますが、ここでは流れを理解することを目的とします。
dnf install rpm-build rpmdevtools redhat-rpm-config

SPEC ファイルの役割と基本構造

SPEC ファイルは NameVersionReleaseSummaryLicense などのヘッダ情報と、ビルドの手順が入っています。%description%prep%build%install%files が代表的な区分です。これらを組み合わせることで、ソースコードを受け取り適切な場所にファイルを配置し、実行可能な RPM を作る仕組みが完成します。

実際の手順の流れ

初心者が rpmbuild を使い始める一般的な流れは以下の通りです。まずビルド環境を整える、次にソースコードと SPEC ファイルを準備し、最後にビルドして出力物を確認します。

1) ビルド環境を作る: rpmdev-setuptree を実行すると ~/rpmbuild/SOURCES、~/rpmbuild/SPECS、~/rpmbuild/BUILD などのディレクトリが自動で作成されます。
2) ソースを sources に置く: 対象のソースコードや補助ファイルを ~/rpmbuild/SOURCES に入れます。
3) SPEC ファイルを SPECS に置く: パッケージ名に対応する .spec ファイルを作成しておきます。
4) ビルドを実行する: rpmbuild -ba SPECS/yourpkg.spec を実行します。
5) 出力物を確認する: ビルドが成功すると RPMS/ および SRPMS/ に rpm ファイルが作成されます。

よくあるトラブルと対処のヒント

ビルド依存関係が足りない というエラーが出ることがあります。この場合は SPEC ファイルに記載されている BuildRequires のパッケージをインストールしてください。
ファイルが見つからないパスが違う などは SPECS ディレクトリとファイル名、SOURCES のファイル名を再確認しましょう。
クリーンな環境でビルドしたい 場合は mock を使うと良いです。mock は仮想環境でクリーンなビルドを再現します。

実用的なコマンド一覧表

コマンド目的説明
rpmdev-setuptreeビルド環境を作成rpmbuild が使うディレクトリ構造を作成します
rpmbuild -ba SPECS/pkg.specパッケージをビルドソースを取り込み実体の rpm を作成します
rpmbuild --showrc設定を確認rpmbuild の現在の設定を表示します

初心者向けの実践ケース

実際のケースとして小さなソフトウェアを rpm 化する場合、まずは ビルドツリーの作成、次に SPEC ファイルの作成、そして ビルド実行という流れを辿ります。最初は失敗することも多いですが、失敗の原因を読む力を養うことが大切です。公式ドキュメントやコミュニティの情報を読み解く習慣をつけると、次第に自分で修正できるようになります。

まとめ

rpmbuild は RPM パッケージを作るための基本ツールであり、 SPEC ファイルを軸にソースコードをビルドしてパッケージ化します。初心者は rpm-build と rpmdevtools の導入から始め、SPECS ディレクトリに SPEC ファイルを置いて rpmbuild -ba でビルドする流れを覚えるのがコツです。この記事の手順と表を参考に、まずは小さなサンプルから挑戦してみましょう。


rpmbuildの同意語

rpmbuild
RPMパッケージをビルドするための主要コマンド。SPECファイルとソースを基に、.rpm形式のパッケージを作成する核となるツールです。
RPMビルド
RPM形式のパッケージを作るためのビルド作業全般を指す日本語表現です。rpmbuildを含むビルドプロセスの総称として使われます。
RPMパッケージのビルド
RPMパッケージを作成する過程のこと。ソースとSPECからバイナリRPMやソースRPMを生成する一連の作業を含みます。
RPMパッケージ作成
RPMパッケージを作ること全体を指す表現。ビルドだけでなく、パッケージの検証や署名なども含むことがあります。
rpmビルドツール
RPMパッケージを作るためのツール群の総称。rpmbuildを代表例として挙げられます。
SPECファイルからのビルド
SPECファイルに定義された手順に従ってパッケージを作ること。rpmbuildの中心的なワークフローの一部です。
Red Hat系パッケージのビルド
Red Hat系ディストリビューション向けのRPMパッケージを作成することを指す表現です。
RPMパッケージの作成プロセス
ビルド、検証、署名、配布用RPMの生成など、一連の作業フローをまとめて指します。
RPMビルドコマンド
rpmbuildを指す日本語表現。RPMパッケージを作るためのコマンド名です。
バイナリRPMの生成
ビルドの結果として得られる実行可能なRPMパッケージ(バイナリ形式)を作る作業です。
ソースRPMの生成
ソースコードを含むRPM(ソースRPM)を作る過程。ソース配布用のパッケージを作成します。
rpmパッケージング作業
パッケージ化全般の作業。ビルド、パッチ適用、仕様整理、署名などを含む広義の表現です。

rpmbuildの対義語・反対語

プリビルド済みバイナリの利用
rpmbuildの対義語として、ビルド工程を省略し、既にビルド済みのRPMパッケージを使用する行為。例: リポジトリから直接rpmを取得してインストールする。
ビルドを省略する
パッケージを新規に作成せず、ビルドを飛ばす選択。既存のRPMを使うか、そもそもビルドを必要としない環境を指す。
既存RPMのインストール・適用
新規ビルドをせず、既存のRPMをそのまま導入する行為。
ソースからのビルドを回避する
ソースコードからのビルド手順を実行せず、バイナリ型のパッケージを利用すること。
パッケージを作成しない
新しいRPMパッケージを生成する作業を行わないこと。
ビルド不要
特定の状況でビルドが不要とされる状態。
リース済みバイナリの再利用
公開済みのRPMを再利用して導入することで、再ビルドを回避すること。

rpmbuildの共起語

SPECファイル
rpmbuildが参照する仕様書。パッケージの名前・バージョン・ビルド手順・ファイルリストなどを記述する。
SRPM(ソースRPM)
ソースコードとビルド情報を含むRPMパッケージ。rpmbuild -bs で作成されることが多い。
バイナリRPM
実行可能なファイルを含むRPMパッケージ。rpmbuild -ba や -bb の出力として作成される。
ソースRPM
SRPMと同義。ソースとビルド情報を含むRPMパッケージ。
Source0
SPECファイルで指定する最初のソースアーカイブ。通常は tarball や zip ファイルの名前を指す。
SourceN
複数のソースファイルを参照する Source1, Source2 などの表記。
Patch0
ソースに適用する最初のパッチファイル。%patch で適用されることが多い。
PatchN
複数のパッチファイルを順に適用する Patch1, Patch2 などの表記。
BuildRequires
ビルド時に必要な依存パッケージ。これが揃わないとビルドは進まない。
Requires
実行時に必要な依存パッケージ。パッケージが動作するために必要なもの。
Provides
このパッケージが提供する仮想機能の識別子。他のパッケージとの依存解決に使われる。
Version
ソフトウェアのバージョン情報。
Release
リース番号。ビルドごとの識別子。
Summary
パッケージの簡易説明。短文で要約を記述する。
License
ライセンス情報。例: MIT、GPLv3 など。
%prep
ソースの展開・パッチ適用など、ビルド前の前処理を記述する SPEC のセクション。
%build
実際のビルド手順を記述する SPEC のセクション
%install
ビルド成果をビルドルートにインストールする手順を記述するセクション。
%files
最終的にパッケージに含めるファイルのリストを記述するセクション。
BuildRoot
ビルド中に使われる一時的なルートディレクトリ。
rpmbuild -ba
ソースパッケージとバイナリパッケージの両方を作成する代表的なコマンド。
rpmbuild -bb
バイナリパッケージのみを作成するコマンド。
rpmbuild -bs
ソースパッケージのみを作成するコマンド。
--define
マクロを定義してビルドをカスタマイズするオプション。
--clean
ビルド後に一時ファイルを削除するオプション。
--target
ビルド対象のアーキテクチャを指定するオプション(例: x86_64)。
Signature
パッケージに署名する機能。署名には GPG が使われることが多い。
rpmlint
ビルド後の RPM の品質チェックツール。形式・規約違反を検出する。
rpmdev-setuptree
RPMビルド用のディレクトリ構成を自動作成する補助ツール。
mock
クリーンな環境で RPM をビルドするツール。rpmbuild の代替・補助として使われることがある。
BuildArch
ビルド対象の CPU アーキテクチャ。x86_64 など。
SourceX
Source0, Source1 など、複数ソースの参照用の表現。
PatchX
Patch0, Patch1 など、複数パッチの参照用の表現。

rpmbuildの関連用語

rpmbuild
RPMパッケージを作成するためのビルドツール。SPECファイルを元にソースを展開・ビルド・インストールしてRPMを作成します。
RPM
Red Hat Package Manager の略。Red Hat系ディストリビューションで使われるパッケージ形式とパッケージ管理の仕組み
SPECファイル
拡張子 .spec のファイルで、パッケージ名・バージョン・依存関係・ビルド手順などを定義します。
Source
ソースコードのアーカイブ。Specファイル内で Source0 などとして指定します。
Source0
Specファイルで最初に指定するソースファイルの名称。通常は主要なソースアーカイブです。
Patch
ソースに適用する修正ファイル。複数ある場合は Patch0, Patch1 などと番号を付けます。
Patch0
最初のパッチファイルの名称。
BuildRequires
ビルド時に必要な依存パッケージ。これが満たされていないと rpmbuild が失敗します。
Requires
実行時に必要となる依存パッケージ。インストール後の動作に必要です。
Provides
このパッケージが提供する仮想的な機能名。別パッケージがこれを満たすことで依存を解決します。
Obsoletes
このパッケージが他のパッケージを置換することを示します。
Conflicts
他のパッケージと同時にインストールできない関係。
BuildRoot
ビルド中に使用される一時的なルートディレクトリ。ビルド成果物はここに作成されます。
_topdir
rpmbuild の作業ディレクトリのトップ。SPECS と SOURCES が配置されます。
SPECS
Spec ファイルを格納するディレクトリ。
SOURCES
ソースファイルとパッチを格納するディレクトリ。
SRPM
Source RPM。ソースとパッチを含む RPM。配布時に使用されます。
Binary RPM
ビルドして得られる実行用の RPM パッケージ。
Source RPM
Source RPM の別表現。ソースとパッチを含むパッケージ。
%prep
spec のセクションの1つ。ソースの展開・パッチ適用などの準備を行います。
%build
実際のビルドを行うセクション。コンパイルやリンクを実行します。
%install
ビルド成果物をビルドルートへインストールするセクション。
%files
パッケージに含めるファイル一覧を定義するセクション。
%description
パッケージの長い説明を記述するセクション。
%summary
パッケージの要約を記述するセクション。
%license
ライセンス情報を記述するセクション。
%changelog
変更履歴を記述するセクション。
%package
新しいサブパッケージを定義するセクション。
Subpackage
メインパッケージ以外の追加パッケージを作成する仕組み。
rpmlint
RPMパッケージの品質を検査する静的解析ツール。
rpmdevtools
RPMパッケージ作成を補助するツール群(テンプレート作成や検査など)。
mock
クリーンなビルド環境を再現してビルドするツール。
Koji
Fedora/RHEL 系の公式ビルドシステム。大規模ビルドを管理します。
Copr
個人・組織が公開用に RPM をビルド・配布するサービス
rpmbuild options
rpmbuild のコマンドラインオプション群。
-ba
ソースとバイナリの両方をビルドするオプション。
-bb
バイナリのみをビルドするオプション。
-bp
prep ステージのみを実行するオプション。
-bc
build ステージのみを実行するオプション。
BuildArch
ビルド対象のアーキテクチャ(例: x86_64)。
Epoch
バージョン番号の前につく整数の段階。
Version
パッケージのバージョン番号。
Release
同一 Version の中のリリース番号。
SourceX
Source0 以外の追加ソースファイルを指定する際の名称。
%autosetup
自動的にソースを展開しパッチを適用する便利なマクロ
%setup
ソース展開を行うマクロ。
Debuginfo
デバッグ情報を格納するサブパッケージ。
-doc
ドキュメント用サブパッケージ。
rpmsign
RPM に署名を付与するツール(パッケージ署名)。
GPG signing
署名用の公開鍵暗号。パッケージ署名に使用されます。

rpmbuildのおすすめ参考サイト


インターネット・コンピュータの人気記事

awstatsとは?初心者でもわかる使い方と基本解説共起語・同意語・対義語も併せて解説!
14446viws
bing・とは?初心者のための基本ガイド:検索エンジンの仕組みと使い方共起語・同意語・対義語も併せて解説!
2406viws
着信転送とは?初心者向けガイドで分かる使い方と設定のコツ共起語・同意語・対義語も併せて解説!
1067viws
差し込み印刷・とは?初心者でもすぐわかる使い方と仕組みガイド共起語・同意語・対義語も併せて解説!
1026viws
com端子・とは?初心者にも分かる基礎ガイド|シリアルポートの使い方と歴史を解説共起語・同意語・対義語も併せて解説!
928viws
充電アダプターとは何かを徹底解説|初心者でも分かる基本と選び方のコツ共起語・同意語・対義語も併せて解説!
895viws
全角文字とは?初心者向け解説|全角と半角の違いをやさしく学ぶ共起語・同意語・対義語も併せて解説!
831viws
7zファイル・とは?初心者でもわかる使い方と特徴を解説共起語・同意語・対義語も併せて解説!
830viws
pinロックとは?初心者が知っておくべき基本と使い方ガイド共起語・同意語・対義語も併せて解説!
793viws
リマインドメールとは?初心者にもわかる基本ガイドと使い方のコツ共起語・同意語・対義語も併せて解説!
780viws
none とは?初心者にもやさしく解説する意味と使い方ガイド共起語・同意語・対義語も併せて解説!
714viws
16進数カラーコード・とは?初心者でもつまずかない基礎と使い方ガイド共起語・同意語・対義語も併せて解説!
688viws
xlsmとは?初心者でも分かるExcelのマクロ付きファイルの基本共起語・同意語・対義語も併せて解説!
588viws
asp・とは?初心者向けに徹底解説する基本と使い方ガイド共起語・同意語・対義語も併せて解説!
568viws
ローカルポート・とは?初心者にも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
562viws
countifとは?初心者でもすぐ使える基本と応用ガイド共起語・同意語・対義語も併せて解説!
547viws
ワンタイムコード・とは?初心者でも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
510viws
csvダウンロードとは?初心者が今すぐ使える基本ガイド共起語・同意語・対義語も併せて解説!
491viws
sha256とは?初心者が知るべき暗号ハッシュの基礎と使い道共起語・同意語・対義語も併せて解説!
471viws
googleドキュメントとは?初心者が今日から使いこなす基本ガイド共起語・同意語・対義語も併せて解説!
468viws

新着記事

インターネット・コンピュータの関連記事