最終更新日:

KNOPPIX実験室


サーバ関係の実験結果報告




 

Howto3-4

Tomcatをインストールして、JSP/Servletサーバを立ち上げる。
(リマスタせずにシステムを拡張する方法の一例)

概要

TomcatやJava、JSP、servletについては、詳しく解説した本・雑誌・ホームページなどがたくさんあるので、そちらにお任せすることにして、ここでは、KNOPPIXにこれらをインストールするにはどうすればよいかに絞って解説することにします。

TomcatのスタンドアロンWebサーバを通常のLinuxで立ち上げるのは比較的簡単です。単にJavaとTomcatをインストールして、自動起動を設定するだけですみます。

KNOPPIXでも、同様な方法でTomcatをインストールすることは出来ますが、RAMディスクにインストールされてしまうため、そのままだと、毎回起動するたびにインストールする必要が生じてしまいます。これでは、KNOPPIXにTomcatをインストールしたとは言いづらい状態ですね。

KNOPPIXに何かをインストールするというと、すぐに、KNOPPIXをHDインストールした上でCDROMをリマスタする話が出てくるようですが、私の意見は違います。高々数百MB程度の少量な拡張の場合には、このようなHDインストールやリマスタは必要無いというのが私の意見です。

リマスタ版をつくるには、高いマシンスペック(HD容量、メモリ、CPU性能)と長い処理時間、そして、それを実行しようとする人の多大な労力を消費するはずです。しかも、そうして苦労してリマスタ版を作っても、それが使えるのは作ってからしばらくの間だけです。昨年のKNOPPIXは、ほぼ毎月のようにバージョンアップしてくれましたが、それに追随してリマスタ版を作るのは、かなり困難だと思われるからです。リマスタ版を作るための労力は、毎回同じ程度かかるはずだからです。実際、定期的にバージョンアップ版を出してくれる日本語版は、産総研版とyak版だけです。他の日本語のリマスタ版では1回出たきりのものが多いことからも、このことは分かると思います。

幸い、KNOPPIXには、「KNOPPIXの設定の保存」や「継続的ホームディレクトリの作成」という機能があり、これらを使うと、カスタマイズした部分だけをシステムから分離して保存しておくことが出来ます。最近のバージョンアップでは、これらの保存してあるカスタマイズ内容を、そのまま使い続けられるケースが続いたので、新バージョンに追随するのは非常に簡単でした。また、そのままでは使い続けられないケース(昨年、何回かあった)でも、比較的簡単な対処で使えるようになりましたし、そのノウハウはKNOPPIXメーリングリストに流れていました。

そこで、ここでは、JavaとTomcatを継続的ホームディレクトリにインストールする方法を紹介します。

インストール方法

以下の説明では、KNOPPIX実験室で提供しているminiroot.gzを使ってFAT32インストール(Howto1-1参照)してあり、GRUBで起動するときのブートオプションには「linuxrc2 mvetc」を指定してあることを想定して解説します。

  1. あらかじめ、JavaとTomcatをダウンロードしておきます。私は、以下のものをダウンロードしました。

    • j2sdk-1_4_2_03-linux-i586.bin

    • jakarta-tomcat-4.1.29.tar.gz

  2. 継続的ホームディレクトリを作成します。
    容量はJavaとTomcatだけなら128MB程度でも足りるはずですが、今後のことを考え、256MB程度確保することを推奨します。その方法は柘植さんのサイトに良い解説があるので、そちらを参照してください。(ただし、本実験室で提供するminiroot.gzを使って「linuxrc2 mvetc」を指定してブートしている場合は、一部の画面が表示されずにスキップされたり、内容が少し変わっていたりする場合があります。これは本実験室で提供するminiroot.gzでは、FAT32インストールした環境での使い勝手の向上を考えてmkpersistenthomeを書き換えるために発生するものです。他にも、いくつかの変更点があります。詳細は、こちらを参照してください。)

  3. mkwritableでシンボリックリンクを実体化するときに使用するディレクトリを継続的ホームディレクトリ内に確保します。
    具体的には、Konsoleで以下のコマンドを実行してください。(このコマンド列はKonquerorからKonsoleにコピー&貼り付けしてご利用ください。)

  4. $
    #
    #
    #
    >
    >

    >
    #

    sudo  -s
    mount  /cdrom/knoppix/ja/knoppix.img  -o  loop  /mnt/test
    mkdir  -p  /mnt/test/.mkwritable/.enabled
    for  dir  in  bin  boot  lib  opt  usr;  do
    touch /mnt/test/.mkwritable/.enabled/$dir
    [  -d  /ramdisk/$dir  ]  &&  cp  -pr  /ramdisk/$dir  /mnt/test/.mkwritable/.
    done

  5. 本実験室で提供する継続的ホームディレクトリ用のknoppix.sh()をダウンロードして/mnt/test/knoppix.shに配置します。 実際に継続的ホームディレクトリを使用する時は、このファイルは/home/knoppix/knoppix.shになる点にご注意下さい。このファイルの説明はこちら

  6. 継続的ホームディレクトリを使用可能にするためにリブートします。
    ブートオプションに継続的ホームディレクトリを使用(home=scanなど)と「myconf=scan」を指定してリブートしてください。そのためには、ブートオプションには少なくとも「linuxrc2 mvetc home=scan myconf=scan」を指定します。

  7. Javaをインストールします。

    KNOPPIXにはJRE(Java Runtime Environment)のインストーラが用意されているのですが、対象バージョンが固定されており、今回用意したバージョンとは一致しません。今回使用した産総研のKNOPPIX_20031119-20040202版に用意されていたものは、1.4.2-02対応のインストーラでした。しかし、今回インストールしたいのはJava2 SDKの方で、バージョンも1.4.2-03です。そこで、JRE-1.4.2-02用のインストーラをSDK-1.4.2-03用に書き換えて使用することにします。

    まず、JRE用のインストーラをSDK用に書き換えるために、Konsoleで以下のコマンドを実行します。(このコマンド列はKonquerorからKonsoleにコピー&貼り付けしてご利用ください。)

  8. $
    #
    #
    #

    sudo  -s
    mkwritable  /usr/bin
    sed  's/j2re/j2sdk/g'  </usr/bin/install_j2re.sh  >/usr/bin/install_j2sdk.sh
    chmod  +x  /usr/bin/install_j2sdk.sh

    次にスーパーユーザモードのテキストエディタで、ファイル/usr/bin/install_j2sdk.shのバージョン番号を以下のように書き換えます。

    (変更前)

    JAVA_HOME="j2sdk1.4.2_02"
    JAVA_PATH= # set default path
    JAVA_NAME="j2sdk-1_4_2_02-linux-i586.bin"

    (変更後)

    JAVA_HOME="j2sdk1.4.2_03"
    JAVA_PATH= # set default path
    JAVA_NAME="j2sdk-1_4_2_03-linux-i586.bin"

    最後に、このファイル/usr/bin/install_j2sdk.shを実行して、Java2 SDKをインストールします。

  9. Tomcatをインストールします。
    Konsoleで以下のコマンドを実行してください。

  10. $
    #
    #

    #

    sudo -s

    mkwritable  /usr/local/src
    cd  /usr/local
    tar  zxvf  <Tomcatをダウンロードしたディレクトリ>/jakarta-tomcat-4.1.29.tar.gz

  11. Tomcatの自動起動を設定します。

    自動起動の設定には、Howto3-3などで行ったように/etc/init.dにファイルを作り、そこへのシンボリックリンクを/etc/rc?.dに作成すればよいのですが、/etcはRAMディスク内にあるので、何らかの方法で、この設定を保存する必要があります。Howto3-1〜3で行ったように「KNOPPIXの設定を保存」を使って保存するのも1つの方法ですが、今回は継続的ホームディレクトリが使えるので、そこに保存する方法を紹介します。

    本実験室で提供する継続的ホームディレクトリ用のknoppix.shは、ブート時、継続的ホームディレクトリをマウントした後で実行され、以下の処理を実行します。

    • /home/knoppix/knoppix.sh.d/files.dディレクトリ配下にあるファイル・ディレクトリをルートディレクトリ「/」配下にディレクトリ構成を保存してコピーします。このとき、CDROMへのシンボリックリンクになっているものがあれば、mkwritableで実体化してからコピーします。
      例えば、/home/knoppix/knoppix.sh.d/files.d/etc/init.d/tomcatというファイルがあると、これは、/etc/init.d/tomcatにコピーされます。

    • /home/knoppix/knoppix.sh.d/sh.dディレクトリ配下にあるファイルで、ファイル名が「patch*.sh」にマッチするものがあれば、これを実行します。そのようなファイルが複数あれば、アルファベット順に実行されます。例えば、ランレベル3〜5でTomcatが自動起動するよう設定するスクリプトをファイル/home/knoppix/knoppix.sh.d/sh.d/patchAutoTomcat.shに作成しておくと、ブート時にこれが実行されるため、Tomcatが自動起動するようになります。

    そこで、この継続的ホームディレクトリ用のknoppix.shの機能を利用してTomcatの自動起動を設定します。具体的には以下のようにします。

    まず、Konsoleで以下のコマンドを実行してください。(このコマンド列はKonquerorからKonsoleにコピー&貼り付けしてご利用ください。)

  12. $
    $

    $

    cd

    mkdir -p knoppix.sh.d/files.d/etc/init.d

    mkdir -p knoppix.sh.d/sh.d

    次にテキストエディタで、ファイルknoppix.sh.d/files.d/etc/init.d/tomcatを作成し、以下の内容を入力します。(この内容はKonquerorからコピー&貼り付けしてご利用ください。)
    このファイルはTomcatの起動・停止処理用のスクリプトで、ブート時に/home/knoppix/knoppix.shによって/etc/init.d/tomcatにコピーされます。

    #!/bin/sh
    #
    # Start/stops the Tomcat
    #
    export JAVA_HOME=/home/knoppix/j2sdk1.4.2_03
    export CATARINA_HOME=/usr/local/jakarta-tomcat-4.1.29
    test -x $CATARINA_HOME/bin/startup.sh || exit 0
    
    cd $CATARINA_HOME
    
    case "$1" in
         start)
              echo "Starting web application server: Tomcat."
              $CATARINA_HOME/bin/startup.sh
              ;;
         stop)
              echo "Stopping web application server: Tomcat."
              $CATARINA_HOME/bin/shutdown.sh
              echo "."
              ;;
         *)
              echo "Usage: $0 {start|stop}"
              exit 1
              ;;
    esac
    exit 0

    もう一つ、テキストエディタで、ファイルknoppix.sh.d/sh.d/patchAutoTomcat.shを作成し、以下の内容を入力します。(この内容もKonquerorからコピー&貼り付けしてご利用ください。)

    for i in 3 4 5; do
       ln -sfn /etc/init.d/tomcat /etc/rc$i.d/S75tomcat
    done
    for i in 0 1 2 6; do
       ln -sfn /etc/init.d/tomcat /etc/rc$i.d/K25tomcat
    done

    このファイルはランレベル3〜5でTomcatが自動起動するよう設定するスクリプトで、ブート時に/home/knoppix/knoppix.shによって実行されます。そこで実行権を付与するため、Konsoleで以下のコマンドを実行してください。(このコマンド列はKonquerorからKonsoleにコピー&貼り付けしてご利用ください。)

    $

    $

    cd

    chmod +x knoppix.sh.d/sh.d/patchAutoTomcat.sh

    以上で、次回の継続的ホームディレクトリを使ったブートでは、Tomcatが自動的に起動するようになります。 

     

  13. 最後に、自動起動の確認のためにリブートします。
    ブートオプションに継続的ホームディレクトリの使用(home=scanなど)と「myconf=scan」を指定してリブートすると、自動的にTomcatが起動されます。このときに起動されるTomcatのスタンドアロンWebサーバのポート番号は8080です。Konquerorなどのブラウザで、「http://localhost:8080」に接続すると、Tomcatが起動されていることを確認できます。

 

参考

  1. mkpersistenthome()(継続的ホームディレクトリの作成)の変更点について

    本実験室で提供するminiroot.gzを使い、ブートオプション「linuxrc2 mvetc」を指定してブートすると、mkpersistenthome(継続的ホームディレクトリの作成)は書き換えられ、以下の点が変更されます。

    変更点 説明
    FAT32インストール対応 /cdromがrwモードでマウントされているとき、継続的ホームディレクトリファイルknoppix.imgを作成するパーティションの選択肢の先頭に/cdromにマウントされているパーティションを加えました。
    多国語対応 継続的ホームディレクトリファイルを作成するパーティションが、FAT32インストールされたシステムパーティションなどである(/cdrom/KNOPPIX/KNOPPIXというファイルがある)場合、継続的ホームディレクトリファイルは当該パーティションのルートディレクトリに固定ではなく、使用言語に応じて変わる/cdrom/KNOPPIX/$LANGUAGE/ディレクトリ(日本語の場合は/cdrom/KNOPPIX/ja、英語の場合は/cdrom/KNOPPIX/us)に作成するようにしました。当該ディレクトリがない場合は自動作成されます。

    ちなみに、本実験室で提供するknoppix-autoconfigの更新版(本実験室のminiroot.gzを使って「linuxrc2 mvetc」を指定してブートしたときに使用されるknoppix-autoconfig)では、ブートオプションにhome=scanを指定すると、この使用言語に応じたディレクトリ内の継続的ホームディレクトリが自動的にマウントされるようになっています。

    継続的ホームディレクトリ
    の雛形をCDROMで配布
    できるようにする。
    継続的ホームディレクトリ用ファイルknoppix.imgを作るとき、未使用領域の初期値として乱数データを書いていましたが、オールゼロを書くように変えました。
    これは、knoppix.imgをbzip2で圧縮し、CDROMに書き込んで配布することを考えておりそのための変更です。乱数データを書いてあると、bzip2で圧縮しようとしても、ほとんど圧縮できませんが、オールゼロを書くようにすると、bzip2で非常に効率よく圧縮できるようになります。

    ちなみに、本実験室で提供するknoppix-autoconfigの更新版(本実験室のminiroot.gzを使って「linuxrc2 mvetc」を指定してブートしたときに使用されるknoppix-autoconfig)では、bzip2圧縮されたknoppix.imgをRAMディスク上で展開して継続的ホームディレクトリとしてマウントする機能が追加されています。

    不要メッセージの削除 以下のメッセージは表示せず、「いいえ」の応答を仮定して処理します。
    • すべての領域をLinuxファイルシステムで初期化し, 領域全体を利用しますか?
    • あなたのホームディレクトリを AES256(Advanced Encryption Standard,参照 http://csrc.nist.gov/encryption/aes/) で保存しますか? もしyesなら, ブート時ホームを作成する際に,とても長いパスワードを明記する必要があります.
  2. これらの変更を適用したくない場合は、Konsoleで以下のコマンドを実行してください。

    /KNOPPIX/usr/sbin/mkpersistenthome

  3. /home/knoppix/knoppix.sh()について

  4. このファイルは、継続的ホームディレクトリを使用するときのシステム設定の読み込みスクリプトです。以下の条件が成立するときに、ブート時の初期化スクリプト「knoppix-autoconfig」から呼び出されます。

    • 本実験室で提供するminiroot.gzを使って「linuxrc2 mvetc」を指定してブートする。

    • 継続的ホームディレクトリを使用する。

    • ブートオプションに「myconf=scan」を指定している。

    これは、継続的ホームディレクトリを使用するときと、そうでないときとで読み込むべきシステム設定を変更したい場合があることから、本実験室のminiroot.gzで拡張した機能です。ブートオプションに「myconf=scan」を指定しているとき、上記の条件が成立すれば、継続的ホームディレクトリをマウントした後で、/home/knoppix/knoppix.shをシステム設定の読み込みスクリプトとして呼び出します。そうでなければ、通常通りの方法でシステム設定の読み込みスクリプトを探して呼び出します。

    このknoppix.shでは、以下の処理を行います。

    コーディング
    内容
    [ -x /cdrom/KNOPPIX/knoppix.sh ] && /cdrom/KNOPPIX/knoppix.sh
    継続的ホームディレクトリを使用しないときのシステム設定の読み込みスクリプトを呼び出します。
    #パッチの反映(/home/knoppix/knoppix.sh.dディレクトリから)
    /linuxrc2.d/bin/patch.sh /home/knoppix/knoppix.sh.d
    本実験室で提供するminiroot.gzに組み込まれているシェル手続きpatch.shを使って、/home/knoppix/knoppix.sh.d配下に格納されたパッチを反映します。

    上の解説でTomcatの自動起動の設定の際に使った、knoppix.sh.d/files.d/etc/init.d/tomcatを/etc/init.d/tomcatにコピーしたり、knoppix.sh.d/sh.d/patchAutoTomcat.shを実行したりする機能は、このシェル手続きpatch.shによって実行されます。

    このpatch.shの詳細はこちら

    # シンボリックリンクを$HOME内へ張替え
    export mkw=/home/knoppix/.mkwritable
    for dir in bin boot lib opt sbin usr; do
      if [ -d /$mkw/$dir ]; then
         if [ ! -L /$dir ]; then
            DO mv /$dir /$dir.original
            DO ln -sfn /$dir.original /$dir
         fi
         DO ln -sfn $mkw/$dir /$dir
      fi
    done
    ルートディレクトリ(/)からCDROM内のディレクトリへのシンボリックリンクを/home/knoppix/.mkwritable内に実体を確保した対応するディレクトリへのシンボリックリンクに張り替えます 
  5. /linuxrc2.d/bin/patch.sh()について

    このシェル手続きは、本実験室で提供するminiroot.gzのなかに組み込まれているシェル手続きで、パラメータで指定されるディレクトリ配下のパッチデータをシステムに反映するものです。パッチを反映する方法としては、以下の3種類の方法を提供しています。

    (1)tbzファイルの解凍

    <指定ディレクトリ>/tbz.d/patch*.tbzがあれば、これを解凍します。解凍時のカレントディレクトリはルートディレクトリ(/)に設定されます。

    解凍するファイルやディレクトリの中にCDROMへのシンボリックになっているものがあれば、mkwritableによって実体化してから上書きされます。

    「KNOPPIXの設定を保存」(またはsaveconfigコマンド)で作成したconfigs.tbzも、patchConfigs.tbzなどに名前を変えて<指定ディレクトリ>/tbz.dディレクトリに置いておくと、

    (2)ファイルのコピー

    <指定ディレクトリ>/files.dディレクトリがあれば、そのディレクトリ配下のディレクトリ構成にしたがってファイルをシステムにコピーします。

    例えば、<指定ディレクトリ>/files.d/etc/init.d/tomcatというファイルがあると、そのファイルは/etc/init.d/tomcatにコピーされます。

    コピーするファイルやディレクトリの中にCDROMへのシンボリックになっているものがあれば、mkwritableによって実体化してからコピー(上書き)されます。

    (3)シェル手続きの実行

    <指定ディレクトリ>/shz.d/patch*.shがあれば、これを実行します。

    例えばTomcatの自動起動の設定の際に使ったknoppix.sh.d/sh.d/patchAutoTomcat.shを実行する機能は、これによって実行されるものです。

     

  6. /usr/sbin/mkwritable()の更新版について

  7. ご注意
    2004/3/1にアップした更新版では、/home/knoppix/.mkwritableや/etc/.mkwritableというディレクトリを作成した後で、/KNOPPIX/etc/配下のファイルやディレクトリに対してmkwritableを実行すると、正しく処理できませんでした。このmkwritableをご利用の場合は、お手数ですが、新しいmkwritableに入れ替えて下さるようお願いいたします。

    mkwritableは実体がCDROM内にあるファイルやディレクトリを更新できるようにするために実体を更新可能なファイルシステム内に確保するスクリプトです。これまでのmkwritableでは、RAMディスク内に実体を確保することで、これを実現していました。しかし、今回使用するmkwritableでは、継続的ホームディレクトリ内に実体を確保することで、これを実現する必要があります。

    そこで、以下のような条件で実体を確保するファイルシステムを変更できる機能を追加した新しいmkwritableを本実験室にアップしました。

    • /home/knoppix/.mkwritableというディレクトリがあれば、このディレクトリ配下に実体を確保します。
      (例)/KNOPPIX/usr/local/binを更新可能にする場合は/home/knoppix/.mkwritable/usr/local/binに実体を確保します。
      継続的ホームディレクトリの中に実体を確保したいとき、このディレクトリを使います。

    • 上記ディレクトリがない場合で、/etc/.mkwritableというディレクトリがあれば、このディレクトリ配下に実体を確保します。
      (例)/KNOPPIX/usr/local/binを更新可能にする場合は/etc/.mkwritable/usr/local/binに実体を確保します。
      このディレクトリは/etc内にあるので、このディレクトリ配下に確保された実体は、saveconfigコマンド(KNOPPIXの設定を保存)で他のシステム設定と一緒に保存されるようになります。

    • 上記のいずれのディレクトリもない場合、従来どおり、/ramdisk配下に実体を確保します。
      (例)/KNOPPIX/usr/local/binを更新可能にする場合は/ramdisk/usr/local/binに実体を確保します。

    • 上のご注意に示した問題の対策のため、これらのディレクトリに実体を確保すべきかどうかを判定する仕掛けを作りました。/KNOPPIX/xxx/・・・というファイルやディレクトリに対してmkwritableを実行する場合、実体を確保するディレクトリは以下のようにして決めるようにしました。

      • /home/knoppix/.mkwritable/.enabled/xxxというファイルがあれば、/KNOPPIX/xxx/・・・の実体を/home/knoppix/.mkwritable/xxx/・・・に確保します。
        (例)/KNOPPIX/usr/local/binを更新可能にする場合、/home/knoppix/.mkwritable/.enabled/usrというファイルがあれば、/home/knoppix/.mkwritable/usr/local/binに実体を確保します。

      • /etc/.mkwritable/.enabled/xxxというファイルがあれば、/KNOPPIX/xxx/・・・の実体を/etc/.mkwritable/xxx/・・・に確保します。
        (例)/KNOPPIX/usr/local/binを更新可能にする場合、/etc/.mkwritable/.enabled/usrというファイルがあれば、/etc/.mkwritable/usr/local/binに実体を確保します。

      • このいずれのファイルも存在しない場合は、/ramdiskに実体を確保します。

      したがって、/home/knoppix/.mkwritableディレクトリを作成する場合は、以下のコマンドを実行します。

    • $
      #
      #
      #
      #

      sudo  -s
      mkdir  -p  /home/knoppix/.mkwritable/.enabled

      cd /home/knoppix/.mkwritable/.enabled

      touch bin  boot  lib  opt  usr

     

    mkwritableは本実験室で提供するminiroot.gzにはあらかじめ組み込まれており、ブートオプションに「linuxrc2 mvetc」を指定してブートすると使えるようになります。ただし、2004年2月29日現在、mkwritableの更新版は単独でアップしているだけで、miniroot.gzに組み込まれているmkwritableは古いもののままです。当面は必要に応じてダウンロードしてご利用ください。2004年3月以降に本実験室にアップするminiroot.gzには、新しいmkwritableを組み込みます。

 

Howto3-5

ApacheとTomcatを連係動作させる。

概要

TomcatにバンドルされているWebサーバのポート番号はデフォルトでは8080になっていました。Tomcatは別のWebサーバ(Apache)などと連係動作させて使用することが多く、そのWebサーバにポート番号80を割り当てるために、そうなっているのだと思います。

そして、最も多く組み合わせられるWebサーバは、やはり、Apacheでしょう。だからなのか、ApacheとTomcatを連携動作させる方法は、いろんな方法があるようです。なぜ、いろんな方法が出てきたんでしょうね。単に連携させるだけなんだから、一つだけあればよさそうなのに。

そこで、KNOPPIXにもApacheがインストールされているので、これとTomcatを連携させてみることにしました。でも、どの方法で連携させればよいのでしょうか。まず、その辺から調べ始める必要があります。

実は、私のパソコンのWindows XP環境にもTomcat 4.1.10が入っています。WebサーバはApache 1.3.26とIIS 5.0が両方とも入っていて、どちらも、Tomcatと連係動作できるように設定してあるのですが、ポート番号80が競合するので、必要に応じて、どちらか1つを起動して使うようにしてあります。この設定をしたときも、どの方法で連携させれば良いのかに悩み、いろいろ実験した覚えがあります。

現在、Tomcatの最新版はバージョン5に上がっているのですが、今回、わざわざTomcat 4.1.29を選んだのは、バージョンが「4.1」まで一致していれば、Windows XPでTomcat 4.1.10を設定したときのノウハウが使えるのではないかと期待したからです。しかし、調べてみると、実際にはずいぶん違っていることが分かりました。

そこで、ここでは、Windows XPでTomcat 4.1.10を設定したときの状況と対比させながら、現在のLinux版での状況の調査結果を整理し、その中から、1つの方法を選んで、実際にApacheとTomcatを連携動作させるように設定します。

ApacheとTomcatの連携方法の現状

ApacheとTomcatを連携させるためには、おおむね、以下のように設定します。

このようにしてApacheとTomcatを連携させる仕掛けを「コネクタ」と呼び、その名前はApacheの拡張モジュールの名前にちなんでつけられることが多いようです。

また、このコネクタの役割の一つにSSL情報の転送があります。(KNOPPIXのApacheにもSSL機能はすでにインストールされているので、本実験室でも、いずれは、httpsサーバの実験をしたいと考えています)
単にhttpsサーバを立てるだけでなく、クライアントにSSL証明書の提示を要求するようなサービスでは、SSL証明書の情報を処理する必要が生じることが良くあります。Apacheでは環境変数にSSL情報が設定されるので、これをCGIやPHPで処理するのは簡単ですが、TomcatなどのJSP/servletエンジンでは、Apacheの環境変数にアクセスできません。多くのApache環境変数はアクセスできなくても、それほど不自由しませんが、これだけはどうしても必要になるため、JSP 1.2/servlet 2.3のAPI仕様で、このSSL情報を参照する方法が定義されました。しかし、この仕様をサポートするにはコネクタでの対応が必要なのですが、これに対応したコネクタは意外に少ないようです。今回は、SSLとは直接は関係しませんが、将来のことも考えて、併せて検討しました。

ここでは今回調査したコネクタについて、現在のLinux版での状況を、Windows XPでTomcat 4.1.10を設定したときの状況と対比させながら、下表に示します。

コネクタ WindowsでTomcat 4.1.10を
設定したときの状況
現在のLinux版での状況
mod_webapp 設定が簡単で性能も良いという触れ込みで鳴り物入りで登場したコネクタですが、なぜか、Tomcat 4.0.6用のものが最後で、以後の更新が止まっています。

当時、Windows版は確かTomcat 4.0.6用のバイナリモジュールが提供されていたので、これをインストールして実験してみました。

設定が簡単という触れ込みでしたが、mod_webapp.soの他にlibapr.libというモジュールも必要だということや、その置き場所が特殊だということが、なかなか分からず、設定には返って苦労させられた覚えがあります。

また、提供されていたバイナリモジュールではSSL情報を転送してくれませんでした。コンパイルオプションを変えてコンパイルしなおせば転送されるようになるという情報もありましたが、このときは、そこまではしませんでした。

現在は、Windows版も、Linux版も共に提供されなくなったようです。バイナリだけでなく、ソースも提供されなくなったようで、もはや、このコネクタは使うなということなのでしょう。
mod_jk Tomcat 3の頃からある実績のあるコネクタです。バイナリも各プラットホーム用のものが提供されていて、簡単に使えるようになっていました。設定方法はTomcat 3と大差ないようで、当時、インターネットに多くアップされていたTomcat 3での設定方法の解説を読みながら設定しても、おおむね同様に設定できました。

SSL情報の転送もサポートされており、問題なく使えることを確認。最終的に採用したコネクタはこれでした。

現在はLinux用のバイナリモジュールは削除されてしまったようです。インターネットには、Linux用のバイナリモジュールへリンクを張ったページがいくつか残っていますが、どれも、リンク切れになっています。

ソースは提供されているので、コンパイルして使いなさいということなのでしょうが、コンパイルには、Apacheのソース(ヘッダファイル)が必要です。KNOPPIXには、Apacheはインストールされていますが、ヘッダファイルは入っていません。別途、Apacheのソースを入手してコンパイルする必要があります。

debianパッケージになったものもありましたが、バージョンは少々古いようです。

最新の1.2.5版がrpmパッケージになったものはありましたが、これをKNOPPIXにインストールするにはどうすればよいのだろう。

SSL情報の転送もサポートされており、一番使いたいコネクタでしたが、今回は断念。SSL情報の転送機能が必要になったときにもう一度トライしてみることにします。

mod_jk2 このコネクタ用のTomcat側のコネクタプロセスは、デフォルトのserver.xmlで、すでに起動するように設定されていました。バイナリモジュールも提供されていて、設定は簡単にできたと思います。

しかし、当時は、まだSSL情報の転送はサポートされていなかったようです。mod_webappのようにコンパイルすれば使えるようになるというわけでもなかったようで、結局、これがネックになり、採用しませんでした。

このコネクタは、mod_jkをリメークしたものとのことで、性能などは改善されているらしいのですが、機能的に追加されたことがあるわけでもないようで、mod_jkに比べて何がメリットなのか、今ひとつ良く分かりませんでした。 

このコネクタのバイナリモジュールは現在はWindows版とsolaris版しか用意されていないようです。

ソースは提供されていますが、mod_jkに比べて何がメリットなのか分からなかったため、どうせコンパイルするならmod_jkをという気持ちがあり、これは、それ以上試しませんでした。

mod_proxy mod_proxyはApacheで標準サポートされている拡張モジュールです。ApacheがプロキシサーバとしてTomcatのwebサーバに接続するもので、Tomcatがスタンドアロンサーバで動作するように設定できていれば、簡単に設定できます。

反面、SSL情報をサポートするような設定は難しそうです。できないわけではなさそうですが、ちょっと試してみようという気持ちにはなりませんでした。 

今回も、これは簡単に設定できました。バイナリもApache標準提供なので、KNOPPIXにもすでにインストールされており、Apacheの設定ファイルを書き換えるだけで設定できます。

当面はSSL情報の転送機能は必要ないので、これで設定し、SSL情報の転送機能が必要になったとき、mod_jkへの乗換えなどを検討することにしたいと考えています。

 

mod_proxyを使ったApacheとTomcatの連携の設定

ここでは、Howto3-3とHowto3-4でApacheとTomcatを個別に設定をした状態を想定して説明します。

  1. /etc/apache/modules.confの設定

  2. このファイルは、Apacheの起動時にどのモジュールを読み込むかを指定するファイルです。まず、以下のコマンドを実行して、このファイルを書き換え可能な状態にします。

    $
    #

    sudo  -s
    mkwritable  /etc/apache/modules.conf

    次にスーパーユーザモードのテキストエディタで、ファイル/etc/apache/modules.confを以下のように書き換えます。

    # Autogenerated file - do not edit!
    # This file is maintained by the apache package.
    # To update it, run the command:
    # /usr/sbin/modules-config apache
    LoadModule config_log_module /usr/lib/apache/1.3/mod_log_config.so
    LoadModule mime_module /usr/lib/apache/1.3/mod_mime.so
    LoadModule negotiation_module /usr/lib/apache/1.3/mod_negotiation.so
    LoadModule status_module /usr/lib/apache/1.3/mod_status.so
    LoadModule info_module /usr/lib/apache/1.3/mod_info.so
    LoadModule autoindex_module /usr/lib/apache/1.3/mod_autoindex.so
    LoadModule dir_module /usr/lib/apache/1.3/mod_dir.so
    LoadModule cgi_module /usr/lib/apache/1.3/mod_cgi.so
    LoadModule userdir_module /usr/lib/apache/1.3/mod_userdir.so
    LoadModule alias_module /usr/lib/apache/1.3/mod_alias.so
    LoadModule rewrite_module /usr/lib/apache/1.3/mod_rewrite.so
    LoadModule access_module /usr/lib/apache/1.3/mod_access.so
    LoadModule auth_module /usr/lib/apache/1.3/mod_auth.so
    LoadModule expires_module /usr/lib/apache/1.3/mod_expires.so
    LoadModule unique_id_module /usr/lib/apache/1.3/mod_unique_id.so
    LoadModule setenvif_module /usr/lib/apache/1.3/mod_setenvif.so
    LoadModule ssl_module /usr/lib/apache/1.3/mod_ssl.so
    LoadModule php4_module /usr/lib/apache/1.3/libphp4.so
    LoadModule proxy_module /usr/lib/apache/1.3/libproxy.so     この1行を追加します。

  3. /etc/apache/httpd.confの設定

  4. このファイルは、Apacheの設定ファイルです。このファイルは、すでに、Howto3-3でmkwritableしてありますので、そのまますぐに更新できます。スーパーユーザモードのテキストエディタで、ファイル/etc/apache/modules.confを以下のように書き換えてください。

    <IfModule mod_proxy.c>

    ProxyPass /examples http://localhost:8080/examples
    ProxyPassReverse /examples http://localhost:8080/examples
        この2行を追加します。
    #
    # Proxy Server directives. Uncomment the following lines to
    # enable the proxy server:
    #
    #<IfModule mod_proxy.c>
    #ProxyRequests On
    #
    #<Directory proxy:*>
    # Order deny,allow
    # Deny from all
    # Allow from .your_domain.com
    #</Directory>

    </IfModule>

    ただし、この設定は、Tomcatのサンプルアプリケーション「examples」を実行する場合の設定です。Tomcatに他のアプリケーションを追加した場合は、この2行をアプリケーションごとに追加する必要があります。

  5. 最後に、ブートオプションに継続的ホームディレクトリの使用(home=scanなど)と「myconf=scan」を指定してリブートすると、自動的にApacheとTomcatが起動され、連係動作できるように設定されます。

    Konquerorなどのブラウザで、「http://localhost/exsamples/jsp/index.html」に接続すると、TomcatのJsp ExsamplesがApacheから返却され、ApacheとTomcatが連係動作していることを確認できます。

 

 

Howto3-6

KNOPPIXのバージョンアップ時に継続的ホームディレクトリを移行する方法

概要

上のHowto3-4やHowto3-5では、mkwritableを使ってCDROM内へのシンボリックリンクになっているファイルの実体を継続的ホームディレクトリに確保しました。しかし、継続的ホームディレクトリは、作成していたときに使っていたバージョンのKNOPPIXでしか、正しく動作する保障がありません。KNOPPIXのバージョンアップに伴い、ホームディレクトリに作成されたファイルやディレクトリの形式が変わっている可能性が高いからです。このため、新しいバージョンのKNOPPIXに乗り換えるときは、継続的ホームディレクトリも再作成することになります。

Windowsの世界だと、アップグレードインストールを行うことで、このようなケースにはインストーラが自動的に対処してくれますし、通常のLinuxでも、アップグレードインストールに対応したものがいくつかありますので、そういった世界に慣れていると、このようなバージョンアップのたびに再作成というのは意外な感じがするかもしれませんが、KNOPPIXではインストールの終わった状態をCDROMから読み込んで使用するので、アップグレードインストールという考え方そのものがなく、やむをえないことです。CDROMを入れ替えるだけで簡単に新バージョンに乗り換えられる反面、継続的ホームディレクトリはバージョンアップのたびに再作成する必要があるというわけです。

しかし、たかが1ユーザのホームディレクトリだけとはいえ、それを完全に0から再作成するのは容易ではありません。そこで、私は、以下のような方法で継続的ホームディレクトリを再作成します。

  1. 継続的ホームディレクトリファイルknoppix.imgをknoppix.img.bkなどにリネームします。

  2. mkpersistenthomeコマンド(継続的なKNOPPIXホームディレクトリの作成)を使って新しい継続的ホームディレクトリを作成します。

  3. 古い継続的ホームディレクトリから新しい継続的ホームディレクトリに主要なファイルをコピーします。
    (このとき、mkpersistenthomeコマンドで作成されたファイルを不用意に上書きしないように注意してください。
    なお、Howto3-4で紹介した柘植さんによる継続的ホームディレクトリの解説ページにも継続的ホームディレクトリの再作成方法が書かれていますが、あの方法で再作成した継続的ホームディレクトリは、同じバージョンのKNOPPIXでしか使えません。KNOPPIXのアップグレードに伴う継続的ホームディレクトリの再作成では、あの方法は使えませんのでご注意ください。)

ところが、Howto3-4やHowto3-5でやったようにCDROM内へのシンボリックリンクになっているファイルの実体をmkwritableを使って継続的ホームディレクトリ内に確保した場合は、継続的ホームディレクトリの再作成方法は、もう少し複雑なものになってしまいます。その理由は、以下の通りです。

mkwritableでは実体を確保するために不足するディレクトリは自動的に作成されますが、このとき、そのディレクトリ内のほかのファイルはCDROM内へのシンボリックリンクのまま、コピーされます。

もし、KNOPPIXのバージョンアップに伴い、そのディレクトリに新たなファイルが追加されていた場合、継続的ホームディレクトリ内の実体を確保したディレクトリにも、そのファイルへのシンボリックリンクも追加してやらないと、そのファイルにアクセスできません。

もし、KNOPPIXのバージョンアップに伴い、そのディレクトリ内のファイル名が変更になっていた場合は、CDROM内へのシンボリックリンクはリンク切れしてしまうので、継続的ホームディレクトリ内に自動作成されたシンボリックリンクを正しいファイルにリンクするように変更してやる必要があります。
このようなファイルは/libや/usr/libに特に多く見受けられます。ライブラリファイル名の中にバージョン番号が入っているためです。このため、/libや/usr/libの配下のファイルを1つでもmkwritableしていると、mkwritable対象でなかったライブラリファイルはCDROM内へのシンボリックリンクになっていて、そのなかのバージョンアップされたライブラリファイルへのシンボリックリンクはすべてリンク切れしてしまいます。
産総研版KNOPPIXの20031119-20040202版から20040216-20040220版へのバージョンアップでは、カーネル、KDE、X Windowとかなり広範囲にバージョンアップされたので、/usr/lib配下のファイルをmkwritableしていると、このリンク切れによってX Windowが起動しなくなっていました。

Howto3-4やHowto3-5では/libや/usr/libは更新しなかったので、継続的ホームディレクトリをそのまま使い続けても X Windowが起動しなくなるようなことはないと思いますが、Kメニューの中に削除されたプログラムへのメニューが残っているなどの、細かな問題は生じるようなので、ここでは、/libや/usr/libの更新まで考慮した移行方法を紹介します。

移行方法

  1. 継続的ホームディレクトリファイルknoppix.imgをknoppix.img.bkなどにリネームします。
    (このコマンド列はKonquerorからKonsoleにコピー&貼り付けしてご利用ください。)

    $

    $

    cd /cdrom/KNOPPIX/ja

    mv knoppix.img knoppix.img.bk

  2. mkpersistenthomeコマンド(継続的なKNOPPIXホームディレクトリの作成)を使って新しい継続的ホームディレクトリを作成します。

  3. 古い継続的ホームディレクトリから新しい継続的ホームディレクトリに主要なファイルをコピーします。

    まず、以下のようなシェル手続きを作成して実行します。
    (このシェル手続きはKonquerorからエディタ(kwriteなど)にコピー&貼り付けしてご利用ください。)

    #!/bin/bash
    #新しい継続的ホームディレクトリを/mnt/homeに、
    #古い継続的ホームディレクトリを/mnt/testに、 それぞれ、マウントします。
    mkdir -p /mnt/home
    cd /cdrom/KNOPPIX/ja
    mount knoppix.img -o loop /mnt/home
    mount knoppix.img.bk -o loop,ro /mnt/test
    
    #mkwritableで作成する実体ファイルの保存用のディレクトリ(.mkwritable)を
    #作成し、その設定を古い継続的ホームディレクトリからコピーします。
    cd /mnt/home
    mkdir -p .mkwritable
    cp -apr /mnt/test/.mkwritable/.enabled .mkwritable/.
    
    #ブート時にmkwritableで/ramdiskに作成した実体ファイルを、新しい
    #継続的ホームディレクトリの.mkwritableディレクトリにコピーします。
    for sdir in $(cd .mkwritable/.enabled; echo *); do
      if [ -d /ramdisk/$sdir ]; then
        cp -apr /ramdisk/$sdir /mnt/home/.mkwritable/.
      fi
    done
    
    #古い継続的ホームディレクトリにあって、新しい継続的ホームディレクトリ
    #に無いファイル・ディレクトリを、新しい継続的ホームディレクトリに
    #コピーします。ただし、隠しファイル・ディレクトリはコピーしません。
    cd /mnt/test
    for files in *; do
      if [ ! -e /mnt/home/$files ]; then
        cp -apr /mnt/test/$files /mnt/home/.
      fi
    done
    
    #古い継続的ホームディレクトリ内の主要な設定ファイルをコピーします。
    #ここではkonquerorとkonsoleの主要な設定をコピーする例を示します。
    cpio -pdmvu /mnt/home <<EOD
    .kde/share/apps/kcookiejar/cookies
    .kde/share/apps/konqueror/bookmarks.xml
    .kde/share/apps/konqueror/bookmarks.xml.tbcache
    .kde/share/config/cryptodefaults
    .kde/share/config/kcookiejarrc
    .kde/share/config/konquerorrc
    .kde/share/config/konsolerc
    EOD
    
    #新旧2つの継続的ホームディレクトリをアンマウントします。
    cd
    umount /mnt/test
    umount /mnt/home

(参考)konquerorとkonsoleの主要な設定ファイルの一覧
ファイル名 設定内容

.kde/share/apps/kcookiejar/cookies

konquerorのクッキー

.kde/share/apps/konqueror/bookmarks.xml

konquerorのブックマーク

.kde/share/apps/konqueror/bookmarks.xml.tbcache

konquerorのリンクバー

.kde/share/config/cryptodefaults

konquerorの各種設定ファイルです。テキスト形式なので上位互換はとられるだろうと考えてコピーしていますが、バージョンアップで変わる可能性の高い部分なので、気になる人はコピーしない方が良いかもしれません。

.kde/share/config/kcookiejarrc

.kde/share/config/konquerorrc

.kde/share/config/konsolerc

konsoleの設定ファイルです。
私は、履歴を無制限に設定変更して使っているのですが、移行時、良くこの設定変更を忘れて、履歴を消失してしまうので、移行時にこれをコピーするようにしました。

 

たとえば、以下のようにして実行します。

$

#
#
#

sudo -s
kwrite  cpmkwritable.sh
chmod +x cpmkwritable.sh
./cpmkwritable.sh

上のシェル手続きに「cpmkwritable.sh」という
名前をつけて入力し、実行しています。

 

次に、KNOPPIXを再起動します。このとき、今作成した継続的ホームディレクトリを使って起動されるようにしてください。

起動したら、継続的ホームディレクトリを使ってmkwritableする機能が正しく動作していることを確認します。

# sudo -s
# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/root                 3471       140      3331   5% /
/dev/hda2              3663680   3463364    200316  95% /cdrom
/dev/cloop             1859298   1859298         0 100% /KNOPPIX
/ramdisk                296960      5352    291608   2% /ramdisk
/cdrom/KNOPPIX/ja/knoppix.img
                        253871    127802    126069  51% /home/knoppix
継続的ホームディレクトリが正しくマウントされている
ことを確認します。
# ll /
合計 47
drwxr-xr-x   22 root     root         4096 2004-02-20 14:22:14 KNOPPIX
lrwxrwxrwx    1 root     root           12 2004-02-16 05:44:53 bin -> /KNOPPIX/bin
lrwxrwxrwx    1 root     root           13 2004-02-16 05:44:53 boot -> /KNOPPIX/boot
drwxr-xr-x   14 knoppix  knoppix      8192 1970-01-01 09:00:00 cdrom
drwxr-xr-x    4 root     root        29696 2004-03-22 13:44:50 dev
lrwxrwxrwx    1 root     root           12 2004-03-22 22:42:53 etc -> /ramdisk/etc
drwxr-xr-x    3 root     root         1024 2004-03-22 13:43:20 home
lrwxrwxrwx    1 root     root           12 2004-02-16 05:44:53 lib -> /KNOPPIX/lib
drwxr-xr-x    4 knoppix  knoppix      1024 2004-02-15 08:59:58 linuxrc2.d
drwxr-xr-x    7 root     root         1024 2004-03-22 13:43:23 mnt
lrwxrwxrwx    1 root     root           12 2004-02-16 05:44:53 opt -> /KNOPPIX/opt
dr-xr-xr-x   95 root     root            0 2004-03-22 22:42:45 proc
drwxrwxrwt    6 root     root          120 2004-03-22 22:42:56 ramdisk
drwxr-xr-x    2 root     root         1024 2004-03-22 22:42:54 root
lrwxrwxrwx    1 root     root           13 2004-02-16 05:44:53 sbin -> /KNOPPIX/sbin
dr-xr-xr-x    4 root     sfs           512 1970-01-01 09:00:09 sfs
lrwxrwxrwx    1 root     root            8 2004-02-16 05:44:53 tmp -> /var/tmp
lrwxrwxrwx    1 root     root           29 2004-03-22 13:43:23 usr -> /home/knoppix/.mkwritable/usr
lrwxrwxrwx    1 root     root           12 2004-03-22 22:42:53 var -> /ramdisk/var
# ll /usr/
合計 52
lrwxrwxrwx    1 root     root           18 2004-03-21 19:11:30 X11R6 -> /KNOPPIX/usr/X11R6
drwxr-xr-x    2 root     root        43008 2004-03-21 19:26:12 bin
lrwxrwxrwx    1 root     root           16 2004-03-21 19:11:30 doc -> /KNOPPIX/usr/doc
lrwxrwxrwx    1 root     root           16 2004-03-21 19:11:30 etc -> /KNOPPIX/usr/etc
lrwxrwxrwx    1 root     root           18 2004-03-21 19:11:30 games -> /KNOPPIX/usr/games
lrwxrwxrwx    1 root     root           20 2004-03-21 19:11:30 include -> /KNOPPIX/usr/include
lrwxrwxrwx    1 root     root           10 2004-03-21 19:11:30 info -> share/info
lrwxrwxrwx    1 root     root           16 2004-03-21 19:11:30 lib -> /KNOPPIX/usr/lib
drwxr-xr-x    6 knoppix  knoppix      1024 2004-03-21 19:25:22 local
lrwxrwxrwx    1 root     root           16 2004-03-21 19:11:30 man -> /KNOPPIX/usr/man
drwxr-xr-x    2 root     root         8192 2004-03-22 03:38:48 sbin
lrwxrwxrwx    1 root     root           18 2004-03-21 19:11:29 share -> /KNOPPIX/usr/share
lrwxrwxrwx    1 root     root           16 2004-03-21 19:11:29 src -> /KNOPPIX/usr/src
# 
/usrなど、mkwritableで継続的ホームディレクトリ内に
一部でも実体を確保しているディレクトリのシンボリック
リンクが正しく更新されていることを確認します。

この例は/usr/bin、/usr/local、/usr/sbinディレクトリ内
の一部のファイルの実体を継続的ホームディレクトリ
内に確保している場合の例です。
黄色でマークした部分参照)

なお、/etcや/varの実体は、依然として、/ramdisk内に
確保しています。(ピンク色でマークした部分参照)

確認OKなら、以下のようなシェル手続きを作成して実行します。
(このシェル手続きはKonquerorからエディタ(kwriteなど)にコピー&貼り付けしてご利用ください。)

#!/bin/bash
#古い継続的ホームディレクトリを/mnt/testにマウントします。
mount /cdrom/KNOPPIX/ja/knoppix.img.bk -o loop,ro /mnt/test

#mkwritableで古い継続的ホームディレクトリに作成した実体ファイルを、
#ホームディレクトリにコピーします。
#このとき、シンボリックリンクはコピーせずにmkwritableで自動作成する
#ようにします。
(cd /mnt/test/.mkwritable;find * -type f) |
(cd $HOME/.mkwritable;
while read f; do
  if [ -f /KNOPPIX/$f ]; then
    mkwritable /$f
  else
    tmpdir=${f%/*}
    pdir=/$tmpdir
    if [ ! -d /$pdir -o -L /$pdir ]; then
      while [ ! -d /KNOPPIX/$tmpdir -a ! -d $tmpdir ]; do
        tmpdir=${tmpdir%/*}
      done
      [ ! -d $tmpdir -o -L $tmpdir ] && mkwritable /$tmpdir
      mkdir -p $pdir
    fi
  fi
  cp -p /mnt/test/.mkwritable/$f /$f
done)

#古い継続的ホームディレクトリをアンマウントします。
cd
umount /mnt/test

たとえば、以下のようにして実行します。

$

#
#
#

sudo -s
kwrite  cpmkwritable2.sh
chmod +x cpmkwritable2.sh
./cpmkwritable2.sh

上のシェル手続きに「cpmkwritable2.sh」という
名前をつけて入力し、実行しています。

以上で継続的ホームディレクトリの以降は終了しました。次に、KNOPPIXを再起動します。このとき、今作成した継続的ホームディレクトリを使って起動されるようにしてください。