<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>イージーネット Tech Blog &#187; Java</title>
	<atom:link href="http://blog.eni.co.jp/tech/tag/java/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.eni.co.jp/tech</link>
	<description>株式会社イージーネットのスタッフによる技術系ブログです</description>
	<lastBuildDate>Tue, 12 Jan 2010 01:46:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/tag/java/feed" />
		<item>
		<title>コマンドを便利に切り替える update-alternatives 使いこなし講座</title>
		<link>http://blog.eni.co.jp/tech/2009/08/update-alternatives.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/08/update-alternatives.html#comments</comments>
		<pubDate>Tue, 04 Aug 2009 04:00:39 +0000</pubDate>
		<dc:creator>白石 将</dc:creator>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[alternatives]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[update-alternatives]]></category>
		<category><![CDATA[コマンド]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=968</guid>
		<description><![CDATA[こんにちは、プロダクト&#38;サービス事業部の白石です。
唐突ですが、日本はよく豊かな国だと言われることがあります。
それは、ただ単に日本人の所得が高いというわけではなく選択の幅があるからです。
いざ美味しいものを食べたいなと思った時、
日本の料理はもちろんのこと、中華料理、韓国料理、イタリア料理などすぐに見つかります。
さらにちょっと手間を掛けて、大きな街中に足を運んだりするともっと多彩な国のグルメを楽しむことが出来ます。
また、こだわりのあるバーなんかに行くと世界中のお酒が並んでたりしますよね。
こういった選択の幅がある国って他にはなかなか無いそうですよ。
このように何かしようと思った時に、
色々あるものの中から好きなものを選べるのことはとても恵まれていることだと思いませんか?
そんな選択肢を文字通りLinuxに与えてくれるのが update-alternatives というコマンドです。
今回はCentOSでの検証を基に話をしますが、
CentOSの他に、Debian、RedHat系(RHEL、Fedora)にも
この update-alternatives という
シンボリックリンクを管理してデフォルトのコマンドを決定(man参照)するコマンド
があります。
簡単に言うと、複数のバージョン(または似たような機能)を持つプログラムを切り替える(管理する)コマンドです。
CentOSにSUNの Java を入れたことがある方は、一度は使ったことがあるのではないかと思います。
今回はこの update-alternatives コマンドについて解説したいと思います。

目次

update-alternatives とは
update-alternatives の使い方

グループのプログラムを切り替える
グループにプログラムを追加する
グループの状態を表示する
グループからプログラムを削除する
RedHat系ディストリビューションでは使えないオプション

スレーブとは
update-alternatives の簡単なファイル構成

alternatives ディレクトリ ( /etc/alternatives )
管理ディレクトリ ( /var/lib/alternatives )

共通オプション
まとめ
参考ドキュメント
おまけ &#8211; SUNのJDKをCentOS 5.3にインストールする

使用したソフトウェアのバージョン
今回、使用したソフトウェアのバージョンは下記のようになります。



バージョン


CentOS
5.3 x86_64(インストール直後のもの)


update-alternatives
1.3.30.1


update-alternatives とは
長いので使い方のみを知りたい方はこの節は飛ばして、update-alternatives の使い方へどうぞ。
update-alternatives コマンドとは冒頭の通り、
複数のバージョン(または似たような機能)を持つプログラムを切り替える(管理する)コマンド
です。

# which update-alternatives
/usr/sbin/update-alternatives
# ls -l /usr/sbin/update-alternatives
lrwxrwxrwx 1 root root 12  4月 25 02:02 /usr/sbin/update-alternatives -&#62; alternatives

どうやら、update-alternatives は /usr/sbin/alternatives へのシンボリックリンクのようです。
では、/usr/sbin/alternatives を見てみましょう。

# ls -l /usr/sbin/alternatives
-rwxr-xr-x 1 root root 26384  5月 [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは、プロダクト&amp;サービス事業部の白石です。</p>
<p>唐突ですが、日本はよく豊かな国だと言われることがあります。<br />
それは、ただ単に日本人の所得が高いというわけではなく選択の幅があるからです。</p>
<p>いざ美味しいものを食べたいなと思った時、<br />
日本の料理はもちろんのこと、中華料理、韓国料理、イタリア料理などすぐに見つかります。<br />
さらにちょっと手間を掛けて、大きな街中に足を運んだりするともっと多彩な国のグルメを楽しむことが出来ます。<br />
また、こだわりのあるバーなんかに行くと世界中のお酒が並んでたりしますよね。<br />
こういった選択の幅がある国って他にはなかなか無いそうですよ。</p>
<p>このように何かしようと思った時に、<br />
色々あるものの中から好きなものを選べるのことはとても恵まれていることだと思いませんか?</p>
<p>そんな選択肢を文字通りLinuxに与えてくれるのが <a href="http://linux.die.net/man/8/update-alternatives"><span class="strong">update-alternatives</span></a> というコマンドです。</p>
<p>今回は<a href="http://www.centos.org/">CentOS</a>での検証を基に話をしますが、<br />
CentOSの他に、<a href="http://www.debian.or.jp/">Debian</a>、RedHat系(<a href="http://www.jp.redhat.com/">RHEL</a>、<a href="http://fedoraproject.org/ja/">Fedora</a>)にも<br />
この update-alternatives という</p>
<p><span class="strong">シンボリックリンクを管理してデフォルトのコマンドを決定(man参照)するコマンド</span></p>
<p>があります。<br />
簡単に言うと、<span class="strong">複数のバージョン(または似たような機能)を持つプログラムを切り替える(管理する)コマンド</span>です。</p>
<p>CentOSに<a href="http://java.sun.com/javase/ja/6/download.html">SUNの Java </a>を入れたことがある方は、一度は使ったことがあるのではないかと思います。</p>
<p>今回はこの update-alternatives コマンドについて解説したいと思います。</p>
<p><span id="more-968"></span></p>
<h3 id="contents">目次</h3>
<ol>
<li><a href="#about_alternatives">update-alternatives とは</a></li>
<li><a href="#usage_alternatives">update-alternatives の使い方</a></li>
<ul>
<li><a href="#alternatives_config">グループのプログラムを切り替える</a></li>
<li><a href="#alternatives_install">グループにプログラムを追加する</a></li>
<li><a href="#alternatives_display">グループの状態を表示する</a></li>
<li><a href="#alternatives_remove">グループからプログラムを削除する</a></li>
<li><a href="#unusable_options">RedHat系ディストリビューションでは使えないオプション</a></li>
</ul>
<li><a href="#about_slave">スレーブとは</a></li>
<li><a href="#file_alternatives">update-alternatives の簡単なファイル構成</a></li>
<ul>
<li><a href="#alternatives_directory">alternatives ディレクトリ ( /etc/alternatives )</a></li>
<li><a href="#administration_directory">管理ディレクトリ ( /var/lib/alternatives )</a></li>
</ul>
<li><a href="#common_options">共通オプション</a></li>
<li><a href="#end">まとめ</a></li>
<li><a href="#documents">参考ドキュメント</a></li>
<li><a href="#bonus_install_jdk">おまけ &#8211; SUNのJDKをCentOS 5.3にインストールする</a></li>
</ol>
<h3 id="software_version">使用したソフトウェアのバージョン</h3>
<p>今回、使用したソフトウェアのバージョンは下記のようになります。</p>
<table class="content">
<tr>
<th></th>
<th>バージョン</th>
</tr>
<tr>
<th><a href="http://www.centos.org/">CentOS</a></th>
<td>5.3 x86_64(インストール直後のもの)</td>
</tr>
<tr>
<th><a href="http://linux.die.net/man/8/update-alternatives">update-alternatives</a></th>
<td>1.3.30.1</td>
</tr>
</table>
<h3 id="about_alternatives">update-alternatives とは</h3>
<p>長いので使い方のみを知りたい方はこの節は飛ばして、<a href="#usage_alternatives">update-alternatives の使い方</a>へどうぞ。</p>
<p>update-alternatives コマンドとは冒頭の通り、</p>
<p><span class="strong">複数のバージョン(または似たような機能)を持つプログラムを切り替える(管理する)コマンド</span></p>
<p>です。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96831"><td class="code" id="p968code31"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># which update-alternatives</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>update-alternatives
<span style="color: #666666; font-style: italic;"># ls -l /usr/sbin/update-alternatives</span>
lrwxrwxrwx <span style="color: #000000;">1</span> root root <span style="color: #000000;">12</span>  <span style="color: #000000;">4</span>月 <span style="color: #000000;">25</span> 02:02 <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>update-alternatives -<span style="color: #000000; font-weight: bold;">&gt;</span> alternatives</pre></td></tr></table></div>

<p>どうやら、update-alternatives は /usr/sbin/alternatives へのシンボリックリンクのようです。<br />
では、/usr/sbin/alternatives を見てみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96832"><td class="code" id="p968code32"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># ls -l /usr/sbin/alternatives</span>
<span style="color: #660033;">-rwxr-xr-x</span> <span style="color: #000000;">1</span> root root <span style="color: #000000;">26384</span>  <span style="color: #000000;">5</span>月 <span style="color: #000000;">24</span>  <span style="color: #000000;">2008</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>alternatives</pre></td></tr></table></div>

<p>/usr/sbin/alternatives が本体みたいですね。<br />
ということは、</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96833"><td class="code" id="p968code33"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives</span></pre></td></tr></table></div>

<p>とコマンドを実行するよりも、</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96834"><td class="code" id="p968code34"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># alternatives</span></pre></td></tr></table></div>

<p>と実行した方が入力の手間が省けますが、<br />
CentOSの『man alternatives』では&#8221;UPDATE-ALTERNATIVES&#8221;となっているので、<br />
本エントリでは基本的に update-alternatives として話を進めることにします。</p>
<p>さて、この update-alternatives ですが、<br />
元はDebianの機能だったのが、現在ではRedHat系のディストリビューションにも移植されています。</p>
<p>今回、update-alternatives の機能を説明をするには、<br />
Java が適しているので Java をもとに簡単にどんな機能なのか見ていきたいと思います。</p>
<p>まずは Java の確認</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96835"><td class="code" id="p968code35"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># which java</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
<span style="color: #666666; font-style: italic;"># java -version</span>
java version <span style="color: #ff0000;">&quot;1.6.0&quot;</span>
OpenJDK  Runtime Environment <span style="color: #7a0874; font-weight: bold;">&#40;</span>build 1.6.0-b09<span style="color: #7a0874; font-weight: bold;">&#41;</span>
OpenJDK <span style="color: #000000;">64</span>-Bit Server VM <span style="color: #7a0874; font-weight: bold;">&#40;</span>build 1.6.0-b09, mixed mode<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>このことからCentOS 5.3には標準で <a href="http://openjdk.java.net/">OpenJDK</a> が入っていることが分かります。</p>
<p>けれど、実はCentOS 5.3にはデフォルトで Java が2種類入っており、<br />
update-alternatives の機能を利用して管理されています。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96836"><td class="code" id="p968code36"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --config java</span>
&nbsp;
<span style="color: #000000;">2</span> プログラムがあり <span style="color: #ff0000;">'java'</span> を提供します。
&nbsp;
  選択       コマンド
<span style="color: #660033;">-----------------------------------------------</span>
<span style="color: #000000; font-weight: bold;">*</span>+ <span style="color: #000000;">1</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
   <span style="color: #000000;">2</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
&nbsp;
Enter を押して現在の選択 <span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #7a0874; font-weight: bold;">&#93;</span> を保持するか、選択番号を入力します:</pre></td></tr></table></div>

<p>本来はステータスを参照する場合には <code>--display</code> オプションを使用するのですが、<br />
見やすさのため <code>--config</code> オプションを指定しました。</p>
<p>上記の結果から、</p>
<ol>
<li>update-alternatives で管理されている Java グループには OpenJDK と GCJ の2種類がある</li>
<li>プログラムは OpenJDK の方が選択されているっぽい</li>
</ol>
<p>ということが何となく分かると思います。</p>
<p>それでは update-alternatives の機能を使って Java グループのプログラムを切り替えてみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96837"><td class="code" id="p968code37"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --config java</span>
&nbsp;
<span style="color: #000000;">2</span> プログラムがあり <span style="color: #ff0000;">'java'</span> を提供します。
&nbsp;
  選択       コマンド
<span style="color: #660033;">-----------------------------------------------</span>
<span style="color: #000000; font-weight: bold;">*</span>+ <span style="color: #000000;">1</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
   <span style="color: #000000;">2</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
&nbsp;
Enter を押して現在の選択 <span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #7a0874; font-weight: bold;">&#93;</span> を保持するか、選択番号を入力します: <span style="color: #000000;">2</span>    <span style="color: #000000; font-weight: bold;">&lt;</span>---- 入力<span style="color: #000000; font-weight: bold;">!!</span></pre></td></tr></table></div>

<p>では、もう一度 Java の確認を行ってみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96838"><td class="code" id="p968code38"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># which java</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
<span style="color: #666666; font-style: italic;"># java -version</span>
java version <span style="color: #ff0000;">&quot;1.4.2&quot;</span>
gij <span style="color: #7a0874; font-weight: bold;">&#40;</span>GNU libgcj<span style="color: #7a0874; font-weight: bold;">&#41;</span> version 4.1.2 20080704 <span style="color: #7a0874; font-weight: bold;">&#40;</span>Red Hat 4.1.2-44<span style="color: #7a0874; font-weight: bold;">&#41;</span>
&nbsp;
Copyright <span style="color: #7a0874; font-weight: bold;">&#40;</span>C<span style="color: #7a0874; font-weight: bold;">&#41;</span> 2006 Free Software Foundation, Inc.
This is <span style="color: #c20cb9; font-weight: bold;">free</span> software; see the <span style="color: #7a0874; font-weight: bold;">source</span> <span style="color: #000000; font-weight: bold;">for</span> copying conditions.  There is NO
warranty; not even <span style="color: #000000; font-weight: bold;">for</span> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</pre></td></tr></table></div>

<p><span class="strong">同じ /usr/bin/java を実行している</span>はずなのにさっきと結果が変わりました!!</p>
<p>これは操作上では同じプログラムを実行しているようでも、<br />
実は update-alternatives が裏で頑張ってプログラムを切り替えてくれているからなんです。</p>
<p>このように</p>
<ul>
<li>複数のバージョンの同一のプログラム</li>
<li>同じジャンルに分類される複数のプログラム</li>
</ul>
<p>などを手軽に切り替えて使えるようにするのが update-alternatives の機能となります。</p>
<h3 id="usage_alternatives">update-alternatives の使い方</h3>
<p>update-alternatives の機能が何となく分かったところで使い方を見ていきましょう。</p>
<p>その前に動作モードと用語の説明をしておきます。</p>
<table class="content">
<caption>動作モード</caption>
<tr>
<th></th>
<th>解説</th>
</tr>
<tr>
<th>自動</th>
<td>update-alternatives が優先度で判断して選択肢を変更する状態。</td>
</tr>
<tr>
<th>手動</th>
<td>rootが行った設定を保持している状態</td>
</tr>
</table>
<table class="content">
<caption>用語</caption>
<tr>
<th></th>
<th>説明</th>
<th>記述例</th>
<tr>
<th>グループ名</th>
<td>update-alternatives で管理されるプログラムのグループ名</td>
<td>java</td>
</tr>
<tr>
<th>実行リンク</th>
<td>update-alternatives の機能を使ってプログラムを実行するためのパス</td>
<td>/usr/bin/java</td>
</tr>
<tr>
<th>プログラムパス</th>
<td>update-alternatives で管理するプログラム(ファイル)のパス</td>
<td>/usr/java/jdk1.6.0_14/bin/java</td>
</tr>
<tr>
<th>優先度</th>
<td>&#8220;自動モード&#8221;の場合、優先度が高いものが選択される</td>
<td>16014</td>
</tr>
</table>
<h4 id="alternatives_config">グループのプログラムを切り替える</h4>
<p>update-alternatives のグループで管理されているプログラムを切り替えます。</p>
<pre><code>update-alternatives --config グループ名
update-alternatives --auto グループ名
update-alternatives --set グループ名 プログラムパス</code></pre>
<p><a href="#about_alternatives">update-alternatives とは</a>での Java グループのプログラム切り替えと同様の手順となります。</p>
<p>では、 Java グループの選択プログラムを OpenJDK から GCJ に切り替えてみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96839"><td class="code" id="p968code39"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --config java</span>
&nbsp;
<span style="color: #000000;">2</span> プログラムがあり <span style="color: #ff0000;">'java'</span> を提供します。
&nbsp;
  選択       コマンド
<span style="color: #660033;">-----------------------------------------------</span>
<span style="color: #000000; font-weight: bold;">*</span>+ <span style="color: #000000;">1</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
   <span style="color: #000000;">2</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
&nbsp;
Enter を押して現在の選択 <span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #7a0874; font-weight: bold;">&#93;</span> を保持するか、選択番号を入力します: <span style="color: #000000;">2</span>    <span style="color: #000000; font-weight: bold;">&lt;</span>---- 入力<span style="color: #000000; font-weight: bold;">!!</span></pre></td></tr></table></div>

<p>もしくは、</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96840"><td class="code" id="p968code40"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --set java /usr/lib/jvm/jre-1.4.2-gcj/bin/java</span></pre></td></tr></table></div>

<p>とすることでも切り替わります。<br />
こちらは非対話形式なので、<br />
シェルスクリプトの中でグループの選択プログラムを切り替える際に重宝しそうです。</p>
<p>ちなみに上記の2通りの方法で選択プログラムを切り替えた場合、<br />
グループの動作モードは<span class="strong">&#8220;手動&#8221;</span>に変更されます。</p>
<p>逆に次の方法では、<br />
自動モードに変更することで<span class="strong">&#8220;優先度が最も高いプログラムを選択&#8221;</span>します。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96841"><td class="code" id="p968code41"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --auto java</span></pre></td></tr></table></div>

<p>&#8220;自動&#8221;モードに設定されることにより、<br />
選択されるプログラムが自動で update-alternatives によって決められることになり<span class="strong">優先度の最も高いものが選択</span>されます。</p>
<h4 id="alternatives_install">グループにプログラムを追加する</h4>
<p>指定したプログラムを update-alternatives のグループに追加します。</p>
<pre><code>update-alternatives --install 実行リンク グループ名 プログラムパス 優先度</code></pre>
<p><a href="http://java.sun.com/javase/ja/6/download.html">SUNの JDK1.6.0_update14</a>(以下jdk1.6.0_14) が /usr/java にインストール済みである状態とします。　</p>
<p><a href="#bonus_install_jdk">おまけ &#8211; SUNのJDKをCentOS 5.3にインストールする</a></p>

<div class="wp_codebox"><table width="100%" ><tr id="p96842"><td class="code" id="p968code42"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_14/bin/java 16014</span></pre></td></tr></table></div>

<p>何も表示されなかった場合にはグループにプログラムが追加されているはずです。</p>
<p>では早速、update-alternatives で管理されている Java グループのリストを見てみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96843"><td class="code" id="p968code43"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --config java</span>
&nbsp;
<span style="color: #000000;">3</span> プログラムがあり <span style="color: #ff0000;">'java'</span> を提供します。
&nbsp;
  選択       コマンド
<span style="color: #660033;">-----------------------------------------------</span>
   <span style="color: #000000;">1</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
 + <span style="color: #000000;">2</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
<span style="color: #000000; font-weight: bold;">*</span>  <span style="color: #000000;">3</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.6.0_14<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
&nbsp;
Enter を押して現在の選択 <span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #7a0874; font-weight: bold;">&#93;</span> を保持するか、選択番号を入力します:</pre></td></tr></table></div>

<p>Java グループの中に jdk1.6.0_14 が追加されているのが確認出来ました。</p>
<h4 id="alternatives_display">グループの状態を表示する</h4>
<p>update-alternatives で管理されているプログラムの状態を表示します。</p>
<pre><code>update-alternatives --display グループ名</code></pre>
<p>Java グループの詳細を見てみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96844"><td class="code" id="p968code44"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --display java</span>
java - ステータスは手動です。
リンクは現在 <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java を指しています。
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java - 優先項目 <span style="color: #000000;">16000</span>
 スレーブ keytool: <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>keytool
    ～中略～
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java - 優先項目 <span style="color: #000000;">1420</span>
 スレーブ keytool: <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>keytool
    ～中略～
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.6.0_14<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java - 優先項目 <span style="color: #000000;">16014</span>
 スレーブ keytool: <span style="color: #7a0874; font-weight: bold;">&#40;</span>null<span style="color: #7a0874; font-weight: bold;">&#41;</span>
    ～中略～
現在の「最適」バージョンは <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.6.0_14<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java です。</pre></td></tr></table></div>

<p>以上のような詳細な状態の確認をすることができます。</p>
<p><code>--display</code> オプションで確認できる内容は、</p>
<ul>
<li>現在の動作モード</li>
<li>現在グループで選択されているプログラム</li>
<li>グループに登録されているプログラムとその優先度</li>
<li>プログラムに関連付けられているスレーブ(後述)</li>
<li>自動モード時に選択されるプログラム</li>
</ul>
<p>となります。</p>
<p>上記の実行結果から、</p>
<ul>
<li>OpenJDK と GCJ と jdk1.6.0_14 の計3種類の Java が update-alternatives で管理されている</li>
<li>OpenJDK の優先度は&#8221;16000&#8243;</li>
<li>GCJ の優先度は&#8221;1420&#8243;</li>
<li>jdk1.6.0_14 の優先度は&#8221;16014&#8243;</li>
<li>現在の動作モードは&#8221;手動&#8221;</li>
<li>現在、jdk1.6.0_14が選択されている</li>
<li>各スレーブの状態</li>
<li>自動モードにした場合、jdk1.6.0_14 が選択される(最適バージョン)</li>
</ul>
<p>ということが読み取れます。</p>
<h4 id="alternatives_remove">グループからプログラムを削除する</h4>
<p>グループに追加済みのプログラムをグループから削除します。</p>
<pre><code>update-alternatives --remove グループ名 プログラムパス</code></pre>
<p>それでは、jdk1.6.0_14 を削除してみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96845"><td class="code" id="p968code45"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --remove java /usr/java/jdk1.6.0_14/bin/java</span></pre></td></tr></table></div>

<p>きちんと削除されたか確認してみます。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96846"><td class="code" id="p968code46"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --config java</span>
&nbsp;
<span style="color: #000000;">2</span> プログラムがあり <span style="color: #ff0000;">'java'</span> を提供します。
&nbsp;
  選択       コマンド
<span style="color: #660033;">-----------------------------------------------</span>
<span style="color: #000000; font-weight: bold;">*</span>  <span style="color: #000000;">1</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
 + <span style="color: #000000;">2</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
&nbsp;
Enter を押して現在の選択 <span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #7a0874; font-weight: bold;">&#93;</span> を保持するか、選択番号を入力します:</pre></td></tr></table></div>

<p>きちんとプログラムパスで指定したものが消えていますね。</p>
<p>グループからプログラムを削除する際に、<br />
&#8220;自動&#8221;モードの場合、選択中のプログラムを削除した場合には、update-alternatives が優先度の大きいものに自動で変更します。<br />
&#8220;手動&#8221;モードの場合には、プログラム情報を削除するだけで選択情報は変更されないみたいです。<br />
また削除後に選択すべきプログラムが無い場合にはグループが削除されます。</p>
<p>ちなみに、プログラムパスを間違えると次のように怒られちゃいます。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96847"><td class="code" id="p968code47"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --remove java /usr/java/jdk1.6.0_14/</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.6.0_14<span style="color: #000000; font-weight: bold;">/</span> は java の為の互換用として設定されていません。</pre></td></tr></table></div>

<h4 id="unusable_options">RedHat系ディストリビューションでは使えないオプション</h4>
<p>Debianにはあっても、<br />
残念ながらRedHat系ディストリビューションでは使えないオプションがあるようです。</p>
<table class="content">
<caption>RedHat系ディストリビューションでは使えないオプション</caption>
<tr>
<th><code>--list</code></th>
<td>グループ内の管理プログラムを一覧表示する</td>
</tr>
<tr>
<th><code>--remove-all</code></th>
<td>グループごと削除する</td>
</tr>
<tr>
<th><code>--all</code></th>
<td>すべてのグループにたいして <code>--config</code> オプションを呼び出す</td>
</tr>
</table>
<p>使い道の思い浮かばない <code>--all</code> オプションはともかく、<br />
個人的に <code>--list</code> オプションは欲しかったように思います。<br />
<code>--display</code> オプションがありますが、<br />
グループ内のプログラムを参照するだけであれば <code>--config</code> オプションで見た方が視認性が高いかと思います。</p>
<h3 id="about_slave">スレーブとは</h3>
<p>簡単に言ってしまうと、</p>
<p><span class="strong">グループの選択プログラムが変更されると、スレーブとして登録されたプログラムも同時に変更する</span></p>
<p>機能です。</p>
<pre><code>update-alternatives --install 実行リンク グループ名 プログラムパス --slave 実行リンク グループ名 プログラムパス</code></pre>
<p>では今までの流れから、<br />
既に jdk1.6.0_14 が入ってる状態に、<br />
更に <a href="http://java.sun.com/j2se/1.5.0/ja/download.html">JDK1.5.0_update19</a>(以下jdk1.5.0_19) を入れてスレーブ機能を使ってみましょう。</p>
<p>jdk1.5.0_19 をインストールする際に、<br />
既に jdk1.6.0_14 をRPMパッケージでインストールしている場合、<br />
古いバージョンをRPMパッケージでインストール出来ないので、<br />
RPMパッケージを使わずに jdk-1_5_0_19-linux-amd64.bin を展開し /usr/java に配置します。</p>
<p>配置出来たら、jdk1.5.0_19 も update-alternatives で管理させます。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96848"><td class="code" id="p968code48"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># alternatives --install /usr/bin/java java /usr/java/jdk1.5.0_19/bin/java 15019</span></pre></td></tr></table></div>

<p>では、早速 jdk1.5.0_19 に切り替えてみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96849"><td class="code" id="p968code49"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># alternatives --config java</span>
&nbsp;
<span style="color: #000000;">4</span> プログラムがあり <span style="color: #ff0000;">'java'</span> を提供します。
&nbsp;
  選択       コマンド
<span style="color: #660033;">-----------------------------------------------</span>
   <span style="color: #000000;">1</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.6.0-openjdk.x86_64<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
   <span style="color: #000000;">2</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>jvm<span style="color: #000000; font-weight: bold;">/</span>jre-1.4.2-gcj<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
<span style="color: #000000; font-weight: bold;">*</span>+ <span style="color: #000000;">3</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.6.0_14<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
   <span style="color: #000000;">4</span>           <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
&nbsp;
Enter を押して現在の選択 <span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #7a0874; font-weight: bold;">&#93;</span> を保持するか、選択番号を入力します:<span style="color: #000000;">4</span></pre></td></tr></table></div>

<p>早速 Java のバージョンを確認。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96850"><td class="code" id="p968code50"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># java -version</span>
java version <span style="color: #ff0000;">&quot;1.5.0_19&quot;</span>
Java<span style="color: #7a0874; font-weight: bold;">&#40;</span>TM<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000;">2</span> Runtime Environment, Standard Edition <span style="color: #7a0874; font-weight: bold;">&#40;</span>build 1.5.0_19-b02<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Java HotSpot<span style="color: #7a0874; font-weight: bold;">&#40;</span>TM<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000;">64</span>-Bit Server VM <span style="color: #7a0874; font-weight: bold;">&#40;</span>build 1.5.0_19-b02, mixed mode<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>うまく切り替わっているのが確認出来ますね。</p>
<p>しかし、</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96851"><td class="code" id="p968code51"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># javac -version</span>
javac 1.6.0_14</pre></td></tr></table></div>

<p>Java はうまく切り替わっていても、<br />
javac は jdk1.6.0_14 のものを使ってしまっています。</p>
<p>javac をはじめ、jar や javadoc など Java の変更に伴って同時に変更したいプログラムがいくつかあります。<br />
一つ一つを丁寧に update-alternatives に登録 &#8211;> 変更と繰り返すことで解決はしますが、<br />
Java を切り替える度にいくつものその他プログラムを切り替えるのは少々骨が折れる作業となります。</p>
<p>そんな時に活用したいのがスレーブ機能です。</p>
<p>スレーブ機能とは最初に紹介した通り、</p>
<p><span class="strong">グループの選択プログラムが変更されると、スレーブとして登録されたプログラムを同時に変更する</span></p>
<p>です。</p>
<p>なんだか今回の事例にピッタリな機能ですよね。</p>
<p>では、早速スレーブ機能を使ってみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96852"><td class="code" id="p968code52"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># alternatives --install /usr/bin/java java /usr/java/jdk1.5.0_19/bin/java 15019\</span>
      <span style="color: #660033;">--slave</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>javac javac <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>javac</pre></td></tr></table></div>

<p><code>--install</code> オプションでの追加時に <code>--slave</code> オプションを設定するだけです。<br />
(既にグループにプログラムが登録済みでも上書き出来ます。)</p>
<p>これでスレーブを保持する jdk1.5.0_19 の追加が出来ました。</p>
<p>では、早速 update-alternatives で jdk1.5.0_19 に切り替えて、<br />
javac がどうなっているか確認してみましょう。<br />
(既に jdk1.5.0_19 の場合は、他に変更後、再度 jdk1.5.0_19 に変更してください)</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96853"><td class="code" id="p968code53"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># javac -version</span>
javac 1.5.0_19</pre></td></tr></table></div>

<p>javac も Java と一緒に更新されていることが確認できました。</p>
<p>このスレーブは <code>--install</code> オプションの設定時に何個でも登録することが出来ます。<br />
複数個の登録の場合には、</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96854"><td class="code" id="p968code54"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># alternatives --install /usr/bin/java java /usr/java/jdk1.5.0_19/bin/java 15019\</span>
      <span style="color: #660033;">--slave</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>jar jar <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>jar\
      <span style="color: #660033;">--slave</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>javac javac <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>javac\
      <span style="color: #660033;">--slave</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>javadoc javadoc <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>javadoc</pre></td></tr></table></div>

<p>のように実行してください。</p>
<p>自分で必要なだけスレーブを追加出来るので、<br />
記述は冗長になってしまいますが毎回1つ1つを変更していくよりもはるかに効率的ですね。</p>
<p>ちなみに、<br />
上記の javac の設定だけだと jdk1.6.0_14 に戻した際に、<br />
javac は変更されないので、<br />
jdk1.6.0_14 にも同様に javac などスレーブを設定する必要があります。</p>
<h3 id="file_alternatives">update-alternatives の簡単なファイル構成</h3>
<p>ここでは簡単な update-alternatives のファイル構成を解説したいと思います。</p>
<h4 id="alternatives_directory">alternatives ディレクトリ ( /etc/alternatives )</h4>
<p>update-alternatives の Java グループでどのJavaが選択されていても、<br />
一様に /usr/bin/java を操作すれば問題無く任意の Java を実行することが出来ました。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96855"><td class="code" id="p968code55"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># ls -l /usr/bin/java</span>
lrwxrwxrwx <span style="color: #000000;">1</span> root root <span style="color: #000000;">22</span>  <span style="color: #000000;">4</span>月 <span style="color: #000000;">25</span> 02:04 <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java -<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>alternatives<span style="color: #000000; font-weight: bold;">/</span>java</pre></td></tr></table></div>

<p>この /usr/bin/java が /etc/alternatives/java のシンボリックリンクであることが分かります。</p>
<p>では /etc/alternatives/java も見てみましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96856"><td class="code" id="p968code56"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># ls -l /etc/alternatives/java</span>
lrwxrwxrwx <span style="color: #000000;">1</span> root root <span style="color: #000000;">30</span>  <span style="color: #000000;">8</span>月  <span style="color: #000000;">3</span> 00:<span style="color: #000000;">41</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>alternatives<span style="color: #000000; font-weight: bold;">/</span>java -<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java</pre></td></tr></table></div>

<p>この /etc/alternatives/java が、<br />
グループで選択されたプログラムの実体のシンボリックリンクになっていることが分かります。</p>
<p>つまり、update-alternatives は、<br />
選択したプログラムのシンボリックリンクを作り替えてプログラムを切り替えているみたいですね。</p>
<p>プログラムを実行すると、</p>
<p><span class="strong">実行リンク &#8212;-> /etc/alternatives/グループ名 &#8212;-> プログラムパス</span></p>
<p>のようにプログラム本体を参照しているということになります。</p>
<p>ちなみに /etc/alternatives 以下を参照してみると、</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96857"><td class="code" id="p968code57"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># ls -l /etc/alternatives/</span>
合計 <span style="color: #000000;">80</span>
lrwxrwxrwx <span style="color: #000000;">1</span> root root <span style="color: #000000;">19</span>  <span style="color: #000000;">4</span>月 <span style="color: #000000;">25</span> 02:06 antlr -<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>antlr-java
lrwxrwxrwx <span style="color: #000000;">1</span> root root <span style="color: #000000;">30</span>  <span style="color: #000000;">8</span>月  <span style="color: #000000;">3</span> 00:<span style="color: #000000;">41</span> java -<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>java
lrwxrwxrwx <span style="color: #000000;">1</span> root root <span style="color: #000000;">31</span>  <span style="color: #000000;">8</span>月  <span style="color: #000000;">3</span> 00:<span style="color: #000000;">41</span> javac -<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>jdk1.5.0_19<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>javac
    ～後略～</pre></td></tr></table></div>

<p>スレーブで設定した javac もこちらで切り替えるためにシンボリックリンクになっているのが分かります。</p>
<p>この alternatives ディレクトリは、<br />
<code>--altdir</code> オプションにより /etc/alternatives から別のディレクトリに変更することが出来ます。</p>
<h4 id="administration_directory">管理ディレクトリ ( /var/lib/alternatives )</h4>
<p>プログラムを切り替える仕組みは alternatives ディレクトリで確認出来ますが、<br />
グループのモードやスレーブの関係などの情報は管理ディレクトリを見ることで確認することが出来ます。</p>
<p>例えば、Java グループの各情報は /var/lib/alternatives/java にテキストで格納されています。</p>
<p>この管理ファイルの細かいフォーマット形式はよく分かりませんが、<br />
中身はテキストでそのままのことが書いてあるので何となくの情報は読み取れます。</p>
<p>この管理ディレクトリをよく見ると、<br />
スレーブで設定されたグループ(本エントリでは javac)の情報ファイルは作成されていないようですね。</p>
<p>ちなみにこの 管理ディレクトリは、<br />
<code>--admindir</code> オプションにより /var/lib/alternatives から別のディレクトリに変更することが出来ます。</p>
<h3 id="common_options">共通オプション</h3>
<p>管理プログラムの操作(アクション)について一通り説明しましたが、<br />
ここでは全アクションに対応する共通オプションについて解説します。</p>
<table class="content">
<tr>
<th><code>--verbose</code></th>
<td>詳細な情報を表示します。</td>
</tr>
<tr>
<th><code>--quiet</code></th>
<td>エラー以外の情報を表示しません。<span class="red">未実装</span></td>
</tr>
<tr>
<th><code>--test</code></th>
<td>指定した操作をテストします。実際には何も更新されません。<span class="red">未実装</span></td>
</tr>
<tr>
<th><code>--help</code></th>
<td>update-alternatives に関する簡単な使用方法を表示します。</td>
</tr>
<tr>
<th><code>--altdir</code> directory</th>
<td>alternativesディレクトリ(デフォルト : /etc/alternatives(alternatives)を指定したディレクトリに変更します。</td>
</tr>
<tr>
<th><code>--admindir</code> directory</th>
<td>管理ディレクトリ(デフォルト : /var/lib/alternatives)を指定したディレクトリに変更します。</td>
</tr>
</table>
<h3 id="end">まとめ</h3>
<p>さて、ひたすら update-alternatives について説明してみましたがいかがだったでしょうか?</p>
<p>意外と簡単だけど案外知らない人も多い update-alternatives コマンド。<br />
上手に使いこなせれば良い武器になると思います。</p>
<p>ここで、僕のもっぱらの使い方を紹介しましょう。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96858"><td class="code" id="p968code58"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-alternatives --config 彼女</span>
&nbsp;
致命的なエラー : 何も登録されていません<span style="color: #000000; font-weight: bold;">!!!</span></pre></td></tr></table></div>

<p><span class="strong">･･･････････orz</span></p>
<h3 id="documents">参考文献</h3>
<ul>
<li><a href="http://linux.die.net/man/8/update-alternatives">update-alternatives(8) &#8211; Linux man page</a></li>
<li><a href="http://www.pinkdragon.net/DocumentsLibrary/contents/ja/Linux_man/update-alternatives.8.html">Linux man &#8211; update-alternatives</a>(Debianのmanですが日本語に翻訳されています)</li>
</ul>
<h3 id="bonus_install_jdk">おまけ &#8211; SUNのJDKをCentOS 5.3にインストールする</h3>
<p>簡単に僕がSUNのJDKをインストールする手順を紹介します。</p>
<p>jdk1.6.0_14 のファイルのURIを<a href="http://java.sun.com/javase/ja/6/download.html">SUNのサイト</a>から拾ってきます。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96859"><td class="code" id="p968code59"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># cd /usr/local/src</span>
<span style="color: #666666; font-style: italic;"># wget http://cds.sun.com/ ～中略～ /FileName=/jdk-6u14-linux-x64-rpm.bin</span>
名前が長いのでリネーム
<span style="color: #666666; font-style: italic;"># mv jdk-6u14-linux-x64-rpm.bin\ ～中略～ \jdk-6u14-linux-x64-rpm.bin jdk-6u14-linux-x64-rpm.bin</span>
<span style="color: #666666; font-style: italic;"># chmod u+x jdk-6u14-linux-x64-rpm.bin</span>
<span style="color: #666666; font-style: italic;"># ./jdk-6u14-linux-x64-rpm.bin</span></pre></td></tr></table></div>

<p>これで /usr/java に jdk1.6.0_14 がインストールされます。</p>
<p>環境変数を設定する場合は ~/.bash_profile に</p>

<div class="wp_codebox"><table width="100%" ><tr id="p96860"><td class="code" id="p968code60"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">JAVA_HOME</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>java<span style="color: #000000; font-weight: bold;">/</span>default
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">PATH</span>=<span style="color: #007800;">$PATH</span>:<span style="color: #007800;">$JAVA_HOME</span><span style="color: #000000; font-weight: bold;">/</span>bin
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">CLASSPATH</span>=.:<span style="color: #007800;">$JAVA_HOME</span><span style="color: #000000; font-weight: bold;">/</span>jre<span style="color: #000000; font-weight: bold;">/</span>lib:<span style="color: #007800;">$JAVA_HOME</span><span style="color: #000000; font-weight: bold;">/</span>lib:<span style="color: #007800;">$JAVA_HOME</span><span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>tools.jar</pre></td></tr></table></div>

<p>とでも記述しておくと良い感じです。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/08/update-alternatives.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/08/update-alternatives.html" />
	</item>
		<item>
		<title>JSFでAjaxを使いたい &#8211; OpenFacesの紹介 -</title>
		<link>http://blog.eni.co.jp/tech/2009/06/jsf_ajax_openfaces.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/06/jsf_ajax_openfaces.html#comments</comments>
		<pubDate>Wed, 10 Jun 2009 06:41:50 +0000</pubDate>
		<dc:creator>武輪 恭代</dc:creator>
				<category><![CDATA[JSF]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[OpenFaces]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=631</guid>
		<description><![CDATA[はじめまして。
プロダクト&#38;サービス事業部の武輪です。
Ajaxと言えば、JavaScriptをごりごり書かないと！ってイメージがあるのですが、JavaScriptを少し書くだけ、もしくはまったく書かずに、コンポーネント側で勝手にやってくれれば簡単ですよね。
Ajaxを用いたJSFコンポーネントやフレームワークって他にも、RichFacesやらajax4jsfやらICEfacesやらがあるのですけども、今回私は、OpenFacesというJSFコンポーネントを紹介したいと思います。
OpenFacesは2009年5月末に出てきたばかりのAjaxを用いたJSFコンポーネントです。
サイトからはfaceletsで実装されたサンプルとJSPで実装されたサンプルをダウンロードすることができます。
早速、faceletsで実装されたサンプルを動かしてみました。

どんな機能があるの？
サンプルにはたくさんの魅力的なデモが含まれていたのですが、そのうちのいくつかを紹介したいと思います。
カレンダー

よくこんなカレンダーありますよね。

1
&#60;o:calendar/&#62;

xhtmlファイルにはたったこれだけで画面にカレンダーがぽんと表示されちゃいます。
また、下のようにスタイルを細かく指定することもできます。

1
2
3
4
5
6
7
8
9
10
11
&#60;o:calendar style=&#34;border: 1px solid white;&#34;
            headerStyle=&#34;background: #fff;&#34;
            rolloverDayStyle=&#34;background: #fff; border: 1px solid #8eb5d4; color: black;&#34;
            rolloverWeekendDayStyle=&#34;background: #f9f6f1; border: 1px solid #f3922b; color: [...]]]></description>
			<content:encoded><![CDATA[<p>はじめまして。<br />
プロダクト&amp;サービス事業部の武輪です。</p>
<p>Ajaxと言えば、JavaScriptをごりごり書かないと！ってイメージがあるのですが、JavaScriptを少し書くだけ、もしくはまったく書かずに、コンポーネント側で勝手にやってくれれば簡単ですよね。<br />
Ajaxを用いたJSFコンポーネントやフレームワークって他にも、<a href="http://www.jboss.org/jbossrichfaces/">RichFaces</a>やら<a href="http://www.jboss.org/jbossajax4jsf/">ajax4jsf</a>やら<a href="http://www.icefaces.org/">ICEfaces</a>やらがあるのですけども、今回私は、<a href="http://openfaces.org/">OpenFaces</a>というJSFコンポーネントを紹介したいと思います。</p>
<p>OpenFacesは2009年5月末に出てきたばかりのAjaxを用いたJSFコンポーネントです。<br />
サイトからはfaceletsで実装されたサンプルとJSPで実装されたサンプルをダウンロードすることができます。</p>
<p>早速、faceletsで実装されたサンプルを動かしてみました。</p>
<p><span id="more-631"></span></p>
<h3>どんな機能があるの？</h3>
<p>サンプルにはたくさんの魅力的なデモが含まれていたのですが、そのうちのいくつかを紹介したいと思います。</p>
<h4>カレンダー</h4>
<p><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/06/calender1.png" alt="デフォルトのカレンダー" title="デフォルトカレンダー" width="207" height="186" class="size-full wp-image-646" /></p>
<p>よくこんなカレンダーありますよね。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p63164"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p631code64"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;o:calendar</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></td></tr></table></div>

<p>xhtmlファイルにはたったこれだけで画面にカレンダーがぽんと表示されちゃいます。<br />
また、下のようにスタイルを細かく指定することもできます。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p63165"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p631code65"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;o:calendar</span> <span style="color: #000066;">style</span>=<span style="color: #ff0000;">&quot;border: 1px solid white;&quot;</span></span>
<span style="color: #009900;">            <span style="color: #000066;">headerStyle</span>=<span style="color: #ff0000;">&quot;background: #fff;&quot;</span></span>
<span style="color: #009900;">            <span style="color: #000066;">rolloverDayStyle</span>=<span style="color: #ff0000;">&quot;background: #fff; border: 1px solid #8eb5d4; color: black;&quot;</span></span>
<span style="color: #009900;">            <span style="color: #000066;">rolloverWeekendDayStyle</span>=<span style="color: #ff0000;">&quot;background: #f9f6f1; border: 1px solid #f3922b; color: black;&quot;</span></span>
<span style="color: #009900;">            <span style="color: #000066;">selectedDayStyle</span>=<span style="color: #ff0000;">&quot;background: #8eb5d4;&quot;</span></span>
<span style="color: #009900;">            <span style="color: #000066;">todayStyle</span>=<span style="color: #ff0000;">&quot;color: #ff8a01; font-weight: bold; background: #fff;&quot;</span></span>
<span style="color: #009900;">            <span style="color: #000066;">footerStyle</span>=<span style="color: #ff0000;">&quot;border-top: 1px solid #505050; background: #fff;&quot;</span></span>
<span style="color: #009900;">            <span style="color: #000066;">daysHeaderStyle</span>=<span style="color: #ff0000;">&quot;background: #505050; color: white;&quot;</span></span>
<span style="color: #009900;">            <span style="color: #000066;">inactiveMonthDayStyle</span>=<span style="color: #ff0000;">&quot;color: #b4b4b4; background: #fff;&quot;</span></span>
<span style="color: #009900;">            <span style="color: #000066;">dayStyle</span>=<span style="color: #ff0000;">&quot;color: #505050;  background: #fff; border: 1px solid #f9f9f9;&quot;</span></span>
<span style="color: #009900;">            <span style="color: #000066;">weekendDayStyle</span>=<span style="color: #ff0000;">&quot;color: #000000;  background: #fff;&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></td></tr></table></div>

<p>これが画面に表示されるとこんな感じ。<br />
<img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/06/calender2.png" alt="カレンダー" title="カレンダー" width="211" height="195" class="alignnone size-medium wp-image-650" /></p>
<p>ちなみにデモではすべて～～Styleでcssを直接指定していましたが、～～Classというアトリビュートでcssのクラスを指定することもできます。<br />
JAVA側の実装もシンプルな感じ。<br />
CalendarBean.javaとLocaleItem.javaの2クラスだけでした。</p>
<h4>グラフ</h4>
<p><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/06/chart-300x260.png" alt="グラフ" title="グラフ" width="300" height="260" class="alignleft size-medium wp-image-654" /><br />
OpenFacesでは、JFreeChartというライブラリーを利用してグラフを生成できます。<br />
円グラフ、横棒グラフ、縦棒グラフ、折れ線グラフの4種類が用意されています。<br />
<br clear="all"/></p>
<p>円グラフの記述例は↓こんな感じ。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p63166"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code" id="p631code66"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;o:chart</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;yearPrecipitationChart&quot;</span></span>
<span style="color: #009900;">        <span style="color: #000066;">model</span>=<span style="color: #ff0000;">&quot;#{CityPrecipitation}&quot;</span></span>
<span style="color: #009900;">        <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;320&quot;</span></span>
<span style="color: #009900;">        <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;275&quot;</span></span>
<span style="color: #009900;">        <span style="color: #000066;">legendVisible</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;o:pieChartView</span> <span style="color: #000066;">colors</span>=<span style="color: #ff0000;">&quot;#5a87be, #94c237, #fff555, #da6a28&quot;</span> <span style="color: #000066;">labelsVisible</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;o:chartTitle</span> <span style="color: #000066;">text</span>=<span style="color: #ff0000;">&quot;Amount of Precipitation During the Year&quot;</span></span>
<span style="color: #009900;">                <span style="color: #000066;">style</span>=<span style="color: #ff0000;">&quot;font-size: 14px;&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/o:chart<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>BackingBeanは、それぞれのグラフ用にChartModelというインターフェースを実装したmodelをもっています。<br />
そのmodelを元にグラフが描画されるみたい。</p>
<h4>データテーブル</h4>
<p><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/06/data_tablle-300x225.png" alt="Data Table" title="Data Table" width="300" height="225" class="alignleft size-medium wp-image-663" /><br />
データリストの一覧表示には以下の機能が備わっています。<br clear="all"/></p>
<ul>
<li><strong>検索</strong></li>
<li><strong>ソート</strong></li>
<li><strong>ページング</strong></li>
<li><strong>選択</strong>・・・1行選択したり複数行選択したり。</li>
<li><strong>カラムのリサイズ</strong></li>
<li><strong>キーボード操作</strong>・・・方向キーで選択行を変更したり、Shiftキー＋方向キーで複数行選択したり。</li>
</ul>
<h4>他にもいろいろ面白そうな機能があります</h4>
<p>ウィンドウの表示とか。<br />
ポップアップメニュー(右クリックでメニュー表示)とか。<br />
ツリー状メニューの表示とか。<br />
カレンダーからの日付選択とか。</p>
<p>たくさんの面白そうな機能がついているので、ぜひ実際に動く様子を見てみてください。(→<a href="http://openfaces.org/demo/">OpenFaces Live Demo</a>)</p>
<h3>ところでライセンスは？</h3>
<p>OpenFacesが採用しているライセンスは、dual license modelです。</p>
<p>dual licenseって何よ？って話なんですけども、簡単に言うと、開発したアプリケーションのライセンスをLGPLにするなら無償、そうでないならOpenFacesの商用ライセンスを購入してねってことみたいです。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/06/jsf_ajax_openfaces.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/06/jsf_ajax_openfaces.html" />
	</item>
	</channel>
</rss>
