Synaptic Package Manager
パッケージ管理システム (パッケージかんりシステム)、またはパッケージマネージャとは、コンピュータ のプログラム を一貫した方法でインストール やアンインストール 、ライブラリ などの依存関係を解決する流れをツールによって管理を自動化するシステムである[ 1] [ 2] 。
パッケージ管理システムが定める方式で、ソースまたはバイナリをひとつのパッケージファイルにまとめる[ 注釈 1] 。このパッケージにはソフトウェア名、説明、バージョンナンバー 、ベンダー 、チェックサム 、ソフトウェアが正常に動作するよう依存関係のリストなどがまとめられたメタデータ を含んでいる。メタデータはパッケージをツールでインストールした際にローカルのデータベースに保存する。ツールはソフトウェアの整合性や前提条件の欠落を防ぐために、依存関係とバージョン情報のデータベースを維持する。
1994年頃にはdpkg のようなパッケージ管理システムが存在していた[ 3] 。1995年に登場したCPAN は、リポジトリからパッケージをダウンロードし、依存関係を解決するなどの機能が備わっていた[ 4] 。
主な機能
以下はパッケージ管理システムの典型的な機能である。ただし、必ずしもすべての機能が備わっているとは限らない。
リポジトリの購読
インターネット 上(やインストールCD上)のパッケージリポジトリ を指定して、必要に応じてローカルのパッケージリストを更新する。また、パッケージ名や説明を検索して必要なパッケージを探すことができる。
ソフトウェアパッケージのインストール・削除
パッケージ名やパッケージファイルを指定してソフトウェアのダウンロードや完全性の検証、インストール をすることができる。ソースコード や設定ファイルをパッケージ化して、インストールすることができる。設定ファイルなどを完全に削除することもできる。
依存関係の解決
あるパッケージに必要なソフトウェアを自動的にインストールしたり更新することができる。また、同時にインストールまたは更新できないソフトウェアパッケージのインストールや更新を回避できる。
設定管理
パッケージの設定スクリプトを使って、自動的に設定を行える。競合する機能をもつソフトウェアで、どちらを優先して使うかを設定できる。
パッケージ形式
OSになんらかのソフトウェアを追加インストールする場合には、ソフトウェアに関係するファイル一式をまとめた「パッケージ」が利用される。パッケージの形式は複数あるが、利用される形式はOSによって限定されることが多い。
実行形式でないもの
以下のパッケージには、インストールされるデータ・依存関係のみが含まれており、OSに搭載されているパッケージ管理システムを用いることでインストールできる。
RPM 形式パッケージ
Red Hat Linux 用に開発されたパッケージ形式。Red Hat Enterprise Linux のほかTurbolinux やVine Linux 等でも利用される。
deb 形式パッケージ
Debian 用に開発されたパッケージ形式。dpkg やAPT を用いてインストール・管理される。
ports (英語版 ) 形式パッケージ
FreeBSD で利用されるパッケージ形式。
pkg形式パッケージ
Solaris で利用されるパッケージ形式。FreeBSD 10.0でも、以前はpkgngと呼ばれていた形式がpkg(8)として採用されている[ 5] 。
実行形式
ソフトウェアのアーカイブにインストール処理を行う仕組みを追加した形式。Mac OS やWindows でよく使われ、Linuxディストリビューション 向けのソフトウェアでも稀に利用される。依存関係の解決・インストールは、パッケージが独自に行う。
InstallShield ベースのパッケージ
InstallShieldは、Windows をはじめ、macOS やLinux 等のPC-UNIX 向けのインストーラーを作成できる。
シェルスクリプト ベースのパッケージ
主にBash で書かれ、複数のディストリビューションを対象としたLinux向けのプロプライエタリソフトウェア に用いられる形式。
この他、ソフトウェアのソースコードがアーカイブされたパッケージも存在する。LinuxやFreeBSD等を含むUnix系 OS等では、おもにtar.gz 形式やtar.bz2 形式などで配布されている。利用者は対象とするPC環境に合わせて構成やコンパイル 等の作業を行った上でインストールする。多くの場合、Autotools によって作成された「configure」という名前のシェルスクリプトが付属しており、これを実行することでその環境における依存関係の確認や、コンパイルのためのMakefile の作成が行われる。ソースコードと、コンパイルのために必要なパッケージ(ビルド依存)は、パッケージ管理システムの機能を利用してダウンロードできる場合もある。
パッケージを扱うツール
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] 。
macOS
macOS には、MacPorts 、Fink 、Homebrew などがある。
Windows
PackageManagement
Windows公式のパッケージ管理ツール。PowerShell 5.0に組み込まれており、様々なリポジトリが存在する。
Chocolatey
Windows NT 向けのパッケージ管理ツール。.NET Framework 向けパッケージ管理システムNuGet のパッケージインフラを利用している。
Windows Package Manager
Windows公式のパッケージ管理ツール。MicrosoftがWindows 10とWindows 11のために設計し、フリーかつオープンソースである。winget の名で知られる。
コマンドの比較
ここでは各パッケージ管理システムによるパッケージのインストール、アップデート、アンインストールといった基本コマンドの一例を比較する。
基本的なコマンド比較(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" と呼ばれる)ライブラリ の配布用標準フォーマットを提供している。
共通環境の複数言語
NuGet
.NET Framework
CocoaPods
Objective-C ランタイムで動作する、Objective-C、Swift 、向けパッケージ管理システムである。RubyGems に影響を受けている。
その他の言語
そのほか、以下のようなものがある。
Composer
PHP
CPAN
Perl
CRAN
R
elm-package
Elm
Conan
C /C++
DUB
D
Maven
Java
脚注
注釈
^ 大半はアーカイブ 化、つまり圧縮された状態でまとめられる。
^ APTにおいては、apt update
がパッケージのアップデートを行うコマンドではない。
^ [パッケージ名]
の箇所は省略可能。次項も同様。
出典
^ “What is a package manager?(パッケージマネージャーとは何ですか?) ” (英語). Debian . 2022年2月27日 閲覧。
^ “Debian パッケージ管理システムの基礎 ”. Debian . p. 7. 2022年2月27日 閲覧。
^ dpkgがPerl言語で書かれていた時代のコード。 - ウェイバックマシン (2015年4月2日アーカイブ分)
^ “PerlTimeline ” (英語). Perl . 2022年2月27日 閲覧。
^ 4.4. pkg によるバイナリ package の管理
^ Part I. pkgsrc 利用者向けの手引き
^ “第8章 Debian パッケージ管理ツール ”. Debian . 2022年2月17日 閲覧。
^ “Debian リファレンスカード ” (PDF). Debian . 2022年2月17日 閲覧。
^ “YUM/DNF を使用したパッケージ管理 ”. レッドハット . 2022年2月17日 閲覧。 “Red Hat Enterprise Linux 8”
^ “Managing software with the DNF tool ” (英語). レッドハット . 2022年2月17日 閲覧。 “Red Hat Enterprise Linux 9-beta”
^ “brew(1) – The Missing Package Manager for macOS (or Linux) ” (英語). Homebrew . 2022年2月17日 閲覧。
^ “nix-env ” (英語). NixOS . 2022年2月27日 閲覧。
^ “pacman(8) ” (英語). Arch Linux . 2022年2月17日 閲覧。
^ “Zypper package manager ” (英語). SUSE . 2022年2月17日 閲覧。
^ “SDB:Zypper manual ” (英語). openSUSEプロジェクト . 2022年2月17日 閲覧。
^ Alex Crichton (2014年11月20日). “Cargo: Rust's community crate host ”. 2018年1月28日 閲覧。
関連項目
dpkg RPM 組み込みシステム ディストリビューション非依存 その他(バイナリ) その他(ソース) フロントエンド 関連項目