Linux Gazette 2003年10月号 #95
今月のLinux Gazette の主な記事
n今月のニュース
 ・法制化
 ・一般ニュース
 ・ディストリビューション関連ニュース
 ・ソフトウエア及び製品関連ニュース
nAWKによる迅速で狡いデータ抽出
nRedHat9の上でTomcatとApacheを統合
nオッシロスコープを通じるLinux
nソフトウエア工学
n MultiTail入門
n メキシコをFLOSSが征服
 
原文を一括して一つのファイルでセーブするには、下記のリンクがあります。
TWDT 1 (gzipped text file)
TWDT 2 (HTML file)
前者はテキスト形式で、後者はHTML形式です。これらは一括セーブする目的のもので、
HTML版のリンクが働くとは限りません。
 
 
 
 
 
今月のニュース
▼▼▼ 法制化 ▼▼▼
欧州特許

先月、欧州議会で近く行われるヨーロッパのフトウェア特許の将来に関する投票について報告した。多く無料及びオープンソフトウェアの支持者によれば、議会に対する提案は、多分永久に、ヨーロッパでのソフトウェア特許取得の慣習を確立するだろう。彼らの主張では、これは革新の縮小に結びつき、大きな資源を使用することが出来て小さい競争者を法律上市場から弾き出すことの出来る大企業ソフトウェア会社に不必要で激しい利点を与えることになるだろう。これらの見解に対する有力で行き届いた論議を TovaldsとAlan Coxが欧州議会に提出した公開状 で読むことが出来る。

監督事項について苦情を述べるだけで満足しない人が沢山いる。彼らはその代わりロビー活動をして、(数的に大きいが)財政的には小さい利益団体の議題に対する関心を掻き立てた。これらの努力の効果があるかもしれないという初めての兆候は、提案指令に関する投票を 更に延期するとの発表 であった。延期の理由は示されなかったが、最初の延期は危うくなった問題に関する広範囲の混乱と、あまりに急いで指令が強要されていると感触の結果であった。同様の感情ががこの二番目第2の延長に結びついたと思われる。
この一枚岩のロビー活動の最後の喜ぶべき結果は、反対すべき提案の殆どを削除する修正が指令に対して提案されたことだ。この修正指令は 修正された指令は、33の棄権があり364票対153票で議会が可決した。LWNは読み易いHTMLフォーマットで指令をオンラインで複製した
この成功に学んで、それを将来の努力に適用することが重要だ。多くのフリー・ソフト熱狂家が彼らの弁護の過程で価値あるロビー活動技術を学んだので、これらの技術を発達させて共有しなければならない。NewsForgeに、特にこのロビイ活動の経過に関する面白い報告 が発表されており、ロビイ活動の方法と、政治家とそのスタッフにどの程度の理解を期待出来るかの双方につき有益な情報を与えている。さらに、ロビー活動をした政治家を追跡調査し、実際にに投票したかチェックすることが重要だ。NTKnowが指摘するように、英国自由民主党は非常に積極的な雑音を出したが、結局特許に有利な投票をした。英国政党のうち、緑の党と英国独立党だけがソフトウェア特許に反対した。フリー・ソフト主張者が彼らの投票記録に注意を払い(関心がある)ことを政治家が悟れば、将来の演出に留意する筈だ。特許支持受益者が国会の別のルートを辿って目的を達しようとするかも知れないので、これらの技術は特に重要になる。
この物語の詳細については、特許反対、フリー・ソフト支持の視点にあるときは、 FFII.orgを見られたい。その最終修正と投票に関する報告は、読む価値がある。
 
 
 
 
 
▼▼▼一般ニュース▼▼▼
Mobilix
Mobilix(モバイルLinuxシステムに関する情報を提供するサイト)に取って最後の賭けになるドイツ最高民事民事裁判所は、Les Edition Albert Rene を有利と認めて ヴェルナー・ハウザーが持ち込んだ訴訟を却下した。Mobilixバナーの下で以前に起こった仕事は、有り難いことに新しい名前 Tuxmobilの下で、尚、継続する。
 
 
 
 
 
▼▼▼ディストリビューション関連ニュース▼▼▼
Debian

Debian Weekly News は、Debianプロジェクトが、新規amd64アーキテクチャーに対する移植作業のため二重Opteronマシンに対しフル・アクセスを受領した と報じる。


Debian Weekly Newsによれば、debian-インストーラチームがsergeインストールの過程全体を案内するHOWTO. をまとめた。

 
Morphik
Prakash Advaniが、Morphixプロジェクトの創始者で主管者であるがAlex de Landgraafとのインタビューをおこなった。 [via DWN]
 
Mandrake
Mandrake Linuxは、来るMandrake Linux 9.2のリリースにおいて、広告用スペースの販売を計画している。 NewsForge storyに詳報がある。
 
 
 
 
 
▼▼▼ソフトウエア及び製品関連ニュース▼▼▼
Python 2.3.1
Pythonソフトウェア基金は、Pythonプログラミング言語のバージョン2.3.1のリリースを発表した。この軽微なリリースは、バージョン2.3のリリース以来2か月の経験に基づく多数の増強を紹介する。
 
Scribus 1.1.0

Franz Schmidは、最近リリースされたScribus 1.0の上に構築するScribus 1.1.0 - Linux Desktop Publishingのリリースと同時に、 http://www.scribus.org.uk/.に統合Scribusウェブサイトを立ち上げるとを発表した。

 
GNOME-Office 1.0 リリース
GNOMEオフィスチームは、GNOME-Office 1.0が直ち入手出来ると発表した。GNOMEオフィスはGNOMEデスクトップ環境と継ぎ目なく一体となる生産性の高いフリー・ソフト・アプリケーションで一式である。GNOMEオフィスにはAbiWord-2.0ワープロ、GNOME-DB-1.0、データベース・インターフェース及びGnumeric-1.2.0スプレッドシートが含まれる。
 
MuNAS
MuNAS はXウィンドウシステムがオーディオ・データ取り扱いを支援しない問題に取り組む1個のソフトウェアだ。これは、Linuxの少数クライアント/サーバー・コンピュータ・モデルがマルチメディア・アプリケーション:ターミナル・サーバーの中で実行されるオープン・サウンド・システム(OSS/無料)適応アプリケーションが作ったオーディオ・データ、を扱うことが出来るようにする。したがって、MuNASをインストールすると、ターミナル・サーバー中のマルチメディア適用を実行して、X端末から音を聞くことが出来る。現在、ウィンドウ・ターミナルの製造者いくつかが、自分のX端末にMuNASをインストールすることを計画している。
 
XFce 4.0

XFceプロジェクトは、デスクトップ環境と開発プラットフォームのバージョン4.0のリリースを発表した

 

著者紹介:

Mick はLGの「今月のニュース」 編集者だ。

[Picture] 数年前にアイルランドで生まれたMichaelは、現在ダブリン大学医療工学部で博士論文に取り組んでいる。論文の題名はLamb wavesの非破壊検査への利用だ。この研究に GNU/Linux が極めて有用であったので、 Michael は他の工学にフリーソフトウエア・ソリューションを適用することに強い興味を持った。論文が出来上がったら、 Michael は長い徒歩旅行に出る予定だ。


Copyright ツゥ 2003, Michael Conry. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 95 of Linux Gazette, October 2003
 
 
 
 
 
AWKによる迅速で狡いデータ抽出
By Phil Hughes
 

何年も前、恐らく20年近く前に、compユースネ・ニュースグループ上で、仕事を仕上げるため最小のツールを使うことに付いての規則的な指摘があった。つまり、何かをするのに速くて狡い方法を誰かが求めており、その続報には、AWKソリューションが続き、sedソリューションが続くなどなどのCソリューションがを含まれていた。

今日でもまだ、私は、問題に取り組む場合にこの哲学を使おうとする。今の場合は、AWKを取り上げたが、古参者でこれを読む人がいれば、sedに基づくソリューションを思い付くだろうと期待する。

問題:E-メール・メッセージからのデータ抽出

私は、両替レートの毎日の要約の手続きをした。これは無料で、ここ.に行くだけで加入することができる。ドルのユーロに対するレートを保cおんど毎日見て、e-メールをセーブしている。ときにはセーブするだけだ。いつか、傾向を示すプログラム書こうと思っているが、いつも優先度が低い。

昨日、少数の保存メイル・メッセージを見ていたとき、立派なプログラムを書く優先度は低いが、速くて狡い裏技なら、私のしている無作為抽出より少ない時間で出来ると思った。私が望んだものは、傾向の最小のグラフ表示が付いた日付と数字であった。

 

第一歩はデータを見ること。ここに、メッセージの一部の抜粋を示す。

 

>From list@en.ucc.xe.net  Wed Sep 10 12:22:53 2003
...
XE.com's Currency Update Service writes:
 
本日の更新通貨、XE.comのサービスを示します。メッセージの終わりにある
著作権、使用契約条項及び情報の章をお読み下さい.  CUS5D0B3D5C16D9

当社の無料通貨e-メールが役立つとお考えなら。このメールを友達に
送って下さい。 http://www.xe.com/cus/で無料で加入して下さい

<PRE>
 
Rates as of 2003.09.09 20:46:35 UTC (GMT). Base currency is EUR.
 
Currency Unit                          EUR per Unit         Units per EUR
=========================   ===================   ===================
USD United States Dollars                 0.890585              1.12286     
EUR Euro                              1.00000               1.00000     
GBP United Kingdom Pounds              1.41659               0.705920    
CAD Canada Dollars                     0.651411              1.53513     
...
</PRE>
このメールを読むヘルプはhttp://www.xe.com/cus/sample.htmを参照のこと。
 
...
... の行は、興味のない行を捨てたことを意味する。

このレポートを再生するのに使った三つの事項がある:

・日付を知るため "Rates as of" の行
・実際の変換レートを知るため "USD" の行l
・情報のプリントと私の変数の消去を命令するため </PRE> の行。データが良ければ消去の必要はないが、悪いデータを検出するのが賢明な方法だと考えただけなのに注意。速い裏技だが、むかむかする程速くもない。

ソリューション

ソリューションの数値部分は全く易しい。日付情報とレート情報を把握するだけだ。</PRE>行があったら、それをプリントする。

グラフの部分は、レートに相当する数だけのプラス記号をプリントして行うだけだ。立派な解像度を得るため、幅の広いプリント出力あるいはある種のオフセットが必要であろう。私は、ユーロは$.90以下落ちないと仮定して、オフセットを採用した、今の方向を考えるとこれは、極めて安全だ。

最後に、標題を付けたかった。AWKのBEGINブロックを使用して、私は2、3の印刷ステートメントを入れた。文字を数えるのが嫌なので、すべてを整列させるためタイトル情報の前に置く必要のあるスペースの数になる変数overを定義した。これは、私がプログラムを走らせなければならないことを意味しただけだ。どの位、変数を調節しなければならなかったかを見られたい。

コードを示す:

BEGIN		{
		over = "                 "
		print over, " Cost of Euros in $ by date"
		print over, ".9       1.0       1.1       1.2       1.3"
		print over, "|         |         |         |         |"
		}
/Rates as of/	{ date = $4 }
/^USD/		{ rate = $6 }
/^<\/PRE>/	{
		printf "%s %6.3f ", date, rate
		rc = (rate - .895) * 100
		for (i=0; i < rc; i++) printf "+"
		printf "\n"
		date = "xxx"
		rate = 0
		}

メール・ファイルを入力としてプログラムを走らせるだけで、結果の行全部を印刷するが、順序はメール・ファイルのものとなる。ソート・プログラムが救済する。出力の第1フィールドは日付で、タイトル・ラインの第1文字を注意深く選らぶと、すべてが頃合いにソートされることを意味する。そこで、走らせるには、次を用いる:

    awk -f cc.as messages | sort 
すると立派なレポートがえられる。沢山の行を見るときは、moreを通じて結果をパイプする。

結果を示す:

                   Cost of Euros in $ by date
                  .9       1.0       1.1       1.2       1.3
                  |         |         |         |         |
2003.01.02  1.036 +++++++++++++++
...
2003.08.28  1.087 ++++++++++++++++++++
2003.08.29  1.098 +++++++++++++++++++++
2003.08.31  1.099 +++++++++++++++++++++
2003.09.01  1.097 +++++++++++++++++++++
2003.09.02  1.081 +++++++++++++++++++
2003.09.04  1.094 ++++++++++++++++++++
2003.09.05  1.110 ++++++++++++++++++++++
2003.09.07  1.110 ++++++++++++++++++++++
2003.09.08  1.107 ++++++++++++++++++++++
2003.09.09  1.123 +++++++++++++++++++++++
2003.09.10  1.121 +++++++++++++++++++++++
2003.09.11  1.120 +++++++++++++++++++++++
2003.09.12  1.129 ++++++++++++++++++++++++
2003.09.14  1.127 ++++++++++++++++++++++++
2003.09.15  1.128 ++++++++++++++++++++++++
2003.09.16  1.117 +++++++++++++++++++++++
2003.09.17  1.129 ++++++++++++++++++++++++
2003.09.18  1.124 +++++++++++++++++++++++
2003.09.19  1.138 +++++++++++++++++++++++++

sed 専門家よ、精を出してくれ。-- Phil Hughes, fyl@a42.com Phone/FAX: 506-483-1265 Aptdo. 89-4060, Alajuela, Costa Rica

 

著者紹介:

フィル・ヒューズはLinux Journal したがって Linux Gazette. の出版者だ。彼は、オリンピックの半島の太平洋沿岸上の自宅から永久にテレビ電話する夢を持っている。雇用者として、彼は、どのボスもそうであるように「意地悪で、邪悪で、ケチで、扱い難いが、円熟した人柄」だ。

 

Copyright ツゥ 2003, Phil Hughes. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 95 of Linux Gazette, October 2003
 
 
 
 
 
RedHat9.0の上でTomcatとApacheを統合
By Mike Millson
 

緒言

Java servlets は、ウェブサイトと、ウェブベースのアプリケーションを構築するための強力なツールだ。あらゆるJavaウェル開発者が持たなければならない技術は、Tomcat servlet エンジンの搭載とコンフィギュレーションである。多くの人が、成熟した、安定な、オープンソース・ソフトウエアを作るのにApache ソフトウエア基金 の恩恵を受けている。これは最近 InfoWorld読者により、2003年最良アプリケーション・サーバに選ばれた。

この記事は、RedHat 9.0の上でTomcat をApacheに統合する方法を論じる。目標は、ユーザが安心してTomcatを使用することの出来る簡単で安定なコンフィギュレーションを作ることだ。

全てのコマンドは、別途の注記がない限り、ルートとして発行されることに注意されたい。

Apache のインストール

ApacheをインストールするのにRedHat RPMを使うことを選んだ。Apacheを市ソースからコンパイルする代わりにRPMを使うと、次のようにシステム管理が簡単になる。

・更新とバグ修正をRedHat Network.から自動的にインストールすることが出来る。
・スタートアップとシャットダウンのスクリプトが、既にコンフィギュアしてあるので、利用することが出来る。

RedHat RPMのいんすとーるには、RedHat up2dateコマンド行ユティリティを使うことをお薦めする。up2dateは、RedHat ネットワーク加入権を買わなくとも、使うことが出来るが、基本的加入権には、大きい価値がある。自分でインストールしたソフトウエアが正しいバージョンで自分のシステムに正しい従属性があることを確かめるための沢山の苦労が無くなる。

インストールしなければならないRedHat RPMは:

・httpd:Apache web server
・httpd-devel:mod_jk コネクタ作成に必要な開発ツール

である。up2dateを使ってパケージをインストールするには、インターネットに接続していることを確認して、下記を入力する:

up2date -i httpd
up2date -i httpd-devel

これで、次のように start/stop/restart Apache をおこなうことが出来る筈だ:

service httpd start
service httpd stop
service httpd restart

Apacheをスタートして、ブラウザに http://localhost/ と入力して、Apacheが働いていることを確認する。文書にリンクした規定値Apacheインストールペイジが見られる筈だ。

Tomcat のインストール

Tomcat を走らせるための唯一の要件は、Javaソフトウエア開発ツール(SDK)とも呼ばれるJava開発キッと(JDK)がインストールされていて、JAVA_HOME 環境変数が設定されていることだ。

Java SDK

私は SunのJava 2 プラットホーム、標準版をインストールすることにした。これはhttp://java.sun.com/j2se/.からダウンロードすることが出来る。私はJ2SE v1.4.2 SDK Linux 自動抽出バイナリファイルを選んだ。

SDKをダウンロードしたディレクトリに変更して、自己抽出バイナリを実行可能にする:

chmod +x j2sdk-1_4_2-linux-i586.bin

自己抽出バイナリを走らせる:

./j2sdk-1_4_2-linux-i586.bin

これでダウンロードしたディレクトリの中の j2sdk1.4.2 と言うファイルに入る筈だ。SDKディレクトリをインストールしたい場所に移す。私は /usr/javaにインストールした。 /usr/javaがなければ作る。私が、ダウンロードしたディレクトリの中から使ったコマンドを示す:

mv j2sdk1.4.2 /usr/java

/etc/profileが以下を含むように変更して、JAVA_HOME 環境変数を設定する:

JAVA_HOME="usr/java/j2sdk1.4.2"
export JAVA_HOME

/etc/profileに設定される別の環境変数もあるので、多分JAVA_HOME を、既存のエキスポートコマンドに追加することになる。/etc/profile はスタートアップのときと、ユーザがシステムにログインしたとき走る。

Tomcat アカウント

Tomcatは、ルートとしてインストールしてコンフィギュアするけれども、Tomcatを下で走らせるためのグループとユーザアカウントを次のように作らなければならない:

groupadd tomcat 
useradd -g tomcat tomcat

これで /home/tomcat directoryが出来上がる、ここに私のTomcatアプリケーションをインストールする。

Tomcat のダウンロード

最新リリースをhttp://www.apache.org/dist/jakarta/tomcat-4/binaries/.からダウンロードする。Tomcat は標準JDKのトップで直接走るので、ソースから構築しなければならない流はないと思う。

Tomcat バイナリは、二つの別の味付けで利用することが出来る:

1非-LE
・完全バイナリ・ディストリビューション
・オプション・ライブラリ全部とXMLパーサー (Xerces)を含む
・ JDK 1.2+上で走らせることが出来る
2.LE
・軽量のバイナリ・ディストリビューション
・JDK 1.4上で走らせる設計
・JDK 1.4に含まれているのでXMLパーサーを含まない
・XMLパーサーを追加するとJDK 1.2 上で走らせることが出来る
・このディストリビューションの成分全部は、オープンソース・ソフトウエアである
・次のオプション・バイナリはいずれも含まない:JavaMail, Java 起動フレームワーク、Xerces、JNDI、又は JDBC 標準拡張

各種のダウンロード・フォーマットを多数ある。私は、LE バージョン gnu zipped tar ファイル(jakarta-tomcat-4.1.27-LE-jdk14.tar.gz)を選んだ。

単独作動 Tomcat

ダウンロードしたディレクトリから次のコマンドを発してTomcatを解凍する:

tar xvzf tomcat-4.1.27-LE-jdk14.tar.gz

これで、jakarta-tomcat-4.1.27-LE-jdk14と云う名のディレクトリが出来上がる。このディレクトリをTomcatをインストールしたい場所に移す。私は /usr/localを選んだ。ダウンロードしたディレクトリ内部から発したコマンドを示す:

mv jakarta-tomcat-4.1.27-LE-jdk14 /usr/local/

Tomcatを搭載したディレクトリを、Tomcat文書の中ではCATALINA_HOMEと呼ぶ。この場合はCATALINA_HOME=/usr/local/jakarta-tomcat-4.1.27-LE-jdk14である。

現在のTomcatバージョンをポイントするシンボリック・リンクを設定することをお薦めする。これで、Tomcat又はCATALINA_HOME環境変数を更新する度にスタートアップとシャットダウンのスクリプトを変更する必要がなくなる。これにより、Tomcatのバージョン数個をシステム上に維持して容易に切り換えることが出来る。/usr/localの内側から、/usr/local/jakarta-tomcat-4.1.27-LE-jdk14をポイントする/usr/local/jakarta-tomcatと言う名のシンボリック・リンクを作るコマンドを示す:

ln -s jakarta-tomcat-4.1.27-LE-jdk14 jakarta-tomcat

/usr/local/jakarta-tomcat と /usr/local/jakarta-tomcat-4.1.27-LE-jdk14 ディレクトリのグループとオーナーをtomcatに変更する:

chown tomcat.tomcat /usr/local/jakarta-tomcat
chown -R tomcat.tomcat /usr/local/jakarta-tomcat-4.1.27-LE-jdk14

CATALINA_HOME 環境変数と設定する必要なない。 Tomcat は賢いので自分でCATALINA_HOME を理解する。

これで、/startup.sh 及び ./shutdown.sh をCATALINA_HOME/binディレクトリからタイプすることにより、Tomcatをそれぞれスタート及びストップすることが出来る。Tomcatをスタートしてブラウザでhttp://localhost:8080とタイプして、Tomcatが働いているのを確かめられたい。ドキュメンテーションとサンプルコードへのリンクのあるTomcatのウエルカムペイジが現れる筈だ。例示リンクをクリックしてTomcatの働きを確認する。

コネクタの選択

この時点で、Apache とTomcat は単独作動モードで別々に働いている。TomcatはApacheの代替として単独作動モードで走らせることが出来る。事実、場合によっては、単独作動Tomcatは、静的コンテントにApacheを、動的コンテントにTomcatを使うより速いと言われている。しかし、Apacheをフロントエンドとして使うにのは切実な理由がある。単独作動Tomcatを使うと:

1.Tomcat をルートとしてポート80上で走らせなければならない。これにはセキュリティの懸念がある。
2.数個のTomcatインスタントのロードをバランスさせるのに、mod_jk などのコネクタを使うことができない。
3. cgi や PHPなどApacheの特徴を利用することが出来ない。
4. mod_rewriteなどApacheモジュールを生かすことが出来ない。
5.仮想ホストをそれら自体のTomcatインスタンスで分離することが出来ない。

Apacheをフロントエンドとして使用することにより得られる機能性の増加は、コネクタをインストールしてコンフィギュアする手数を補って余りあると考える。この考えで私はmod_jk コネクタを選択した。久しい間極めて安定だ。 mod_jk2は将来のウエーブだが、今は差し控えている。2002年初め、当時の「将来のウェーブ」、mod_webapp、に莫大な投資をした。これは、最早開発されていない。そんな理由で、 mod_jk2への移行をためらっている。

mod_jk コネクタの構築

mod_jk コネクタは、Apache とTomcatとの間の通信リンクだ。これはApacheからのリクエストをポート8009上で聴取する。

私の経験では、コネクタをバージョン従属と考えるの安全だ。Tomcatを更新して、コネクタに問題を生じたときは、バージョン固有のコネクタソースを使ってコネクタをコンパイルして見るとよい。

Tomcatバージョン用のコネクタソースはhttp://www.apache.org/dist/jakarta/tomcat-4/source/からダウンロードする。私は、jakarta-tomcat-connectors-4.1.27-src.tar.gzを用いた。別のコネクタ用(mod_jk, mod_jk2, coyoteなど)のソースは、このファイル一つで配布されている。

ファイルの内容を、次のようにして、ダウンロード・ディレクトリに解凍する:

tar xvzf jakarta-tomcat-connectors-4.1.27-src.tar.gz

これでjakarta-tomcat-connectors-4.1.27-srcと言う名のフォルダが出来上がる。このフォルダを、システム上でソースファイルを記憶する場所に移す。私は /usr/srcにする。ダウロード・ディレクトリの中から私が発したコマンドを示す:

mv jakarta-tomcat-connectors-4.1.27-src /usr/src/

コネクタソースがインストールされているフォルダをCONN_SRC_HOMEと呼ぶ。私の場合、CONN_SRC_HOME = /usr/src/jakarta-tomcat-connectors-4.1.27-srcである。

buildconfスクリプトを走らせてCONN_SRC_HOME/jk/native/configure ファイルを作る。

CONN_SRC_HOME/jk/native/buildconf.sh

自分のシステム上のapxs ファイルに対するパスと、下記のオプションを付けてconfigureスクリプトを走らせ右:

./configure --with-apxs=/usr/sbin/apxs

次のコマンドを用いて mod_jk を構築する:

make

全てが上手くいったときは、mod_jk.so ファイルが作られた。手で、Apache共有オブジェクト・ファイル・ディレクトリにコピイする:

cp CONN_SRC_HOME/jk/native/apache-2.0/mod_jk.so /etc/httpd/modules

Tomcat のコンフィギュア

workers.properties

workers.properties ファイルには情報が含まれるので、mod_jk が Tomcat worker processesに接続することが出来る.

CATALINA_HOME/conf/jk と言う名のディレクトリを作って、このディレクトリの Appendix にあるworkers.properties ファイルを置く。

server.xml

server.xmlファイルにはTomcat サーバ・コンフィギュレーション情報が含まれる。Tomcatと一緒に来る規定値 CATALINA_HOME/conf/server.xml ファイルには多数のファイルが含まれているので、将来の参考用(server.xml.bakなど) にセーブして無から始めることをお勧めする。規定値server.xmlは、Tomcatが独立モードで働くこと確認するため、及びアプリケーションに付いて来る実例を見るため重要であるが、ApacheをTomcatと統合したいときは最良の出発点ではないと思う。その代わり、核心server.xmlファイルを次のようにして作る:

<Server port="8005" shutdown="SHUTDOWN" debug="0">
 

	<Service name="Tomcat-Apache">
 
		<Connector className="org.apache.ajp.tomcat.Ajp13Connector"
			port="8009" minProcessors="5" maxProcessors="75" 
			acceptCount="10" debug="0"/>   
 
		<Engine name="your_engine" debug="0" defaultHost="your_domain.com">
			<Logger className="org.apache.catalina.logger.FileLogger"
				prefix="apache_log." suffix=".txt" 
				timestamp="true"/>
			<Host name="your_domain" debug="0" appBase="webapps" 
				unpackWARs="true">
		<Context path="" docBase="/home/tomcat/your_application" 

				debug="0" reloadable="true" />
				
			</Host>
		</Engine>
	</Service>
</Server>

注記:

1.この設定は、Tomcat アプリケーションをCATALINA_HOME/webappsでなく /home/tomcatに置くと仮定する。これにより、容易にTomcatを更新し、Tomcatアプリケーションをバックアップすることが出来る。

1. 規定値server.xmlを保存するときは、ポート8009上で聴取するmod_jk以外のコネクタを確実にコメントアウトすること。規定値ファイルは、Tomcat独立作動サービスのため有効にしたCoyote/JK2 コネクタと一緒に来る。これは、Tomcat-Apacheの中のmod_jkコネクタと競合する。このコネクタをコメントアウトしなければならない。これは、Tomcatを独立モードで(ポート8080)直接接続するときは必要ないので、このコネクタが規定値で有効になっている理由は分からない。

Apache のコンフィギュア


httpd.conf


Apache は、Apache コンフィギュレーション・ファイル /etc/httpd/conf/httpd.confの中におかれたディレクティブを用いてコンフィギュアする。RedHatが供給するhttpd.conf ファイルには、三つのセクション:(1) Global Environment, (2) Main Server Configuration、(3) Virtual Hosts.がラベルされているのに、気付かれるだろう。


Global Environmentセクションの中にある LoadModule ディレクティブの下に次を追加する:


LoadModule jk_module modules/mod_jk.so

Global Environmentセクションの中にある AddModule ディレクティブの下に次を追加する:


AddModule mod_jk.c

Main Server Configuration セクションの下に次を追加する:


JkWorkersFile "/usr/local/jakarta-tomcat/conf/jk/workers.properties"
JkLogFile "/usr/local/jakarta-tomcat/logs/mod_jk.log"
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

上のコンフィギュレーションは、自分のバージョンのTomcatがインストールしたディレクトリをポイントするシンボリックリンク /usr/jakarta-tomcatを作ったと仮定する。


仮想ホストディレクティブをhttpd.confのVirtual Hostsセクションの中に設定する。以下は、全URLにTomcatの中で"servlet"を付けて送るためyour_domainウェブサイトを設定する方法の例である:


NameVirtualHost *:80
 
<VirtualHost 192.168.1.1>
	ServerAdmin webmaster@your_domain
	ServerName your_domain
	DocumentRoot /home/www/your_domain/html
	ErrorLog /home/www/your_domain/logs/error_log
	CustomLog /home/www/your_domain/logs/access_log common
	JkMount /servlet/* ajp13

</VirtualHost>

上のコンフィギュレーションは、アプリケーションの静的 html ファイルが、/home/www/your_domain/html ディレクトリからサーブされると仮定する。


次のようにタイプして。Apacheコンフィギュレーションをテストすることが出来る:


apachectl configtest

httpd.confにエラーがなければ、応答 "Syntax OK" を受け取る。


your_domain の設定


your_domain.com は、DNS登録を持つドメイン名である必要はない。試験目的で、好きなドメインをyour_applicationへのアクセスに用いる予定のマシンの/etc/hosts ファイル内に設定することが出来る。


以下の例は、開発用コンピュータに典型的な、単一マシンでApacheとTomcatを走らせる場合の登録を示す:


127.0.0.1	your_domain

テスト


ここでは、設定をテストすることが出来るよう、簡単なHello Worldサーブレットを作ってインストールする。


Hello World サーブレット


以下を、HelloWorld.javaと言う名のファイルにコピイする:


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld
    extends HttpServlet {
    public void doGet(HttpServletRequest request, 
                       HttpServletResponse response)
                throws IOException, ServletException {
		
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		
		out.println("Hello World");
	}
}

このソースを次のようにクラス・ファイルにコンパイルする:


javac -classpath /usr/java/jakarta-tomcat/common/lib/servlet.jar HelloWorld.java

これで、HelloWorld.classと言う名のファイルが出来上がる。


Tomcat アプリケーション


/home/tomcat/your_applicationの中に、以下のディレクトリとファイルを作る:


/home/tomcat/your_application/WEB_INF
/home/tomcat/your_application/WEB_INF/classes
/home/tomcat/your_application/WEB_INF/web.xml

web.xml ファイルは、サーブレットの名をURLパターンにマップする場所なので、Tomcatは要求されたときサーブレットを走らせることが出来る。以下は、ブラウザにURL http://your_domain/servlet/HelloWorld が入力されたときは何時でも、HelloWorldサーブレットを走らせるweb.xmlファイルである:


<?xml version="1.0" encoding="ISO-8859-1"?>
 
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
 
<web-app>
 
	<servlet>
		<servlet-name>HelloWorld</servlet-name>
		<servlet-class>HelloWorld</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>HelloWorld</servlet-name>
		<url-pattern>/servlet/HelloWorld</url-pattern>
	</servlet-mapping>
                
</web-app>

HelloWorld.class ファイルを /tomcat/home/your_application/WEB-INF/classes ディレクトリにコピイする:


次の様にTomcat をスタートし直す:


/CATALINA_HOME/bin/shutdown.sh

/CATALINA_HOME/bin/startup.sh

Restart Apache as follows:


service httpd restart

これで http://your_domain/servlet/HelloWorld をブラウザにタイプして、 "Hello World"メッセージをみることが出来る筈だ。


高級コンフィギュレーション


以下のステップは必須ではないが、Tomcatを上手くインストールするためお薦めする。


Tomcat スタートアップ・スクリプト


システム立上がりの際Tomcatを自動的にスタートさせ、Apacheでするようにサービス・コマンドを用いて扱いたいときは、初期化スクリプトを作らなければならない。


次のTomcat 初期化スクリプトを /etc/rc.d/init.d/tomcatとして作る。


#!/bin/sh
#
# Startup script for Tomcat, the Apache Servlet Engine
#
# chkconfig: 345 80 20
# description: Tomcat is the Apache Servlet Engine
# processname: tomcat
# pidfile: /var/run/tomcat.pid
#
# Mike Millson <mmillson@meritonlinesystems.com>
#
# version 1.02 - Clear work directory on shutdown per John Turner suggestion.
# version 1.01 - Cross between RedHat Tomcat RPM and Chris Bush scripts

# Tomcat name :)

TOMCAT_PROG=tomcat
# if TOMCAT_USER is not set, use tomcat like Apache HTTP server
if [ -z "$TOMCAT_USER" ]; then
 TOMCAT_USER="tomcat"
fi
RETVAL=0
# start and stop functions
start() {
    echo -n "Starting tomcat: "
    chown -R $TOMCAT_USER:$TOMCAT_USER /usr/local/jakarta-tomcat/*    
    chown -R $TOMCAT_USER:$TOMCAT_USER /home/tomcat/*
    su -l $TOMCAT_USER -c '/usr/local/jakarta-tomcat/bin/startup.sh'
    RETVAL=$?
    echo
    [ $RETVAL = 0 ] && touch /var/lock/subsys/tomcat
    return $RETVAL
}
stop() {
    echo -n "Stopping tomcat: "
    su -l $TOMCAT_USER -c '/usr/local/jakarta-tomcat/bin/shutdown.sh'
    RETVAL=$?
    Echo
    [ $RETVAL = 0 ] && rm -f /var/lock/subsys/tomcat /var/run/tomcat.pid    
    rm -rf /usr/local/jakarta-tomcat/work/*
}
# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
	# 不様なやり方だ
	# stopを離れる前にtomcatが本当に
	# 停止したかを確認しなければならない
        sleep 2	
        start
        ;;
 *)
	echo "Usage: $0 {start|stop|restart}"
	exit 1
esac
exit $RETVAL

このスタートアップ・スクリプトを、次のようにシステムに追加する:

chkconfig --add tomcat

次のコマンドを用いてこれをスタート/ストップ/再スタートすることが出来る:

service tomcat start
service tomcat stop
service tomcat restart

システムを立上げたときTomcat を自動的にスタートさせたいときは、次の用にTomcatをランレベルに追加する必要がある:

chkconfig --level 5 tomcat on

ランレベル 5 は、開発用コンピュータに典型的なX ウインドウズ・システムである。ランレベル 3 は、専用ウェブサーバに典型的である。

Apache とTomcat のスタート順は極めて重要だ。Apacheが自分でTomcatに付着することが出来るよう、Tomcat はApacheをスタートする前にスタートしなければならない。

開発用設定

開発中には、tomcatアプリケーションに直接アクセスする必要があるだろう。開発をおこなうユーザアカウントを /etc/groupにあるtomcatグループに追加する。例えば、yournameの下で開発をおこなうとき、 /etc/groupの中でどう見えるかを示すと:

yourname
account:
tomcat:x:502:yourname

tomcat グループが/home/tomcatに対し書込許可を有しており/home/tomcat/your_applicationの中のTomcatアプリケーションに対しファイルを(antを用いるなどで)公開することが出来るのを確かめること。次のコマンドをルートとして発行する:

chmod g+w /home/tomcat

付録

workers.properties

# workers.properties
#
# このファイルは、必要な情報とともに各種Tomcat workerに接続するための
# jk誘導プラグインを提供する。このファイルのディストリビューション
# バージョンは、プラグインで使える用になる前に修正を必要とすることに
#注意のこと。
#
# 一般的な注意として、文字 $( and )はマクロを内部で定義するため
# 使用する。自分のコンフィギュレーション内で使用しないこと。
#
# x=value
# y=$(x)\something
#のような行の組に出会ったときは、
# yの最終値は、value\somethingである。
#
# 通常、為すべきことのすべては、最初の三つのプロパティ、即ち
#  workers.tomcat_home, workers.java_home 及び ps.をアンコメントする
# ことである。殆どのコンフィギュレーションは、これらから導き出される。
# workers.tomcat_home, workers.java_home and psの更新をおこなったときは、
# 三つのworkers をコンフィギュアしなければならない:
# - ローカルホスト8007に接続する ajp12 worker 
# - ローカルホスト8009に接続する ajp13 worker
# - jni inprocess worker.
# - load balancer worker
#
# しかし規定値でプラグインはajp12 workerだけを用いる。プラグインに別のworker
# を使わせるには、workerリストを正しくコンフィギュアしなければならない
#
# OPTIONS ( jni モードでは極めて重要 )
#
# workers.tomcat_home は、tomcatをインストールした位置をポイントし
# なければならない。これはconf、webapps、libディレクトリのある場所だ。
#
workers.tomcat_home=/usr/local/jakarta-tomcat
#
# workers.java_home は Java インストレーションをポイントしなければならない。
# 通常、その下に bin 及び lib ディレクトリがある筈。
#
workers.java_home=$(JAVA_HOME)
#
# 環境をスラッシュでコンフィギュアしなければならない
# ... ps=\ on NT and / on UNIXおよび何か別のどこか
#
ps=/
#
#------ 高級モード ------------------------------------------------
#---------------------------------------------------------------------
#
#------ 規定値 workert リスト ------------------------------------------
#---------------------------------------------------------------------
#
# 自分のプラグインが作るべきworkerは、次を作って使用しなければならない。
#
worker.list=ajp12, ajp13
#
#------ 規定値 ajp12 WORKER 定義 ------------------------------
#---------------------------------------------------------------------
#
#
# 名称が ajp12で型が ajp12のworkerを定義する。
# 名称と型は一致する必要はないことに注意。
#
worker.ajp12.port=8007
worker.ajp12.host=localhost
worker.ajp12.type=ajp12
#
#  load balancing workeを用いるときは
# ロードバランス係数を定義する
# 注記:
#  ----> lbfactor は > 0でなければならない
#  ----> lbfactorが低いことはworkerのする仕事が少ないことを意味する
worker.ajp12.lbfactor=1
#
#------ 規定値 ajp13 WORKER 定義 ------------------------------
#---------------------------------------------------------------------
#
# 名称が ajp13で型が ajp13のworkerを定義する。
# 名称と型は一致する必要はないことに注意。
#
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
#
#  load balancing workeを用いるときは
# ロードバランス係数を定義する
# 注記:
#  ----> lbfactor は > 0でなければならない
#  ----> lbfactorが低いことはworkerのする仕事が少ないことを意味する
worker.ajp13.lbfactor=1
#
# オープン接続キャッシュのサイズを定義する。
#worker.ajp13.cachesize
#
#------ 規定値 LOAD BALANCER WORKER 定義 ----------------------
#---------------------------------------------------------------------
#
# ロードバランサ(型 lb) workers は、面倒なセッションを
# 用いて加重連続ロードバランスを実行する。
# 注記
#  ----> worker が働かなくなると、ロードバランサが時々
#        その状態を点検する。それまでは、全ての仕事を
#        ピアworkerに向ける。
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=ajp12, ajp13
#
#------ 規定値 JNI WORKER 定義---------------------------------
#---------------------------------------------------------------------
#
# 名称がinprocessで、型が jniのworkerを定義する。
# 名称と型は一致する必要はないことに注意。
#
worker.inprocess.type=jni
#
#------ クラスパスの定義 -----------------------------------------
#---------------------------------------------------------------------
#
# 追加クラスパス成分
#
worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar
#
#  tomcat用コマンド行の設定.
# 注記:cmd_line ストリングにはスペースを含まない
#
worker.inprocess.cmd_line=start
#
# 必要ないが、カスタマイズすることが出来る
# worker.inprocess.cmd_line=-config
# worker.inprocess.cmd_line=$(workers.tomcat_home)$(ps)conf$(ps)server.xml
# worker.inprocess.cmd_line=-home
# worker.inprocess.cmd_line=$(workers.tomcat_home)
#
# 我々がこれから使う JVM
#
# これはJava2用
#
# Windows
# 
#worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)bin$(ps)classic$(ps)jvm.dll
# IBM JDK1.3
# worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)bin$(ps)classic$(ps)libjvm.so
# Unix - Sun VM or blackdown
#worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)lib$(ps)i386$(ps)classic$(ps)libjvm.so
# RH + JDK1.4
worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)lib$(ps)i386$(ps)server$(ps)libjvm.so
#
# これは、jdk1.1.X用
#
# worker.inprocess.jvm_lib=$(workers.java_home)$(ps)bin$(ps)javai.dll
#
# Setting the place for the stdout and stderr of tomcat
#
worker.inprocess.stdout=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stdout
worker.inprocess.stderr=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stderr
#
# tomcat.home Java を正しく設定する
#
# worker.inprocess.sysprops=tomcat.home=$(workers.tomcat_home)
#
# Java システム・プロパティ
#
# worker.inprocess.sysprops=java.compiler=NONE
# worker.inprocess.sysprops=myprop=mypropvalue
#
# 追加のパス成分
#
# worker.inprocess.ld_path=d:$(ps)SQLLIB$(ps)bin

関連 Linux Gazette 記事

Installing Tomcat on Linux 、Allan Peda作、2001年8月

著者紹介:

Mikeは、ジョージア州アトランタの Merit Online Systemsのシステムエンジニアだ。コンピュータに関する最初の経験は、1981年に IBM PC 上でBASICのプログラムを作ったことだ。プロペラ・キャップを被っていないときは、妻のデボラと時間を過ごすのを楽しみにしており、復職特別手当を台無しにしている。

  mmillson@meritonlinesystems.com   http://www.meritonlinesystems.com/

 

Copyright ツゥ 2003, Mike Millson. Copying license
http://www.linuxgazette.com/copying.html
Published in Issue 95 of Linux Gazette, October 2003
 
 
 
 
 
オッシロスコープを通じるLinux
By Pramode C.E
 

緒言

幾つかの回路を配線をして、古い20MHz オッシロスコープで眺めたのは、少し前だった。複雑で生き生きしたマルチタスクOSが、タイミングに敏感なコードの働きに影響する方法を、これらのプログラムが発生する信号をオッシロスコープで見て、観測するのは面白いだろうと考えた。この記事は、私のおこなった実験を幾つか示す。一つは、「正常」2.4.18 kernelについて、次にRATIプロジェクトが提供する`real time extensions' でパッチしたkernelについてだ。読者は単純なkernelプログラム作成の経験があると想定する。

実験の設定

使用しない「埋込Linux」実験プラットホームにあった古いCyrix CPU基礎のシステムを転用した。マザーボードをキャビネットから取出し−HDD、モニタ、キイボードなどは削除−ブートROMのあるEthernetカードだけをISAプロとボードと一緒に残した。このマシンは、数フィート離れた完全装備のLinuxシステムからブートする。こうして、高価なハードウエアを損なう心配をすることなく、実験をすることが出来る。普通の2.4.18 kernel 又はRTAIでパッチしたものの両方からブートするオプションがある。

単純波形の発生

一寸したユーザスペース・プログラムを示す。これは、スーパーユーザとして使ったとき、パラレルポート出力ピンに波形を発生する。この波形をオッシロスコープで見ることが出来る。

#include <asm/io.h>
#define ON 100000

#define OFF ON*10
delay(unsigned int i)
{
	while(i--);
}
main()
{
	iopl(3);
	while(1) {
		outb(0xff, 0x378);
		delay(ON);
		outb(0x0, 0x378);
		delay(OFF);
	}
}
このプログラムの働きは簡単だ。パラレルポート2から9が出力ピンとして働く−これらには、アドレスが0x378のI/Oポートを通じてアクセスすることが出来る。0x378に0xffを書くとこれらのピン全部にをオンにする(つまり約5ボルトを置く)。0x0を書くと、これらのピンの電圧をオフにする。プログラムは -O2 オプションを用いてコンパイルし、スーパーユーザとして実行しなければならない(outbを働かせるときは、何か優先レベル設定に関係のあるiopl呼び出しを働かせなければならない。ioplを働かせるにはスーパーユーザでなければならない)。

私のシステムでは、1ms/分割に設定したオッシロスコープを用いて約2.5 から 2.7ms までのオン時間で波形を観測する。

簡単なことが簡単でない理由

マイクロプロセッサの基本コースを終えた人は誰でも、ループを書いて遅延を生じる方法を知っている。ここでもそれを行っている。児戯だ。

全く変なのは、別のコンソールにログオンして"yes"コマンドを走らせると、場面上に文字"y"が連続流を生じる。スコープを見ると、格好の良い私の信号がメチャメチャになっているのが分かる。オンとオフの時間が非常に長くなっているので、私が見るのは、ほとんど0Vから5Vにジャンプし続ける連続線なのだ。

別の実験をして見る。もっと速いマシンからシステムを `flood ping' (-fオプションの付いたPingコマンド)して見る。ここでも、スコープ上で信号が乱れているのが分かる。

この理由は、分かり難いものではない。私のプログラムは、このとき別のものとCPUサイクルを争っている。遅延ループ実行の間に、コントロールは別のプログラムに切り換えて、それによ、最初のプログラムが理解するの遅延時間を長くすることが出来る。 `flood ping' は、OS kernelの中で多数の活動を生じる。これはまた、私のプログラムのタイミングに有害な影響を及ぼす。

問題の解決策は簡単だ−波形を生じるプログラムを乱さないだけだ。CPUを完全にコントロールさせよう。すると、疑問はOSが複雑なマルチタスクを持つかだ。調べよう。

「リアルタイム」信号を発生するプログラムをプログラムに呼び出す。そのプログラムを、規定の時間間隔でパラレルポートピンを「トグル」する役目の「タスク」として想像して見よう。発生する波形を、言わばサーボモータ(サーボの回転は、その全体オン-オフ周期が約20msであるパルスの「一周期」の長さにより制御される。オンの周期が1msから20msに変化するとき、サーボは180度回転する)などの物理的装置の制御に使用すると、パルス長さの変化は、劇的な効果を持つことが出来る。私のFutaba S2003サーボは、上述のようなプログラムにより制御されるとき、別のプロセスにより攪乱されると幅広く揺れる。このリアルタイム・プログラムには、正しい作動のため、合致しなければならないデッドラインがある。制御アプリケーションを設計する古典的解決策は、専用マイクロプロセッサとデジタル信号プロセッサを使用しなければならなかった。しかしPCハードウエアが大変安価になったので、広範囲のアプリケーションが、プログラムを敏感なタイミング要件で正確に走らせる、と同時に、ネットワークと交信する、データを図形インターフェイスで表現する、及び二次記憶にデータをログするなど、タイミング・デッドラインが問題でない、所謂る「非リアルタイム」ジョブをおこなう場所に浮かび出た。

Linux Kernel を何らかの方法で、(特殊な方法で作られ実行される)あるタスクに課せられたタイミング制約を、他の「非リアルタイム」タスクがあるときであっても、常に満たすため、修正することが出来るならば、理想的な解決策になる。この記事の少し後で、このような解決策は、一つではなく多数利用することが出来るのが分かる。

スリープ対ループ

プログラムのタイミングが、システム内で進行中の多数の他の活動に左右される他に、我々は忙しいループを実行させることによりCPUサイクルを暴走させている(また、Pentiumなど複雑なマイクロプロセッサ上では、命令を計数して遅延を計算するのは困難である)。プログラムをスリープさせてはどうだろうか?

`nanosleep'などのファンクションを用いることにより、我々のプロセスをスリープさせ、特定の時期にウエークアップさせることをOSに命じる。しかし、ここでも、OSはKernel モードで他の作業(TCP/IPパケットの処理、ディスクI/Oの実行)又はkernelが我々のプロセスをウエークアップさせる直前に計画された別のプロセスを実行するのに忙しいので、我々のプロセスが特定の時期にウエークアップされて実行させない可能性がある。

kernel スペースでこれを実行

我々の信号発生コードをkernelスペース・モジュールで実行するとどうなるだろうか?

#include <linux/module.h>
#include <linux/fs.h>
#include <linux/param.h>
#include <asm/uaccess.h>
#include <asm/io.h>
static char *name = "foo";
static int major;
#define ON 100000
#define OFF ON*10
void delay(unsigned int i)
{
	while(i--);
}
static int
foo_read(struct file* filp, char *buf, size_t count, loff_t *f_pos)
{
    while(1) {
		outb(0xff, 0x378); 
		delay(ON);
		outb(0x0, 0x378);
		delay(OFF);
   }
   return 0;
}
static struct file_operations fops = {
    read: foo_read,
};
int init_module(void)
{
    major = register_chrdev(0, name, &fops);
    printk("Registered, got major = %d\n", major);
    return 0;
}
void cleanup_module(void)
{
    printk("Cleaning up...\n");
    unregister_chrdev(major, name);
}
kernel内での無限ループの実行には、−ユーザプロセスに関する限り−悲惨な結果がある。コントロールがkernelの外に出るまでユーザプロセスは何も実行することが出来ない(OSはそのように設計されている)。欲しいものは、リアルタイム・プロセスが非リアルタイム・プロセスと共存する状態である。

これでユーザスペース・プロセスは、我々のプロセスを攪乱することはないけれども、未だパイピングのfloodによりネットワーク・カードを中断させることは出来る。中断はkernelコード実行中でもサービスされるので、スコープ上に表示される波形は、いつものように跳び周り始める。

kernel内でスリープさせることは出来る−これはシステムが見られるのを防止する−が、これでは我々の問題、リアルタイム・コードと非リアルタイム・コードの平和共存、は解決されない。

リアルタイム Linux に入る

Linuxと我々のハードウエアとの間で`nano kernel' にスライドしたらどうだろか?このkernelは、両Linuxを「リアルタイムタスク」と同様に制御するだろう。Linuxは、高い優先度の「リアルタイム」タスクが存在しないときだけ処理される極めて優先度の低いタスクとして扱われる。中断の制御は、この専用kernelの手中にあり−中断を無効にするLinuxの要求は、その中断が本当に無効にならない方法で扱われる−Linuxだけはこれらの中断を見ることが出来ない−リアルタイム・タスクは、余り遅延することなく、それらの中断ハンドラを静かに実行することが出来る。

ビクター・ヨダイケン博士が導入したこの新しい概念の結果、RTAI Linuxが生まれた。その他多くの大学と研究所が、自分の実現方法を試みた−最も有望な(また完全に私有でない)ものの一つは、Dipartimento di Ingegneria Aerospaziale - Politecnico di Milano (DIAPM)の研究社が開発したRTALだ。

RTAI の入手とインストール

RTAI はここから入手することが出来る。主なコンポーネントが二つある:

・Linux kernelに対するHAL (ハードウエア抽出層) パッチ
・実行計画作成、通信内部処理、同期などを扱うためのモジュール一式
新kernelをパッチし、インストールする前に、README.INSTALLファイルにある手引きを注意深く読むこと(特に、一定のkernelコンフィギュレーションに関するもの。"Set version information on loadable modules" (バージョン情報をロード可能モジュールに設定)は、無効にする。ほとんどが単一プロセッサシステムを用いているだろうから−SMPサポートを無効にすること(多分パワーマネージメントも無効にする))。新kernelでブートし直すと、主RATIモジュールと例をコンパイルすることが出来る。プログラムを何か走らせる前に、三つのモジュール、− rtai.o, rtai_fifos.o and rtai_sched.o.−をロードする必要がある。

RTAI タスクを用いて波形を発生

パラレルポート・ピン上に波形を作るRATIプログラムを見よう:

#include <linux/module.h>
#include <rtai.h>
#include <rtai_sched.h>
#define LPT1_BASE 0x378

#define STACK_SIZE 4096

#define TIMERTICKS 1000000 /*  1 milli second */
static RT_TASK my_task;
static void fun(int t)
{
	unsigned char c = 0x0;
	while(1) {
		outb(c, LPT1_BASE);
		c = ~c;
		rt_task_wait_period();
	}
}
int init_module(void)
{
	RTIME tick_period, now;
	rt_set_periodic_mode();
	rt_task_init(&my_task, fun, 0, STACK_SIZE, 0, 0, 0);
	tick_period = start_rt_timer(nano2count(TIMERTICKS));
	now = rt_get_time();
	rt_task_make_periodic(&my_task, now + tick_period, 2*tick_period);
	return 0;
}
void cleanup_module(void)
{
	stop_rt_timer();
	rt_busy_sleep(10000000);
	rt_task_delete(&my_task);
}

ここの詳細を検討する前に、一般概念を見よう。先ず、何か有用なことをする `task' が必要だ。`task' は単なるCファンクションだ。ほとんどの我々のタスクの構造は、次のようなものだ−ある行動を実行する、ある時間スリープさせる、もう一度ある行動を実行する、繰り返す。スリープさせる方法の一つは、 `rt_task_wait_period'を呼び出すことだ−問題はスリープ時間の長さだ。我々は、基本`tick'の倍数である一定の固定「周期」だけスリープさせる。システム8254タイマーをプログラムして、1KHz(1秒の1000倍)などの割で中断を発生することが出来る。RATIスケジューラは、tick毎にスケジュール決定をおこなう−我々のtaskの周期を`2 ticks'に設定したとき、各trikの間の間隔が1msであると、スケジューラは2ms後にウエークアップする。

`init_module'を用いてスタートする。先ずタイマーを`periodic timer' (別のモードも利用可能)としてコンフィギュアする。`rt_task_init'ファンクションは、RT_TASK型オブジェクトのアドレス、我々のファンクションのアドレス及びスタックサイズを、他の値と共に受領する。ある種の「初期化」が実行され、情報が、後でこの特定タスクを識別するため使用されるRT_TASK型のオブジェクトに記憶される。

我々のTICK_PERIOD は1000000 ナノ秒(1ミリ秒)である。nano2countファンクションは、この時間を内部「計数単位」`count units'に転換する。タイマーが、1msに等しいtick周期でスタートされる(これが `start_rt_timer' ファンクションのおこなうこと)。

残っているのは、タスクをスタートしてその周期を設定することだ(周期は、rt_task_wait_periodが使用して、タスクをウエークアップさせる時刻を設定する)。我々は、この周期を2tickに設定して、スケジューラに次のtickでスタートさせることを命じる。

我々のタスクの本体は極めて簡単だ−パラレルポート出力ピンに値を書き、値を記憶する変数を補完して、次の(2msの)周期を待つ。ウエークアップさせた後、これは同じ順序を、何度も繰り返す。最終結果は、オン時間が2msオフで時間が2msの波形をスコープ上で見ることだ。

先ず、アンロードしたシステム上で波形を観察した。次いで、floodパイピングをシステムにリソートした。スコープ上の波形は安定したままだった。RATIが約束したのは、Linuxを常に低い優先度で走らせること−Linuxは、リアルタイム・サービスがないときだけ走る−だった。リアルタイムタスクのウエークアップは、コントロールが直ちにそれに渡される結果となる(勿論、リアルタイム・スケジューラを起動して、コントロールをウエークアップしたばかりのタスクに渡すには、今行っていることが何であれ、それを封じるにはいくらかの遅延がある−この遅延は定数である必要はない)。これが、負荷を掛けてもほぼ安定な信号を見ることが出来る理由だ。

ファンクション `rt_sleep'の使用を実証するコードのセグメントを示す:

#define LPT1_BASE 0x378
#define STACK_SIZE 4096
#define TIMERTICKS 1000000 /*  1 milli second */
#define ON_TIME 3000000 /* 3 milli seconds */
#define OFF_TIME 1000000 /* 1 milli second */
static RT_TASK my_task;
RTIME on_time, off_time;
static void fun(int t)
{
	while(1) {
		outb(0xff, LPT1_BASE);
		rt_sleep(on_time);

		outb(0x0, LPT1_BASE);

		rt_sleep(off_time);
	}
}
int init_module(void)
{
	RTIME tick_period, now;
	rt_set_periodic_mode();
	rt_task_init(&my_task, fun, 0, STACK_SIZE, 0, 0, 0);
	tick_period = start_rt_timer(nano2count(TIMERTICKS));
	on_time = nano2count(ON_TIME);
	off_time = nano2count(OFF_TIME);
	now = rt_get_time();
	rt_task_make_periodic(&my_task, now + tick_period, 2*tick_period);
	return 0;
}
基本tick周期は1msである。我々のオン・オフ時刻は、この周期の倍数だ(3msと1ms毎)。`rt_sleep(on_time)' の呼出は、タスクをスリープさせ−3 tick周期後にウエークアップする。これは何かの作用をして再び1 tick周期だけスリープする。

FIFO を使ってリアルタイムと非リアルタイムのタスクの間で交信する

データをユーザスペース非リアルタイム・プログラムからRATIタスクに転送することが必要になるだろう。これはfifoを使って簡単におこなうことが出来る。例えば、RATIタスクがPWM(パルス幅変調)信号を生じていると、幅をユーザスペースから制御しなければならない。RATIインストレーションは、rtf0、rtf1などの名で、ユーザファイル /dev/ goingの下に幾つかのデバイス・ファイルを作る。ユーザプログラムは、各fifoをその名で識別する一方、RATIタスクはそれを番号0、1、2などでおこなう。

#include <linux/module.h>
#include <linux/errno.h>
#include <rtai.h>
#include <rtai_sched.h>
#include <rtai_fifos.h>

#define STACK_SIZE 4096

#define COMMAND_FIFO 0

#define FIFO_SIZE 1024
int fifo_handler(unsigned int fifo)
{
	char buf[100];
	int r;
 
	r = rtf_get(COMMAND_FIFO, buf, sizeof(buf)-1);
	if (r <= 0) return r;
	rt_printk("handler called for fifo %d, get = %d\n", fifo, r);
	buf[r] = 0;
	rt_printk("data = %s\n", buf);
	return 0;
}
 
int init_module(void)
{
	/* Create fifo, set handler */
	rtf_create(COMMAND_FIFO, FIFO_SIZE);
	rtf_create_handler(COMMAND_FIFO, fifo_handler);
	return 0;
}
void cleanup_module(void)
{
	printk("cleaning up...\n");
}
`init_module'の中で、我々はfifoを作って、誰かがfifoに書き込むとき呼び出されるファンクションとして`fifo_handler'を設定する。`rtf_get' ファンクションがfifoからデータを読み取る。モジュールをコンパイルしてロードした後、次のような何かをすると:
echo hello > /dev/rtf0
ハンドラが呼び出されて、fifoからデータを読み取るのが分かる。

追加読み物

一般的なリアルタイム・プログラム作成問題に興味があれば、Herman Bruyninckxの書いたReal Time and Embedded Guide から始めなければならない。RATIプログラム作成は、プロジェクトのホームペイジから入手することの出来るRTAI manual 及び RTAI programming guide に詳しく説明されている。

結語

厳しいタイミング要件を持つタスクの決定論的な実行のためサポートを提供するOSは、リアルタイムシステム設計景観の一部分に過ぎない。数日間RATIと取り組んだ後、これ(リアルタイム・プログラム作成)は、私のような初心者が趣味ですることが出来るものでないことが分かった−システム(ハードウエアとソフトウエア)を徹底的に理解するため多数の時間、労力及び忍耐を費やし、ツールも利用しなければならない。だが、そうすれば、実験して一寸した喜びを感じるのを止められなくなる。

著者紹介:

私は インドのカラチにあるICソフトウエアで働くインストラクタです。有機化学者になりたいと思っていましたが、可能な第二志望をしています。それはLinuxと取り組んで、プログラム作成を教えることです。

 

Copyright ツゥ 2003, Pramode C.E. Copying license
http://www.linuxgazette.com/copying.html
Published in Issue 95 of Linux Gazette, October 2003
 
 
 
 
 
ソフトウエア工学
By Gustavo Rondina
 

要約

所謂るソフトウエア危機が、将来、計算とITに対し幾つかの深刻な結果を生じる可能性がある。その多くはフリー・ソフトウエアに関係する。この記事は、この危機の原因になると思われる幾つかの問題を読者に大急ぎで紹介し、ユーザとプログラマが適切な対策を講じてそれを避けるることを目的とする。

1. 緒言

今日、ハードウエア素子は益々強力になり、1日毎にその能力と特徴を広げている。しかし、これらの素子は、これらの特徴を出来るだけ探査することの出来るソフトウエアがなければ、役に立たないのでソフトウエア工学と言うソフトウエア開発過程がコンピュータの最も重要な分野の一つであると言える。

ハードウエア産業における急速な進歩に追い付くには、ソフトウエアの核心の開発を任務とするプログラマとソフトウエア・エンジニアは、役立つ製品だけでなく、コンピュータやプログラマの努力が無駄にならないことを保証する良いソフトウエア慣行を実行する製品を作ったり開発することが必要であるとの考えを持たなければならない。

2. Linux, フリー・ソフトウエア及びソフトウエア工学

その筋書きの何処にLinuxが当て嵌まるだろうか?と考えるだろう。そう、フリー・ソフトウエア運動がその答えになる。Linux OS は、フリー・ソフトウエアの主義、概念及び哲学の普及を助ける偉大な成功プロジェクトの一つであった。

Linuxユーザの数に着目するならば、過去十年に著しい増加を記録した。ユーザはこのシステムを家庭、仕事場、及び学校でも採用した。これらユーザの多くは、ソースコードの利用性、つまり世界中の誰でもがソースを入手し、読み、修正し、そのコードをコピイして配布することが出来るためLinuxに合流した。これらユーザのほとんどは、以前にコンピュータ・プログラム作成及びUnixを基礎とするOSに関する知識を持っていた。

しかし、新奇のシステムを検討しUnix様システムの働き方を知ろうとの、好奇心だけでLinuxを採用したユーザもあった。そのうり何人かは、Linxが嫌いになるか使用しないかで離れて行ったが、何人かは生活方法と哲学としてLinuxを採用した。

この新Linuxファンは、システムについて出来るだけ多くを学ぼうとするので、誰にも公開され、C及びアセンブラ言語で構築されるソースを手に入れて、Linuxを理解するには、プログラムの方法を習う決心をする。そして、これは実際に起こったことだが、沢山の新ユーザがプログラム作成し、勝手にコードをいじって、オープンソース社会に貢献する目的でプロジェクトに自分の時間と労力を捧げ始めた。今日では、首尾良く進むプロジェクトが沢山あって、フリー・ソフトウエア開発哲学が実際に役立つことを示している。

3. で、問題は何処に?

これら新プログラマは、ソフトウエア開発に必要なプログラム作成言語を学び、自分に必要なソフトウエアを開発し、期待の結果を生じながら知識を実用化した。しかし、これらの作品が全体として信頼性が高く、その考えを可能な最良の方法で実現しているのと保証はない。

これは、ソフトウエア工学分野の知識付属のため起こる。ソフトウエア開発と作成に余り経験のない人が開発したプロジェクトが余り沢山あるため、これらのプログラマに対する考え方と理論が欠如している。プログラムを作ることは、たと予想通りの結果が得られても、単にテキスト・エディタを立ち上げてコードを書きまくり、それをコンパイルすることではない。

プログラム作成言語の文法を知ることは、プログラムを作成し良品質のソフトウエアを開発する方法を知ることを意味しない。ソフトウエア開発は、最初のアルゴリズム設計からデバッグとテストの段階まで、複雑な過程である。os言語規範とその相異(つまりオブジェクト・プログラム作成とプロシージャ的プログラム作成)の概念を持たないプログラマ、スタック、キュー、リスト及びバイナリツリーなど、osデータ構造の数個の方を深く知らないプログラマ、又は、ハードウエアが算術演算をする方法及びその論理回路の働き方を知らないプログラマは、たとえ働いても、あるべき通りには実行されないソフトウエアを開発することがある。

正しい方法で実行されないソフトウエアは、CPUの処理時間やメモリ管理の方法などハードウエア・リソースの無駄を生じ、プログラマの労力を無にする。詰まらない問題を複雑で高価な方法を使って解決するとき、彼はもっと容易な方法を知らないので、言語を下手に、時には間違って使用して、そのの特徴を台無しにしてしまう。これら全部の事柄がプロジェクトの最終コストを押し上げる。

4. この問題の解決策は?

この種の問題は「ソフトウエア危機」として知られる。良いソフトウエア工学に関する正しい知識を持たないで切り刻みを開始しプログラムを作る各人がこの危機の増大に力を貸している。

将来、これは、主としてフリー・ソフトウエア社会に対し大変危険なことになる。場合によっては、一旦その幾つかのプロジェクトがボランティア・プログラマの手で開発されると、プロジェクトの開発段階を監視と調和を担当する人が誰もいないからである。

この問題の解決策は明らかだ。ユーザとプログラマは、ソフトウエア工学、及びモデル作成、アルゴリズム解析、ソフトウエア試験及びそれぞれの模範と言語の詳細を深く勉強しなければならない。開発者は、ソフトウエア工学についての科学論文と技術書籍をもっと読まなければならない。多くのプログラマは自分のソフトウエアが予期する結果を生じることを望むだけだが、プログラマが上手な開発者になり、高品質の信頼性のあるソフトウエアを作りることを望むなら、実務の下に隠された理論的基礎を知ることが不可欠である。理論的知識は、あらゆる事柄の基礎なのだ。

沢山のプログラムとプロジェクトが論文でスタートするが、アルゴリズムの草案を何か作るのは恥ではない。時にはアイデアが描画を通じてもっと良く理解することが出来る高い抽象レベルで達成されることがある。消費者の手に入る前にソフトウエアをテストすることもまた重要で、ソフトウエア・テストにまつわる沢山の技術や問題がある。幾つかのプログラム作成用言語と言語凡例を知ることは、問題を解決する方法を選ぶとき、プログラマにより多くの柔軟性を与える。各言語には、それ自体の限界があるからだ。ソースコードを同文にすることさえも、ソースの信頼性を高めるため必要である。これら全部の事柄が、良いソフトウエア工学に関係しており、作品の品質を改善する。

5. 結語

この記事は、趣味のプログラマを批判したり萎縮させたりするのを目的とするものではない。むしろ、ソフトウエア開発過程に関わる問題をもっと深く知ることを励ますものだ。その方法によってのみ、良質で信頼性の高いソフトウエアを次の世代に持つことができる。

この記事がお役に立つと良いと思う。母国語ではないので、下手な英語を御容赦願いたい。将来の記事では少しましになるかも知れない。ご意見、ご質問及びご教示を歓迎する。遠慮なくgustavorondina at uol dot com dot brにe-メールされたい。

著者紹介:

Gustavo Rondinaです。ブラジルから来ました。卒業目前のコンピュータ科学四年生の学生ですが、コンピュータとLinuxには5年間触っています。

 

Copyright ツゥ 2003, Gustavo Rondina. Copying license
http://www.linuxgazette.com/copying.html
Published in Issue 95 of Linux Gazette, October 2003
 
 
 
 
 
MultiTail入門
By Folkert van Heusden

緒言

MultiTail とは ?

MultiTailにより, 単一又は多数のファイルを元のtailプログラムのように見ることが出来る。違いは、コンソール上に(ncurseを用いて)多数のウインドウを作ることだ。二つ以上のログファイルの合併が可能だ。ログファイルの表示中に、(正規の表現で)重要なものを認識するため色を用いる。(これも正規の表現で)行を篩い分ける。与えられた正規表現を編集しウインドウを追加するための会話的手段を有する。ウインドウにシェルスクリプトその他のソフトウエアを出力させることも出来る。外部ソフトウエアの出力を見るとき、MultiTail は、'watch' や類似のツールの機能性を真似ることが出来る。

このテキストを書いた理由

パラメータ無しでmultitailをスタートしたとき、これは画面を消して、押すことの出来る幾つかのキイを、何をするかの短い説明とともに示す。このときこれらのキイのどれか又は、'x', 'q' 又は 'CTRL'+'C' を押すと、プログラムを出ることが出来る。どんなコマンド行パラメータを与えることが出来るか知りたいときは、 '-h' パラメータを用いて multitailをスタートする。
上述の方法で示される「ヘルプ」は、十分でないかも知れない。それがこのテキストを書いた理由だ。これを読んだ後、分からないことがあれば、遠慮無く次のe-メールアドレスにコンタクトされたいfolkert@vanheusden.com。

基本

MultiTail の平凡な使い方は、次の通りだ:
multitail [-i] file
これは、ウインドウにファイル'file'を示す。下部にファイル名と、そのファイルのサイズ及び変更日時がのある行(ステータス行)が示される。'-d' コマンド行パラメータを用いて、これをstatus−安定(更新されない)行−にすることが出来る。 '-D' を用いると、ステータス行が全く表示されない。
ファイル名がダッシュ('-')で始まるときは、 '-i' を規定するだけでよい。
少々複雑なのは次だ:
multitail [-i] file1 [-i] file2
これは、ターミナル・ウインドウを二つに分割する。各ウインドウにファイルが一つ表示される。両ウインドウに情報を示すステータス行がある。「ファイル1」を表示するウインドウが「ファイル2」の上になる。上下の代わりに左右に表示することも出来る。そのため、プログラムが走っている間にコマンド行でパラメータ '-s' をタイプするか、又は 'v' キイを押す。

スクロール

勿論、表示ファイルの中でスクロールすることが出来る。それには 'b'キイを押す。複数ファイルを見ているときは、先ずfileselectorを選ぶ。すると選択ファイルの記憶内容のあるウインドウ(=window)が出る。カーソルキイとpage-up及び pagedownを用いてスクロールすることが出来る。ファイル全体をスクロールすることは出来ない。最新の100だけだ。この限界を大きく(又は小さく)設定し直すには 'm' キイを押す。新しい値の入力を要求される。このパラメータは、'-m ' パラメータを用いてコマンド行から設定することも出来る。'-m' を用いて、次のファイルの限界、'-m 'を用いて続くファイル全体の限界を、コマンド行から設定する、'-m'キイを押すと、現在のバッファはクリアされる。だからこれは、ファイルをみるのに'tail -f' を使っているときenterキイを数回押す代わりにもなる。

ファイルの合併

'-I' コマンド行パラメータがある。これは '-i' と同じで、'-I' だけは二つ以上のファイルを一つにまとめる。例えば:
multitail [-i] file1 -I file2
で、実際のファイルの例では:
multitail /var/log/apache/access.log -I /var/log/apache/error.log
となる。これら二つの例では、示されたファイルの出力を一つのウインドウに合併する。これは、例えば第二の例のように、Apacheエラーログに現れたエラーの直前に起こったことを見る、ときなどに役立つことがある。

外部プログラムの出力を見る

前述のように、MultiTailを用いてファイルを見ることが出来るだけでなく、別のプログラム(scripts/executables/etc.)の出力を一つ以上のウインドウに置くことが出来る。これをおこなうには、 '-l' スイッチを送る必要がある。例えば:
multitail -l ls
別の例は:
multitail -l "ping localhost"
お分かりのように、パラメータを必要とするときは、コマンドの周りに二重引用符を追加する必要がある。さもないと、MultiTailは選んだプログラム又はMultiTail自体にどんなパラメータを付けるか認識することが出来ない。
ls-コマンドを付けて上の例を試してみる。すると、外部コマンドが完了したとき、MultiTailは自動的にウインドウを閉じるのが分かる。これらは、この動作の制御に用いることの出来る数少ないオプションだ。例えば '-z' パラメータは、与えると、ウインドウが閉じるだけで、画面が描き直されMultiTailは、プログラムが終わったとのポップアップ・ウインドウ無しで終わってしまう。
別のオプションは '-r interval'だ。これはコマンドがinterval秒毎に実行される。 '-r interval' の代わりに '-R interval'を使用することも出来る。これをMultiTailに送ると、interval秒の間隔で、前のコマンドの働きとの相異を示しのみを示しながら、次のコマンドを走らせることが出来る。だから、次のようにMultiTailを走らせると
multitail -R 3 -l "netstat -p tcp"
TCP-接続、即ち新たな交信と接続停止、毎に状態変化が示される
'-I file'と同様に、'-L command' もまた外部コマンドの出力を前のファイル又はコマンド、複数のログファイル、考えられるほとんどの事項と合併することが出来る。

カラー

スクロール中のログファイルを見ているとき、少しだけ遅れて重要なものとそうでないものを認識することがある。そのため、MultiTailには、ログファイルをカラーで表示する能力がある。 '-c' パラメータを与えると、次に示されるファイル又はコマンドがカラーで示される。これは、ログ行全部を見るのに、どの色を使うかを決める。そのログ行を生じたプログラム名だけにそれを使いたいとき(syslogログファイルを監視するときなど)は、'-cs' スイッチを用いることが出来る。最後のオプションは '-cS colorscheme' である。これは、パラメータとしてcolorschemeを必要とする。スイッチはcolorschemeを読み取る。colorschemeはmultitail.confから読み取られる。multitail.confには、どの色をどの「パターン」使用するかの正規表現を入力して設定する。規定値でMultiTailは、カレント・ディレクトリと/etcディレクトリにあるmultitail.confを参照する。 '-z' パラメータを用いて、どのファイルが使用するかを明確に規定する。
例:
colorscheme:postfix
cs_re:yellow:status=sent
cs_re:magenta:queue active
第一行はカレントcolorschemeを指定する。''cs_re'- 行は、正規表現の組合せと色を定義する。最初の'cs_re'- 行では、MultiTailがログ行中で文字列 'status=sent' に出会ったら、黄色でプリントすることを定義する。次の行は、文字列 'queue active' をマジェンタでプリントすることを定義する。少し複雑な別の例を示す:
colorscheme:syslog
cs_re:green:\[|\]
cs_re:blue:^... .. ..:..:..
最初の 'cs_re'-行は '[' or ']' の存在全部を緑に設定し、フォーマット'Mon DD HH:MM:SS' の日付で始まる行全部を青に設定する。o'Reilly がこの話題で 数冊の本を書いている。
カラーに関する最後の事項は、 '-c'の代わりに '-C' (大文字 'C') を使うと、新しい'-cx' 又は '-Cx' で無効にしない限り、後に続くファイル全部がこの時規定したパラメータを使用する。

正規表現を用いる篩い分け

篩い分けのためMultiTail は正規表現を用いる。物事を簡単にするため、 'grep' と全く同じ方法でこれを用いる。 '-e' は正規表現にしたがうことを示し、 '-v' は逆転を示す。
例:
multitail -e "gnu-pop3d" /var/log/messages
multitail -v -e "ssh" -v -e "gnu-pop3d" -e "localhost" /var/log/messages
最初の例は、 /var/log/messages から、どこかに文字列 "gnu-pop3d"を有する行だけを示す。第二の例は、その中で、文字列 "ssh" が無く(and)文字列"gnu-pop3d"が無く(and)文字列"localhost"が有る行だけを示す。

その他のオプション

何処にも当て嵌まらないオプションが幾つかある。
-f


 
これによりMultiTail はファイルを追跡する。元のファイルの名前を変更し、元のナノファイルを新しく作ると、MultiTail は元の名のファイル(入力したもの)を監視し始める。
-u seconds

 
MultiTail を遅いリンク(モデモ接続又はHAM)で使うとき、更新を少し遅くしたくなることがある。このパラメータを用いて、MultiTailがウインドウを更新する頻度を設定する。規定値は、直ちに。
-H interval


 
暫く何も起こらないとき自動的に接続を切るホスト(その上でMultiTailを使用中)に接続しているとき、 '-H'を使うことが出来る。使うと、MultiTailは、行を上に上げて、トラフィックを発生しながらカーソルを画面の周りで動かす。
-V


 
使用中のMultiTail のバージョンを知りたい場合は、'-V' オプションを付けてMultiTailをスタートすると、バージョンを表示して終了する。走っている間に、 'i' キイを押すことも出来る。

これで全部か?

このマニュアルでは、全部を取り上げてはいない。オプションとキイの完全なリストに関しては、MultiTailが走っている間は、'-h' コマンド行パラメータの出力、マニュアルを見られたい。また、プログラムが走っている間は 'h'-キイを押してヘルプを見られたい。
ソースコードも忘れないように!
 
MultiTail の最新版は http://www.vanheusden.com/multitail/ から入手することが出来る。
 
Copyright ツゥ 2003, Folkert van Heusden. Copying license
http://www.linuxgazette.com/copying.html
Published in Issue 95 of Linux Gazette, October 2003
 
 
 
 
 
メキシコをFLOSSが征服
By Felipe Barousse Boue
 
G A C E T A  D E  L I N U X ...Making Linux just a little more fun!
Veracruz, México を FLOSSが征服
By: La Gaceta de Linux

 

先週 (2003年9月17-19 日 ) フリー/オープン・ソフトウエア専門家の国際的大群が、メキシコのポートオブベラクルスに、 GULEV Linux Congress. (GULEV = Veracruz LUG)第三版祝賀会の間集結した。

PostgreSQLプロジェクトからのブルース・モンジャン、Novell/Ximianからのミゲル・デ・イクザ、Piensa Technologiesからのフィリッペ・バーローズ、Debianからのブデール・ガービーなどの有名人を始めメキシコの主要ソフトウエア・エンジニア など世界中のFLOSSコミニュティの トップスター 達が、ベラクルスの三日間の行事の間に、コンファレンスや個人的会話を楽しんだ。

天気も良く、参加者達は経験、アイデアを共有し、新しいフリー技術を学ぶする喜びに満ちあふれた。

参加者のほとんどが、学生と十台から三十才前半の若いプログラマであったと言えるが、各セッションには、企業からの人が少しと、立ち止まってLinuxに興味を示し質問をしたりアイデアを述べるシニアの人さえもいた。色々な人が集まって良かったと思った。

この GULEV三周年では、ベラクルスの世界貿易センター.以上の筋書きは無かった。別の場所にLinux、フリーソフト、オープンソースが、このような行事を頼めただろうか?この場所は誠に最良であった。

一年目は大学構内だった。二年目は市内のホテルの宴会場だった。行事の主組織者ミゲル・ロペスとルーシイ・ミジャンゴスが、今年の行事の円滑な運営に多大の貢献をし、皆がコングレスのプログラムに満足して、メキシコのFLOSS運動が成熟し他のどんな技術とも互角に競合するとの感を強くして帰国した。「改善する必要が沢山ある」とミゲルが言うのには同感で、この種の行事には常に改善の余地があるが、二年前の最初の時からは、随分長い道のりを来たものだと思う。

コンファレンスの逸話とコンファレンスの後や次を待つ間に人々の言った意見で、私の聞いたものには次のものがある。

息子のメシューと一緒に来たブルース・モンジャンは、PostgreSQL管理の修得のセッションを開いた。ブルースの言うヒント、レシピなど皆が彼の話全部を良く聞いていた。メシュオと喋る機会があったが、彼は「親父と旅行するのは楽しい、メキシコ料理は、・・・ウーム」だった。

ブルースの次のコンファレンスは、PostgreSQLの空想的側面で次のバージョンに期待出来ることだった。

ラリー・ウォールが一緒にベラクルスに来る筈だったが、病気になった来られなかった。この記事が出る頃には良くなっていると思う。

ミゲル・デ・イクザは、Mono及び、それが如何にLinuxでmpソフトウエア開発生産性を向上させたかについて話した。ソフトウエア開発中に競争力を保ち強化するとき、最も強力なツールと技術を準備することに明確な関心を示した。

一方ブデール・ガービーは、今日のDebianの立場を話した。有名な技術研究者フランシスコ・デ・ウルキジョニエンブロは、メキシコで進行中のデジタル革命の現状を講義した。彼は「オープンでフリーな技術は将来・・・自動車、家庭、ビル、その他あらゆるものにオープン仕様書を持つだろう」と言った。

フィリッペ・バーローズのコンファレンスは、Zope社のZopeフレームワークと、それを大企業で既に使われている強力なビジネス・アプリケーション開発に彼が使った方法に付いてだった。「Zopeは、極めて廉価で、偉大で、強力で、使い易く拡張性のある・・・短く言えば理想的なウエブベースのビジネス・アプリケーションである」とまとめた。

フェデリコ・メナ・キンテラの参画は、ドラッグ&ドロップ特性が必要な GTK+ におけるアプリケーションのプログラム作成に使用される概念とアイデアについてであった。

彼のコンファレンスの間に、フェルナンド・ロモが、アプリケーション・レベルに全てのロジックを委せるのでなく、データベース自体の中にアプリケーションのロジックを構築する概念について話した。示唆と経験の立派な集まりがフェルナンドのコンファレンスで討論された。

話題の一方で、グンナー・ウォルフがオブジェクト指向Perlについて話した。

ベラクルスで話された話題は他に沢山ある。クラスタ構築からWiFiネットワークの設計と構築、 Perl とPythonでのプログラム作成まで53個のコンファレンスがあった。

500人以上の人が、メキシコのFLOSSショーに参加するだけのためベラクルスに行ったことが確認された。行事に対する大きい感触は、全てのコンファレンス室とコンファレンス期間全部にわたって、フリーWiFiインターネット・コミュニティがあったことだ。

行事の終わりに、その翌日、「Tajin」と言う、ベラクルスから自動車で4時間の、歴史前廃墟へのツアーがあった。楽しみにしていたのに連絡を仕損じて、参加出来なかったのは残念。来年行く口実が出来た。

来年のコングレスはもっと良くなり、3版の間になされたように、色々な面で成長が見られると確信している。

それはそうと、メキシコのポートオブベラクルスは、数世紀前に征服者がしたように、ベンギンとFLOSSに全く征服されてしまった。

 

Copyright ツゥ 2003, Felipe Barousse Boue. Copying license
http://www.linuxgazette.com/copying.html
Published in Issue 95 of Linux Gazette, October 2003
 
 
 
 
END