- コンパクトで軽量な日本語ディストリビューション -
alternatives は、既存のファイルに新しい名前をつけて利用できるようにするシステムです。
いくつかのファイルを同じ名前の元に登録すれば、切り替えられるようにすることができます。
節目次
alternative には仕組みを理解する上で必要となる 5つの用語と 2つのディレクトリ があります。
用語
総称名 generic name
リンク名 link name
選択候補 alternative
優先度 priotity
モード mode
ディレクトリ
alternatives directory
administrative directory
総称名 generic name は、リンク名、選択候補、優先度、モードなどを一つのグループとして管理するための グループの名前 です。
リンク名 link name は、alternatives によって作られる、新しい名前 です。この名前で、シンボリックリンクファイル[6]が作られ、一般的なコマンド、ファイルと同じように利用されることになります。
選択候補 alternative は、既存のファイル、実際のファイルです。「本体」といった感じのものになります。リンク名 で作られるファイルは最終的にこのファイルを参照することになります。
選択候補ごとに、優先度 priority があります。数字で設定され、選択候補が複数ある場合には、数字の大きなものほど優先されます。
優先度に従うかどうかを決める モード mode があります。モードには、パッケージの追加や削除などで、選択候補が追加されたり削除された時に、優先度が高いものに自動的に切り替わる auto(matic mode) と、すでに設定したもので固定しておく manual( mode) というものがあります。
標準では、自動的に切り替える auto になっています。
alternatives directory は、どの候補を選択するかといった切り替えに利用するディレクトリです。Vine Linux では /etc/alternatives が利用されます。
administrative directory には、総称名ごとに、モード、リンク名、選択候補、優先度の情報が保存されます。Vine Linux では /var/lib/rpm/alternatives が利用されます。
ここにあるファイルの中身については「administrative directory におかれるファイル」で説明します。
update-alternatives コマンドで切り替える時には 総称名 と 選択候補 を利用します。
リンク名以外は alternatives という仕組みの中で利用されるものです。
一般的にシステムごとの設定ファイルなどは /etc/ というディレクトリ以下におかれて管理されるので、alternatives は /usr/bin/ にあるコマンドを直接変更するのではなく、/etc/alternatives 以下を経由して変更を行うようになっています。
また、優先度などの情報は、パッケージのインストールやアンインストールなどで、選択候補が増えたり減ったり動的に変化するために、/var/lib/rpm/alternatives 以下におかれます。
/etc や /var などのディレクトリの配置や意味などについては、FHS(Filesystem Hierarchy Standard)という規格があります。
リンク名 があります。このファイルは、alternatives directory の中にある、総称名と同じ名前のファイル を参照しています。
総称名 のもとに、2つの選択候補 ファイルA と ファイルB が登録されています。
優先度は、A が 20、 B が 10 となっています。
総称名と同じ名前のファイル は、優先度の高い ファイルA を参照します。
リンク名 は 総称名と同じ名前のファイル を経由して 選択候補ファイルA を参照しています。
GCC(GNU Compiler Collection) の、/usr/bin/gcc というコマンドを見てみましょう。
Vine Linux 4.1 では、表28.1「GCC のパッケージ」のように 3つrpmパッケージが用意されています。[7]
表28.1 GCC のパッケージ
| パッケージ名 | GCCのバージョン | gccコマンド | 優先度(priority) |
|---|---|---|---|
| gcc | 3.3.6 | /usr/bin/gcc-3.3.6 | 30 |
| gcc4 | 4.0.2 | /usr/bin/gcc-4.0.2 | 20 |
| gcc295 | 2.95.3 | /usr/bin/gcc-2.95.3 | 15 |
gcc というコマンドは一般的には /usr/bin/gcc ですが、それぞれのrpmパッケージでは /usr/bin/gcc-3.3.6 , /usr/bin/gcc-4.0.2 , /usr/bin/gcc-2.95.3 というコマンド(ファイル名)になっています。
そして、alternatives を使って、この中のどれかを /usr/bin/gcc として使えるようにしています。
/usr/bin/gcc があります。このファイルは、/etc/alternatives の中にある、総称名と同じ名前の gcc というファイル を参照しています。
$ file /usr/bin/gcc
/usr/bin/gcc: symbolic link to `/etc/alternatives/gcc'
総称名 gcc のもとに、3つの選択候補 /usr/bin/gcc-3.3.6 と /usr/bin/gcc-4.0.2 と /usr/bin/gcc-2.95.3 が登録されています。
優先度は、/usr/bin/gcc-3.3.6 が 30 , /usr/bin/gcc-4.0.2 が 20 , /usr/bin/gcc-2.95.3 が 15 となっています。
/etc/alternatives/gcc は、優先度の最も高い /usr/bin/gcc-3.3.6 を参照します。
$ file /etc/alternatives/gcc
/etc/alternatives/gcc: symbolic link to `/usr/bin/gcc-3.3.6'
/usr/bin/gcc は /etc/alternatives/gcc を経由して 選択候補/usr/bin/gcc-3.3.6 を参照しています。
alternatives には、プログラムが変更されたら同時にマニュアルページファイルも切り替える、といったように、複数のものを同時に切り替える仕組みがあります。
総称名1 を切り替えたら、総称名2 のほうも同時に切り替えるというように、複数の総称名をグループ化することで、選択候補を同時に切り替えられるようにすることができます。
基準となる総称名1 をマスターリンク(master link)と呼び、それと同時に変更される総称名2 をスレーブリンク(slave link)と呼びます。
マスターリンクとスレーブリンクを合わせて、リンクグループ(link group)と呼びます。
スレーブリンクは、マスターリンクに合わせて切り替わるものなので、モードと優先度を持ちません。総称名とリンク名と選択候補を持ちます。
スレーブリンクは、無くてもいいものなので、マスターリンクの選択候補1 にはスレーブリンクがあるけれど、選択候補2 にはスレーブリンクはない、といったようにもできます。全て対応させる必要はありません。
また、スレーブリンクを複数持つこともできます。
マスターリンクとスレーブリンクは、図28.3「alternatives の概念図(マスターリンクとスレーブリンク)」のような関係になります。
総称名1 の選択候補 ファイルA と、総称名2 の選択候補 ファイルa が対応します。
また、総称名1 の選択候補 ファイルB と、総称名2 の選択候補 ファイルb が対応します。
リンク名1 に ファイルA を選択した時には、リンク名2 が ファイルa になります。
administrative directory ( /var/lib/rpm/alternatives/ ) に 総称名と同じ名前のファイルがあり、総称名ごとに、モード、リンク名、選択候補、優先度の情報が保存されます。
書式は次のようになります。
モード (auto か manual) リンク名 (/usr/bin/hoge など) 区切りとなる空行 選択候補1 選択候補1の優先度 選択候補2 選択候補2の優先度
スレーブリンクもある場合には次のような書式になります。
モード master link のリンク名 slave link1 の総称名 slave link1 のリンク名 slave link2 の総称名 slave link2 のリンク名 区切りとなる空行 master link の選択候補1 master link の選択候補1の優先度 master link の選択候補1のslave link1の選択候補 master link の選択候補1のslave link2の選択候補 master link の選択候補2 master link の選択候補2の優先度 master link の選択候補2のslave link1の選択候補 master link の選択候補2のslave link2の選択候補 区切りとなる空行
スレーブリンクのリンク名など、関連したファイルがどこにあるのかはこのファイルをみるとわかります。
/var/lib/rpm/alternatives/gcc は次のように書かれています。
auto モード
/usr/bin/gcc master link のリンク名
c99 slave link1 の総称名
/usr/bin/c99 slave link1 のリンク名
cc slave link2 の総称名
/usr/bin/cc slave link2 のリンク名
i386-vine-linux-gcc slave link3 の総称名
/usr/bin/i386-vine-linux-gcc slave link3 のリンク名
c89 slave link4 の総称名
/usr/bin/c89 slave link4 のリンク名
(区切りとなる空行)
/usr/bin/gcc-3.3.6 選択候補 1
30 選択候補 1の優先度
/usr/bin/c99-3.3.6 選択候補 1のスレーブリンク 1の選択候補
/usr/bin/gcc-3.3.6 選択候補 1のスレーブリンク 2の選択候補
/usr/bin/i386-vine-linux-gcc-3.3.6 選択候補 1のスレーブリンク 3の選択候補
/usr/bin/c89-3.3.6 選択候補 1のスレーブリンク 4の選択候補
/usr/bin/gcc-2.95.3 選択候補 2
15 選択候補 2の優先度
選択候補 2のスレーブリンク 1の選択候補 (該当無し)
/usr/bin/gcc-2.95.3 選択候補 2のスレーブリンク 2の選択候補
選択候補 2のスレーブリンク 3の選択候補 (該当無し)
選択候補 2のスレーブリンク 4の選択候補 (該当無し)
/usr/bin/gcc-4.0.2 選択候補 3
20 選択候補 3の優先度
/usr/bin/c99-4.0.2 選択候補 3のスレーブリンク 1の選択候補
/usr/bin/gcc-4.0.2 選択候補 3のスレーブリンク 2の選択候補
/usr/bin/i386-vine-linux-gcc-4.0.2 選択候補 3のスレーブリンク 3の選択候補
/usr/bin/c89-4.0.2 選択候補 3のスレーブリンク 4の選択候補
(区切りとなる空行)