| この記事の要点 |
|
概要
RPM は 1997 年に Red Hat Linux 2.0 で導入され、以降 Linux のエンタープライズ領域における事実上の標準として広く普及した。DEB と並ぶ「Linux 二大パッケージ形式」の一翼を担う存在で、特に商用ディストリ(RHEL、SLES など)のサポート対象範囲を決める根拠となっている。
DEB がテキストメタデータとシェルスクリプト中心の設計なのに対し、RPM は強くスキーマ化されたバイナリヘッダを持ち、トランザクション処理や GPG 署名検証、ファイル単位の SHA256 検証などをパッケージマネージャ側に組み込んでいる点が特徴である。
内部構造
RPM ファイルは 4 つのセクションから構成される。
- Lead — 96 バイトの固定長ヘッダ(古い RPM との互換用、現在ほぼ識別用途のみ)
- Signature — GPG 署名や SHA-256 ハッシュなど、整合性確認のためのブロック
- Header — パッケージ名・バージョン・依存・提供・スクリプトなど、すべてのメタデータが「タグ ID + 型 + 値」形式で並ぶバイナリ表現
- Payload — 実体ファイル群。
cpioアーカイブをgzip/xz/zstdで圧縮したもの
ビルドの起点となる spec ファイルは、ソースをどう取得し、どうコンパイルし、どこへインストールし、どんなメタデータを付けるかを宣言的に記述する。最小例は次のような形になる。
Name: hello
Version: 2.10
Release: 1%{?dist}
Summary: GNU Hello
License: GPLv3+
URL: https://www.gnu.org/software/hello/
Source0: %{name}-%{version}.tar.gz
BuildRequires: gcc, make
%description
The GNU Hello program produces a familiar, friendly greeting.
%prep
%setup -q
%build
%configure
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
%files
%{_bindir}/hello
%{_mandir}/man1/hello.1*
「.src.rpm」と呼ばれるソース RPM は、spec とソース tarball、パッチを一つにまとめたもので、これがあれば同一バイナリ RPM を再生成できる(再現可能ビルドの基礎)。
主な用途
- エンタープライズ Linux のパッケージ管理 — RHEL の数万 RPM が
dnfを介して提供される。 - 商用ソフトの配布 — Oracle Instant Client、IBM 製品、各種商用エージェントは RPM 配布が一般的。
- ベンダーリポジトリ — EPEL、RPM Fusion、Remi、Microsoft、Docker、HashiCorp などが独自リポジトリを公開している。
- 社内パッケージ運用 —
createrepo_cでメタデータを生成し、HTTP/S3 上に置けば社内 yum/dnf リポジトリになる。
関連形式との比較
- vs DEB — DEB は
ar+ tar、メタデータはテキスト。RPM は cpio + バイナリヘッダ、署名やトランザクションが標準。dnf 側はトランザクション履歴(dnf history)でロールバック可能。 - vs AppImage — AppImage はシステムに統合しないポータブル形式。RPM は OS と依存を共有する正攻法のインストール手段。
- vs Flatpak — Flatpak はランタイム + サンドボックス前提。RPM はシステム本体への配置で、よりカーネル/glibc 結合度が高い。
- vs MSI — どちらも宣言的なインストール定義(spec / Windows Installer データベース)を持つが、RPM は spec ファイルがテキスト、MSI は MSI データベース(実体は アーカイブに近い構造)。
コマンド・ツール
rpm -ivh package.rpm— インストール(i=install、v=verbose、h=hash 進捗)rpm -Uvh package.rpm— アップグレード(既存があれば置き換え、なければインストール)rpm -e <name>— 削除rpm -qa— インストール済み一覧rpm -qi <name>— 詳細情報rpm -ql <name>— 含まれるファイル一覧rpm -qf /path/to/file— ファイルの所属パッケージ逆引きrpm -V <name>— インストール後の改変チェック(SHA256・パーミッション・所有者など)rpm --checksig package.rpm— GPG 署名検証dnf install / update / remove / history— 依存解決とトランザクション履歴管理rpmbuild -ba foo.spec— spec から RPM をビルドmock/koji— クリーンな chroot 内での公式ビルド環境
注意点
- GPG 鍵のインポートと検証を必ず行う。野良 RPM をルート権限でインストールするのは EXE の出所不明実行と同等に危険。
- ディストリビューションとメジャーバージョン依存が強い。RHEL 8 用 RPM を RHEL 7 に入れると glibc / Python のバージョン違いで動かない。
- 古い
--force/--nodepsは最後の手段。依存を強引にねじ込むとrpmデータベース(/var/lib/rpm)が壊れる事故が起きやすい。 - RPM データベース破損時は
rpm --rebuilddbで再構築する。バックアップを取ってから実施するのが望ましい。 - ファイル名規約は
<name>-<version>-<release>.<arch>.rpm。DEB がアンダースコア区切りなのに対し RPM はハイフン区切り。間違えやすい。
関連リンク
- 実行ファイル・パッケージ(親カテゴリ)
- ファイル拡張子とは(概論)
- DEB(.deb)(Debian 系の対抗形式)
- AppImage(.appimage)(Linux ポータブル配布)
- MSI(.msi)(Windows Installer パッケージ)
- DMG(.dmg)(macOS 配布イメージ)
- アーカイブ・圧縮形式(payload は cpio + xz/zstd)
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09