2008年3月27日木曜日

#1 Chandler Server

Thinkpad 380EDを役立てようのコーナー。

Squidはそこそこ使えそうなことは分かった。次にかなりヘビーなヤツを起動してみることにする。その名はChandler。カレンダーやタスク管理が出来る、いわゆるPIMソフト。デスクトップだけでもそこそこ使えるが(メニューは英語だが日本語もオッケー)、サーバもあるんだなぁ。

Chandler Project

で。このChandler、デスクトップ版はPythonとかで作られてるっぽいのですがサーバ版はJava。サーババンドル版なるものをダウンロードすると、Tomcatが一緒にくっついてくる。
早速JDK1.5をダウンロードしてサーバ起動...

すげー待った。

[Catalina] Server startup in 2277606 ms

...やはり最大メモリ64MBでは限界がありんす。ちなみにDBも必要だけどderbyも一緒にくっついているので、JDK以外は必要なし。
とりあえず起動はしたので、これから使ってみます。

2008年3月20日木曜日

Apache Axis2 Introduction - volume 1

はじめに

Apache Axis2 はApache Software Foundationで作成されているWebサービスエンジン。
実装は開発言語により2種類に分かれていて、それぞれAxis2/Java, Axis2/Cと呼ばれている。

先代にあたるAxis1.xはJavaによるSOAPの参照実装扱いがされていて、各種WebアプリケーションサーバのWebサービスエンジンとして活躍した実績がある。だがなぜわざわざ2を作るのか?Axis2のページにこうある。

The new architecture on which Axis2 is based on is more flexible, efficient and configurable in comparison to Axis 1.x architecture.

つまり、より柔軟で使いやすいWebサービスエンジンを提供するのが目的、というわけ。
実際のところそれが達成できているかは怪しいが、とにかく2なのである。
以下、本家が公称している特徴。
  • SOAP1.1 および SOAP1.2をサポート。RESTもオッケー。
  • スピード
  • 少ないメモリで動く
  • 独自のオブジェクトモデルでメッセージ生成を実装
  • ホットデプロイ可
  • 非同期Webサービスを提供可能
  • MEPサポート
  • POJOアノテーション(JSR-181), SpringFrameworkのサポート、EJBサポート
  • その他WS-*のサポートなど多数
XML=オブジェクトバインディングとかは結構独自路線を行っていて、楽しい感じだ。
個人的にはJAX-WSのサポートとEJBサポートに期待していて、その辺りを検証してみたい。

検証環境

色々書いたりやるまえに環境の紹介。
  • 開発環境:Oracle JDeveloper 10.1.3.3 (Linux版, 付属OC4Jを使用)
  • OS : Debian GNU/Linux (etch, Java 1.5.0_05), もしくは Mac OSX(Java 1.5.0_13)
なんかぐちゃぐちゃ。

Axis2のインストールとサーバの立ち上げ

Axis2は配布形式が複数あって、内容が異なる。
  1. Standard Binary Distribution
  2. WAR Distribution
  3. Documents Distribution
  4. Source Distribution
まぁ基本的には1.-3.があれば大丈夫。4.はソースを見たり、デバッグで使う人用と考える。
実は1.には小型のアプリケーションサーバが同梱されていて、特別TomcatやJBossなどを準備しなくてもAxis2が使えるようになっている。

インストールしたディレクトリをAXIS2_HOMEとすると、$AXIS2_HOME/bin/axis2sever.shを実行するとポート8080を開いてサーバ`SimpleAxisServer'が立ち上がる。

ブラウザでlocalhost:8080にアクセスすると、Axis2のデモ用に準備されているVesionサービスが表示される。リンクをクリックするとWSDLを取得することができる。

このサーバはAxis2プロジェクトが独自に実装しているものであるようなので、実際の開発用にはちょっと向かない。なので開発時はWARディストリビューションを使うほうが良いが、ちょっと触ってみたり試す分には良いかもしれない。




最初のWebサービス作成とデプロイ


Axis2を使ってサービスを公開する手順を追ってみる。
以下、Apache Axis2 Quick Start Guideより一部抜粋。
  1. Axis2 Webアプリケーション(WAR Distributionに含まれるaxis2.war)をデプロイして起動を確認する
    Tomcatのデフォルト設定であれば、http://localhost:8080/axis2/でアクセス可能。
  2. サービス用のクラスを作成する。POJOで良い
  3. Axis2のサービス専用アーカイブ(拡張子.aar, 実際はJAR形式)を作成する
  4. Axis2管理ツールを使ってAARファイルをデプロイする
    管理ページの"Tools" -> "Upload service"でファイルを選択してデプロイ。しばらくすると"System Components" -> "Available Service"の一覧に作成したサービスが表示される。サービス名を選択するとWSDLが自動生成で出力される。
キモは手順3。JAR内のMETA-INFディレクトリにservices.xmlという設定ファイルが必要になる。
例えば2で作成したクラスがcom.battella.axis2.services.CalcServiceというクラスだった場合、AAR内のファイルは以下のようになる。

META-INF/manifest.mf
META-INF/services.xml
com/battella/axis2/services/CalcService.class

かんたーん。これ以外にもBinary Distributionに含まれているツールを使うのもありだが、環境整えるのが面倒なのでこれが一番簡単。クライアントはEclipseやJDeveloperなどの開発環境に付属している、WSDLからクライアント生成を行うツールを利用すると良い(本当はもっと色々できるけど)。

services.xmlは特別複雑な設定ファイルではないので、最初はQuickStartGuideにあるものをコピーして使ってもさほど問題は無いはず。今回はこんな感じにしてみた。

services.xml
<?xml version="1.0" encoding="Shift_JIS" ?>
<service name="CalcService" scope="application">
<description>Calculator Service</description>
<messagereceivers>
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messagereceivers>
<parameter name="ServiceClass">
com.battella.axis2.services.CalcService
</parameter>
</service>

というわけで、初回のイントロダクションはここまで。
次回はもうちょっと深くやってみようと思う。

sudoers

Debianをインストールした時にsudoを入れていなかったのでインストール。

# apt-get install sudo

設定ファイルsudoersを編集しようとvisudoコマンドを打ったときに
rootのEDITORがnanoになっていることに気がついた。
woodyのデフォルトだということは解っているのだが...変えてなかったらしい。
Debianのコマンドupdate-alternativesを使って変更。

# update-alternatives --config editor

`editor' を提供する 5 個の alternatives があります。

選択肢 alternative
-----------------------------------------------
1 /bin/ed
*+ 2 /bin/nano
3 /usr/bin/nvi
4 /usr/bin/vim.basic
5 /usr/bin/vim.tiny

デフォルト[*] のままにするには Enter、さもなければ選択肢の番号のキーを押してください: 4
`editor' を提供するために `/usr/bin/vim.basic' を使います。
#

ちなみにupdate-alternatives以外にもDebianには便利な管理コマンドが準備されている。
詳しくは下記参照。

Debianリファレンス

知っているのと知らないのでは効率が全然違うと思われ。

2008年3月19日水曜日

Google...

何故かよく解らないが、このブログの設定で「検索エンジンのクロール許可」にしてもGoogle検索でひっかからない。どうしたものか。

2008年3月15日土曜日

Another kernel is built.

新しいカーネルのビルド終了。コンパイルにかかった時間は8時間。
やはり、かなりの時間短縮になった。とはいえ、最近のカーネルはビルドに時間がかかるのぅ...。

axnet_cs.cを再度書き換え、起動中のエラーが無くなったことを確認。
まだ無駄なモジュールがありそうだが、ここからは管理シートを作成してゆっくり作業をすることにしよう。

Linux kernel 2.6.x options for Thinkpad 380ED (Japanese only)

必須カーネルオプションはまだ整理中だが、こうしたほうが良いんじゃないかと思われるものを思いつきでメモることにする。

ファイルシステムに関しては、自分が利用するものを決めてかからないとコンパイルが延々時間を食うため、こういうリソースの限られた環境に対しては決めてかかったほうが良い。
ハード面での制約がきついので、NFSくらいなら入れておいてもいいかもしれない。
ちなみに私はext系しか使わないのでそうすることにした(逆に初回はかなりの時間が無駄になった)。

USBに関しては、380EDを拡張する上ではきっと欠かせないオプションなんだと思われる。
あいにく380ED自体はUSBポートが無いため、PCカードを使ってUSBデバイスを利用する以外に方法が無い。ジュークボックス的使い方をする場合や、外付けディスクを利用する場合には必ず選択肢になる。
ただ、用途が見つからない時は思い切って削ってしまうほうが良いと思う。便利なので猫も杓子もUSBになっていて、ソースもやたら多い。使うことが決まってからカーネルリコンパイルでも遅くはない。

netfilterに関しては入れておいて損は無いと思う。(スペックの問題から)ヘビーユースで使う事は無いにせよ、勉強用のファイアウォールとしては十分機能するはずだ。本筋から外れた話になるが、380EDの用途に関してはそのうち纏めて書こうと思う。今は烏賊が遊んでいる程度。

Bluetoothや無線LAN関係も用途によりけりなので、380EDに対する最小カーネルを目指している今は必要は無い。

ひとまず今晩〜明日までにかけて、menuconfigで整理した設定(1300行くらい稼いだ)でコンパイルをかけようと思う。ファイルシステム、サウンド、USBを外したのでかなり軽くなると思う。

2008年3月14日金曜日

libncurses5-dev

ネットワークが使えると一気にできることが広がる気がするなあ。
ひとまずカーネルコンフィグの見直しをするために、せめてmenuconfigくらいは使えるようになりたい。

# apt-get install libncurses5-dev

で、今まで無いとか言われてたcurses.hをゲット。ああ、これで楽になる。
というより何故こんなことになる前にインストールされていなかったのかが疑問。

Squid 2.6.5-6etch1

そもそもなんでこんなことになったかというと。
Squidを入れて遊ぼうと。そしたらこの烏賊くんがコア吐いて落ちるおちる。
なんだかなぁ、と思って調べたらepoll_create()が無いとかなんとか。
これなに?ってまた調べたら、2.6系カーネルにしか無いっていうんですな。

debianのsquidメンテナがおかしいのか俺がおかしいのか...

で、kernelを2.6に上げたらNICが動かなくなったというわけ。
対処するには再構築しかないと。

下のエントリにあるように成功して今は烏賊くんも元気。
このスペックの割に結構さくさく動作してるんだよなぁ...
まともに設定していないので、設定次第ではもうちょっと高速化できるかも。

beyond the build...

カーネルビルド成功。んでどうなったというと...やりましたー!
とうとうBuffalo LPC-PCM-CLXがkernel 2.6系で動きました。
なので、これまでに実行したことをメモ。
  1. kernel 2.6.24.3をゲット
  2. drivers/net/pcmcia/axnet_cs.cのaxnet_ids[]に以下の行を追加

    PCMCIA_DEVICE_PROD_ID12("MELCO", "LPC-PCM-CLX", 0x00000000, 0x00000000),

  3. make config -> make -> modules_install install
  4. mkinitrdrdでinitrd.imgを作成
  5. grub設定変更
  6. 起動
  7. /etc/pcmcia/configに以下の行を追加

    card "MELCO LPC-PCM-CLX FastEthernet Card"
    version "MELCO","LPC-PCM-CLX"
    bind "axnet_cs"

  8. /etc/init.d/pcmcia restart
  9. ifup eth0
ちょいと問題が。手順2でハッシュ値が解らないのでゼロにしちゃったけど、
これは起動時にエラーが出る。dmesgではこんな感じ。

pcmcia: axnet_cs: invalid hash for product string "MELCO": is 0x0, should be 0x481e0094
pcmcia: see Documentation/pcmcia/devicetable.txt for details
pcmcia: axnet_cs: invalid hash for product string "LPC-PCM-CLX": is 0x0, should be 0xf3a8d51d
pcmcia: see Documentation/pcmcia/devicetable.txt for details

で、指定されているドキュメントを見たら算出方法が書いてあるという...。まぁいいや。
上記のログの直後にeth0が認識されたよーというログが出る。

eth0: Asix AX88790: io 0x300, irq 3, hw_addr 00:16:01:44:0a:bd

いやー、ここまで来るのに丸2日かかりましたよ、ええ。
残った課題は、カーネルオプションの見直しとハッシュの書き換えだな。

make中

やはりmakeのエラーはファイル名の問題だったようで、以下のファイルを大文字込みの名前に変更したらまた走り始めた。
  • net/ipv4/netfilter/ipt_ecn.c -> ipt_ECN.c
  • net/ipv4/netfilter/ipt_tos.c -> ipt_TOS.c
  • net/ipv4/netfilter/ipt_ttl.c -> ipt_TTL.c
  • net/ipv6/netfilter/ip6t_hl.c -> ip6t_HL.c
  • net/netfilter/xt_mark.c -> xt_MARK.c
って、対処しないとか言いつつ対処してるじゃん、という。
なんでこのファイル名が整合が取れていないのかについては不明なまま。そのまま展開してるだけなんだけどな。
他にも出てきそうだなぁ。

2008年3月13日木曜日

No rule to make target...

会社から帰って来たのでコンソールを見てみたら、なんか止まってた。

make[4] : *** No rule to make target `net/ipv4/netfilter/ipt_ECN.c', needed by `net/ipv4/netfilter/ipt_ECN.o'. Stop.

ヽ(`Д´)ノウワァァン

なんかまた大文字小文字問題のような気がしますが...
#ipt_ecn.cならあるけどipt_ECN.cは無いんだよね...

ちなみに直前のオブジェクトファイルが11時くらいに出来ているようなので、まぁここまでくるのにざっと12時間超ってとこですか。どう考えてもかかりすぎなので、この問題には対処せずにfilesystem系オプションとか全部どうにかしてからのほうが早いかな。ちなみに問題のaxnet_csはコンパイル出来ているようす。

make中

かれこれ1時間半くらい経つけどmake終わらず。やっぱり一晩かかるんじゃないかと思い始めて来た。放置でも良いんだが、ほぼフルオプション(使わないものもモジュールにしちゃってるし)結局何時間かかるのか知りたいという面もある。

カーネルオプションについては必要そうなものは大体判明してきた。dmesgとlsmodを見ながら、前のエントリのリンク先にあるハードウェアスペックと比較する作業。地味。そういえば以前断念した赤外線ポート、使えるようにならないかなぁ。

2008年3月12日水曜日

make中

make中なり。
menuconfigを実行しようとしたらcurses.hが無いとか言われた。oldconfigしかできない...ろくに使いもしないオプションをNで飛ばしまくり。

patchですが、ハッシュ値をどうしたら良いか解らなかったのでひとまずゼロで。あとで確認して、再度ビルド...道のりは長い。
それまでの間に、カーネルオプションを見直すことにする。
スペックが確認できるサイトはあるので、先達の遺産を見ながらチェックの予定。

参考にしているサイト
しかし、結構こんな環境で遊んでる人もいるもんだな...。

mount -o norock

ぬー、やってしまった。
MacBookで解凍して作成したkernelのソースディスクを#1にコピーする時に-o norockオプションを付け忘れた。Makefileがmakefileになっちゃったりしてコピーしなおし...。

あと気がついたこと。Thinkpad 380EDのCD-ROMドライブの調子が悪い。EJECTボタン押してもカチカチしてるだけでトレイが出てこない。爪でサポート。

Buffalo LPC-PCM-CLX pcmcia ethernet card

Thinkpad 380EDにタイトル通りのカードをさして使っていたが、Debianをsargeからetchに上げたのち、kernelを2.6系にしたら認識されなくなってしまった。どうもaxnet_csドライバを指定しても、カードがそれだと認識されていないっぽい。axnet_cs.cをみるとCoregaのカードとかはあるのだがmelcoはLPC3-TXのみ。これではいかん気がするのでpatchあてなきゃなぁ、、、ネットワークがからきし使えないので、手元のMacBookでダウンロードしてCD焼き。これからpatchあててビルド。乞うご期待。