どうもけいです。Vista用に新しいノートパソコン買いました。
買ったパソコンはTsukumoが出している、Caderna N170J-301Eと言う奴です。このパソコン、何が凄いかというと、10万円以下でCore2 Duo CPUを使っているんです。おまけにノートパソコン最強のIFであるExpress Cardも付いております。
勿論欠点はあって、目に優しくないグレア液晶や中途半端な解像度(1440x900 なぜSXGAにしないのか?)、延長保証を付けなければとてもじゃないけど買いたくないブランド。
BTOで合計額が12万程度になってしまい、kakaku.comで6万円程度で売っているXGAのノーパソが2台買えるなぁ~~と悩んだすえの決断です。
到着は来年一月の十三日になります。
いや~しかし6万円のノート凄いなぁ。XP搭載でメモリ256MB、常駐アプリ満載で普通に販売するパソコンメーカー。こんなスワップしまくりのパソコンを販売すると素人さんの間で「あのメーカーのパソコンは遅い」とか噂にならないのかなと逆に心配してしまう。
けど逆に考えると、6万円のノートでもメモリを増設すれば10万円台のPCの性能と対して変わらなくなるので、わかる人が買うのならばコストパフォーマンスは最高。
ちなみに最後までどうしようか迷ったのはこれー>dynabook Satellite P1W 160C/5W PSP1W1FCWH41Kこのパソコンは6万1800円で液晶15.4インチ、結構な高解像度WXGA(1280x800)、メモリを1Gまで増設したとしても7万5000円程度。CPUはセレロンだけど、結局ボトルネックになるのはHDDなので、何のCPUでも最近のでは対して変わらない。差額の4万円を以下の機能差分で見出せるかをめちゃめちゃ悩んだ。(貧乏人の苦悩)
Tsukumoの利点
・ギガニック
・Express Card
・Core 2 Duo CPU
・メモリのデュアルチャンネルアクセス
・17インチ液晶
・解像度
・内蔵無線LAN(Centrinoモバイルテクノロジ)
結局購入したのはTsukumoだけれど、しばらく悩みそうな優柔不断な男がここにいます。
次の仕事はWeb系なので、Javaの勉強を始めました。
けいです。次の仕事はWeb系なのでWeb系の勉強を始めました。
新しい会社から必要だっていわれている技術はとりあえず以下です。
・UML
・HTML+CSS
・Cookie
・ユーザー認証
・J2EE
・DB
・オブジェクト指向
で、このうちHTMLは手書きで "けいの開発記録 on the web" を作ったので
なんとなくわかっているとして、
それ以外はよくわからないなぁ。
ちょっと調べてみた所、J2EEにはこんなことが書いてあった。
@@@ IT用語辞典より抜粋 @@@
Sun Microsystems社のプログラミング言語「Java 2」の機能セットの一つで、企業の業務システムや電子商取引などで使われるサーバに必要な機能をまとめたもの。
標準機能セットのJava 2 Standard Edition(J2SE)に、サーバ用のAPIや諸機能を付加したものと言える。
APIセットをまとめた「Platform Specification」、Sunによる参照実装、互換性テストスイート、ガイドライン「Blue Prints」といった要素から成り、Javaプログラムを部品化して組み合わせることができるようにする「Enterprise JavaBeans」や、WebページにJavaプログラムを埋め込んで内容を動的に生成する「Java Server Pages」(JSP)などの技術を含む。
また、XMLを操作するためのAPIも用意され、サーバ上で様々なソフトウェアを組み立てられるようになっている。
J2EEの動作環境はSunを含む各社のアプリケーションサーバ製品に実装されており、データベースシステムやWebサーバと組み合わせて使う。
@@@ 抜粋ここまで @@@
わかったようなわからないような、要約するとJ2EEとは
J2SE+「Platform Specification」+参照実装+互換性テストスイート+「Blue Prints」
+「Enterprise JavaBeans」+「Java Server Pages」(JSP)
ってことらしい・・・ 多いなぁ。でもやるしかないよな。
そもそもJAVAなんですが、何度も勉強はやっているのですが
忘れたころにまた勉強することの繰り返しで理解しているとは言いがたい状況。
やっぱり仕事で使わない言語って、うまく書けないですね。
書こうとしても覚悟がいる。
仕事はCとかC++ばっかりなので、
プロジェクトの合間の暇な時にJAVAを勉強しても
プロジェクトが忙しくなって半年くらい経過してしまったりして忘れる。
以前からの経験からプログラムってただ単に本を見ているだけじゃ
全然理解していないってことはわかっているので、
何かサービスを作ってみることにしました。
J2EEの勉強のために買った本は「Javaサーバサイドプログラミング」という
技術評論社から出ている本です。
やること(得られる知識)
一:Webページの作成(HTML)
二:Webページからユーザーの作成(DB+J2EE+Cookie)
三:ログイン、ユーザー情報の変更、削除(DB+J2EE+Cookie+ユーザー認証)
四:オリジナルアプリの作成(オブジェクト指向)
用語集(学習したことを随時追加予定)
アプレット :クライアントブラウザで動作するJAVA
サーブレット:サーバー側で動作するJAVA
スレッドプール:P12 CGIはアクセスのたびにプロセスが生成されるが、
サーブレットはあらかじめ複数のスレッドを生成しておいて、
並列的に処理を行う。
その複数のスレッドを管理している部分をスレッドプールという。
JRE:Java Runtime Environment javaアプリを実行するために必要なソフトウェアのセット。コンパイラ、実行環境のこと
JSP: JSPはユーザーインターフェース用のJAVA。記述方法がHTML的というより、HTMLとの混在が可能である。JSPとして書かれたファイルは結局Javaのソースコードに変換されて、サーブレットとして実行される。
javascript:はブラウザが実行できる形式で書かれたプログラム
サーブレットエンジン=サーブレットコンテナ:サーブレット実行環境。コンテナといえば、TOMCATのこと。
スレッドプールから空きスレッドをインスタンスとして提供し、
リクエストにたいしてレスポンスを返す。以下の機能を持っている。
・ライフサイクル管理
・クラスローダ
・マルチスレッド
・セッション管理
サーブレットのライフサイクル P13
スレッドプールからのクラスのロードからオブジェクトの消滅までの
ライフサイクルはjavax.servlet.Servlet インターフェースで定義されている、
init(), service(), destroy() に相当する。
まだ、用語がよくわかっていないが、
一、クラスファイルをクラスローダーがロードし、
クラスローダーからインスタンスを生成する。
二、インスタンスのinit() メソッドを起動して、インスタンスを初期化。
コンテナに待機/常駐
三、リクエストごとにスレッドを割り当てserviceメソッドを実行
以降、三を繰り返す。
四、destroy() メソッドを起動してインスタンス(オブジェクト)をアンロード
アンロードしたしたオブジェクトはガーベジコレクションに吸収される。
捕捉
三、service() メソッドについての捕捉
service() メソッドにはdoGet()/ doPost()
などのイベントもservice() が行うことにより、
プログラミングを簡単にしている。
一、クラスローダについての捕捉。クラスローダの動作は中々面白い。
通常JAVAアプリでは更新したクラス(ファイル)を有効にするためには
VMの再起動が必要となるが、サーブレットコンテナは再ロードという
方法により更新したクラスを有効にすることができる。
Webサーバは常時稼働されているので、稼働中に変更できるようにするため。
セッション管理はHttp cookieを使用しないで、一連の流れであると
認識するための機能。
え・どうやるんだろう。KeepAliveとか使うのかな?
第三章で詳しく説明するらしい。
JSPの仕組み
サーブレットを動かすためにはサーブレットコンテナが必要であったように
JSPを動かすためにはJSPコンテナが必要です。
ああ、わかりにくいなぁ。
なんで全部含めてくれないんだろう。
この辺って意識しないと使えないのかな。
JSPのメカニズム P19
JSPコンテナにアクセスがあると、JSPのファイル.jspから
.javaのソースファイルに書き換えを行う。
.javaのソースファイルをコンパイルして.classファイルを作り
servletがロードすることによりレスポンスを返す。
そして、サーブレットと同じようにJSPにも生成、動作、消滅の過程が有り、
その為にはjavax.servlet.jsp.JspPage インターフェースで定義されている
jspService() の各メソッドを使用する必要がある。
またServletと同じようにjspInit(), jspDestroy()がある。
ちなみにHttpJspPage->JspPage->Servlet と継承関係にある。
P21
JSPはサーブレットを継承して動作するため、
Servlet APIとJSPのバージョンは対応関係があります。
サーブレットコンテナ(サーブレット実行環境)は三つのタイプが有り、
一、サーブレットコンテナがWebサーバーとして機能を持つ
二、Apache, IISなどのWebサーバーにアドオンする
三、単体でも、アドオンしても利用できる。
現状の流れとしては一、二は廃れ、三が増えてきている。
三の代表としてはTomcatがある。
単体でもアドオンしても利用できるのならば処理が複雑化しないように
単体動作の方がいいと思えるのだが、調査した所、
以下の利点があることがわかった。
http://www.miloweb.net/tomcat2.html
Tomcat はそれ単体でも Web サーバとして機能を持っていますが、以下の理由で Apache との連携が推奨されています。
1. 静的なページに関して Tomcat は Apache ほど速くありません。
2. Tomcat は、Apache ほど 細かな設定ができません。
3. Tomcat は、Apache ほど 頑強ではありません。
4. Tomcat は、 Apache のモジュール(例 Perl, PHP, その他)でしか提供していない機能に対する多くのサイトの要望に答えられないかもしれません。
P26
Apacheとの連携を行う場合にはDSO(Dynamic Shared Object)を有効にしてコンパイルする必要がある。
この辺は、debian だったらインストール時にデフォルトが有効になっていた気がするので心配ないだろう。
Tomcat は100% Pure JavaのサーブレットコンテナなのでバイナリはJava2 SDKがあればどのプラットフォームでも動作する。
これもdebianだったらaptitude ですぐに終わるだろう。
12月30日追記
ずいぶん間が空いたのはなぜかというと、途中まで書いていたエディターが死んだからです。はぁ~~。なんかLinuxのGUIエディターってかなり不安定な気がする。ちなみに最近Gnotepad+とかGeditを使っていたのだが、両方共マウスの真ん中ボタン押したときの動作が不安定。おまけに自動バックアップの設定にしていたのに、どこを見てもファイルが見付からないし。どうやら最初にファイル名を付けて、一度は保存しないと自動バックアップされないみたいです。
気を取りなおして続きを書こうと思います。
え~Tomcatなんですが、起動すると以下のエラーがでました。
@@@エラー内容@@@
Using CATALINA_BASE: /var/lib/tomcat4
Using CATALINA_HOME: /usr/share/tomcat4
Using CATALINA_TMPDIR: /var/lib/tomcat4/temp
Using JAVA_HOME: /usr/lib/kaffe
Using Security Manager
Internal error: caught an unexpected exception.
Please check your CLASSPATH and your installation.
java/lang/ExceptionInInitializerError
at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:772)
@@@エラー内容 ここまで@@@
このエラーの原因がわからず、起動スクリプトを見ると、どうやらkaffeというJDKが原因みたいでした。このkaffeをなんとか使わないでいいものかとスクリプトを見てみると、以下の文がありました。
JDK_DIRS="/usr/lib/j2sdk1.4-sun /usr/lib/j2sdk1.4-ibm /usr/lib/j2sdk1.3-ibm /usr/lib/j2sdk1.4
/usr/lib/j2sdk1.3 /usr/lib/j2se/1.4 /usr/lib/j2se/1.3 /usr/lib/kaffe"
つまり sun > ibm > kaffe っていう順で優先順位が定められており、仕方無くkaffeをJAVA HOMEに設定しているようだったので、SunのホームページからJ2SDKをダウンロードしてインストールすることによってエラー発生しなくなりました。ちなみに正常時のログ出力は以下になります。
@@@正常時@@@
Using CATALINA_BASE: /var/lib/tomcat4
Using CATALINA_HOME: /usr/share/tomcat4
Using CATALINA_TMPDIR: /var/lib/tomcat4/temp
Using JAVA_HOME: /usr/lib/j2sdk1.4-sun
Using Security Manager
Created MBeanServer with ID: 145f0e3:10fd1a9dd4c:-8000:barton:1
2006/12/30 13:41:48 org.apache.coyote.http11.Http11Protocol init
情報: Coyote HTTP/1.1をポートhttp-8180で初期化します
サービス Tomcat-Standalone を起動します
Apache Tomcat/4.1
2006/12/30 13:41:49 org.apache.struts.util.PropertyMessageResources
情報: Initializing, config='org.apache.struts.util.LocalStrings', returnNull=true
2006/12/30 13:41:49 org.apache.struts.util.PropertyMessageResources
情報: Initializing, config='org.apache.struts.action.ActionResources', returnNull=true
2006/12/30 13:41:50 org.apache.struts.util.PropertyMessageResources
情報: Initializing, config='org.apache.webapp.admin.ApplicationResources', returnNull=true
2006/12/30 13:41:51 org.apache.coyote.http11.Http11Protocol start
情報: Coyote HTTP/1.1をポート http-8180 で起動します
2006/12/30 13:41:51 org.apache.jk.common.ChannelSocket init
情報: JK2: ajp13 listening on /0.0.0.0:8009
2006/12/30 13:41:52 org.apache.jk.server.JkMain start
情報: Jk running ID=0 time=3/125 config=/var/lib/tomcat4/conf/jk2.properties
@@@正常時 ここまで@@@
正常に起動した場合にはどうなるのかというと、以下のポートが開いています。
$ nmap -p 8000-8200 localhost
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2007-01-10 05:55 JST
Interesting ports on localhost.localdomain (127.0.0.1):
(The 198 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
8005/tcp open unknown
8009/tcp open ajp13
8180/tcp open unknown
この本によれば、常にApacheにアドオンした状態でTomcatを使う場合、
特にポートを開かずともApacheからアクセス可能だと書いてあります。
アドオンのやり方がわからんというか、アドオンされているかの確認方法がわからんとです。
どうやら8180はWebサーバーのポートで、
8009はApache<->Tomcat間通信用ポートだそうです。
で、8005は何だろうと思って調べてみたら、
なんとTOMCATのシャットダウン用のポートでした。
あれ、こんなポートがデフォルトで空いていていいのだろうかと思い、
検索してみたところ、こんなページが見付かりました。
下手な英訳をすると
「おい、Tomcatインストールしたら、(8005ポートで)一般ユーザーでもbin/shutdown.sh が動かせるじゃねーか。どうやって防御したらいいんだよ?」
「bin/shutdown.sh をルートでしか動かなくすれば?」
「それは解決方法じゃないよ。shutdown.shと実行ファイルを抜き取ることはできるが、
Tomcatは誰でもダウンロードできる。ネットからアクセスできる状態でね。
ベストな解決方法は、Tomcatインストール時に
シャットダウンの属性を変えてしまうことじゃないかな?
Tomcatを実行したユーザー以外は停止できないようにさ。
何か他に意見ある?」
「その意見には賛成だなーー」
「Tomcatのシャットダウンポートは開いているけど、そのポートはlocalhost からしかアクセスできないように書かれていますよ。Tomcatは同じシステムからしかシャットダウンできません。
試してみて」
「いいニュースをありがとう。でも、それだとそのシステムを扱える一般ユーザーもシャットダウンできてしまいますよね。」
「セキュアな環境にしたいのならばシャットダウンパスワードを<Server> elementに記載してさらにserver.xmlを他の人から読めなくするべき。詳しくはTomcatのセキュリティについてを読め。」
ということなので、システムにログインアカウントを持っていない場合には問題無しみたいです。
私の場合も、結局自分しか使用していないので、特に問題はありません。
Apacheにアドオンする際にはTomcatのポートを開かなくていいらしいので、
ポートを閉じます。
変更前
port="8180" minProcessors="5" maxProcessors="75"
enableLookups="true" acceptCount="10" debug="0"
connectionTimeout="20000" useURIValidationHack="false" />
port="8009" minProcessors="5" maxProcessors="75"
enableLookups="true" acceptCount="10" debug="0"
connectionTimeout="20000" useURIValidationHack="false"
protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>
変更後
$ nmap -p 8000-8200 localhost
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2007-01-10 07:49 JST
Interesting ports on localhost.localdomain (127.0.0.1):
(The 200 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
8005/tcp open unknown
Nmap finished: 1 IP address (1 host up) scanned in 0.115 seconds
おお。できた。8005は閉じれないそうなので、放置です。
P34 にapacheのアドオンに関する設定があるが、アドオンされたかを確認する方法が書いてない。どうしよう。
P35 新しい用語。AJPV = Apache JServ Protocol Version1.2 ということらしい。
何をするかというとApacheとTOMCATの接続プロトコル。
トラックバック(0)
コメント(0)
2006.12.24
[
Myカテゴリ:時事・駄文
]
新しい会社から必要だっていわれている技術はとりあえず以下です。
・UML
・HTML+CSS
・Cookie
・ユーザー認証
・J2EE
・DB
・オブジェクト指向
で、このうちHTMLは手書きで "けいの開発記録 on the web" を作ったので
なんとなくわかっているとして、
それ以外はよくわからないなぁ。
ちょっと調べてみた所、J2EEにはこんなことが書いてあった。
@@@ IT用語辞典より抜粋 @@@
Sun Microsystems社のプログラミング言語「Java 2」の機能セットの一つで、企業の業務システムや電子商取引などで使われるサーバに必要な機能をまとめたもの。
標準機能セットのJava 2 Standard Edition(J2SE)に、サーバ用のAPIや諸機能を付加したものと言える。
APIセットをまとめた「Platform Specification」、Sunによる参照実装、互換性テストスイート、ガイドライン「Blue Prints」といった要素から成り、Javaプログラムを部品化して組み合わせることができるようにする「Enterprise JavaBeans」や、WebページにJavaプログラムを埋め込んで内容を動的に生成する「Java Server Pages」(JSP)などの技術を含む。
また、XMLを操作するためのAPIも用意され、サーバ上で様々なソフトウェアを組み立てられるようになっている。
J2EEの動作環境はSunを含む各社のアプリケーションサーバ製品に実装されており、データベースシステムやWebサーバと組み合わせて使う。
@@@ 抜粋ここまで @@@
わかったようなわからないような、要約するとJ2EEとは
J2SE+「Platform Specification」+参照実装+互換性テストスイート+「Blue Prints」
+「Enterprise JavaBeans」+「Java Server Pages」(JSP)
ってことらしい・・・ 多いなぁ。でもやるしかないよな。
そもそもJAVAなんですが、何度も勉強はやっているのですが
忘れたころにまた勉強することの繰り返しで理解しているとは言いがたい状況。
やっぱり仕事で使わない言語って、うまく書けないですね。
書こうとしても覚悟がいる。
仕事はCとかC++ばっかりなので、
プロジェクトの合間の暇な時にJAVAを勉強しても
プロジェクトが忙しくなって半年くらい経過してしまったりして忘れる。
以前からの経験からプログラムってただ単に本を見ているだけじゃ
全然理解していないってことはわかっているので、
何かサービスを作ってみることにしました。
J2EEの勉強のために買った本は「Javaサーバサイドプログラミング」という
技術評論社から出ている本です。
やること(得られる知識)
一:Webページの作成(HTML)
二:Webページからユーザーの作成(DB+J2EE+Cookie)
三:ログイン、ユーザー情報の変更、削除(DB+J2EE+Cookie+ユーザー認証)
四:オリジナルアプリの作成(オブジェクト指向)
用語集(学習したことを随時追加予定)
アプレット :クライアントブラウザで動作するJAVA
サーブレット:サーバー側で動作するJAVA
スレッドプール:P12 CGIはアクセスのたびにプロセスが生成されるが、
サーブレットはあらかじめ複数のスレッドを生成しておいて、
並列的に処理を行う。
その複数のスレッドを管理している部分をスレッドプールという。
JRE:Java Runtime Environment javaアプリを実行するために必要なソフトウェアのセット。コンパイラ、実行環境のこと
JSP: JSPはユーザーインターフェース用のJAVA。記述方法がHTML的というより、HTMLとの混在が可能である。JSPとして書かれたファイルは結局Javaのソースコードに変換されて、サーブレットとして実行される。
javascript:はブラウザが実行できる形式で書かれたプログラム
サーブレットエンジン=サーブレットコンテナ:サーブレット実行環境。コンテナといえば、TOMCATのこと。
スレッドプールから空きスレッドをインスタンスとして提供し、
リクエストにたいしてレスポンスを返す。以下の機能を持っている。
・ライフサイクル管理
・クラスローダ
・マルチスレッド
・セッション管理
サーブレットのライフサイクル P13
スレッドプールからのクラスのロードからオブジェクトの消滅までの
ライフサイクルはjavax.servlet.Servlet インターフェースで定義されている、
init(), service(), destroy() に相当する。
まだ、用語がよくわかっていないが、
一、クラスファイルをクラスローダーがロードし、
クラスローダーからインスタンスを生成する。
二、インスタンスのinit() メソッドを起動して、インスタンスを初期化。
コンテナに待機/常駐
三、リクエストごとにスレッドを割り当てserviceメソッドを実行
以降、三を繰り返す。
四、destroy() メソッドを起動してインスタンス(オブジェクト)をアンロード
アンロードしたしたオブジェクトはガーベジコレクションに吸収される。
捕捉
三、service() メソッドについての捕捉
service() メソッドにはdoGet()/ doPost()
などのイベントもservice() が行うことにより、
プログラミングを簡単にしている。
一、クラスローダについての捕捉。クラスローダの動作は中々面白い。
通常JAVAアプリでは更新したクラス(ファイル)を有効にするためには
VMの再起動が必要となるが、サーブレットコンテナは再ロードという
方法により更新したクラスを有効にすることができる。
Webサーバは常時稼働されているので、稼働中に変更できるようにするため。
セッション管理はHttp cookieを使用しないで、一連の流れであると
認識するための機能。
え・どうやるんだろう。KeepAliveとか使うのかな?
第三章で詳しく説明するらしい。
JSPの仕組み
サーブレットを動かすためにはサーブレットコンテナが必要であったように
JSPを動かすためにはJSPコンテナが必要です。
ああ、わかりにくいなぁ。
なんで全部含めてくれないんだろう。
この辺って意識しないと使えないのかな。
JSPのメカニズム P19
JSPコンテナにアクセスがあると、JSPのファイル.jspから
.javaのソースファイルに書き換えを行う。
.javaのソースファイルをコンパイルして.classファイルを作り
servletがロードすることによりレスポンスを返す。
そして、サーブレットと同じようにJSPにも生成、動作、消滅の過程が有り、
その為にはjavax.servlet.jsp.JspPage インターフェースで定義されている
jspService() の各メソッドを使用する必要がある。
またServletと同じようにjspInit(), jspDestroy()がある。
ちなみにHttpJspPage->JspPage->Servlet と継承関係にある。
P21
JSPはサーブレットを継承して動作するため、
Servlet APIとJSPのバージョンは対応関係があります。
サーブレットコンテナ(サーブレット実行環境)は三つのタイプが有り、
一、サーブレットコンテナがWebサーバーとして機能を持つ
二、Apache, IISなどのWebサーバーにアドオンする
三、単体でも、アドオンしても利用できる。
現状の流れとしては一、二は廃れ、三が増えてきている。
三の代表としてはTomcatがある。
単体でもアドオンしても利用できるのならば処理が複雑化しないように
単体動作の方がいいと思えるのだが、調査した所、
以下の利点があることがわかった。
http://www.miloweb.net/tomcat2.html
Tomcat はそれ単体でも Web サーバとして機能を持っていますが、以下の理由で Apache との連携が推奨されています。
1. 静的なページに関して Tomcat は Apache ほど速くありません。
2. Tomcat は、Apache ほど 細かな設定ができません。
3. Tomcat は、Apache ほど 頑強ではありません。
4. Tomcat は、 Apache のモジュール(例 Perl, PHP, その他)でしか提供していない機能に対する多くのサイトの要望に答えられないかもしれません。
P26
Apacheとの連携を行う場合にはDSO(Dynamic Shared Object)を有効にしてコンパイルする必要がある。
この辺は、debian だったらインストール時にデフォルトが有効になっていた気がするので心配ないだろう。
Tomcat は100% Pure JavaのサーブレットコンテナなのでバイナリはJava2 SDKがあればどのプラットフォームでも動作する。
これもdebianだったらaptitude ですぐに終わるだろう。
12月30日追記
ずいぶん間が空いたのはなぜかというと、途中まで書いていたエディターが死んだからです。はぁ~~。なんかLinuxのGUIエディターってかなり不安定な気がする。ちなみに最近Gnotepad+とかGeditを使っていたのだが、両方共マウスの真ん中ボタン押したときの動作が不安定。おまけに自動バックアップの設定にしていたのに、どこを見てもファイルが見付からないし。どうやら最初にファイル名を付けて、一度は保存しないと自動バックアップされないみたいです。
気を取りなおして続きを書こうと思います。
え~Tomcatなんですが、起動すると以下のエラーがでました。
@@@エラー内容@@@
Using CATALINA_BASE: /var/lib/tomcat4
Using CATALINA_HOME: /usr/share/tomcat4
Using CATALINA_TMPDIR: /var/lib/tomcat4/temp
Using JAVA_HOME: /usr/lib/kaffe
Using Security Manager
Internal error: caught an unexpected exception.
Please check your CLASSPATH and your installation.
java/lang/ExceptionInInitializerError
at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:772)
@@@エラー内容 ここまで@@@
このエラーの原因がわからず、起動スクリプトを見ると、どうやらkaffeというJDKが原因みたいでした。このkaffeをなんとか使わないでいいものかとスクリプトを見てみると、以下の文がありました。
JDK_DIRS="/usr/lib/j2sdk1.4-sun /usr/lib/j2sdk1.4-ibm /usr/lib/j2sdk1.3-ibm /usr/lib/j2sdk1.4
/usr/lib/j2sdk1.3 /usr/lib/j2se/1.4 /usr/lib/j2se/1.3 /usr/lib/kaffe"
つまり sun > ibm > kaffe っていう順で優先順位が定められており、仕方無くkaffeをJAVA HOMEに設定しているようだったので、SunのホームページからJ2SDKをダウンロードしてインストールすることによってエラー発生しなくなりました。ちなみに正常時のログ出力は以下になります。
@@@正常時@@@
Using CATALINA_BASE: /var/lib/tomcat4
Using CATALINA_HOME: /usr/share/tomcat4
Using CATALINA_TMPDIR: /var/lib/tomcat4/temp
Using JAVA_HOME: /usr/lib/j2sdk1.4-sun
Using Security Manager
Created MBeanServer with ID: 145f0e3:10fd1a9dd4c:-8000:barton:1
2006/12/30 13:41:48 org.apache.coyote.http11.Http11Protocol init
情報: Coyote HTTP/1.1をポートhttp-8180で初期化します
サービス Tomcat-Standalone を起動します
Apache Tomcat/4.1
2006/12/30 13:41:49 org.apache.struts.util.PropertyMessageResources
情報: Initializing, config='org.apache.struts.util.LocalStrings', returnNull=true
2006/12/30 13:41:49 org.apache.struts.util.PropertyMessageResources
情報: Initializing, config='org.apache.struts.action.ActionResources', returnNull=true
2006/12/30 13:41:50 org.apache.struts.util.PropertyMessageResources
情報: Initializing, config='org.apache.webapp.admin.ApplicationResources', returnNull=true
2006/12/30 13:41:51 org.apache.coyote.http11.Http11Protocol start
情報: Coyote HTTP/1.1をポート http-8180 で起動します
2006/12/30 13:41:51 org.apache.jk.common.ChannelSocket init
情報: JK2: ajp13 listening on /0.0.0.0:8009
2006/12/30 13:41:52 org.apache.jk.server.JkMain start
情報: Jk running ID=0 time=3/125 config=/var/lib/tomcat4/conf/jk2.properties
@@@正常時 ここまで@@@
正常に起動した場合にはどうなるのかというと、以下のポートが開いています。
$ nmap -p 8000-8200 localhost
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2007-01-10 05:55 JST
Interesting ports on localhost.localdomain (127.0.0.1):
(The 198 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
8005/tcp open unknown
8009/tcp open ajp13
8180/tcp open unknown
この本によれば、常にApacheにアドオンした状態でTomcatを使う場合、
特にポートを開かずともApacheからアクセス可能だと書いてあります。
アドオンのやり方がわからんというか、アドオンされているかの確認方法がわからんとです。
どうやら8180はWebサーバーのポートで、
8009はApache<->Tomcat間通信用ポートだそうです。
で、8005は何だろうと思って調べてみたら、
なんとTOMCATのシャットダウン用のポートでした。
あれ、こんなポートがデフォルトで空いていていいのだろうかと思い、
検索してみたところ、こんなページが見付かりました。
下手な英訳をすると
「おい、Tomcatインストールしたら、(8005ポートで)一般ユーザーでもbin/shutdown.sh が動かせるじゃねーか。どうやって防御したらいいんだよ?」
「bin/shutdown.sh をルートでしか動かなくすれば?」
「それは解決方法じゃないよ。shutdown.shと実行ファイルを抜き取ることはできるが、
Tomcatは誰でもダウンロードできる。ネットからアクセスできる状態でね。
ベストな解決方法は、Tomcatインストール時に
シャットダウンの属性を変えてしまうことじゃないかな?
Tomcatを実行したユーザー以外は停止できないようにさ。
何か他に意見ある?」
「その意見には賛成だなーー」
「Tomcatのシャットダウンポートは開いているけど、そのポートはlocalhost からしかアクセスできないように書かれていますよ。Tomcatは同じシステムからしかシャットダウンできません。
試してみて」
「いいニュースをありがとう。でも、それだとそのシステムを扱える一般ユーザーもシャットダウンできてしまいますよね。」
「セキュアな環境にしたいのならばシャットダウンパスワードを<Server> elementに記載してさらにserver.xmlを他の人から読めなくするべき。詳しくはTomcatのセキュリティについてを読め。」
ということなので、システムにログインアカウントを持っていない場合には問題無しみたいです。
私の場合も、結局自分しか使用していないので、特に問題はありません。
Apacheにアドオンする際にはTomcatのポートを開かなくていいらしいので、
ポートを閉じます。
変更前
enableLookups="true" acceptCount="10" debug="0"
connectionTimeout="20000" useURIValidationHack="false" />
enableLookups="true" acceptCount="10" debug="0"
connectionTimeout="20000" useURIValidationHack="false"
protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>
変更後
$ nmap -p 8000-8200 localhost
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2007-01-10 07:49 JST
Interesting ports on localhost.localdomain (127.0.0.1):
(The 200 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
8005/tcp open unknown
Nmap finished: 1 IP address (1 host up) scanned in 0.115 seconds
おお。できた。8005は閉じれないそうなので、放置です。
P34 にapacheのアドオンに関する設定があるが、アドオンされたかを確認する方法が書いてない。どうしよう。
P35 新しい用語。AJPV = Apache JServ Protocol Version1.2 ということらしい。
何をするかというとApacheとTOMCATの接続プロトコル。
Template Designed By
ぐらいんだぁ
ぐらいんだぁ