パッケージ管理の考え方
目次
概要
パッケージ管理システムとは、お使いのシステムでソフトウエアをインストールしたり、アップグレードや削除を行なったりするためのツール集を意味する言葉です。 openSUSE を含め、 Linux ディストリビューションには数多くのソフトウエアパッケージが用意されています。
ソフトウエアは、ソフトウエアの用途などの説明文や、そのソフトウエアを正しく動作させるのに必要な 依存関係 などの追加情報 (メタデータ と呼びます) を同梱して、 パッケージ と呼ばれる形態で配布されます。これらのパッケージは、ローカルメディア (CD, DVD, ハードディスクドライブなど) やインターネット上などの リポジトリ で公開され、提供されています。パッケージをインストールする際、メタデータはローカル (インストール先のコンピュータ) にあるパッケージデータベースに記録され、後日必要な時に取り出すことができるようになっています。
Libzypp は openSUSE におけるパッケージ管理システムの実装で、グラフィカルユーザインターフェイスの場合は YaST ソフトウエア管理 で、コマンドラインインターフェイスの場合は Zypper で、これを利用することができます。
パッケージ
パッケージは ファイルをまとめた書庫 であり、ソフトウエアを構成する様々なファイル (アプリケーションや共有ライブラリのほか、その共有ライブラリを利用してソフトウエアを構築するのに必要な開発用ファイルなど) と、そのソフトウエアが正しく動作するのに必要な命令などが含まれています。
パッケージは、インストール先のパスや依存関係、デスクトップとの統合や起動スクリプト (サーバの場合) などが特定のディストリビューション向けに仕立て上げられて作られています。このような理由から、ディストリビューションの種類やバージョン (例: openSUSE Leap 42.1) がきちんと一致しているパッケージ のみ をインストールすべきです。たとえば、 openSUSE に Fedora のパッケージをインストールしてはなりませんし、 openSUSE Leap 42.1 に openSUSE 13.2 のパッケージをインストールしてもなりません。
パッケージのメタデータ
パッケージには メタデータ と呼ばれる追加の情報が含まれています。メタデータには下記のような情報があります:
- 概要
- 説明文
- パッケージに含まれているファイルの一覧
- ソフトウエアのバージョン情報とパッケージのリリース番号
- 構築日時と場所、および構築者に関する情報
- 対応するアーキテクチャ
- パッケージに含まれるファイルのチェックサム
- 含まれるソフトウエアのライセンス情報
- 正しく動作するのに必要な他のパッケージに関する情報
- その他
パッケージの依存関係
ソフトウエアをパッケージにまとめる際、それらの関係性が重要な要素になります。たとえば、あるパッケージが別のパッケージに属しているファイルを必要としているような場合、たとえばアプリケーションを動作させるのに実行環境 (他のツールやライブラリなど) を必要としているような場合がそれにあたります。パッケージの依存関係は、そのような関係性を表現するために使用します。
たとえばパッケージ A が正しく動作するには、パッケージ B, C, D をインストールする必要がある場合を想定します。
- パッケージの依存関係は 推移的 とも表現できる構造です。たとえばパッケージ A がパッケージ B を必要としていて、かつパッケージ B がパッケージ C を必要としているような場合、パッケージ A もまたパッケージ C を必要としていることになります。 1 つのアプリケーションをインストールしようとしているだけなのに、多数のパッケージをインストールしようとしてしまうのは、主にこういった構造に由来するものです。
- ライブラリ (一般的にはパッケージ名が "lib" で始まるもの) は非常に一般的に用いられているもので、 1 つのアプリケーションが多数のライブラリパッケージに依存しているような場合もあります。
パッケージとパッケージの依存関係は、オペレーティングシステムを部品ごとに分解し、管理するといった仕組みを提供するため、 (BSD や UNIX システムでも同様ですが) Linux ディストリビューションで非常に重要な要素になっています。これは特にライブラリのパッケージには有効な仕組みです。 たとえば openssl には多数のアプリケーションやライブラリが使用する SSL などの暗号化ライブラリが含まれていますが、 openssl の新しいバージョンが公開されると、そのパッケージをアップグレードするだけで、ライブラリを使用するすべてのアプリケーションが新機能を利用できるようになります。
このような仕組みは、システムを安定させ、機密を保持するためには非常に効果的な方法です。複数のアプリケーションが利用するライブラリに対して、セキュリティホールや脆弱性、バグなどが見つかった場合、 1 つのパッケージを更新するだけで、問題を解決することができてしまいます。
パッケージの形式
Linux ディストリビューションの世界では、下記に示す 3 種類の パッケージ形式 が存在しています:
- tgz (tar + gzip ファイル): 一般的にはソースコードの書庫としても利用されている形式で、必要であればどのような形式のファイルも含めることができます。書庫の形式はきちんと定められているものの、中身のファイルについては標準化されておらず、必要だと思われるファイルが任意の構造で収録されています。このようなソフトウエアを動作させるには、コンパイルが必要です。
- rpm (RPM Package Manager): コンパイル済みのファイルが含まれている書庫です。 Red Hat Linux が開発したパッケージ形式で、 LSB が標準化しています。現在は openSUSE を含め、多数の Linux ディストリビューションが採用しています。
- deb (Debian): こちらもコンパイル済みのファイルが含まれている書庫ですが、主に Debian ベースのシステムで利用されています。
しかしながら、パッケージ側で必要な依存関係を表現できたとしても、依存関係を自動的に処理するとは限りません。依存関係で検出した問題点を表示するだけで、どうすべきなのかを表示することができないのが一般的です。
たとえば RPM パッケージ A をインストールする場合、このパッケージがパッケージ B に依存しているとすると、 RPM はパッケージ B を自動的にインストールしたりするような動作はせず、単純にパッケージ B が必要である旨を表示して止まってしまいます。ユーザ側でパッケージ B をインストールした後、パッケージ A をインストールしなければなりません。パッケージ B がさらにパッケージ C やパッケージ D に依存していて、さらにパッケージ D がパッケージ E に依存していたりなどすれば、数多くのパッケージを順番どおりにインストールしないといけなくなってしまいます。
パッケージマネージャ
openSUSE のような新しい Linux ディストリビューションであれば、 パッケージマネージャ を利用することができます。パッケージマネージャは RPM の仕組みの中で動作する仕組みで、依存関係を解決して必要なパッケージを リポジトリ (オンラインのサーバや CD, DVD など) からお使いのシステムにダウンロードし、インストールすることができます。パッケージマネージャでは、パッケージの削除や更新にも対応しています。インストールできるパッケージの数は、設定したリポジトリに依存して決まります。
openSUSE におけるネイティブなパッケージマネージャは、 YaST ソフトウエア管理 モジュールと Zypper コマンドラインです。 openSUSE では、それ以外のパッケージ管理ツールも用意されています。
パッケージのリポジトリ
パッケージマネージャでパッケージをインストールするには、 パッケージリポジトリ を設定しなければなりません。パッケージリポジトリは CD や DVD などの物理的なメディアのほか、インターネット上のオンラインを指定することもできます。
openSUSE のパッケージリポジトリには、下記のようなものがあります:
- 十分にテストされ、パッケージのサポートも提供している公式の パッケージリポジトリ
- Packman や Build Service のリポジトリなどの 追加のパッケージ・リポジトリ 。ここには最新のパッケージのほか、法的な理由から openSUSE 本体には含めることのできないパッケージなどが含まれています。ただし、十分にはテストされていないものもあります。
さらに詳しく
外部リンク
- パッケージ管理システム (Wikipedia)
- openSUSE Build Service のソフトウエア検索
- Webpin ソフトウエア検索 (英語)