パッケージ管理
OSに様々なモジュールやアプリケーションを導入するのに簡便なパッケージ管理システムが必要となる。
自力でコンパイルしてインストールする方法もあるが、その場合でも、アンインストールの事まで考えるとパッケージ管理システムがあった方がよい。
システムが汚れて元に戻せないのがよくない。
要件
パッケージ間の依存解決をする必要がある。
必要なパッケージを事前にインストールする。
パッケージ間の競合がある場合は停止する。
パッケージを検索できる
検索条件
目的(タグ)
名前
不要となったパッケージを安全にアンインストールできる。
ユーザーが意図してインストールした物と依存関係でインストールした物とを区別する必要がある。
複数のバージョンのパッケージを導入できるようにしたい。
アプリケーションによって必要とされるバージョンが異なる問題、いわゆる DLL Hell 問題の解消
パッケージのインストール・アンインストール・設定変更に伴う、設定の書き換え(追加・変更・削除)を安全に行えるようにする。
問題
リソースの管理を誰が行うのか?
管理が複数のパッケージやバージョンで行われた時、どうやって調停するのか?
システムによって前提条件が異なる。
ハードウェアの差異
ミドルウェアの差異
依存関係の競合はどうするか?
基本的に、インストーラ以外がアプリケーションのファイルを配置すべきではない。
過去ダメだった実装
ユーザーが実行ファイルをコピーして配置
普通の人には困難
人の手では複雑な配置は不可能
アンインストールが困難
何を消して何を残せばいいのか、何をどう書き換えればいいのか分からない。
メーカーによる独自インストーラによる配置
品質に問題あり。
独自UIでわかりにくい。
依存性を解決しない。
アンインストールに失敗することがある。ゴミが残る。
何でも一つのディレクトリに配置
競合を解決できない。
システムとしてデフォルトの実行ファイルへのリンクを持つ方式が最近は採用されている。(alternative)
共有ライブラリを使った共有
共有ライブラリのバージョンに強く依存するアプリケーションがあると、バージョンが異なると動かなくなる。
複数バージョンの共存不可
不具合があるため、前のバージョンを使いたいことがある。
移行のため、同時に複数のバージョンを動かしたいことがある。
試験的に次のバージョンを使いたいことがある。
名前の衝突
みんな似たような名前を付けたがる。
fork して作った実装は同じ名前になってしまう。
関連
参考実装
公式のパッケージ管理
yum, dnf
apt
FreeBSD ports
Nix
独自のパッケージ管理
Chocolatey