ひよっこ。

I want to…

混ぜるな危険….(RPMとyumの衝突)

Posted by hikaruworld : 2010 1月 7

先日誰かの作成した環境を触っていたら、Tomcatの起動時に以下のようなエラーが発生していました。

[root]# /etc/init.d/tomcat5 start
Starting tomcat5: /usr/bin/rebuild-jar-repository: error: Could not find jdbc-stdext Java extension for this JVM
/usr/bin/rebuild-jar-repository: error: Could not find jndi Java extension for this JVM
/usr/bin/rebuild-jar-repository: error: Some detected jars were not ftound for this jvm
/usr/bin/rebuild-jar-repository: error: Could not find jaas Java extension for this JVM
/usr/bin/rebuild-jar-repository: error: Some detected jars were not found for this jvm

エラーメッセージをググったり、検索したりしてみると直接の原因は以下で、ライブラリが見つからないようです。

[root]# ls -la /usr/share/tomcat5/common/lib
lrwxrwxrwx 1 root   root       38  1月  7 10:35 [jdbc-stdext].jar -> /could/not/find/extension/for/this/jvm
lrwxrwxrwx 1 root   root       38  1月  7 10:35 [jndi].jar -> /could/not/find/extension/for/this/jvm

サーバを検索してみると、以下に実体を発見したので、
シンボリックリンクを切り替えてみたが、やっぱりうまく行きません。

[root]# locate jndi.jar
/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre/lib/jndi.jar
/usr/lib/jvm-exports/java-1.4.2-gcj-1.4.2.0/jndi.jar

色々調べていると、まさに以下の現象が発生していました。Thanks. ありえるえりあ

step4.
最初、http://java.sun.com/のJ2SE5 JDKのrpmをインストールしていました。tomcat5パッケージのインストールで[エラーA](脚注)が出ました。jta以外(jaas,jce, jsse)はJ2SE5に標準で統合済みです。tomcat5のrpmパッケージとSunが配布するrpmパッケージにずれがあります。パッケージ管理の一番の障害(いわゆる「混ぜるな危険」)です。
こういう場合はおとなしく、片方に従う方が楽です。JPackageに身を任せた以上、JPackageのrpmパッケージを使うことにします(JPackageのrpmはspecファイルだけがあり、インストールするファイルの実体はSun配布のJDKです)。

つまり、JavaはSun標準のものをRPMでインストールし(てパスを通したので)、
Tomcatはyumでインストール(yum側のJavaを見ている?)したためにパッケージの内容がずれているとorz…
仕方ないので、上記忠告通りJPackageのPRMパッケージを利用することにします。
Tomcatをソースからインストールする方が楽なんだけど、やらないのは大人の事情です)

  1. まずは、jpakcageがyumでインストールされているか確認します。
    [root]# yum install jpackage-utils
    ~中略~
    Package jpackage-utils - 1.7.3-1jpp.2.el5.noarch is already installed.
    Nothing to do
    

    既にインストールされているようです。

  2. 次にJPackage上のJavaのバージョンを確認します。
    [root]# alternatives --config java
    
    1 プログラムがあり 'java' を提供します。
    
      選択       コマンド
    -----------------------------------------------
    *+ 1           /usr/lib/jvm/jre-1.4.2-gcj/bin/java
    

    gcj版のJava1.4.2がインストールされています。
    今回のアプリケーションはJava1.5以上が必要なため、JPackageにjava1.5をインストールする必要があります。

  3. 以降は、http://d.hatena.ne.jp/KishikawaKatsumi/20080504/1209922424を参考に作業します。Thanks!
    JPackageから、対象のjdkをダウンロード
    今日、この時点ではjdk5のバージョンは1.5.0.14のものしか置いてなかったので、これにあわせます。
    (SRPMをビルドすればよいかも知れないけど、いまいちよくわからないのでやりません。ありえるえりあさんの記事を参考にしてください。)
  4. バージョンに合ったJDKをダウンロード
    Sunから。自分の場合JDK1.5なのでアーカイブから落とします(Linux RPM in self-extracting file)。
    バージョンはあわせておかないとインストール時にエラーになるので注意してください。
    JPackageをインストールする際に対応するJDKが必要になるようです。
    ない状態でJPackageだけインストールしようとすると依存性のエラーで落ちます。

    [root]# rpm -ivh --test java-1.5.0-sun-compat-1.5.0.14-1jpp.i586.rpm
    警告: java-1.5.0-sun-compat-1.5.0.14-1jpp.i586.rpm: ヘッダ V3 DSA signature: NOKEY, key ID c431416d
    エラー: 依存性の欠如:
            jdk = 2000:1.5.0_14-fcs は java-1.5.0-sun-compat-1.5.0.14-1jpp.i586 に必要とされています
    
  5. SunのJDK及びJPackageのJDKのインストール
    省略。実行権与えて実行すればインストールまで済ませてくれます。
  6. JDKの切り替え
    [root]# alternatives --config java
    
    2 プログラムがあり 'java' を提供します。
    
      選択       コマンド
    -----------------------------------------------
     + 1           /usr/lib/jvm/jre-1.4.2-gcj/bin/java
    *  2           /usr/lib/jvm/jre-1.5.0-sun/bin/java
    
    Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
    

    2.を押下してjre1.5に切り替えます。

  7. バージョンチェック
    [root]# java -version
    java version "1.5.0_11"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
    Java HotSpot(TM) Client VM (build 1.5.0_11-b03, mixed mode, sharing)
    

以上です。
alternatives なんてコマンドを今日知りました。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

 
%d人のブロガーが「いいね」をつけました。