5.

DEB(.deb)とは — Debian/Ubuntu の標準パッケージ形式

編集
この記事の要点
  • DEB (.deb) は Debian/Ubuntu/Mint など Debian 系 Linux のパッケージ形式
  • 実体は ar アーカイブ + 内部に control.tar.gz(メタ情報)と data.tar.xz(実ファイル)
  • 低レベルツール dpkg -i pkg.deb / 依存解決込みの高レベル apt install ./pkg.deb
  • debian/control でパッケージ名・依存・メンテナを宣言、postinst/prerm でフックスクリプト
  • 署名は SecureApt(リポジトリ Release.gpg の GPG 署名)で検証

要点

  • DEB(.deb)は、Debian および Debian 系ディストリビューション(Ubuntu、Linux Mint、Raspberry Pi OS など)で用いられるバイナリパッケージ形式
  • 実体は Unix の ar アーカイブで、内部に debian-binarycontrol.tar.*data.tar.* の三つのメンバを持つ。
  • 低レベルでは dpkg、高レベル(依存関係解決付き)では apt / apt-get / aptitude が扱う。
  • 厳密なメタデータ(control)と依存関係グラフによって、システム全体の整合性を保つ仕組みが組み込まれている。

概要

DEB は 1993 年に Ian Murdock が始めた Debian プロジェクトとともに整備された、Linux 黎明期から続くソフトウェア配布の標準形式のひとつである。Ubuntu の急速な普及により、現在では世界で最も広く使われているパッケージ形式と言ってもよい。

DEB ファイルは「ソフトウェア本体のファイル群」と「インストールに必要なメタデータ・スクリプト」を一つのアーカイブにまとめたものであり、対応するパッケージマネージャに渡せば、配置先のパス、所有者、パーミッション、依存パッケージの解決まで自動で行われる。

同種の形式である RPM(.rpm) と比較されることが多いが、設計思想・ツール体系ともに大きく異なる。詳細は「関連形式との比較」で扱う。

内部構造

DEB は Unix ar アーカイブであり、file コマンドで見ると Debian binary package (format 2.0) と表示される。ar t package.deb で内容を一覧でき、典型的には次の三つのメンバが含まれる。

  • debian-binary — フォーマットバージョン(通常は 2.0)を書いたテキストファイル
  • control.tar.{gz,xz,zst} — メタデータ群。control(パッケージ名・バージョン・依存・説明)、md5sumspreinst / postinst / prerm / postrm(インストール前後・削除前後に走るシェルスクリプト)など
  • data.tar.{gz,xz,zst} — 実際にシステムへ展開されるファイル群(/usr/bin//usr/share/ などのパスを含むディレクトリツリー)

control ファイルの中身は RFC 822 風の「キー: 値」形式で、次のようなフィールドを持つ。

Package: hello
Version: 2.10-2
Architecture: amd64
Maintainer: Example <dev@example.org>
Depends: libc6 (>= 2.34)
Description: The GNU Hello program
 produces a familiar, friendly greeting.

圧縮アルゴリズムは時代とともに gzipxzzstd と移ってきており、Debian 12 / Ubuntu 24.04 では zstd の採用が広がっている。

主な用途

  • OS 標準ソフトウェアの配布 — apt リポジトリにある数万のパッケージはすべて DEB 形式。
  • サードパーティ製アプリの配布 — Google Chrome、Slack、VS Code、Zoom などはベンダーが .deb を直接配布している。
  • 自社製品のインストーラ — 業務システム、エージェント、ドライバなど、Debian/Ubuntu サーバへ配布するための公式手段。
  • 独自リポジトリ運用repreproaptly でプライベート apt リポジトリを構築し、CI で生成した .deb を配信する運用が広く行われている。

関連形式との比較

  • vs RPM — RPM が cpio + ヘッダ構造なのに対し、DEB は ar + 二つの tar というシンプルな入れ子。メタデータ形式も RPM は専用バイナリヘッダ、DEB はテキスト。dpkg と rpm でデータベースの持ち方も異なる(dpkg は /var/lib/dpkg/status のテキスト DB)。
  • vs AppImage — AppImage は 1 ファイル完結でディストリ非依存、システムへの統合は最小限。DEB はシステムに「インストール」する形式で、依存関係を OS と共有する。
  • vs Snap / Flatpak — Snap / Flatpak はサンドボックス化された配布形式。DEB はサンドボックスなしで、システム全体の信頼境界に入る。
  • vs アーカイブ・圧縮形式 — 単なる tar.xz と異なり、DEB はメタデータ + ライフサイクルスクリプトを内包する点が決定的に違う。

コマンド・ツール

  • dpkg -i package.deb — 単一の .deb をインストール(依存は解決しない)
  • dpkg -I package.deb — control 情報の表示
  • dpkg -c package.deb — 含まれるファイル一覧
  • dpkg -L <pkg> — インストール済みパッケージのファイル一覧
  • dpkg -S /path/to/file — どのパッケージに属するか逆引き
  • apt install ./package.deb — 依存解決込みでローカル .deb をインストール(apt 1.1 以降)
  • apt-get update / upgrade / install — リポジトリ経由の通常運用
  • dpkg-deb -b builddir package.deb — ディレクトリから .deb を組み立てる(個人ビルド用)
  • debuild / dpkg-buildpackage — 公式ルールに従って .deb を生成する(メンテナ向け)
  • lintian package.deb — Debian Policy への準拠を機械チェック

注意点

  • 依存地獄を避けるdpkg -i だけだと依存が落ちて壊れた状態になりうる。apt -f install で復旧する流れを覚えておくと安心。
  • ディストリビューションとアーキテクチャの一致。Ubuntu 22.04 用 .deb を 18.04 へ入れると glibc バージョンの違いでクラッシュすることがある。amd64 / arm64 / armhf の取り違えにも注意。
  • postinst スクリプトはルート権限で走るアーカイブ・圧縮形式と違って、信頼できる配布元からのみインストールすること。ベンダー配布の .deb は必ず公式サイト・公式 GPG 鍵で署名検証する。
  • サードパーティリポジトリの放置に注意。/etc/apt/sources.list.d/ に追加した古い PPA がディストリアップグレード時に競合を起こすことがあるので、不要になったら削除する。
  • ファイル名規約<name>_<version>_<arch>.deb。アンダースコア区切りであり、ハイフン区切りの RPM と紛らわしいので注意。

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. EXE(.exe)
  2. DLL(.dll)
  3. MSI(.msi)
  4. DMG(.dmg)
  5. DEB(.deb)
  6. RPM(.rpm)
  7. APK(.apk)
  8. IPA(.ipa)
  9. AppImage(.appimage)
  10. app(.app)