パッケージ管理システム (パッケージかんりシステム)、またはパッケージマネージャとは、コンピュータ のプログラム を一貫した方法でインストール やアンインストール 、ライブラリ などの依存関係を解決する流れをツールによって管理を自動化するシステムである[1] [2] 。
Synaptic Package Manager
パッケージ管理システムが定める方式で、ソースまたはバイナリをひとつのパッケージファイルにまとめる[注釈 1] 。このパッケージにはソフトウェア名、説明、バージョンナンバー 、ベンダー 、チェックサム 、ソフトウェアが正常に動作するよう依存関係のリストなどがまとめられたメタデータ を含んでいる。メタデータはパッケージをツールでインストールした際にローカルのデータベースに保存する。ツールはソフトウェアの整合性や前提条件の欠落を防ぐために、依存関係とバージョン情報のデータベースを維持する。
1994年頃にはdpkg のようなパッケージ管理システムが存在していた[3] 。1995年に登場したCPAN は、リポジトリからパッケージをダウンロードし、依存関係を解決するなどの機能が備わっていた[4] 。
以下はパッケージ管理システムの典型的な機能である。ただし、必ずしもすべての機能が備わっているとは限らない。
リポジトリの購読
インターネット 上(やインストールCD上)のパッケージリポジトリ を指定して、必要に応じてローカルのパッケージリストを更新する。また、パッケージ名や説明を検索して必要なパッケージを探すことができる。
ソフトウェアパッケージのインストール・削除
パッケージ名やパッケージファイルを指定してソフトウェアのダウンロードや完全性の検証、インストール をすることができる。ソースコード や設定ファイルをパッケージ化して、インストールすることができる。設定ファイルなどを完全に削除することもできる。
依存関係の解決
あるパッケージに必要なソフトウェアを自動的にインストールしたり更新することができる。また、同時にインストールまたは更新できないソフトウェアパッケージのインストールや更新を回避できる。
設定管理
パッケージの設定スクリプトを使って、自動的に設定を行える。競合する機能をもつソフトウェアで、どちらを優先して使うかを設定できる。
OSになんらかのソフトウェアを追加インストールする場合には、ソフトウェアに関係するファイル一式をまとめた「パッケージ」が利用される。パッケージの形式は複数あるが、利用される形式はOSによって限定されることが多い。
Debian系
パッケージ管理システムの自動更新機能。 図は、アップデート・マネージャ(update-manager)の画面。
dpkg deb形式パッケージを対象としたDebian GNU/Linuxで開発されたツール。
APT deb形式を対象として開発された、dpkgの高機能フロントエンド。apt-getやapt-cache等の複数のコマンドから成る。配布パッケージの自動入手先として、インターネット 、LAN 、CD-ROM 等をapt-lineとして複数指定することができる。追加インストールのほか、導入済パッケージのアップデート作業も自動処理できる。Debianから派生したディストリビューションでは、それぞれ個別のapt-lineを用意していることが多い。
aptitude TUI 上で動くメニュー形式のツール。内部的にAPTを呼び出す仕組みで、DebianのOSインストール中にも、aptitudeが呼び出されるようになっている。
synaptic GUI(X Window System )上で動くメニュー形式のツール。内部的にAPTを呼び出し処理する。
apt-watch / update-manager GUI上で動く、自動更新アプレット。レッドハット のパッケージ管理ツールである RHN と類似した機能を有することが特徴である。内部的に APT を呼び出し処理する。
Red Hat系
RPM rpm形式パッケージを対象とした Red Hat Linux で開発されたツール。単純なインストールのほか、src.rpm形式やnosrc.rpm形式 + ソースアーカイブなどを使って、ソースからのリビルドを行いrpmパッケージを生成する機能もある。以下のパッケージ管理ツールはいずれも RPM を置き換えるものではなく、RPMをバックエンドとして利用し、より高度な機能を提供している。
apt-rpm、aptitude、synaptic 本来deb形式対応のこれらのツールは RPM 対応版が作成され、Fedora や Vine Linux 等で利用されている。
TurboPackage rpm形式パッケージを対象としたTurbolinuxで開発されたツール。
up2date rpm 形式パッケージを対象にしたレッドハットのパッケージ管理ツール。同社のRed Hat Enterprise Linux (バージョン4まで)で採用されている。Fedora の古いバージョンでも採用されていた。
Yum rpm 形式パッケージを対象としたYellow Dog Linux で開発されたツール。Red Hat Enterprise LinuxやCentOS などで標準として採用されている。Fedoraではバージョン21まで標準で採用されていた。
DNF rpm 形式パッケージを対象としたYumからフォーク して開発されたツール。Fedoraではバージョン22より標準として採用された。
rPath系
Conary Conary はForesight Linux やrPath Linux により採用され、RPM、CVS 、Portage などの優れた点を集め、さらにいくつか優れた機能を追加し、明解なリビジョン・コントロールを行う先進的な次世代パッケージ管理システムである。Conary はアップデートされる必要があるパッケージにおいて、特定のファイルのみをアップデートするので、RPMやdebなどパッケージ全体がダウンロードされる他のフォーマットよりも効率的である。
Gentoo Linux
Gentoo Linux では原則として、ソフトウェアをソースコードからコンパイルしてインストールするようになっている。そのため、最適化された効率的で高速なシステムを構築可能である。しかし、コンパイルするために多くの時間と演算処理を要する。
インストールするソフトウェア自体は公式のものかミラーサイト からダウンロードするため、Gentoo Linuxにおけるパッケージの本体部分は、インストール手順が書かれたBash スクリプト である。
Mozilla Firefox やLibreOffice などはコンパイルに時間がかかるため、バイナリ パッケージも用意されている。Adobe Flash やGoogle Chrome などのプロプライエタリソフトウェア も、公式に配布されているバイナリファイルをダウンロードしてインストールすることが可能なようになっている。
Gentoo Linuxのパッケージ管理システムは当初はPortage のみであったが、現在では規格として標準化されているため、承認されたパッケージ管理システムが複数あり、そのいずれかを使用することになる。
Portage Gentoo Linuxのデフォルトのパッケージ管理システムである。プログラミング言語にはスクリプト言語 であるPython を採用して書かれている。FreeBSDのportsに着想を得て開発された。Gentoo Linuxの他にも、FreeBSDやmacOSにも移植されている。
Paludis Gentoo Linuxから派生したディストリビューションであるExherbo Linuxのパッケージ管理システムであり、Gentoo Linuxでも使用可能になっている。プログラミング言語には主にC++ が用いられている。
pkgcore Portageと互換性が高くこれに代替しうる、より効率的なパッケージ管理システムを目指してつくられた。主にPythonで書かれている。
openSUSE
YaST rpm 形式パッケージを対象としたSuSE Linux で開発されたツール。YaSTは単なるパッケージ管理ツールではなく、統合的なシステム管理ツールである。
ZYpp 充足可能性問題 の解決に焦点を当てて開発されたパッケージ管理システム。
Slackware
pkgtool Slackware 標準のパッケージ管理ツール。APTやYumと比較して極めてシンプルなツールであり、バージョン管理は行えない。
slackpkg Slackwareで使用できるパッケージ管理ツール。標準ではインストールされない。Slackware標準パッケージしか扱えないものの、インストールすればAPTやYumのようなバージョン管理をSlackwareで実現することができる。
sbopkg Slackware用リポジトリ、SlackBuilds.org 用のパッケージ管理ツール。上記のとおり、slackpkgではサードパーティー パッケージを扱えないため、独自に提供されている。
Arch Linux
pacman Arch Linux 向けに開発されたパッケージ管理ツール。コンパイル済みバイナリとパッケージ情報を含んだ独自の.pkg.tar.zstフォーマットを用いる。プログラミング言語はC が用いられている。
ディストリビューション非依存
nix Debian、openSUSE 、Fedora等多数のディストリビューションに対応した環境非依存型パッケージ管理ツール。既存環境の依存関係に関わりなくサードパーティー製ソフトウェアをインストールできるうえ、旧来のパッケージ管理ツールでは実現できなかった同一ソフトウェアの複数バージョン共存が実現できる。
Snap カノニカル による、サンドボックス 技術を利用したディストリビューション非依存なパッケージ管理ツールおよびシステム。クラウドやIoTでも利用でき、複数バージョンの共存やAppArmor を使ったアクセス制限も可能。Ubuntu で標準で利用できるが他の多くのディストリビューションで利用できる。
Flatpak GNOME 発の技術で、freedesktop.org のプロジェクトとして開発されている、サンドボックス技術を利用したディストリビューション非依存なパッケージ管理ツールおよびシステム。上記2種と同様に複数バージョンの共存が可能。Snapと違いデスクトップアプリケーション専用で、主要ディストリビューションで利用可。
FreeBSD
ports (英語版 ) 原則的にソースをコンパイルしてインストールするようになっている。このため、PCごとに命令 レベルで最適化された、処理効率として無駄の少ない環境を構築できる。ただし、インストールに長時間かかる。バイナリで用意されたパッケージをpkg(8)によりインストールすることもできる。ソースをコンパイルしたものとバイナリでインストールしたものとは単一のデータベースで統一管理されるようになっているため、それぞれのパッケージの性格に応じてソースからのコンパイルとバイナリインストールとを選択することが可能である。詳細はFreeBSD およびFreeBSD Ports (英語版 ) を参照。
NetBSD
pkgsrc 原則的にソースをコンパイルしてインストールするようになっている。このため、PCごとに最適化された、無駄の少ない環境を構築できる。ただし、インストールに長時間かかる。また、OS/CPU には依存せず、NetBSD 以外にもLinuxやmacOS、Solarisなどでも使える[6] 。
ここでは各パッケージ管理システムによるパッケージのインストール、アップデート、アンインストールといった基本コマンドの一例を比較する。
さらに見る ツール, インストール ...
基本的なコマンド比較(OSのパッケージ管理システムのみ)
ツール インストール アップデート アンインストール
APT[7] [8]
apt install <パッケージ名>
apt upgrade [ パッケージ名]
[注釈 2] [注釈 3]
apt remove <パッケージ名>
DNF / yum[9] [10]
dnf install <パッケージ名>
dnf update [ パッケージ名]
dnf remove <パッケージ名>
Homebrew[11]
brew install <パッケージ名>
brew update
brew remove <パッケージ名>
Nix[12]
nix-env -i <パッケージ名>
nix-env -u [ パッケージ名]
nix-env -e <パッケージ名>
Pacman[13]
pacman -S <パッケージ名>
pacman -Syu
pacman -R <パッケージ名>
ZYpp[14] [15]
zypper install <パッケージ名>
zypper update [ パッケージ名]
zypper remove <パッケージ名>
閉じる
プログラミング言語においては、プログラムのソースコードを管理するために、パッケージ管理システムが使われる。その性質からほとんどがソースコード形式で管理・配布されている。
Cargo CargoはRust 言語製ソフトウェアプロジェクト("crate" と呼ばれる)のCUIのビルドツールであり、パッケージ管理システムの機能をも持つ。Cargoの依存ライブラリのダウンロード先はcrates.io である[16] 。
Pub PubはDart 言語製ソフトウェアプロジェクトのCUIのビルドツールであり、パッケージ管理システムの機能をも持つ。Pubの依存ライブラリのダウンロード先はPub.dev である。
RubyGems RubyGemsはRuby 言語用のパッケージ管理システムであり、Rubyのプログラムと("gem" と呼ばれる)ライブラリ の配布用標準フォーマットを提供している。
GoMod GoModはGo 言語用のパッケージ管理システムであり、Goのプログラムと("mod" と呼ばれる)ライブラリ の配布用標準フォーマットを提供している。
pip Pythonの標準的なパッケージ管理システム。condaと違いマシン単位で依存パッケージを管理する。
Conda 科学計算のためのPythonプラットフォームAnaconda の一部として提供されているPythonパッケージ管理システム。
npm "Node Package Manager" 現在ではフロントエンドのパッケージも受け入れが進んでおり、登録されているパッケージ数は非常に多い。
BuildPod BuildPodはfantom 言語用のパッケージ管理システムであり、fantomのプログラムと("pod" と呼ばれる)ライブラリ の配布用標準フォーマットを提供している。
注釈
大半はアーカイブ 化、つまり圧縮された状態でまとめられる。
APTにおいては、apt update
がパッケージのアップデートを行うコマンドではない。
出典
“nix-env ” (英語). NixOS . 2022年2月27日 閲覧。