序文
Linuxコミュニティでしばらく過ごしていると、どのLinuxディストリビューションがベストかについて多くの意見を目にすることができます。多くの場合、これらの議論は、デスクトップの背景がかわいいかどうかなどの些細なことに焦点を当てた、非常に無価値なものです。
ディストリビューションの質を決める最も重要なことは、パッケージシステムと活発なディストリビューションサポートコミュニティです。Linuxと過ごす時間が長くなるにつれ、ソフトウェアの状況は非常にダイナミックであることがわかります。変更は頻繁に起こります。ほとんどのトップLinuxディストリビューションは半年ごとに新しいバージョンをリリースし、多くの個々のプロジェクトは毎日更新されています。このようなソフトウェアの嵐が続くためには、パッケージ管理ツールが必要です。
パッケージ管理とは、システムにソフトウェアをインストールし、メンテナンスする方法です。今日では、ほとんどの人がLinuxディストリビュータからパッケージをインストールすることで、すべてのソフトウェアのニーズを満たすことができます。これは、ソフトウェアをインストールするためにソースコードをダウンロードしてコンパイルしなければならなかったLinuxの初期とは対照的です。ソースコードをコンパイルすることが悪いと言っているのではありません。実際、ソースコードへのアクセスはLinuxの素晴らしさの一つです。ソースコードへのアクセスはLinuxの不思議の一つです。ただ、コンパイル済みのパッケージを使う方が簡単で速いのです。
このセクションでは、いくつかのパッケージ管理コマンドラインツールを取り上げます。すべての主要なディストリビューションはシステムを保守するための強力で洗練されたグラフィカル・プログラムを提供していますが、コマンドライン・プログラムを理解することも重要です。グラフィカルプログラムでは困難な多くのタスクを実行できます。
パッケージシステム 異なるディストリビューションは異なるパッケージシステムを使用します。そして、一般的なルールとして、あるディストリビューションで使われているパッケージは、別のディストリビューションと互換性がありません。ほとんどのディストリビューションは、パッケージ技術の2つの陣営のどちらかに属します: Debianの.deb陣営とRed Hatの.rpm陣営です。Gentoo、Slackware、Foresightのような重要な例外もありますが、他のほとんどのシステムは、表14-1に示す2つの基本システムのいずれかを使用しています。
表14-1: 主なパッケージングシステムファミリー
Debian | Debian, Ubuntu, Xandros, Linspire |
Red Hat | Fedora, CentOS, Red Hat Enterprise Linux, openSUSE, Mandriva, PCLinuxOS |
パッケージシステム
パッケージシステムの仕組み
プロプライエタリ・ソフトウェア業界で配布されているソフトウェアは通常、インストール・メディアを購入し、「インストール・ウィザード」を実行して新しいアプリケーションをシステムにインストールする必要があります。Linux はこのような形ではインストールしません。ほとんどはディストリビュータからパッケージファイルとして提供され、残りは手動でインストールできるソースコードとして提供されます。
パッケージファイル
パッケージシステムにおけるソフトウェアの基本単位はパッケージファイルです。パッケージファイルは、ソフトウェアパッケージを構成する圧縮されたファイルの集合です。パッケージには多くのプログラムとそれをサポートするデータファイルが含まれます。パッケージファイルには、インストールされるファイルに加えて、パッケージやその内容に関するテキストの説明など、パッケージに関するメタデータが含まれています。さらに、多くのパッケージにはプリインストールスクリプトとポストインストールスクリプトが含まれており、パッケージのインストール中やインストール後に設定タスクを実行します。
パッケージファイルはパッケージメンテナと呼ばれる人によって作成されます。パッケージメンテナは、アップストリームプロバイダからソフトウェアをソースコードの形で受け取り、コンパイルし、パッケージメタデータと必要なインストールスクリプトを作成します。多くの場合、パッケージメンテナは、Linux ディストリビューションの残りの部分とプログラムの統合を改善するために、ソースコードに変更を加えます。
リポジトリ
ソフトウェアプロジェクトの中には、ディストリビューションと同様に独自のパッケージを実装することを選択するものもありますが、今日、ほとんどのパッケージは、ディストリビュータや関心のあるサードパーティによって作成されています。パッケージは、ディストリビューションユーザーが中央リポジトリで利用できるようになっています。中央リポジトリには、何千ものパッケージがあり、それぞれがディストリビューション専用にビルドされ、メンテナンスされています。ディストリビューションは、ソフトウェア開発ライフサイクルのさまざまなフェーズに対応するために、複数の異なるライブラリを保守しているかもしれません。 ディストリビューションには、次のメジャーリリースに含まれる開発途中のパッケージを格納する開発リポジトリがあることがよくあります。ディストリビューションはまた、関連するサードパーティリポジトリを持つかもしれません。特許やデジタル著作権管理(Digital Rights Management)の破 壊防止の問題など、法的な理由により、それらはディストリビュー ションに含めることはできません。おそらく最も広く知られている例は、暗号化されたDVDのサポートで、これは米国では違法です。サードパーティのリポジトリは、ソフトウェア特許や権利侵害防止法が適用されない国で運営されています。これらのリポジトリは、多くの場合、サポートするディストリビューションから完全に独立しており、それらを使うためには、それらについて知り、パッケージ管理システムの設定ファイルに手作業でインクルードする必要があります。
依存関係
プログラムは独立して存在することはほとんどなく、その代わりに、他のソフトウェアコンポーネントの存在に依存して動作します。共通のアクティビティは、多くのプログラムで共有されるルーチンによって処理されます。これらのルーチンは、共有ライブラリと呼ばれるものに格納され、複数のプログラムに不可欠なサービスを提供します。プログラムパッケージが共有リソースを必要とする場合、依存関係があると言われます。最近のパッケージ管理システムは、パッケージがインストールされるとき、その依存 関係もすべてインストールされることを保証するために、依存関係を解決する方法を提 供しています。
高レベルパッケージツールと低レベルパッケージツール パッケージ管理システムは一般的に 2 種類のツールで構成されます。パッケージファ イルのインストールや削除といったタスクを扱う低レベルツールと、メタデータの検索 や依存関係の解決を行う高レベルツールです。このセクションでは、Debian 系システムでサポートされているツールと、最近の Red Hat 製品で使用されているツールについて見ていきます。すべての Red Hat 系ディストリビューションは同じ低レベルツールに依存していますが、それぞれ異なる高レベルツールを使用しています。Fedora、Red Hat Enterprise Linux、CentOS は yum を使用し、他の Red Hat 系ディストリビューションは同様の機能を持つ高レベルツールを提供しています。
表14-2: パッケージングシステムツール
Debian | dpkg | apt-get , aptitude |
Fedora, Red Hat Enterprise Linux, CentOS | rpm | yum |
一般的なパッケージ管理タスク
コマンドラインのパッケージ管理ツールは多くの操作を実行できます。その中で最も一般的なものを見ていきます。ここでは説明しませんが、低レベルツールはパッケージファイルの作成も提供します。以下の説明では、package_name はパッケージの実際の名前を表し、package_file はパッケージに含まれるファイルを表します。
リポジトリ内のパッケージの検索
リポジトリのメタデータを検索する高度なツールを使うことで、名前や説明からパッケージを探すことができます。
表14-3: パッケージ検索コマンド
Debian | apt-get update apt-cache search search_string |
Red Hat | yum search search_string |
例: Red Hat の yum リポジトリでテキストエディタ emacs を検索します: yum search emacs
リポジトリ内のパッケージをインストールします
高度なツールでは、リポジトリからパッケージをダウンロードし、完全な依存関係ソリューションでインストールすることができます!
表14-4: パッケージのインストールコマンド
Debian | apt-get update apt-get install package_name |
Red Hat | yum install package_name |
例: apt リポジトリにあるテキストエディタ emacs を Debian タイプのシステムにインストールします:
apt-get update; apt-get install emacs
パッケージファイルからパッケージをインストール
既にリポジトリではないソースからパッケージをダウンロードしている場合、低レベルのツールを使って直接インストールできます。
Debian | dpkg --install package_file |
Red Hat | rpm -i package_file |
例: emacs-22.1-7.fc7-i386.rpm パッケージファイルをリポジトリ以外のサイトからダウンロードした場合、以下のコマンドを使用して Red Hat タイプのシステムにインストールします:
rpm -i emacs-.fc7-i386.rpm
注: インストールの実行には低レベルのツールが使用されるため、依存関係の解決策は実装されていません。rmp が見つからない依存関係に遭遇した場合、rpm はエラーを報告して終了します。
パッケージの削除
低レベルツールだけでなく高レベルツールでもパッケージをアンインストールできます。
表14-6 パッケージ削除コマンド
Debian | apt-get remove package_name |
Red Hat | yum erase package_name |
例: Debian タイプのシステムから emacs パッケージをアンインストールします:
apt-get remove emacsリポジトリからパッケージをアップグレード
最も一般的なパッケージ管理タスクは、システムを最新のパッケージと同期させておくことです。高度なツールを使えば、この重要なタスクをワンステップで実行できます。
表14-7: パッケージ更新コマンド
Debian | apt-get update; apt-get upgrade |
Red Hat | yum update |
例: Debian スタイルのシステムで、インストール済みのパッケージに利用可能なすべてのアップデートを適用します:
apt-get remove emacs
パッケージファイルからのパッケージのアップグレード
更新されたパッケージファイルがリポジトリではないソースからダウンロードされた場合、以前のバージョンを置き換えるためにインストールすることができます。
表14-8: 低レベルパッケージアップグレードコマンド
Debian | dpkg --install package_file |
Red Hat | rpm -qa |
例: Red Hat タイプのシステムで、既存の emacs インストールをパッケージファイル emacs-22.1-7.fc7-i386.rpm に含まれるバージョンに更新します。
apt-get update; apt-get upgrade
注意: rpm とは対照的に、dpkg にはパッケージをインストールする代わ りにアップグレードする特別なオプションはありません。
インストール済みパッケージの一覧
以下のコマンドは、システムにインストールされている全てのパッケージを一覧表示します:
表 14-9: パッケージ一覧コマンド
Debian | dpkg --list |
Red Hat | rpm -qa |
パッケージがインストールされているか判定
低レベルのツールを使用して、指定したパッケージがインストールされているかどうかを表示できます:
表14-10 パッケージステータスコマンド
Debian | dpkg --status package_name |
Red Hat | rpm -qa |
例: Debian タイプのシステムに emacs がインストールされているかどうかの確認
dpkg --status emacsインストールされているパッケージに関する情報を表示
インストールされているパッケージの名前がわかっている場合、以下のコマンドはパッケージの説明に関する情報を表示します。
表 14-11: パッケージ情報コマンド
Debian | apt-cache show package_name |
Red Hat | yum info package_name |
例: Debian タイプのシステムから emacs パッケージの説明を表示します:
apt-cache show emacsインストールされているパッケージの検索
どのパッケージが特定のファイルのインストールに対応しているかを調べるには、以下のコマンドを使用します:
表14-12: パッケージファイル識別コマンド
Debian | dpkg --search file_name |
Red Hat | rpm -qa |
例: Red Hat タイプのシステムで、どのパッケージが /usr/bin/vim ファイルをインストールするかを見るには:
rpm -qf /usr/bin/vim