xmlを使って仕事をするとは、標準XMLツールを使ってデータを出力用にフォーマットするとの意味だ。以前にしたことはないが、重要な専門語XSLTは知っている。XML Stylesheet Language Transformations(XMLスタイルシート転換言語)の略だ。これは、XMLから別の言語への転換を定義するため設計された言語だ。そこで、読取りから始めた。一般的に、XSLTはXMLをHTMLに転換するため使用されるが、出来ることに関して制限はないので、試して見ることにした。
だが、それでも後二つの部品が必要だ。転換するものと、カードをペイジ上で正しい位置に配置ことに必要なプログラム・ロジック、汎用プログラム作成言語か何か、がある筈だ。各種プログラム作成言語を検討した結果−Python が最良だった−PostScriptを作るだけで、プリンタ自体に配置問題を扱わせることが出来る。奇妙だが、試さない手はない。
出力フォーマット
PostScriptを取上げてから、カードをペイジ上に置く方法を実際に決定した。フラッシュカードは両面の必要があるので、先ず1面を印刷して、プリンタを通じてカードストックを裏に走らせて、別面を印刷しよう、と考えた。これは紙がプリンタ内で不具合になり易く、プリンタが詰まるため、位置合わせに問題があるか故障するかで、論理的な夢に過ぎなかった。
glue stickと言う別の高等技術を用いる方法に決めた。この考えは、各カードの前面と背面を1つのペイジの前面に印刷し、これを半分に折り、糊付けして実際のカードに切る。紙の2層と糊のため、紙が細工に十分な程重くなる。
ここで白状すると、これは綺麗で、完成した生産システムではない。働いて考え方を立証するだけのものだ。生産環境に関しては、カードの大きさとフォントをコンフィギュレーション・ファイルの中で決めるのが重要だ。加えて、両側に書くメッセージは、現在、大きさを考えずに1行で印刷される。行の折り返しを行う必要がある。
作業に戻ろう。レターサイズ用紙に片面上に9枚のカードの前面と背面両方を作ることの出来る1.5 x 2.5 インチのカードを取り上げた。上と下に1インチ、左右に0.5インチの余白が出来る。折曲げと切取りを容易にするため、ペイジの中程(前面と背面の間)に折曲げ線を、カードの端に切取り線を印刷しようとした。この折曲げがあるので、背面の印刷は前面と上下が逆になる。これらを考えた後、これは重要でないと判った。使うときカードを裏返しにする方向を決めるだけの話だ。
PostScript
必要なもの(つまり、PostScript とXSL)が全部 ここ からダウンロードすることの出来るファイル1つに入っている。今のところ XML は無視することが出来る。これをブラウザで表示しようとしても、XMLのお陰で正しく表示しないことに注意。サンプル出力を ここで見ることが出来る。
前にPostScriptで作業をしたことがない人は、準備をされたい。PostScriptはRPN (Reverse Polish Notation) 言語だ。HPの電卓を使ったことがある人には意味が分かる筈だ。ない人に手短かに説明すると、アイテムをスタックを入れてからそのスタックを操作して物事を行う。例えば、二つの数値を加算するには、数値をスタックに入れて加算演算子を実行すると、それが数値を引き出して加算し、結果をスタックに戻す。私はRPNが嫌いだ。
文句はさておき、PostScriptは実際極めて綺麗な言語で今必要なことをするのに悪くはない言語だ。PostScriptを使うには、ペイジに入力したいこと全部−文字、行、書込領域など−を記述して、ペイジ印刷を命令する。これは、沢山の中身を記憶する必要がなくて、順にペイジを仕上げること−あちこち動いて書きたいことを入れるだけ−を意味する。
PostScript では、長さの基本単位はは1/72インチだ。個人的には、この長さで作業をしたくないので、inchと言う名のファンクションを定義した。これは、スタック上の現在値を採用して、72を掛けてその値をスタックに戻す。
/inch { 72 mul } def
moveto とlinetoステートメントの全容が判るだろう。ご想像の通り、これらの演算子はスタックから二つの値(ペイジの左下隅を0,0として右と上を正の値とするx座標とy座標)取って、現在位置を規定座標に動かしたり、現在位置から規定位置まで線を描いたりする。
startitファンクションに進むと、ペイジの設定作業全部が判る。9要素アレー、x,yf,ybを三つ定義する。これらは、9枚のカードそれぞれについてテキストを置くxy座標を含む。(アレーはPostScriptで0から始めて指数化することに注意)あと二つの初期化ステップは、テキストに使用するフォントとフォント・サイズの定義とカード番号カウンターcardno を0に設定することだ。
別の二つのユテリティ・ファンクションcardstep とpageoutを定義する。pageoutは現在カード番号をチェックし、0より大きければ(cutmarksファンクションを呼び出して)切取線を引き、埋込 showpage を用いてペイジを印刷する。cardstep は、カード番号1だけ増やして、8より大きければ pageout を呼び出してペイジを印刷し、cardno を0にリセットして次のペイジを準備する。
最後の二つのファンクションは、front と back だ。これらはロケーション・アレーを指標にしてペイジ上の正しい位置に移動し show 埋込を用いてスタックにトップ値を印刷する。続いて back ファンクションが cardstep を呼び出して次の位置に移動する。こうして、次の二行でカードが印刷される。
(front page) front
(back page) back
二行だと言ったが、PostScriptで空白は重要でない。これを一行にしても同じ結果が得られる。括弧はスタックに入れる文字列を示す。
スラッシュ(/)で始まる行は全部、定義したばかりのファンクションだ。実際のプログラムはstartit初期化ファンクションを呼び出す行 startit で始まる。次に、frontとbackに対する一連の呼出を最後に入力し、カードがあるときは続いて pageout を呼び出して最新のペイジを印刷する。
XSL
幾つかのサンプルデータを用いて PostScript をテストしたところ、上手く働いた。そこで、XMLをフラッシュカードからPostScriptコードを働かせるのに必要なものに翻訳する次の段階に進む。ここでは二つの部品が必要だ。書込まなければならないXML、及びXMLとXMLファイルをフラッシュカードから読取って、プリンタに送るためるPostScriptに出力するプログラムだ。
易しい部分はプログラムだ。xsltproc は正にそのプログラムだ。一丁上がり。見たこともない言語で何かを書くのに進む。RPN言語で書くより増しだろう。
分かるにつれ、余りすることはない。XSL常套文(<xsl:stylesheet ... >)の後に、出力フォーマットが、HTMLを規定値とするテキストになるのを定義する必要がある。テキストとは「その他全部」を意味する。これは次を用いて行う。
<xsl:output method="text">
最初に出力したいのは PostScript プログラム自体だ。これは、<xsl:template match="/"> タグの直後にそれを含めておこなう。 / のmatchは、XML全体をmatchするので、ファイルの最初に処理される。私は、同一行にxslタグとして%!PS を置いたのに注意。これは、プリンタがこれをデータの第一行の始まりと見なすのに必要である。さもないと、プリント・スプーラはこれをテキストと考えて翻訳する代わりにPostScriptをプリントする。
</xsl:template> タグのマッチングの前に別のXMLタグ1つ<xsl:apply-templates/>がある。これは xsltprocに、他にあるマッチングテンプレート全部を此処で適用することを命じる。
match="e"のマッチ表現を持つテンプレートがもう一つある。これは、個々のカードを記述するブロックをマッチさせる。これはフラッシュカード記事に対する注釈で説明されている。このブロック内では、oブロックが元の言語用で、tブロックが翻訳用である。value-of 特性を用いて、これらの値を獲得し、それらを丸括弧に入れてその後にfront又はbackを続ける。
これで終わりだ。XSLが ks.xslにあるとして、次のコマンド
xsltproc ks.xsl creatures.kvtml | lpr
ベル研では、何処でもと同じように、写真植字を行うのに、植字キイボードを誰かが叩いていた。出力はフィルム又は印画紙で、変更はXactoナイフを注意深く使って行っていた。もっと良い方法がある筈だ。良い方法はUNIXシステム、troff及びグラフィックシステムCAT写真植字だと分かった。
レーザ・プリンタを横に置いている我々には変だと思われるが、今でもレーザ・プリンタはコンビニでは買えない。このシステムは、1秒10文字のテレタイプなど遅い入力装置、基本的マークアップコマンドを使ってテキストを入力することの出来るテキスト・エディタを走らせるコンピュータ、マークアップを読込んで植字機に分からせるのに必要なものを作る別のプログラム、及び最後に、コンピュータと会話する写真植字機から構成されていた。
コンピュータはPDP-11で、エディタはedで、写真植字機を駆動するプログラムはtroffであった。CAT写真植字機は、このPDP-11/UNIX/troff コンボに命令するため特別に設計された。その唯一の入力方法は RS-232ケーブルだった。
十分な環境−何が新しいか?
数年経ってtroffは進化した。その二文字コマンドが拡張され、同時に四っつ以上のフォントをサポートするようになってから久しく(これはCATの限界だった−フォントはフィルム・ストリップ上にあった)異なるデバイスに出力を生じる能力が成長した。最も普通の出力フォーマットは、長い間PostScriptだった。PostScriptプリンタがあれば、殆ど何でも出力することが出来る。なければ、GhostScript を使って翻訳することが出来る。
問題は、殆ど全てがウェブ上で公開されるのに伴って、PostScriptでの情報が実際の答にならないことだ。HTMLが必要になる。そこでtroffは今や出力フォーマットとしてHTMLをサポートする。
これは大変なことだろうか?先ず始めに、Linuxシステム上のコマンドに関するマニュアル全部は、manマクロを用いてをtroffで書いてある。これらの一つをHTMLで入手したいとき、しなければならないことは、groff(troff店頭プログラム)を走らせて、HTML出力が必要と命令する。だから数千の理由がある。他にもある。
昔ベル研で行った仕事全部など、沢山の書物がtroffで書かれている。社内的にUNIXに依存した多数の会社もまた、社内文書をtroffで書いた。熱心人は今でもtroffで書いている。
使う方法は?
最も良い手始めは、マニュアルでテストすることだ。マニュアルは普通/usr/share/manのサブディレクトリに圧縮形式で記憶されている。サブディレクトリman1にコマンドに関するマニュアル全部がある。次を試す:
cd /usr/share/man/man1
ls
zcat ln.1.gz | groff -man -Thtml > /tmp/ln.html
上手く行くと、マニュアルのHTML版がファイル /tmp/ln.html.に入っている。ブラウザをそこに指定して、見てみる。
上のコマンド行を説明しよう。
troff入力の見掛け
ここまで来るとtroffを使って役立つことが何かあると思う筈だ。入力の見掛けを見てみよう。上の例はマニュアルのマクロ頁を使ったので、余りよい出発点ではない。そこで、代わりに基本的troffプログラムpre> .sp .5i .po .5i .ft HB .ps 24 .ce 1 Simple Test File .sp .2i .ps 11 .vs 13 .ft Rを示して基本的概念を示す。これは簡単なテキストの始まりだ。troffはデフォルトで行を満たすので、行当たりのセンテンスが編集を容易にする。これは自動的に \fIparagraph\fP が満たされ行..spが行末を揃えて終わる。.spコマンドは空白行を作るのに用いられる。引数がないと、垂直間隔(.vs)の値を用いる。
お分かりのように、troffコマンドはドットで始まり、長さは2文字だ(新しいバージョンでは長いコマンド名がサポートされる。何が起こるかを示す:
このファイルをtest1にセーブすると、次のコマンドを走らせて出力を見ることが出来る。
groff test1 | gv -
マクロパケージ
上で分かるように、沢山のコントロールがあるが、それは沢山の曖昧なコマンドを必要とする。沢山の文書を同じ基本フォーマットで書くときは、ページオフセットとフォントの記入で頭が痛くなる。予定の文章を変更したり、脚注を付けたり、目次を付けたいこともある。そこにマクロパケージが登場する。
規定のフォントを追加すると、基本的troffエンジンは昔のは子供の塗り絵のように働くと考えることが出来る。マクロパケージの追加により、一時的な操作の組を予め定義することが出来る。例えば、一つの文章だ。一旦これを行うと、文書フォーマットを変更するため何か(上の.spなどの)troffコマンドを挿入した全ての場所を変更しなければならないのではなく、マクロを変更する方法を必要とするだけだ。
ここでその働き全部を解説する積もりはなく、既存の能力をお知らせするだけだ。共通マクロパケージは:
今日では、マニュアル・フォーマット用に使われるmanともっと一般的なmmを見ることがある筈だ。だが、自分のマクロパケージを開発出来ないとは言えない。SSCは20年近くも地方で開発した二つのパケージを使っている。
これらのパケージの第一のものは、SSCポケット参照カード作成のため開発された。これらのカードには3.5 x 8 インチのペイジがある。各ペイジはコマンド情報の表題枠と5色までを使うテキストから構成されている。ここで使用するマクロペイジは、枠の描画、色及びこれらのペイジ二つを一つの物理ペイジ片側に出力することを扱う。片側の利点は、二つの異なるマクロの組があることにより、追加のプログラムや実際の文書を変更することなく、カラープリンタ上で加工してプリンタ用に色を分離した出力を作ることが出来ることだ。
マクロの別の組は、教室の授業用に開発された。ここでも、使用するマクロの変更により異なる出力を作る能力が利用される。完成文書は、大きい字体の本文と小さい字体の議論を含む。これは、教室で使用するスライドを散らかさないで学生のノートに沢山の説明文を含ませることを意味する。
プリ・プロセッサとは?
前に、troffは塗り絵のように働くと言った。それは、一行毎の出力装置でなく書込む作業空間があると言う意味だ。一行毎に作業をするだけなら極く普通だが、これはペイジ上で後に動いて描くことが出来ることを意味する。troffプリ・プロセッサは、この能力を利用する。
最も普及しているプリ・プロセッサはtolで、これは、ご期待通り、テーブルの作成に用いられる。使用が極めて簡単で、枠、表題及び枠内で流れる本文を始めとする表の見掛けを格好良くまとめることが出来る。私はテーブルをHTMLで書くたびにtblを使えば易しいのにと思い出す。
コマンドは少ないが極めて強力なプリ・プロセッサはpicだ。picを使って絵を描くことが出来る。四角形、円形、矢印など、つまり図形だと言えば良いだろう。
まとめ
この記事が、troffとは何か、何が出来るかを理解するのに役立ったことを望む。したいことの全部がtorff文書をHTMLに転換することであれば、十分な情報を入手された筈だ。他方、転換を超える用途を見込んでいるなら、習うことは沢山ある。もしそうなら、これ以上にしたいことに関する御意見を寄せられたい。
Step 1.
Exim MTA: www.exim.orgからExim .tar.gzをダウンロードして何かのディレクトリにアンパックする。この文書を書いているとき、最新のEximバージョンは4.24である。作ったばかりのディレクトリ(exim-4.24など)にcdする。次に、ファイルsrc/EDITMEをLocal/Makefileにコピイするが、その前に、src/EDITMEに何か情報を入れなければならない。以下が最低でも設定しなければならない事項だ:
BIN_DIRECTORY=/usr/exim/bin
CONFIGURE_FILE=/usr/exim/configure
EXIM_USER=eximusr
私はこのユーザをEximだけのため作ったが、諸君にもそれを勧める。勿論、ユーザー名を同じにする必要はない。
私はまた、セキュリティの注意のためFIXED_NEVER_USERS=root を設定した。このファイルもまたコメントが良いので、他のオプションが入用のとき、その設定は難しくないが、この構成でオフィス・ネットワーク用に丁度上手く働く筈だ。
Eximモニタを構築するときは、同様の構成手順が必要だ。ファイルexim_monitor/EDITMEを自分のインストレーションに合うように編集して Local/eximon.conf.の名でセーブする。
幸いexim_monitor/EDITMEに記述される規定値設定になっていると、Local/eximon.conf は空かも知れないが、存在する筈だ。
インストール前コンフィギュレーションの後、ソフトウエアをコンパイルする必要がある。コマンドmake とmake install が上手くやってくれる。この後、インストール後コンフィギュレーションを行うと、殆ど終わりだ。ファイル/usr/exim/configureを好きなエディタで開いて
domainlist local_domains = @
を
domainlist local_domains = @ : localhost : foo.bar
か、又はローカルにeximを送りたいドメインに変更する。仮想ドメインを用いるEximの構成は、この文書の範囲を超えるが、最後に一寸触れる。次に必要なのは、コンピュータがブートアップしたときは何時でも、Eximを走らせることだ。私は、これをinetdからするのを好む。それには、/etc/inetd.confに次を追加する。
smtp stream tcp nowait eximusr /usr/sbin/tcpd /usr/exim/bin/exim -bs
ここで eximusr はsrc/EDITMEの中のEXIM_USER変数に設定されるユーザーである。
ここで、inetdをスタートし直してポート25の上の自分のマシンにtelnetする。次のような行が出る筈だ。
220 enterprise ESMTP Exim 4.24 Fri, 28 Nov 2003 20:03:32 +0100
これは、全部が上手く働くことを示す。今eximにしなければならないのはこれで全部だ。
Anomy mail sanitizer: .tar.gzを mailtools.anomy.netから何かのディレクトリ(私のは /usr/local)にアンパックしanomy/binにcdする。次に./sanitizer.plを走らせる。多分何かエラーメッセージが出るだろうが構わない。Parlモジュールが無いとのエラーメッセージなら、後でそこに戻る。何かエラーが出たら、暫くそのままにして読み進む。
SpamAssassin: .tar.gzパケージをアンパックして新しく作ったディレクトリにcdする。インストレーションには二つの方法がある。第一は短いが少し難しい、以下のコマンドの組をルートとしてのシェルにタイプする。
perl -MCPAN -e shell
o conf prerequisites_policy ask
install Mail::SpamAssasin
quit
この方法は、モジュールCPANを用いてSpamAssasinをインストールする。初めてモジュールを使うのであれば、CPANコンフィギュレーションに関する一連の質問を聞かれる。
第二の方法を示す。
perl Makefile.PL
make
make install
spamc 又は spamd を走らせるとき、anomyと同様の問題にぶつかる。気にしないで読むだけだ。ここで、モジュール欠如のエラーを説明する。エラーメッセージがHTML/Test.pmなど不足モジュールに関するときは、MCPANを使ってインストールするか、又はwww.cpan.orgを訪ねてモジュールHTML::Test を探してインストールする。Perlモジュールをインストールする必要があるときは、余り難しくない。 .tar.gz をアンパックして、新しく作ったディレクトリにcdする。次のコマンドの組をルートとしてタイプする。
perl Makefile.PL
make
make test
make install
Perlモジュールをインストールする方法は分かっているので、anomiyのモジュール欠如エラーも直すことが出来る。モジュールをインストールするとき、SpamAssasinやanomyと同じエラーが出るのは、Perlモジュールが働くには別のモジュールが必要な時だ。だからもう一度www.cpan.orgを訪ねて、要件全部を満たすまで繰り返す。例えば、私の場合、anomyとSpamAssasinの両方をインストールするのに、次のモジュールが必要だった:HTML::Parser, HTML::Tree, HTML::Tagset, HTML::Sanitizer, MIME::Base64, Test::Harness, Test::Simple, Digest::MD5 , Devel::CoreStack。残念ながら、どのモジュールが別のものの前提要件か覚えていないので、READMEファイルを読まないと、全部をインストールするまでエラーメッセージが続く。
SpamAssasinには、もう一つすることがある。spamcはspamdに取ってクライアントに過ぎないので、メールがspamcを通じて渡されるときspamdが走っていることを確認しなければならない。initスクリプトに spamd --daemonizeを追加するだけだ。
vm-pop3d: tar.gzソースをwww.reedmedia.netからアンパックして新しく作ったディレクトリにcdする(このパターンが分かるだろうか?)。次のコマンドの組をルートとしてタイプする。
./configure
make
make install
ここで、コンピュータがスタートするときvm-pop3dを走らせなければならない。次の行を、/etc/inetd.confファイルに追加する。
pop3 stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/vm-pop3d
inetd をスタートし直してポート110の上のローカルホストにtelnet する。
+OK POP3 Welcome to vm-pop3d 1.1.6 <14665.1070049711@enterprise>
に似た行が、ステップ1の終わりにいることを意味する。
次のステップでは、構築するソフトウエアすべてを構成する。
ステップ 2.
手引きと御願いを少々。作業を始める前に、Exim文書のメールのdelivery、router、transportに関する章を読んで予備知識を得られたい。これらについて未だ書くことがあるので、Eximがメールを審査するとき、受領されるまでルーターからルーターを訪ねる。メッセージが受領されると、そのルーターがtransportを呼び出してメッセージを処理する。transportを通った後メッセージが配送されないと、受領されて配送されるか又は「配送不能」エラーメッセージを作るまで、もう一度ルーターを巡る。短く言えばこんな具合なので、注意深く読めば、Eximのコンフィギュレーション・ファイルに記載するtranzportの順序は重要でないが、ルーターの順序は重要であることが分かる筈だ。
ここで面倒なことをしないといけない。好きなエディタで /usr/exim/configureを開き、ローカル配送を扱うルーターの前( dnslookupルーターの後)に次を追加する。
# MAIL SCAN ROUTER
mail_scan_router:
no_verify
check_local_user
condition = "${if !eq{$header_X-I-came-to:}{scary devil's monastery}{1}}"
driver = accept
transport = mail_scan_transport
このルーターは、メッセージがX-I-came-to:scary devil's monasteryヘッダを含まない時だけ、又は最初に到着するときだけ別の語により走る。この条件を用いて、これ無しで作られるルーターを無効にした。ここで、条件に合うときこのルーターが呼び出すtranportを追加しなければならない。そこで、以下をtransportセクションの任意の場所に追加する(transporの順序は無関係なのを想起されたい)
#MAIL SCAN TRANSPORT
mail_scan_transport:
driver = pipe
command = /usr/exim/bin/exim -bS
use_bsmtp = true
transport_filter = /usr/exim/mail.sh
home_directory = "/tmp"
current_directory = "/tmp"
user = mail
group = mail
log_output = true
return_fail_output = true
return_path_add = false
message_prefix =
message_suffix =
headers_add = X-I-came-to: scary devil's monastery
このtransportは、transportフィルタを通じてメッセージを扱い、Xヘッダを追加する。これがルーター内の条件との組合せで、infinite filtering/spamcheckingループをいずれも無効にする。
ここでmail.sh. を書こう。これは、単一のtranzportの中でanomy sanitizer と SpamAssasin両方を走らせることが出来るようにするスクリプトだ。次のように進む。
#!/bin/bash
cd /usr/local/anomy/bin
./sanitizer.pl | /usr/local/bin/spamc
cd /tmp
#end of script.
これらのcd全部が奇妙に思われるだろうが、ディレクトリの外からanomyを走らせるときエラーが出た。とにかくこのコードをファイルにコピイする。それを /usr/exim にセーブして、ユーザーメールがそれを走らせるパーミッションを持っているのを確かめる。例えば私のパーミッションは次のようである。
-rwxr-xr-x root root.
もう少しEximコンフィギュレーションを続ける。SpamAssassinがメールをスキャンするとき、これはメールにX-Spam-Statusヘッダを追加する。これを使って、メールが迷惑メールか否かを判定して、何処に配送するかを決める。これをExim コンフィギュレーション・ファイルの中のlocal_deliveryルーター(ルーターの順序が関係することを思い出されたい)直前に追加する。
#SPAM DELIVERY ROUTER
spam_delivery_router:
condition="${if eq {${length_3:$header_X-Spam-Status:}}{Yes}{1}}"
check_local_user
driver=accept
transport = spam_delivery
そこで、X-Spam-Status: ヘッダの最初の3文字がイエスであれば、それは迷惑メールであることを意味するのでspam_delivery transportを使用する。そうでないときは、普通のローカル・デリバリに進む。ここで、コンフィギュレーション・ファイルのtransport部分に次を追加する。
spam_delivery:
driver = appendfile
create_directory
file=/var/spool/virtual/spam.foo/$local_part
delivery_date_add
envelope_to_add
return_path_add
group = mail
mode = 0660
これは、例えば、ローカル・ユーザーsandro ( sandro@localhost)へのメールが /var/spool/virtual/spam.foo/sandroに配達されることを意味する。virtual とspam.fooのディレクトリが、親ディレクトリの中で ls -l をするとき次のように見えることを確認されたい。
drwxrwsrwx 3 mail mail 4096 Stu 27 19:05 virtual
drwxrwxrwx 2 mail mail 4096 Stu 28 21:08 spam.foo
これらの変更の後、inetdをスタートし直すことは言うまでもない。
ここで、これら二つのディレクトリが何のためか分かる筈だ。これは迷惑メールをローカルユーザーに送るためのものだ。その通り、vrm-pop3dのために仮想ドメインspam.foo(今、分からなければpop3デーモン) を作るので、ユーザーは迷惑メールを読むことか出来る。何故かって?私の場合沢山のユーザが、ニュースレター、コマーシャルなどが抜けたと苦情を言うからだ。私の場合、/var/spool/virtual/spam.fooにあるメールは、システムリソースに限界があって、迷惑メールのため必要以上に無駄にしたくないので、一週間で削除するからだ。どうだろうか?
ここで、vm-pop3dのコンフィギュアだ。ローカル・ユーザーの「実際の」メールに関してすることはないが、迷惑メールにはある。各ローカル・ユーザーは、spam.foo仮装ドメインを入手する。MUAコンフィギュレーションはこの時「実際の」メールボックスに関するものと少し異なる。例えば、ユーザーのローカル・ユーザー名が vms であると迷惑メールのメールボックスのユーザー名はvms@spam.foo 又は vms:spam.fooとなる。勿論、これら二つのメールボックスに対するパスワードが同じである必要はない。ここで、Yahoo(trn)Bulkメールホルダと同様の「あり得るまま」概念を持つことに注意。
さて、その迷惑メール・アカウントを作ろう。ディレクトリ /etc/virtualを作る。これは次のようでなければならない。
drwxr-xr-x 3 root root 4096 Stu 25 21:22 virtual.
パーミッションがこの通りであることは重要でないが、vm-pop3dはこのディレクトリを読むことが出来なければならない。だから、これらが嫌なら、別の組合せに代えてもよい。私の方法が唯一の方法だとの印象を持って欲しくないので、これを言う次第。
このディレクトリの下に、同一パーミッションを用いてspam.foo を作る。そのディレクトリには、我々の仮想ドメインのパスワードが含まれる。そのファイルは、次のPerlスクリプトを用いて作る。 vm-pop3d作者のウエブサイトから入手したものだ。
#!/usr/bin/perl
$name = $ARGV[0];
@salt_chars = ('a'..'z','A'..'Z','0'..'9');
$salt = $salt_chars[rand(62)] . $salt_chars[rand(62)];
$passwd = crypt ($ARGV[1], $salt);
print "$name:$passwd\n";
このスクリプトをファイルにセーブして、ルート又はメール管理者なら誰でも実行することが出来るのを確認する。
スクリプトは./script_file_name username password >> /path_to_passwd/passwdの方法で使用する。例えば:
enterprise:/etc/virtual# pop3passwd mosor uncrackable >> spam.foo/passwd
これでspam.fooドメインに関するユーザー名を自分のローカルユーザ全部について追加することが出来るので、vm-pop3dコンフィギュレーションは完成だ。
次はSpamAssasinの微調整だ。/etc/mail/spamassassin/local.cf を開き report_safe 1をreport_safe 0に変更する。
これを1に設定すると、入信メッセージに迷惑メールのタグが付いているとき、元のメッセージを変更する代わりに、SpamAssassinが新しい報告メッセージを作って、元のメッセージをmessage/rfc822 MIME部分として(元のメッセージを完全に保存し、開封困難で、回収が容易であることを保証しながら)添付する。このオプションを2に設定すると、元のメッセージが、message/rfc822でなくtext/plainの内容型で添付される。この設定は、ユーザーが何もしないのに自動的に添付する敗北メールクライアントに対する安全上の理由から必要になる。この設定ではまた、元のメッセージの抽出又は閲覧が少し難しくなる。このオプションを0に設定すると、入信迷惑メールは何か"X-Spam-" ヘッダと付けて変更されるだけである。
迷惑メールに対処するとき重要な別のことは、迅速に学習する技術である。SpamAssasin学習計画にはマニュアルが最良の資料だ(それと、中の中の参照資料を読むことを強く勧める)が、すべては、フィルタが沢山学習する程、沢山覚える。学習の技術的側面は次だ。
sa-learn --spam path_to/message_file
又は
sa-learn --ham path_to/message_file.
勿論 --spam は迷惑メールの意味で --ham は迷惑でないメールの意味だ。spam とham両方のメールをフィルタに学習させるのは同じように重要だ。
これで終わりだ。迷惑メール撃退システム、コンフィギュレーションが出来上がった。
あと少しの事項がある。常時インターネット接続を持っていないなら、fetchmailがメールを回収する方法だ。そこでfetchmailをコンフィギュアしよう。.tar.gz パケージをアンパックして、新しく作るディレクトリにcdする。ルートとして次をタイプする。
./configure
make
make install
ここでユーザーのためメールを取って来る構成をする必要がある。各ユーザーが自分のホームディレクトリに .fetchmailrcを持つ必要がある。簡単な .fetchmailrc ファイルは次の通りだ。
poll pop.iskon.hr proto pop3 username "amangovs" password "Unkrakkable" is "sandro" here nokeep expunge 3
Fetchmailの構成ファイル・フォーマットは、マニュアルに非常に良い説明がある。是非読まれたい。
もう少し微調整。/etc/aliasesに進んで、何か別名を設定する。最も重要な別名はpostmasterで、これは是非設定しなければならないが、少し余計な時間を掛けて全部設定することを勧める。
メール受信を全部述べたので、ご存知ではあろうが、送信について述べる。インターネットに常時接続しており、完全に資格のあるドメイン名(ダイナミックDNSでも良い)を持っているときは、諸君のユーザはMX DNSエントリを用いて、諸君のメールサーバを彼らのsmtpサーバとして使用することが出来る。そうでなければ(諸君のメールがfetchmailを通じて回収されるとき)ユーザーは自分のプロバイダのsmtpサーバを自分のMUA(メール・ユーザー・エージェント)に入れなければならない。.
約束通りEximの仮想ドメインに付いて少し示す。
local_delivery:
driver = appendfile
file = /var/spool/virtual/$domain/$local_part
delivery_date_add
envelope_to_add
return_path_add
group = mail
mode = 0660
Eximコンフィギュレーション・ファイルの中のlocal_delivery transportをこれに変えると、Eximはsome_username@some_domain.comへのメッセージを/var/spool/virtual/some_domain.com/some_usernameに配送するだろう。ここで更にしなければならないのは、some_domain.com in domainlist local_domains = @ : localhost : foo.bar: domain1.com : domain2.com : some_domain.com (覚えているかな?)を追加して、vm-pop3dを spam.fooドメインについてコンフィギュアしたのと同じようにコンフィギュアすることだ。パーミッションのチェックを忘れないように。役に立つことがある。
これで、本当に全部終わりだ。
ブートローダは、ROM(マザーボード上のBIOS又はSCSIディスクコントローラボードなどデバイス特有のコードのいずれか)がロードするプログラムだ。PCには有名なブートローダ二つがある。LILO は伝統的なローダでGRUB は新しい。各プログラムは、何かコンフィギュレーション情報を掴むこと、Linux(又はその他)kernelをロードして制御を渡すことの役目を有する。
LILOとGRUBとの間の最も大きい相違は、コンフィギュレーション情報の入手方法だ。LILO用のコンフィギュレーション情報は、liloコマンドを走らせて静的な形でセーブされる。この情報は、ディスクのマスターブートレコード(MBR)又はLinuxブート・パーティションのブート・レコードに書き込まれる。liloコマンドが使用するコンフィギュレーション情報は通常 /etc/lilo.conf.に記憶される。コンフィギュレーション・ファイルのサンプルを示す。
boot=/dev/hda # boot loader to MBR
root=/dev/hda1 # root partition
install=/boot/boot.b
map=/boot/map
delay=50 # 5 second delay before auto-boot
image=/vmlinuz # kernel
label=linux # name to refer to entry
read-only
image=/vmlinuz.old # backup entry
label=old
read-only
この例では、ブートするのに可能なkernelが二つある。 /vmlinuz と/vmlinuz.oldだ。LILOプロンプトで、linuxと入力して今のものを選び、oldでバックアップのものを撰ぶことが出来る。LILOプロンプトでTABキイを押すと、これらオプションのリストが出る。kernelを再構築したり、その他の変更をしたいときは、liloコマンドに戻ってコンフィギュレーション・ファイルを読取り直し、この新しいコンフィギュレーション・ファイルを使ってLILOをインストールし直す。
GRUBは、ブート時にコンフィギュレーション・ファイルを読取る。MBRは512バイトだけで済む。MBRにインストールされるGRUBの部分が、システムの基本的初期化をおこない、ブートドライブにアクセスする方法を理解した上で、ドライブから残りのGRUBをロードする。
GRUBはgrub-installプログラムを用いてインストールする。詳細に付いてはman又はinfo頁を利用することが出来る。grub info頁も役に立つ。コンフィギュレーション・ファイルは通常 /boot/grub ディレクトリにある。SuSEはこれを menu.lst に置き、Red Hat は grub.conf に置く。コンフィギュレーション・ファイルのサンプルを示す。
default 0
timeout 8
gfxmenu (hd0,1)/boot/message
title Linux
kernel (hd0,1)/boot/vmlinuz root=/dev/hda2 desktop showopts
initrd (hd0,1)/boot/initrd
title Failsafe
kernel (hd0,1)/boot/vmlinuz root=/dev/hda2 showopts ide=nodma apm=off acpi=o
ff vga=normal nosmp noapic maxcpus=0 3
initrd (hd0,1)/boot/initrd
title Memory Test
kernel (hd0,1)/boot/memtest.bin
Redmondからの著作権OSでコンピュータを共有しているときは、これらの人は別のOSがあるのを知らないことに注意。つまり、彼らのシステムをインストールするとMBRを上書きしてしまう。彼らのソフトウエアを先にして後でLinuxをインストールすると、全部が上手く運び、両方のOSでブートすることが出来る。
ランレベル
ランレベルはシステム・コンフィギュレーションのアレーを提供する。別途の命令をしない限り、システムは一般的にレベル3又はレベル5の規定値ランレベルで来る。ラベル名をLILOに入力するか、又はGRUBで boot の語を入力し、続いてブートローダ・プロンプトで single の語を入力すると、この行動を変更することが出来る。
標準のランレベルが、0から6まで七つある。レベル0はシャットダウン、レベル1は単一ユーザー・モードで、レベル6は再ブートを意味する。その他のレベルは、自分の裁量で利用して各種システム・コンフィギュレーションを設定する。最も一般的なのは、GUI(X)を走らせないで完全に作動するシステムとしてのランレベル3を使うか、又はGUIを用いてレベル3と同様にレベル5を使うかである。多数のシステム上に、Sと言うランレベルがあるが、これは、ランレベル1に似ているけれども、入力するにはルートパスワードが必要である。したがってこれには安全上の理由がある。
ファイル /etc/inittab の内容が、各ランレベルで取る行動を決定し、また、規定値ランレベルを規定する。/etc/inittabにあらわれる筈の事柄のサンプルを示す。
#
# /etc/inittab
#
# これは /sbin/initのメイン・コンフィギュレーション・ファイルで
# スタートアップ時にkernelが実行する。
#
# 規定値ランレベル
id:5:initdefault:
# /etc/init.d/rc はランレベル操作を管理する
#
# ランレベル 0 は システム停止 (初期規定値に用いないこと!)
# ランレベル 1 は 単一ユーザー・モード
# ランレベルl 2 は 遠隔ネットワーク(NFSなど)のないローカルマルチユーザー
# ランレベル 3 は ネットワークのある完全マルチユーザー
# ランレベル 4 は 未使用
# ランレベル 5 は ネットワークとxdmのある完全マルチユーザー
# ランレベル 6 は システム再ブート
#
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# 単一ユーザー・モードでおこなうこと
ls:S:wait:/etc/init.d/rc S
~~:S:respawn:/sbin/sulogin
# CTRL-ALT-DEL が押されるときおこなうこと
ca::ctrlaltdel:/sbin/shutdown -r -t 4 now
# 通常ランレベル用getty-プログラム
#: : :
# "id" フィールドはデバイスの
# 最終文字 ("tty"の後)と同一でなければならない
1:2345:respawn:/sbin/mingetty --noclear tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
id:5:initdefault:の行は、規定値ランレベルを5に設定する。l1:1:wait:/etc/init.d/rc 1 の形の行は、引数としてランレベルを渡しながら、スクリプト /etc/init.d/rc を呼び出す。このスクリプトは続いて、規定ランレベルに結合するプロセスを開始する(及び他のプロセスを停止する)。各プロセスを制御するスクリプト全部もまた/etc/init.d ディレクトリにある。
一般的に、各ランレベルで開始及び停止するプロセスは、/etc/init.d のサブディレクトリに(例えばランレベル5についてはrc5.d)の置かれる。これらランレベル特有ディレクトリそれぞれにおいては、シンボリック・リンクを用いてプロセスを指定する。Kで始まるリンク名は停止するプロセスを、S で始まるリンク名は開始するプロセスを指す。リンクはアルファベット順でアクセスされる。その意味は、killスクリプトを先に走らせて、killとstarの中のスクリプトの順は、K又はSに続く2桁数を用いて制御する。
これは情報を扱う標準の方法なので、一般的にと言った。ベンダーに依っては、少し違う方法を用いるが、あらゆる場合に、プロセス全体を制御するのはgenerainit プログラムである。UNIXがスタートアップを扱う方法に習熟しているなら、これは System V Init.と極めて良く似ている。
途中で問題に遭遇しなければ、君のシステムは撰ばれたランレベルにある筈だ。システムが立ち上がって走ると、ルートとしてログオンしてinitコマンドを用いることにより、ランレベルを変更することが出来る。例えば、ランレベル3に変更するには、init 3と入力する。
|
|
|
大文字についても同じ順序で働く。これは少し慣れる必要がある。引用符だけが必要なときは、それを示すのにスペースを押す必要がある。直ぐに慣れて、自動的に出来るようになった。コンピュータでデッドキイを設定したりしなかったり行き来するのも、キイボード配置全体を変えるより遙かに容易だ。
スペイン語の句読点と英語キイボードにない特殊記号については、別のオプションを設定する必要がある。Control Centerに戻って、Layoutタブの横のOptionsタブをクリックする。"Compose Key" 入力の下のプルダウンをクリックする。ここにこの機能の選択が幾つかある。私は"Right Alt is Compose"を撰んだが、自分に合うなら"Windows"又は "Menu"キイを撰んでも良い。これで、この言語に必要な記号 ¿ と ¡ を得ることが出来る。撰んだComposeキイとこれらの記号を得るための正しい順序を押す。例えば、上下反対の疑問符を得るには、右Alt キイ、shift キイ、 "?"を二回、の順で押す。ここでも、一見複雑だが、直ぐに慣れて自動的になる。
composeキイシーケンスを用いて利用することの出来る記号全部のリストを作るには、コンソール・ウインドウを立ち上げて "dumpkeys | grep compose"とタイプする。dumpkeys とgrepとの間にあるのは縦棒で、縦棒文字が見つからなければ、"dumpkeys"とだけタイプすればよいが、可能なキイのリスト全部を見て"compose"と言うキイを見付けなければならない。どちらの場合も、必要なキイシーケンスと結果の記号が見つかるだろう。例えば、私のコンピュータでは、右Altを押しながら "s"を二回タイプしてドイツ語の ß を、右Altを押しながら"-L"をタイプして £ を、"oc"をタイプしながら右Altを押して © を得ることが出来る。一つだけないのはユーロに対する記号である。誰かが考えて、投稿してくれるだろう。私の記号表を示す。
| 順序 | 結果 |
| `A | À |
| `a | à |
| 'A | Á |
| 'a | á |
| ^A | Â |
| ^a | â |
| ~A | Ã |
| ~a | ã |
| "A | Ä |
| "a | ä |
| -a | ª |
| -A | ª |
| OA | Å |
| oa | å |
| 0A | Å |
| 0a | å |
| AA | Å |
| aa | å |
| °A | Å |
| °a | å |
| AE | Æ |
| ae | æ |
| ,C | Ç |
| ,c | ç |
| ^C | Ç |
| ^c | ç |
| `E | È |
| `e | è |
| 'E | É |
| 'e | é |
| ^E | Ê |
| ^e | ê |
| "E | Ë |
| "e | ë |
| `I | Ì |
| `i | ì |
| 'I | Í |
| 'i | í |
| ^I | Î |
| ^i | î |
| "I | Ï |
| "i | ï |
| -D | Ð |
| -d | ð |
| ^D | Ð |
| ^d | ð |
| ~N | Ñ |
| ~n | ñ |
| ^N | Ñ |
| ^n | ñ |
| `O | Ò |
| `o | ò |
| 'O | Ó |
| 'o | ó |
| ^O | Ô |
| ^o | ô |
| ~O | Õ |
| ~o | õ |
| "O | Ö |
| "o | ö |
| /O | Ø |
| /o | ø |
| -o | º |
| -O | º |
| `U | Ù |
| `u | ù |
| 'U | Ú |
| 'u | ú |
| ^U | Û |
| ^u | û |
| "U | Ü |
| "u | ü |
| 'Y | Ý |
| 'y | ý |
| TH | Þ |
| th | þ |
| ss | ß |
| "y | ÿ |
| sz | ß |
| nn | ñ |
| nh | ñ |
| NY | Ñ |
| NN | Ñ |
| NH | Ñ |
| Ny | Ñ |
| Nn | Ñ |
| Nh | Ñ |
| -L | £ |
| << | « |
| >> | » |
| ?? | ¿ |
| ^? | ¿ |
| !! | ¡ |
| ^! | ¡ |
| ^1 | ¹ |
| ^2 | ² |
| ^3 | ³ |
| +- | ± |
| c= | ¢ |
| c/ | ¢ |
| /c | ¢ |
| -c | ¢ |
| -C | ¢ |
| |c | ¢ |
| |C | ¢ |
| L= | £ |
| -L | £ |
| -l | £ |
| ^* | × |
| ^x | × |
| xx | × |
| ^. | · |
| .. | · |
| ^/ | ÷ |
| ^: | ÷ |
| -: | ÷ |
| :- | ÷ |
| Y= | \ |
| =Y | \ |
| -Y | \ |
| -l | \ |
| (c | © |
| "c | © |
| OC | © |
| (C | © |
| C) | © |
| -a | ª |
| -A | ª |
| -o | º |
| -O | º |
| (r | ® |
| "r | ® |
| OR | ® |
| (R | ® |
| R) | ® |
| mu | µ |
| PP | ¶ |
| 14 | ¼ |
| 12 | ½ |
| 34 | ¾ |
| e= | ¤ |
| -e | ¤ |
| -E | ¤ |
| =E | ¤ |
| vS | ¦ |
| ^S | ¦ |
| vs | ¨ |
| ^s | ¨ |
| vZ | ´ |
| ^Z | ´ |
| vz | ¸ |
| ^z | ¸ |
| OE | ¼ |
| Oe | ¼ |
| oe | ½ |
| "Y | ¾ |
| ij | ÿ |
| IJ | ¾ |
| |s | $ |
| |S | $ |
| SS | § |
| =C | ¤ |
| C= | ¤ |
| ox | ¤ |
| xo | ¤ |
新しいレイアウトを試す前に、Control Centeの "Apply" を必ず押すこと。これを行うか又は、このプログラムから出るかするまで、変更は有効にならない。
---
テスト対象のシステムはSuSE 8.2とKDE 3.1.2をベースとする。
テスト科目毎に、テストは三つの部分から成る:
−経歴実績と人工統計学的データに関する試験前質問票。
−使用試験:典型的事務所業務の実行。
−好み、問題、意見の変化、及び習得の容易さと能力の評価に関する試験後質問票。
全体で80名の参加者を、うち60名はLinux上で、20名はWindows XP上でテストした。使い勝手テストに普通で十分な数は10名乃至20名である。我々が異常に高い数字の参加者を選んだのは、ユーザの型の間で区別するためである。
−ユーザは、Windowsを仕事で日常使用する一般的な能力を有する。
−ユーザには管理権又はルート優先権がないので、アプリケーションをインストールしたり、中心設定を変更することは出来ない。
−コンピュータは、大部分コンフィギュア済みである。
−コンピュータの使用は、殆ど、事実上均質な環境内の特殊用途に限られている。
−ユーザが技術的問題に直面する場合、管理者又は手元の支援職員の構成員がいる。
−何かシステム変更が行われる時、ユーザは、それに応じる訓練を受ける。
課題は:
1.スクリーンサーバをコンフィギュアして、20分後に出るようにする。
2.自分の選んだワード処理プログラムを用いて、次の文を書く。Harry Potter In the latest Harry Potter novel, an important person will lose his or her life. 一行目を中央表題としてフォーマットする。ペイジの右上余白に頁数を入れる。文書を印刷する。文書を、 "Potter.doc"としてWORDフォーマットで自分のフォルダにセーブする。プログラムを閉じる。
3.手元にある音楽CDの3番目の曲目を再生して暫く聴取する。プログラムの音量を快適なレベルに調節する。アプリケーションを閉じてCDをドライブから取り出す。
4.自分の個人フォルダの中に、任意の名称で新しいフォルダを作る。ネットワークに接続されたコンピュータ(名称「henriette」)上で、フォルダ「Unterlagen」にある文書 「Besprechung.doc」を探す。この文書を前に作ったローカルフォルダにコピイする。
5.06/25/2003 に作成した個人フォルダから、すべてのファイルをリストし、文字“Vorschlag"でスタートする。
6.(自分の作成したフォルダの中に)前にコピイした文書を(手元にある)CD上にセーブ(焼付け)する。その後、そのCDをドライブから取り出す。
7.e-メール・アプリケーションを開く。アポイントメントの日付を述べる新しいメールを受領している。organizerを見て、その日付が空いているかどうかを調べる。その日付が未だ利用できるなら、アポイントメントを取り付ける。
8.Michael Meierにe-メールを書く、連絡先はアドレスブックにある。「題名」として「Anfahrt」を、本文領域に「Anbei die Anfahrtsskizze」を入力する。「Anfahrtsskizze.gif」と言う名の文書を添付ファイルとして同封する。これはpictureフォルダの中の個人文書の中にある。メールを送る。
9. .pdf ファイルを表示することの出来るプログラムを探す。そのプログラムを単一クリックでスタートすることが出来るよう、そのプログラムのアイコン/シンボルをボトムバーに置く。
10.ウエブ・ブラウザを開いてブックマーク・フォルダ「Pictures」(「Bilder」)にリストされたウエブペイジをロードする。ウエブペイジに示される絵を自分のコンピュータのデスクトップ背景として設定する。
一見して、課題の選択は、音楽CDの演奏又は背景画像など、オフィス用途関連の常用ではないものを含むと思われる。それでもこれらの課題は、テスト科目を異なるユーザ型に類別し、一定の行動パターンに基づく用法パターンを発見するのに役立った。課題の選択は目的に関して「中立」である。これは、テスト設計段階、両システムについて複雑さが査定される前に、問題が決定されたことを意味する。
加えて、融通性があり高度に快適なシステムであり、個々の会社及びその社員のニーズに極めて適応し易いとの利点がある。Linuxはデスクトップに限らす多くの点で利点を提供する。この適応には、社員の経験、技量、期待及び可能性を考慮に入れなければならない。新しいデスクトップ・システムが広く受け入れられていること、習熟期間が短いこと、訓練の必要が少ないことのため、この比較的小さい投資の代償は大きい。社員の経験を考慮に入れても、移行の過程では肯定的な結果が与えられるであろう。
しかし、これらの概ね肯定的な結果を離れて、次の事実は承知しなければならない。テストシステムは「独創的なもの」でなく使い勝手の指針を頭において予め構成されたものである。これは、ユーザーが何か欠陥のあるシステムを使うとき遭遇する問題の多くに取り組んだ。我々の(及び将来の)使い勝手テストの詳細結果に基づいて、この構成は更に最適化されるであろう。
要約すると:Linuxに向けての移行は、何よりも社員のデスクトップに関係するなら、技術的又は経済的過程であるだけでなく、人的資源の問題である。これを考慮に入れるならば、Linuxへの移行の努力は、他のどのようなOSへの移行とも同等であろう。
---
手短に言うと、これは、デスクトップ上のLinuxに関する我々の立場の簡単な試験だ。Linuxは殆どの言語をサポートするので、この研究は、殆どの場合、コンピュータを扱うことが出来る人を抱えており、新しいソフトウエアの特許使用を考えている会社又は組織に取って役立つであろう。これはまた、移行の準備は出来ていないが、仕事場でLinuxが進歩する脈動の上に指を置いておきたい人々にも役立つであろう。
自分のCDライターがあるアドレスがバス上にあるのでない限り、
cdrecord -scanbus
と入力する。このコマンドがデバイスをスキャンして、アドレスをcdredordが望むフォーマットでプリントアウトする。私はSCSI CDライターを使っていることに注意。IDEデバイスではどうなるか知らない。
私の場合、出力中で問題になるのは
0,4,0 4) 'HP ' 'CD-Writer+ 9600 ' '1.0a' Removable CD-ROM
これはcdrecordがデバイスを呼び出すとき必要な情報の全部らしく、規定値になると思われる。そうでなければ、手動でCDライターを掴み、 man cdrecord とタイプすると読取を始める。
念のため付け加えると、dev= で始まりデバイスと書込むISOイメージ名が続く行が、それをしてくれる筈だ。 -v オプションをつけると、プログラムが走っているとき、少し多くの情報を示す。
例えば、私のシステムでは、SuSE 9.0 ISOイメージを書き込むのに
cdrecord -v dev=0,4,0 Suse-9.0*iso
と入力する。* は勿論、長いファイル名をタイプしないで済むようにするシェル・ワイルドカードだ。
比較だけのため、このコマンドからの出力を示す。
Cdrecord 2.0 (i686-suse-linux) Copyright (C) 1995-2002 Jörg Schilling
TOC Type: 1 = CD-ROM
cdrecord: Warning: not running as root user, fs= option ignored.
scsidev: '0,4,0'
scsibus: 0 target: 4 lun: 0
Linux sg driver version: 3.1.24
Using libscg version 'schily-0.7'
cdrecord: Warning: using inofficial libscg transport code version
(okir@suse.de-scsi-linux-sg.c-1.75-resmgr-patch '@(#)scsi-linux-sg.c
1.75 02/10/21 Copyright 1997 J. Schilling').
atapi: 0
Device type : Removable CD-ROM
Version : 4
Response Format: 2
Capabilities : SYNC
Vendor_info : 'HP '
Identifikation : 'CD-Writer+ 9600 '
Revision : '1.0a'
Device seems to be: Generic mmc CD-RW.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).
Driver flags : MMC-2 SWABAUDIO
Supported modes: TAO PACKET SAO SAO/R96R RAW/R96R
Drive buf size : 4183552 = 4085 KB
FIFO size : 4194304 = 4096 KB
Track 01: data 648 MB
Total size: 745 MB (73:50.37) = 332278 sectors
Lout start: 745 MB (73:52/28) = 332278 sectors
Current Secsize: 2048
ATIP info from disk:
Indicated writing power: 7
Is not unrestricted
Is not erasable
ATIP start of lead in: -11597 (97:27/28)
ATIP start of lead out: 336601 (74:50/01)
Disk type: Short strategy type (Phthalocyanine or similar)
Manuf. index: 20
Manufacturer: Princo Corporation
Blocks total: 336601 Blocks current: 336601 Blocks remaining: 4323
RBlocks total: 346489 RBlocks current: 346489 RBlocks remaining: 14211
Starting to write CD/DVD at speed 12 in real TAO mode for single session.
Last chance to quit, starting real write 0 seconds. Operation starts.
Waiting for reader process to fill input buffer ... input buffer ready.
Performing OPC...
Starting new track at sector: 0
Track 01: 648 of 648 MB written (fifo 100%) [buf 99%] 12.1x.
Track 01: Total bytes read/written: 680501248/680501248 (332276sectors).
Writing time: 400.168s
Average write speed 11.9x.
Min drive buffer fill was 99%
Fixating...
Fixating time: 22.958s
cdrecord: fifo had 10719 puts and 10719 gets.
cdrecord: fifo was 0 times empty and 10592 times full, min fill was 93%.
有用な情報が幾つかと、一つだけ極めて重要な情報がある。cdrecordは最後の行で、FIFOが空にになることがあったか否かと、今まで何処まで減ったかを告げる。これはデバイスに対するバッファだ。データをリアルタイムでCDに送る。FIFOが空になることがあればCDは壊れる。最低充填率は、どれだけ良く持ち続けているかをチェックする良い方法だ。この数字が余り低くなると、CDに書き込むとき不要のプロセスを停止しなければならない。
このツールがすることを理解するため、新しいディレクトリを作って、幾つかの絵をコピイした。これは如何ようにも出来る。全部をKonquerorの中で行うには Edit メニューの中のNew Directory項目を用い、続いて所望のファイルをそのディレクトリにドラッグすることが出来る。これをするはKonqueror ウインドウ二つを開くのが通常最も易しい。コマンド行ユーザであるなら、mkdirとcp を同じことに使うことが出来る。
所望の絵を全部ディレクトリに入れたら、Tools メニューでCreate Image Galleryをクリックする。画像集のスタイルを設定するオプションのボックスが出る。オプションには1行写真数、フォント、色及び含むべき情報が含まれる。ペイジ表題を決めることができるし、Directories をクリックして出力ファイル名(規定値はimages.html)を規定し、サブディレクトリに救済するか否か、ファイルをコピイするか、コメントファイルを使うかなどを規定することが出来る。
私はコメントファイルの考えが好きだが、書き込む文書はない。システム上にもウエブ検索でも何も見出されなかった。ここでヘルプがあったらと思う。誰かこの特性を使う方法をご存知だろうか?
[注記: KDE.org サイトで、これをおこなう方法を見出した。"Comments File"フィールドで使用しようとする名のあるテキストファイルを作る。各thumbnail が、ファイル名伸したにコメントを有する:
FILE1:
comment1
FILE2:
comment2
FILE3:
comment3
ファイル名の順序は重要でないが、スペルを間違えないこと。コメントの長さは任意で、ペイジがそれに合わせて下に伸びるだけだ。ファイルを変更する毎に、 "Directories"アイコンの上をクリックするとき現れる "Use Comment File" ボックスをチェックするのを忘れないで、"Create Image Gallery" コマンドをもう一度走らせなければならない−Willy Smith編集者]。
所望のオプションを撰んだら、OKをクリックするだけで、画像集が出来上がって表示される。極めて楽だ。結果が満足でなければ、オプションを変更してもう一度OKをクリックする。
私はKsnapshotをKDEのUtilities->Desktop メニューで見付け。これはAlt-F2 を押してラン・ボックスを表示させ、ボックスにksnapshotと入力してスタートさせることも出来る。これを使うとデスクトップ・アイコンが増えることになる。
Ksnapshotをスタートすると、デスクトップ全体のイメージを表示する前にこれを捕捉する。したいのがこれであれば、次にするのはプリント又はセーブだ。多くの場合にしたいことは、デスクトップ・ウインドウ上のスナップショットを捕捉することだ。これにはSnapshotディレイ・オプションを数秒設定して "Only grab the window containing the pointer"(ポインタを含むウインドウだけを捕捉)オプションを撰ぶと良い。続いてNew Snapshot ボタンをクリックして、マウスポインタを自分が捕捉したいウインドウにドラッグし、マウスポインタがブリンクするまで待つ。
スナップショットをセーブするときは、フォーマット選択を求められる。カプセル入りPostScript (EPS)、JPEG、PNGが、システム間で最も移植し易いが、ウインドウ・フォーマット二つ(iconとBMP)、Xフォーマット二つ(X BitMap 画像と X PixMap 画像)も少数ある。
スナップショットをプリント又はセーブするとき、KDEアプリケーションが用いると期待することの出来る標準はダイアログボックスである。これら及び別の標準ダイアログ(ファイルを開くのは別の例)も慣れると、KDEアプリケーションは極めて学習し易い。
この記事の最後は、質問して(Willyから)答を貰った写真集の作成だ。今回はもっと一般的な質問がある。KDEを使ってこれらの型の課題をおこなう方法の要約が見つかる場所があるだろうか?これらの情報があると、人々がLinuxに移行するのが楽になると思う。
カードの組を表示するには、三つの方法がある。フラッシュカード、ランダム配列クイズ、整列クイズだ。フラッシュカードでは、カードの片側が表示され、タブをクリックして反対側を見る。「次へ」ボタンで次に移り、ウインドウの下にあるバーが閲覧済みの比率を示す。
クイズ・モードでは、カードの片側が示されるとき、枠に答(カードの裏側)をタイプする。チェックボタンを押すと、正解か否かを示して点数を更新する。答が分からないときは、正答ボタンを押すことが出来る。カード全部を表示すると点数が表示されて、もう一度始めからやり直すことが出来る。
このプログラムは洗練されていないが、助けにはなる。私の子供はこれを楽に使いこなしてテストを作っている。使い易いので、自習用に沢山の可能性があると思う。
大変良いことの一つはカードを印刷する能力だ。ファイルの拡張子はkvtmlだ。意味は知らないがHTMLに似ている。例えば、3枚のカードを作った後、私のファイルcolor.kvtmlで見出したものを示す。
<?xml version="1.0"?>
<!DOCTYPE kvtml SYSTEM "kvoctrain.dtd">
<kvtml>
<e>
<o>black</o>
<t>white</t>
</e>
<e>
<o>red</o>
<t>green</t>
</e>
<e>
<o>yellow</o>
<t>blue</t>
</e>
</kvtml>
ここに示すものに基づくと、この情報を読取ってカード上にプリントするのは、それ程難しくないと思われる。それは今の私の能力を超えるが、出来るだろうと思う。
多くの人がDCHP反対派だ。これを、ISPがIPを提供する方法で、そのIPは変化する、としか理解しないからだ。これで、勿論、サーバの広告が難しくなる。他方、DHCPにより、社内又は組織内で実行している構成作業が少なくなる。
これは、ISP装備DHCPサーバの他に、廉価なルータ・ボックスにも存在する。Netgeark, Linksysその他のベンダーは、これらのシステムを多重LANポート、802.11b無線インターフェイス又は双方に提供する。Netgear RP114は、有線LAN限定の例で、Linksys WAP11は802.11b 型の例だ。その他沢山の選択肢がある。ルーターボックスがISPの認識するシステムとなるので、実際のコンピュータはこのボックスの影に隠れる。
隠れるとは、実際その通りで、公開インターネットから見えるのはルーターなのだ。LANは秘密アドレスを持っており、内部システムからインターネットへの接続を扱うにはネットワーク・アドレス・トランスレーション(NAT)を用いる。これは実際のファイアウォールではないけれども、NATは基本的レベルの保護を提供する。
このクラスのルーターの殆どで出来ることは、
これが初心者に対するDHCPの基本だ。DHCPを使うか安定IPアドレスを使うかの決定迷っている人には、この情報で十分であろう。他方、Linuxシステム上でDHCPサーバーを走らせることが出来る。その場合は、もっと選択肢がある。
DHCPサーバーとしてのLinux
ISC からのdhcpdがLinuxシステムと一緒に出荷される最も普通のDHCPサーバーである。スタートの時、これは、通常 /etc/dhcpd.confにあるコンフィギュレーション・ファイルから命令を貰う。そのコンフィギュレーション・ファイルのサンプルを示す。
# ISCdhcpdのためのコンフィギュレーション・ファイル・サンプル
# 支援ネットワーク全体に共通のオプション定義
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
# 動的 DNS 更新を使用しないのであれば
#
# dhcpd-3が最低このステートメントを必要とするのでこのこのステートメントは必要
# dhcpd-2は、これを理解しないので削除する。
#
# 動的 DNS 更新を使用するのであれば、先ず下記を読む
# read /usr/share/doc/packages/dhcp-server/DDNS-howto.txt
ddns-update-style none; ddns-updates off;
# このDHCPサーバーが、ローカル・ネットワーク用公式DHCPサーバーで
# あるときは、権威ある命令をアンコメントしなければならない。
#authoritative;
# これを用いてdhcpログメッセージを各種ログファイルに送る
# (宛名書換を完成するには syslog.confにも細工しなければならない)
log-facility local7;
# 以下は極めて基本的なサブネット宣言である
subnet 10.254.239.0 netmask 255.255.255.224 {
range 10.254.239.10 10.254.239.20;
option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}
# 内部サブネット用には少し異なるコンフィギュレーション
subnet 10.5.5.0 netmask 255.255.255.224 {
range 10.5.5.26 10.5.5.30;
option domain-name-servers ns1.internal.example.org;
option domain-name "internal.example.org";
option routers 10.5.5.1;
option broadcast-address 10.5.5.31;
default-lease-time 600;
max-lease-time 7200;
}
# 特殊コンフィギュレーション・オプションを要するホストは、ホストステートメントに
# ホストステートメントに記載することが出来る。
# アドレスを規定しないときは、(可能なら)動的割り当てられるが
# ホスト固有の情報は、ホスト宣言から来る。
host passacaglia {
hardware ethernet 0:0:c0:5d:bd:95;
filename "vmunix.passacaglia";
server-name "toccata.fugue.com";
}
# ホストのため固定IPアドレスを規定することも出来る。これらのアドレス
# もまた動的割り当てに利用出来るものとしてリストしてはならない。
# 固定IPアドレスを規定したホストはBOOTP又はDHCPを用いて
# ブートすることが出来る。固定IPアドレスのないホストは
# DHCPでブートすることが出来るだけである。
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address fantasia.fugue.com;
}
このファイル、dhcpd.conf(5) に付属するマニュアルは、極めて丁寧なので、その全部をここに再掲することは出来ない。dhcpd.conf とタイプするだけで表示される。25頁以上はあるが、オフライン学習のため印刷するのであれば、以下のコマンドで十分である。
cd /usr/share/man/man5 zcat dhcpd.conf.5.gz | groff -man | lpr
ファイルは、二つの型のステートメントに分かれる。パラメータ・ステートメントは、dhcpdに何かをさせるのに、何をどうするかを述べる。デクラレーション・ステートメントは、ネットワークを記述する。したがって、デクラレーションが依存すべき事柄をパラメータで確定する。上の例においてはdefault-lease-time がパラメータの例である。host fantasia { で始まるブロックがデクラレーションである。何かのブロックの外側に現れるオプション・ステートメントは、範囲がグローバルなグローバル・ステートメントである。デクラレーション内にあるものは適用範囲がローカルある。
この入門がDHCPで仕事をする助けになれば良いと思う。DHCPクライアントになるのは容易だ。サーバー側に全く面倒はない。DHCPにさせたいことが決まったら、その情報を/etc/dhcpd.confで必要なものに翻訳するのは簡単な手順だ。