Linux Gazette 2002年4月号 #77
今月のLinux Gazette の内容
n今月のニュース
  ・法制化
  ・一般ニュース
  ・ディストリビューション関連ニュース
  ・ソフトウエア及び製品関連ニュース
nマイクロ・ディストリビューションで仕事を
n自家用ままごとOSを書く(パートI)
n /proc/sys/net/ipv4 を用いるネットワークセキュリティ
nLinux行印刷デーモン
nLinuxベースPPP呼び戻しサーバー
nLCDディスプレーへのリアルタイムシステム情報の表示
 
 
 
今月のニュース
▼▼▼法制化▼▼▼
SSSCA /CBDTPA
上院議員フリッツ・ホリングスが熱心に宣伝した米国 SSSCAは、上院議員が今導入した大衆ブロードバンド及びデジタルTV促進法 CBDTPAに変貌した。残念ながら、私には気に入らない。法律の方針は変わっていない。通過すると、政府承認のセキュリティ基準と「デジタル著作権管理」が命じられ、それらを電子装置に組み込まなければならなくなる。これらの要件に合わない装置の輸入や州間販売は非合法となる。これらの要件は、著作権作品の再生、表示、復元が出来るソフトウエア及びハードウエアに適用される。その定義には、唖然とするほど広範囲の装置やプログラムが含まれる。これらの義務を満足する対策は、バックアップやディスク最適化など法で完全に認められた手順さえ不可能か、最低でも非合法なものとする

(「州間販売とは、連邦政府の干渉を許すもので、州内取引には介入出来ない。しかし、米国では殆どの電子製品はアジアから輸入されていおり、国産代替品を持つ州は殆どないので、意味がない)

法案に対する企業側の全面支援はなく、上院商業科学運輸委員会の公聴会ではホリングスとインテル副社長ヴァダッスとの間で、激しい意見のやりとりがあった。LWNがその内幕を知らせているが、法案に賛成なのはディズニイなどの「コンテント・プロバイダ」である。明らかに元気つけられるヴァダッスの姿勢に続いて Electronic Frontier Foundationは彼に支援のメールを送ることを求めた。しかし、AOLタイムワーナーとインテルとの共同声明では、少し様子が違う。この声明は「企業間の交渉で消費者の権利が決まる世界を想像し、政府はハリウッドの提案する「合意」から外れる装置を非合法にする」。分裂は企業間だけでなく、企業内でもあるようだ。Slashdot は、事態を、娯楽産業を左右するため規制逃れをしようとする企業の間の力の闘争だと分析する。これは、音楽の海賊行為を援助使唆しているとしてディズニイがアップルを非難しているのを見ると、当たっていると思われる。

当然ながら、この話題には技術マスコミに色々の記事がある。スラショットは公聴会、the hearing、議会への法令提案introduction 、その後follow upの問題を扱った。ドク・シアルスの優れた意見 excellent commentary がLinux Jouranalウエブサイトで見られる。Hearing on Protecting Content in a Digital Age-Promoting Broadband and the Digital Television Transition と題するホリングスの宣誓証言に対する反論もある。Linux Weekly News が発行したcommentaryも一読の価値がある。

これらのリンクの幾つかを読むと、怒りがこみ上げて来る。何が出来るか?との疑問が生まれる。重要なことは問題の進行具合を見守ること。いつものように、EFF にこの問題を囲む各種問題を集めたpageがある。CAFE (Campaign for Audiovisual Free Expression) も良いウエブペイジだ。これは、この法案を阻止するための方法を教えている。次が望ましい:

・デジタル媒体の将来展望を聞く手紙を上院議員に送る。EFFにサンプルがある。
・この webform を上院委員会(2002年4月8日予定)への意見送付に使用する。
・地方選出議員に連絡して、この問題の重要性を話す。EFFに「下院議員その他政策立案者への連絡」に関する指針guidelines がある。
・事情を知らない人達に、この問題を知らせる

ヨーロッパでこの仕事は典型的にアメリカ的であり、ここでは起こらないと鼻であしらう人は、欧州委員会が同様の対策similar measures [pdf]を講じているとのLWN's warning に注意しなければならない。

特許

The Register は、先月ソフトウエア特許に関する良いニュースを幾つか入手した。緒

・シマンテックは、繰り返し技術でウィルスを発見するソフトウエアの特許を取得した。この技術はすでに使われたことがある。 awarded a patent
・Maz テクノロジーは、「電子文書管理システム用透明暗号化解読方法」に関する特許を取得したgained a patent 。これは大部分の暗号化産業に効果的なロックを掛けるもので、先行技術が沢山ある。各種特許に対する特許料への挑戦に燃えている。
・ハイパイリンクに関する特許を強化する英国電話会社の奇妙な試みを、連邦裁判所がその特許はハイパーリンクを含んでいないとして結局却下したdealt a blow 。だが本件は未だ終結していない。
・最後に、Amazon 1-Click と BN.com とのパテント紛争は、結局法定外で決着した。 been settled 。特許の馬鹿らしさに対する挑戦とは関係がない。

係争は、経済成長に不可欠として特許擁護者が起こすことが多い。歴史的に、これは当たっていないことが証明されている。George MonbiotThe Guardianに優れた論文articleを書いており、如何に多くの会社が自分達のいないところで作られた知的財産権を要求しているかの物語を書いている。詳しく言うと、特許増強国による政策変更の政治的圧力が加わる前は、特許料無料の領域が例外的な成長を示した。

GPL

GPLは、先月中ほとんどを法廷で過ごした almost made it to the courtroom 。MySQL AB と NuSphere Corp. との間の係争に関する。2000年にNuSphere がMySQL AB からMySQL データベースの販売権を認められた。二社がその関係を認めたが、MySQLはNuSpereを(mysql.ウエブサイトの設定につき)契約違反とGPL侵害に関する商標侵害で訴えた。無料ソフトウエア基金(FSF)が、MySQL の代理人としてこの事件に巻き込まれた。

訴えられたGPL侵害についてFSFの争訟は、GPL化されたMySQL コードに対しGenimi製品を静的にリンクし、次いでソースコードを配布し損ねたことで、NuSpereは契約を守らなかったと言うにある。NuSpereは、自分の製品が契約を侵していないと、強く反論vigorously opposed し、GPL(初期にはソースコードなしで配布した)の下でGenimiを配布したと言う。

FSFはGPLのテストに役立つと考えた expected が、判事の予備差止命令は、本件を著作権侵害問題に限った limited the terms 。判事はNuSphere がライセンスに合致していると思われるとの立場を取ったが、MySQL ABに対し損害が繰り返されないとは思えない。

 
 
 
▼▼▼一般ニュース▼▼▼
Mozillaに関する良いニュース
最近の0.9.9 releaseリリースによると、Mozilla1.0 releaseリリースは、近いと思われる。リリース準備のため開発ツリーを閉じたbeen closed

加えて、AOLがLinuxとMozillaに接近して、マイクロソフト及びインターネットエクスプローラから独立しようとしていると、Newsforgeが報じた reported 。Linuxに向かうtowards Linux 動きは、Red Hatを扱うサポートをLinuxの裏口展開に従事させると思われる。しかし、MozillaはAOLの一般的CDで展開されるbe deployed と決めている。この発展は、無料ソフトとLinuxの社会は歓迎するだろうが、ウエブ標準の広範な強化につながると心配しているare worried 。幸運な筈だ。

HURDとRichard Stallmann

Richard Stallmanは、最近の記者会見 recent interviewで、 GNU Hurdが今年中のリリースのため生産体制に入ったと発表した。この話はスラショットが取り上げpicked up 、Linux週報に意見comment を述べている。

Richard Stallmanの問題では、O'ReillyがSam Williamsの書いた Free as in Freedomと言う題名のその伝記を出版したのに興味があるだろう。オンラインで内容book contents と著者会見 interviewをみることが出来る。書物はGNU Free Documentation License (GFDL)の下で出版された。

OpenCores PCIブリッジソフトコア

OpenCores は、GPL(General Public License )の下でIPコアを設計、再使用、統合し自由に利用出来るオープンソースハードウエアを奨励するのを目的とする組織である。OpenCores は、最近オープンソース、無料、完成 33/66MHz 32-bit PCIブリッジソフトコア・ソリューションを発表した。PCIブリッジソフトコアは、PCIとWISHBONE (チップ上システム)バスとの間にブリッジを作る完全合成可能RTL (Verilog) コードである。完全パケージには、包括的仕様と設計文書、包括的検証スーツ、テストアプリケーションが含まれる。

アプリケーションは、Insight ElectronicsからのPCI開発ボード上でXilinx Spartan IIデバイスを用いて実現されたVGAである。PCIブリッジコアは、簡単なVGAコントローラコアに接続され、チップ上システムを形作り、Linuxフレームバッファ装置ドライバと一緒に来る。PCIブリッジソフトコアはOpenCores PCI Project Websiteからダウンロードすることが出来る。

 
 
 
▼▼▼ディストリビューション関連ニュース▼▼▼
Debian
Debian Weekly News は、新しい安定な改訂版(2.2r6)を準備中である in preparationと報じた reported 。パケージニは、今のところ24本以上のセキュリティアプロードと7本の重要アプデートを含む。この改訂版は4月初めに出る筈。

Aid ServerとしてのDebianの物語も報じられた reported 。開発途上国のためGNU/Linux プロジェクトを主催する組織organisationからのMatthew Grantは、Debian、Aid組織とNGOとの連絡強化を目的とするAid Server を閉じると報じたreported


Securing Debian Manual 2.0 がリリースされた。援助や翻訳を必要とする人のため少数のFIXMEは残された。

Mandrake

Mandrake は、新しいMandrake Linux 8.2の4号ベータのリリースを発表した announced

一寸悪いニュース。Mandrakeは今少々の資金難に陥っており、月額5ドルの加入者クラブを立ち上げたlaunch 。この動きには、in The Registerin Linux Weekly Newsに意見がある。ZDnetもまた事実を伝えて、会員制の条項が変わるらしいと思ったクラブ会員の不満を報じているreporting 。この変更は、Star Officeに関するSunの価格変更に依る。Mandrakeは、これらの批判に対し、これはStarOffice 6.0 for Linuxのクラブ会員の利用可能性に関する公式発表だと言っている。り

Sorderer

Sorcererキャンプで事件があるようだ。ディストリビューションが実質上創設者Kyle Salleeから盗まれた賞するウエブペイジがsorcerer.wox.org に投じられたposted。このペイジはもう見られないが、このmirrorでは読める。この流言には元の話のすべてを信じない者がhttp://www.sorcerylinux.org/で答えているreplied to 。面白いことに、sorcerer.wox.orgは実際Kyleが運営しているようだappearMaking the distribution にこれに関して読む価値のある物語がある。

 Suse

SuSE Linux は、そのLinuxディストリビューション第8世代を4月中旬からソフトウエア小売店で立ち上げると発表した。このリリースの特徴は、ほとんど自動化された搭載ルーチンと、KDE3グラフィカルデスクトップ環境にある。ハードウエア検出が改良されていて、搭載が便利になっている。SuSeシステムアシスタントYaST2 (Yet another Setup-Tool)が、既存のWindows 95/98/MEパーティションを検出し、ハードディスク空間割当とソフトウエア選択に関する有用な指導をおこなう。ユーザー名とパスワードを入力しモニター解像度を確認するだけで搭載が終わる。プリンタ、サウンドカード、TVカードでもマウスクリックで搭載される。

SuSE Linux 8.0は、2002年4月中旬からソフトウエア店で入手することが出来る。SuSE Linux 8.0 パーソナル (CD3枚、マニュアル2冊、搭載サポート60日)の推奨販売価格はEUR 49.90、SuSE Linux 8.0 プロフェッショナル(CD7枚、DVD1枚、マニュアル3冊、搭載サポート90日) はEUR 79.90。


SuSE Linux はまた、企業向けOS、IBM eServer zSeries 用64ビットSuSE Linux Enterprise Server 7 も5月初めに入手出来ると発表した。

Yellow Dog
Terra Soft は、Yellow Dog Linux 2.2のリリースを発表した announced。Red Hat 7.2に基づくこのディストリビューションの特徴は、XFree86 4.2.0, KDE 2.2.2 及び、Nautilus とEvolutionの付いたGnome 1.4を含むこと。
NewsFactorの記事 articleによると、Terra Soft執行役員Kai Staatsによると、Linux用にはモトロ−ラのプロセッサの方がインテルの競合品より良いとのこと。
 
 
 
▼▼▼ソフトウエア及び製品関連ニュース▼▼▼
Vim 6.1
Bram Moolenaar はVim 6.1 のリリースを発表 announced the release 。これは主としてバグ修正のリリースだ。
Micro Sharp Technology
弱小サーバーソリューションの技術プロバイダMicro Sharp Technology, Inc.が、携帯電話にも入って来たウィルス攻撃を避ける方法を発表した。その対策は、Netule EM-I E-メールサーバーをNetule FW-I 企業用ファイアウォールと関連させて構成することだ。EM-1とFW-1はLinuxに基づく「極めて強力で安定で信頼性のあるUNIX類似OSだ」
Dossier

DOSSIERシリーズが14巻になった。その大部分はLinuxシステムに関する。現在の話題には、C、E-メール、ファイルシステム、kernel、PosgreSQL、Python、セキュリティ、テキストなどが含まれる。注文はBSDMallで。DOSSIERに関する発行趣旨はDOSSIER and the Meta Project (Part 1)

 

Copyright © 2002, Michael Conry and the Editors of Linux Gazette.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 77 of Linux Gazette, April 2002
 
 
 
マイクロ−ディストリビューションで仕事
つまり
Linuxをポケットに

By Larry "Dirt Road" Kollar

今日のCD6枚で来るディストリビューションについては、極めて機能的なLinuxがZipカートリッジに−フロッピイにさえ−合うことを覚えておくと良い。

手軽なLinuxをのユティリティを示すため、486上にフロッピイ2枚のシステムを設定し、この記事はそれを使って書いた。

はじめに

「すべて」はPC2台とモニター一つを入手したとき始まった。大きい方のコンピュータ、Aptiva、には、P133 CPU、2GB ハードディスク、CD-ROM がありRAMは全くなかった。二つ目のコンピュータは、170MBハードディスク、Windows 3.1、8MB のRAM (CDなし)ついたHP Vectra 486/33Nだった。両方共マウスがあったがキイボードはなかった。後で安いPS/2コンパチ・キイボードを買った。両コンピュータとも72-ピンSIMMを使っていたので、最初にしたのは、RAMをAptivaに交換して、役立つか試すことだった。

RAMが足りないとWindow 98は、無礼にも、詰まることが判った。

外に余分のRAMはなかったので、RAMをVectraに戻し、手持ちのRedHat 4.0ディスクを持ち出した。そいつはCDで、VectraにはCDがない。別の作戦を立てなければならない。

強力なフロッピイを探す

Linux Daily News には毎日目を留めている。LWNに情報がなくても、リンクが示されている。Distributions 頁を引いてフロッピイベースのリストを検索した。

最初に単一フロッピイ救済ディストリビューションtomsrtbtを考えた。ノート型Windowsを働かせており、偶にMac G3を使ったが、役立つこともあった。残念ながら、tomsrtbt は、1.7MB を1.44MBに詰め込むため魔術を使っている。しかも、Windows 2000.にグレードアップしたばかりだ。W2Kはこんな仕掛けを受け付けず、別のWindowsシステムへのアクセスは出来なかった。

リストに戻って、BasicLinux がCDベースディストリビューションでないのを見出した。単一ZIPファイルで来る。全部で2MBだが、アンパックしたファイルはフロッピイ2枚に合い、イメージを描く必要がない(DOSからのスタートにLOADLIN.EXE を使う)Slackware 3.5から出ているので、2.0.34 kernel とlibc5をサポートする。RAMディスクには4MBを割り当てるだけなので、Vectraに無料ソフトの味を知らせることが出来る。

断然優れている

ソフトウエア型、ディスクフォーマット、目的は違うが、フロッピイベースのディストリビューションのスタートアップ手順は似たようなものだ。

1.スタートアップ時(LILO)又はDOSロード後(LOADLIN)のいずれかで初期化
2.ローダーがkernelを解凍してスタート
3.kernelがユーザーランド用にRAMディスクを作成
4.ローダーがユーザーランドを解凍して、RAMディスクにロード
5.ルートに搭載されたRAMディスクを用いる通常のブート手順

ユーザーランド(つまり、ファイルシステムの内容)を含むディスクイメージは通常チャント1.44MBフロッピイに合い、約3MBまで拡張する。RAMディスクから走らせると、486/33でも素早い。

取引

最小のLinuxでもフロッピイに入れると色々足りないものがある。基本ユティリティとX11は提供するが、KDE、Gnome、Mozillaはない。Emacsは忘れるのに麻痺している。

'X'で終わるOSのどれにもある基本コマンドとユティリティさえも、縮小版に入っている。これらのほとんどはBusyBoxと言うプログラムに対するシンボリックリンクだ。 Lineoがこの賢いキットを開発してLinuxシステムに埋め込んだが、各種のレスキュー及びマイクロディストリビューションにも入れる方法を見出した。これは重要コマンド54個を110kを少し超える単一バイナリに詰め込んでいる。(ln -sを使って) cpと言う名のリンクを作ると、そのコマンドを入れたときBusyboxがcpコマンドのように働く。これをmvとして働かせると、ファイルを動かすか又は再命名する。 --help オプションにコマンドの簡単な説明があって、一々マニュアルを見ないで済む。BusyBoxがないと、フロッピイベースのディストリビューションはもっと妥協しなければならなかった。

BasicLinuxを使って作業をする

BasicLinux は、小さいがネットワークシステムに匹敵する。重要なものの外に(BusyBox経由)、イーサネットとダイアルアップ双方でネットワーク接続が出来る。ipfwadmを使ってファイアウォールも作る。fetchmaillinksなどのユティリティで、メールとウエブの接続が出来る。bashシェルを提供して慣れたLinuxユーザーを満足させる。inittabのデフォルトは、三つのコンソールログインを与えるので、私の目的には十分だ。

あるディストリビューションと違って、BasicLinux には二つのテキストエディタがある。小さいe3と普及版のpicoだ。ブートイメージの左余白と、Slackwareパケージアーカイブを使って、私は両者をjoeで置き換えた。joeはpicoより大きいが、pico、WordStar、 Emacsをエミュレートすることが出来る。結果は大きい圧縮イメージだが、フロッピイに入る。

イメージの編集

BasicLinux と一緒に来る readme.txt ファイルは短いが、コンソールに慣れた人には、システムのカスタマイズ又はブート出来るフロッピイイメージを作るに十分な情報を与える。

この記事のこの部分を書いているとき、MS-DOSを走らせている筈の486のC:ドライブ上にBasicLinuxファイルを持っている。

1.gunzip を使ってイメージの圧縮を解く。
2.イメージをループバックデバイス上にマウントする。
3.望みの変更をおこなう。
4.イメージをアンマウントする。
5.イメージをGzip する。

ループバックデバイスの説明は別のペイジseparate page に用意した。

ハード・ドライブに移植

ドライブの内容全部を消す積もりなら、これは難しくない。Vectraには、Windows 3.1とアプリケーションが幾つかある。保存したいものはない。

進む前に、少し調べてMS-DOSディレクトリをフロッピイにバックアップした(zipを使う)。160MBのハードディスクと8MBのRAMを使い、オーバーロードの心配なしに有用なシステムを作る余裕があるのが判った。

パーティションやり直しプログラムを探して、FIPS (第一非破壊会話的パーティション分割プログラム)を見付けた。指示にしたがって、FIPSをブートフロッピイに置き、これを使ってC:パーティションを縮めた。10MBにしたかったが、FIPSは(どんな理由でも)16MB以下にはしない。Windows 3.1を全部消し去り、破片を集めてC:に5MB以上を得た。何が起こったのかは知らない。

そこでLinuxを再度スタートし、 fdiskを使って32MB交換パーティションを作り、ドライブの残りをルートに使った。mkswap, mke2fs, 及びe2fsck を走らせて、使うためのパーティションを作った。最後に、BasicLinux instl2hd.zipアーカイブをアンパックし、インストラクションにしたがってRAMdisk イメージ(その他)をハードディスク上にロードした。そこからediting /etc/fstabが新しいルートと交換パーティションを指すのは簡単な問題だ。もう一度ブートし直すと、ハードディスクから走る。旨く行った。記事をLinuxパーティションに写して仕事を続けた。

ネットに捕まる

ハードディスク5MB以下を使い、3MBのRAMが自由になるコンソールベースのシステムに、視点を高くして、次を加えた。

・groff (GNU troff フォーマッター)
・vim (1級テキスト編集)
・rogue (モンスタを殺す、メンタルブロックを破る)
・X11 (ドラフト文書を表示)
・gcc (少なくとも一時的に、groff とrogueをコンパイル)

幸い、VectraにはSMB-Ultraネットワークカードが付いている。正しいモジュールが直ぐ見付かって、BasicLinux は先ず8390モジュールをロードせよと言っている。私のMac G3は既にNATファイアウォール(ipchains)を走らせていてダイアルアップと共有しているので、Vectraをネットワークに加えるのはLANを使って部屋に入れケーブルをつなぐ問題だ。 route マニュアルるを何度か読んで、 Skeeter (Vectra呼出をスタートしたとき) にLANと話させG3のゲートウエイを通して外界に行く儀式が必要と判った。

X11パケージをダウンロードして、ネットワークリンクがダイアルアップより遅いのに気付いた。ブロードバンドでなくて良かった。だが、結局全部をハードディスクに入れてX11をコンフィギュアした。ネットをこづいてヘルプを探し、SuperProbeユティリティがvecterのオンボードビデオの説明をし、私のモニタは厳密に640x480 であることが判った。GUIを走らせて、ウインドウマネージャ用に推奨された icewm に切り換えた。icewm の画面は小型でぎこちない。だが、35行rxvtウインドウは25行コンソール画面に勝るので、全体として満足した。

残り

ネットワークとGUIが働いたので、構築を終わる番だ。この時点で、システムの大きさはハードディスク21MB以下を占領していた(外に113MBが利用可能)。これに、コンパイラパケージを加えると、これを35MBまでになる。

パケージの追加はgroffgawkのコンパイルと、60MB以上になるコンパイルしたアプリケーション自体のため必要である。プログラムを搭載した後、構築してディレクトリを削除して、57MBを使用した。

前に、lpr経由でLANを通じプリンタを共有していたので、テストgroff ドキュメントを走らせ、G3のUSBプリンタにプリントするのは訳なかった。この時点で、計画したこと全部をSkeeter がおこなってくれた。モニターを大きくし(最低800x600)グラフィックウエブブラウザとして使うためChimera 1.x をコンパイルしたかったが、両方ともその必要はなかった。

隙間を見付ける

このような記事を書くことが出来るほか、Skeeterはリクリエーション用にMUDに接続することが出来る(三人でダイアルアップを共有しているとする−−二人はtelnetを使い、三人目はe-メールを読んでいるとすると、誰も速度が遅いのを気にしない)。

Skeeter自体はまた、リモートフロッピイドライブの一種としても有用だ。 iMac (MacOS Xで稼働中)にはフロッピイがないので、G3のドライブは評判が良くない。フロッピイに読取書込をするときは、Skeeterを呼び出す。Skeeterはプリントサーバーにもなる。

最後に、研究の成功を祈る。10ドルの投資と少々の資産で別の有用なコンピュータが得られる。

Copyright © 2002, Larry "Dirt Road" Kollar.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 77 of Linux Gazette, April 2002
 
 
 
自家用ままごとOSを書く(パートI)

By Krishnakumar R.

 

この記事は小型ブートセクターを構築するための指導書である。第1章でコンピュータの電源を入れたとき起こる事柄を説明する。この計画の概要も説明する。第2章では、準備すべき物を説明し、第3章で、プログラムを扱う。このスタートアッププログラムは実際にはLinuxをブートしないが、画面に何かを表示する。

 

1.背景

1.1 綺麗なドレス

マイクロプロセッサがコンピュータを制御する。スタートアップのとき、マイクロプロセッサはすべて別の8086と同じになる。最新のペンティアムが入っていても、8086の能力しかない。この時点から、ソフトウエアを使ってプロセッサを余り有名でない protected mode 保護モードに切り換えることが出来る。プロセッサが全力を発揮するのはその後だけだ。

1.2 我々の役割

最初は、BIOS.が制御を握っている。これはROMに記憶されたプログラムの集まりに過ぎない。BIOSは、POST (電源投入自己テスト)をおこなう。これはコンピュータの完全性(周辺装置が働いているか、キイボードは接続されているかなど)を点検する。この時ビープが鳴る。全部合格なら、BIOSがブートデバイスを選ぶ。デバイスから第一セクターを、アドレス位置 0x7C00 に写し取る。その後、制御がこの位置に渡される。ブートデバイスは、君の選択でフロッピイでも、CD-ROMでも、ハードディスクでも何でも構わない。フロッピイのブートセクターにコードを何か書いておくと、ここで実行される。我々の役目は明らかである:フロッピイのブートセクターに何かプログラムを書くこと。

1.3 計画

先ず、8086アセンブリで小さいプログラムを書く(恐れることはない、書き方は教える)。そしてそれをフロッピイのブートセクターにコピイする。コピイするには、Cプログラムをコードする。そのフロッピイでコンピュータをブートすれば良い。

2.準備すべきもの

as86

これはアセンブラである。書いたアセンブリコードは、このツールを使ってオブジェクトに転換する。

Id86 

これはリンカーである。as86で作ったオブジェクトコードは、このツールにより実際の機械語コードに転換される。機械語は8086が理解する形になっている。

gcc

これはCコンパイラである。我々のOSをフロッピイに渡すためCプログラムを書く必要がある。

空のフロッピイ

   OSを記憶するためフロッピイを用いる。これも我々のブートデバイスである。

古き良きLinux ボックス

   ご存じの筈

as86 及びld86 は、ほとんどの標準ディストリビューションに入っている。なければ、下記から入手http://www.cix.co.uk/~mayday/、単一パケージ、bin86、に両方入っている。http://www.linuxgazette.com/issue77/www.linux.org/docs/ldp/howto/Assembly-HOWTO/as86.html.

で良いドキュメンテーションが得られる。
3.イチ、ニイ、サンでスタート
3.1 ブートセクター
好きなエディタを使って、以下の数行をタイプする。


entry start


start:


      mov ax,#0xb800


      mov es,ax


      seg es


      mov [0],#0x41


      seg es


      mov [1],#0x1f


loop1: jmp loop1


これは8086の理解するアセンブリ語だ。最初のステートメントは制御がプログラムに入るエントリポイントを決める。制御が最初にラベルstartに飛ぶところから始める。2行目でラベル start (”:”を忘れないこと)の位置を述べる。このプログラムで最初に実行されるステートメントは、 start 直後のステートメントである。

0xb800 は、ビデオメモリのアドレスである # は、直接値を示す。



mov ax,#0xb800 


の実行後、レジスタaxは、値0xb800、つまりビデオメモリのアドレス、を含む。ここで、この値を es レジスタに移す。 es はエキストラ・セグメント・レジスタの意味である。8086は、セグメント・アーキテクチャを有する。これはコード・セグメント、データ・セグメント、エキストラ・セグメントなどのセグメントをゆうするので、セグメント・レジスタ cs、ds、esなどがある。実際には、ビデオメモリを我々のエキストラ・セグメントにしたので、エキストラセグメントに書いたことは全部ビデもメモリに入る。

文字を画面に表示するには、ビデオメモリに2バイト書かなければならない。最初は表示しようとするascii値である。第二は、文字の属性である。属性は、文字色、背景色、ブリンクなどである。seg es は、es セグメントを参照して次ぎに実行する命令を示す接頭辞である。だから、文字Aのascii値である0x41をビデオメモリの第一バイトに移す。続いて、文字の属性を次のバイトに移す必要がある。ここでは、青色背景上の白文字をあらわす0x1fを入れる。そこで、このプログラムを実行すると、青色背景上に白のAが出る。最後に、ループがある。文字を表示した後、実行を止める必要がある。さもないと永久にループを続ける。このファイルを boot.s としてセーブする。

ビデオメモリの考えは、良く分からないかも知れないので、詳しく説明する。画面が80桁25行だとしよう。すると、一つは文字、一つは属性で、各行に160バイトが必要になる。3桁目に文字を書く必要があるとすると、ビデオメモリで、1桁目の0と1のバイト、2桁目の2と3のバイトを飛ばして、ascii値を4番目のバイトに、属性を5番目のバイト位置に書かなければならない。

3.2 ブートセクターをフロッピイに書く

我々のコード(OSコード)をフロッピイディスクの第一セクターにコピイするCプログラムを書かなければならない。

それを示す:



#include <sys/types.h> /* unistd.h needs this */


#include <unistd.h>    /* contains read/write */


#include <fcntl.h>





int main()


{


        char boot_buf[512];


        int floppy_desc, file_desc;


 


        file_desc = open("./boot", O_RDONLY);


        read(file_desc, boot_buf, 510);


        close(file_desc);


        


        boot_buf[510] = 0x55;


        boot_buf[511] = 0xaa;





        floppy_desc = open("/dev/fd0", O_RDWR);


        lseek(floppy_desc, 0, SEEK_CUR);


        write(floppy_desc, boot_buf, 512);


        close(floppy_desc);


}


最初に、ファイル boot を読取専用モードで開き、開いたファイルのファイルデスクリプタを、変数 file_desc にコピイする。ファイルから510文字又はファイルエンドまでを読み取る。ここではコードが小さいので、後の場合になる。下ってファイルを閉じる。

コードの最後の4行は、フロッピイディスクデバイスを開く(これはほとんど/dev/fd0)。これは lseek を用いてファイルの始めに向かい、次いで512文字をバッファからフロッピイに書き込む。

これらファンクションの他のパラメータ及び使い方については、マニュアルの読取、書込、オープン及び lseek (マニュアル2を参照)に十分な情報がある。この間に、少し神秘的な二行がある。



boot_buf[510] = 0x55;


boot_buf[511] = 0xaa;


この情報はBIOS用だ。BIOSがデバイスをブートの出来るデバイスだと認識すると、そのデバイスは、510番目と511番目の位置に値 0x55 と0xaa を持っていなければならない。これで終わりだ。プログラムは、ファイル boot をboot_bufと言う名のバッファに読取る。510番目と511番目のバイトに必要な変更を加えて、boot_bufをフロッピイディスクに書き込む。コードを実行すると、フロッピイディスクの最初の512バイトにブートコードが含まれる。このファイルを write.c としてセーブする。
3.3 全部をやって見よう
このファイルのエクゼクタブルを作るには、Linuxのプロンプトから次をタイプする必要がある。


as86 boot.s -o boot.o





ld86 -d boot.o -o boot





cc write.c -o write


先ず、boot.s をアセンブルしてオブジェクトファイル boot.o を作る。次いで、このファイルをリンクして最終ファイル boot を取得する。ld86 の -d は、ヘッダーすべてを削除し純粋のバイナリを作るためである。as86 とld86 のマニュアルを読むと、あらゆる疑問が氷解する。次ぎに、Cプログラムをコンパイルして、write と言う名のエクゼクタブルを作る。

空白フロッピイをフロッピイドライブに入れて、次のようにタイプする。



./write


マシンをリセットする。BIOSセットアップを入力してフロッピイをブートデバイスにする。フロッピイをドライブに入れて、コンピュータが自分のブートフロッピイからブートするのを見守る。
すると「A」が(青色背景の白文字で)出る筈だ。これは、今作ったブートフロッピイからシステムがブートし、書き込んだブートセクターを実行したことを意味する。コンピュータをブートし直して、我々のブートフロッピイを取りだしLinuxにブートしなければならない。
ここからは、我々のブートセクター・プログラムに色々なコードを入れて、もっと複雑なことをさせたい(BIOS中断の使用、保護モード切り換えなど)。この記事のこれからのバート(パートII、パートIIIなど)では、別の改良に案内する。
 
Copyright © 2002, Krishnakumar R..
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 77 of Linux Gazette, April 2002
 
 
 
/proc/sys/net/ipv4を用いる
ネットワーク・セキュリティ

By David Lechnyr

 

ファイアウォール・ルールセットの外に、/procファイルシステムはネットワークセキュリティ設定を著しく強化する。残念ながら、大部分の人はこのことについて、曖昧な噂以上のことをしらない。この記事では、Linuxサーバーにネットワークセキュリティを加えるのに必要な /proc/sys/net/ipv4 の基本的本質を調べる。

ファイアウォール構成で見逃され易い領域は多分、/proc ファイルシステムであろう。proc の中の準pseudoファイル構造により、kernelの内部構造にインターフェイスし、システムに付いての情報を取得するか又は特定の設定を変更することが出来る。/proc の幾つかは読取専用であるが、他は変更することが出来る。これは仮想 virtual ファイルシステムと呼ばれ、これはハードディスクスペースを全く使用せず、ファイルはアクセスしたとき要求によってのみ作られる。この記事では、/proc/sys/net/ipv4に特に重点をおく。

/proc使用の利点を生かすため、kernelを構築するとき二つの設定を働くようにする必要がある。CONFIG_PROC_FSは、/proc ファイルシステムにアクセスして見ることが出来るように設定で、CONFIG_SYSCTL は、システムの再ブート又はkernelの再コンパイルを必要としないで /proc を変更する設定である。設定は、/proc ファイルシステムを搭載した後のブート時にのみおこなうことが出来る。

ICMP特有の設定

ネットワークのどのホストが立ち上がっているかを判定するには、普通ピンスキャンニングを用いる。一般的にこれは、目標ホストにICMP ECHO要求パケットを送っておこなう。これは無害な行いのように思えるが、疑わしさが増すのでネットワーク管理者がブロックすることが多い。選択にはbroadcast/multicast アドレスに対するICMP ECHO要求パケットをブロックすることと、ホスト自体に向けることが含なれる。保護を無効にするそれぞれのコマンドは次の通りである。

echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all

ICMP リダイレクトメッセージもまた痛みになることがある。ボックスがルーターとして働いていないとき、これを無効にする方が良い:

echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects

時には、ブロードキャストフレームに無効な応答を送るルーターに遭うこともある。これはRFC 1122「インターネットホストへの要求 -- 通信層」違反である。その結果、これらのイベントはkernelがログする。不要ながらくたでログファイルが一杯になるのを避けるため、これら警告を発しないようkernelに命じることが出来る:

echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

IP特有の設定

皮肉なことに、パケットのインターフェイス間IP発信は、多くのシステムでスタートアップスクリプトの中で、規定値により有効にされる。自分のボックスについてインターフェイス間で通信を送らない積もりか、又は単一のインターフェイスしかないときは、発信を無効にするのが良い考えだ。この値を変えると、コンフィギュレーション・パラメータすべて、明細にはホスト用のRFC1122とルーター用のREC1712、がリセットされることに注意。その結果、他のすべての /proc 設定の前に変更するのが良い。

if [ -r /proc/sys/net/ipv4/ip_forward ]; then
 echo "Disabling IP forwarding"
 echo "0" > /proc/sys/net/ipv4/ip_forward
fi

代わりに、発信を有効にするのであれば、ネットワーク管理者が誤解することの多い幾つかのrp_filter設定を変更することも出来る。 rp_filterは、ソースアドレスが着信中のネットワークインターフェイスと一致しないとき、入信パケットを拒絶することが出来る。これはIPスプーフィングの防護に役立つ。しかし、これを働かせると、悪影響もある。ホストが異なるインターフェイス上に幾つかのIPアドレスを持っていると、kernelは有効な交信を拒絶することがある。 rp_filterを有効にしなくとも、ブロードキャスト・スプーフィングに対する防護は常にオンになっていることが重要である。また、それが提供する防護は、スプーフされた内部アドレスに対してであって、外部アドレスはスプーフされることがある。規定値により、これを無効になっている。有効にするには次を走らせる:

if [ -r /proc/sys/net/ipv4/conf/all/rp_filter ]; then
 echo "Enabling rp_filter"
 echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
fi

この最後の例で "all"サブディレクトリに気付かれただろう。/proc/sys/net/ipv4/confには、システム上の各インターフェイスのため、一つのディレクトリと共に"all"と言うサブディレクトリがある。特定のインターフェイスの方向を変えると、その特定インターフェイスのみに影響するが、"all" ディレクトリに対する変更はシステム上のすべてのインターフェイスに影響する。

kernelをCONFIG_SYNCOOKIESで変更すると、任意選択でSYNフラッドアタックに対する防護をオン・オフすることが出来る。kernelをこの値で変更したとき、これは規定既知では有効にならないことに注意。ソケットのsynバックログキューが溢れたとき'syncookies' を送ることで働く。よく誤解されるのは、ソケットバックログが新しいOSではサポートされていない、つまりエラーメッセージを防御システムが正しく受け取らないと言うことである。また、ログにsynフラッド警告を見付けたとき、この設定を有効にする前にサーバーが過重にロードされた結果でないことを確かめること。これらは自分に繋ごうとする他のホストに接続問題を起こす。しかし、この設定を有効にしたいときは、次を実行する:

if [ -r /proc/sys/net/ipv4/tcp_syncookies ]; then
 echo "Enabling tcp_syncookies"
 echo "1" > /proc/sys/net/ipv4/tcp_syncookies
fi

通常は、ホストはルート上で特定のパケットがその第一ホップを超えるのを制御しない。送出を完了するのはネットワーク上の他のホストに任せている。IPソースルーティング(SRR)は、パケットが目的地に達するため色々なホストの中から取り上げるexact正確なパスを特定する方法である。これは一般的に、セキュリティの点では良い考えでない。誰かがある場合に、信頼されたインターフェイスを通じてセキュリティを迂回してパケットを送ることが出来るからである。良い例はSSHやテレネットなどの交信である。一つのインターフェイスで阻止されたものが、ソースルーティングを使うと、ファイアウォール設定では想定しなかった別のホストに到着することがある。これを無効にするには:

if [ -r /proc/sys/net/ipv4/conf/all/accept_source_route ]; then
 echo "Disabling source routing"
 echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
fi

既知のルートのないソースアドレスを持つパケットは"martians"(火星人)と呼ぶ。例えば、同じハブに繋がれた二つの異なるサブネットがあると、各端末のルーターは互いに「火星人」と見なす。このようなパケットを、最初の場所には絶対示さないkernelログに記録するには、次を送る:

if [ -r /proc/sys/net/ipv4/conf/all/log_martians ]; then
 echo "Enabling logging of martians"
 echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
fi

追加参考文献

/procファイルシステムに関する追加情報は、Linux kernelソースと一緒に来る文書を見るのが良い。特定のヘルプについては、 Bowden, Bauer & Nerin著:Documentation/filesystems/proc.txt がある。加えて Kuznetsov & Savola.著:Documentation/networking/ip-sysctl.txt もある。

 

Copyright © 2002, David Lechnyr.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 76 of Linux Gazette, March 2002
 
 
 
メインフレームアプリケーション"Print-to-Email"用Linux行印刷デーモン

By Lew Pitcher

緒言

2000年半ばに、仲間が質問をした。メインフレーム・ホストシステムが選ばれたアドレスにレポートを送ることは出来ないかとのことだった。少し調査した後、既存のツールではメインフレームアプリケーションにEメールを送らせることは出来ないと、答えた。「だが、裏口からなら出来る」と言った。メインフレームは色々な印刷モードをサポートするので、適切な工夫をすれば、Unixシステムにプリント出力を送ることが出来るので、データも送ることが出来ると説明した。

この裏口方法は、彼のその時の状態では出来なかったけれども、考えは残っていた。数年経って、また問題が生じたが、今回は状況が厳しくなかったので可能性を探る余地があった。共同作業者と一緒に、念入りに「概念の吟味」をおこなった。一つは、使用は許されていないが、メインフレームアプリケーションにeメールへのアクセスを与えるツールを使うこと、別の一つは、前に言った「裏口」方法だ。この論文では、予備のLinuxボックス、簡単なツール、及び多少の知識を使ってメインフレーム"Print-to-Email"「裏口」概念の吟味をおこなった。

始まり

目的は、アプリケーションの選んだ任意のアドレスに向けて、IMSトランザクション、CICSトランザクション又はバッチジョブから発生した、ホスト出力を得ることが出来るようにすることだ。ホストオンラインシステムからは、eメールサービスに直接のルートがないので、LANにある予備Linuxボックスを通じる間接ルートを試すこととした。この概念の吟味は、製品を作ることでなく、どんな問題を解決すべきかの判定を助け、製品を構築する方法を示すことにある。

我々が自由に使えるのは下記であった:

・MVS/JES2 OSとその中の施設とシステム(IMS, CICS, バッチ)、
・VPSメインフレーム・プリントスプール・パケージ及び、付属のWindows NTプロトコル・コンバータ、
・LAN-ベース Linux 設備、Unix 行印刷デーモン(lpd)及び Unix e-メール・クライアント(fastmail 及びsendmail)を含む,
・会社ファイアウォールを通じるインターネットへの接続。

理論的には、これら既存のMVS/JES とUnix装置を用いて"print to email" が出来る筈であった。その手順は下記になる:

・アプリケーションがJES2プリントスプールに書かれた印刷レポートを作成する、
・JES2 プリントスプーラがレポートをJES2プリンタに「プリント」する。これは、MVSシステム上のソフトウエアが実行する、
・MVSソフトウエアプリンタ (準プリンタ) は(我々の場合) VPSを使ってプリントデータをUnix 'lpd' (RFC1179-互換) プリントスプーラ (Linuxシステムで実行)に写す,
・Linux lpd デーモンが他のunixツールを通じてプリントデータを処理し、プリントを任意のe-メールユーザーidにe-メールする、
・Linux email (sendmail) が、プリントデータを行先eメールアドレスにeメールする。

一般的に、送信アプリケーションから受信アプリケーションまでのプリントデータの流れは。この図this diagramのようになる。

Linux

我々のLinuxシステムは、予備のPentium 90上のSlackware 7.0 と言う最低システムであった。このシステムを何度も「概念の吟味」テストに使ったので、print-to-emailにも利用した。ホストからlpd spool要求を(間接的に、NTプロトコルコンバータシステムから)受け、プリントをe−メール出来るテキストに処理し、そのテキストをプリントデータのJES2 flash pageに埋め込まれた要求に従ってe−メールするようシステムを構成した。

Windows NTプロトコルコンバータがLinux lpdリソースにアクセス出来るようにするため、NTシステムをlpdセキュリティファイルに加えた。NTシステムはDHCP IPアドレスを割り当てられているが、ダイナミック DNS (dDNS)ホスト名がないので、そのIPアドレスを、仮のホスト名とともに /etc/hostsに含め、仮のホスト名 /etc/hosts.lpdを加えた。

次ぎに、lpdプリンタ 'jesprt' を /etc/printcap ファイルに定義した。この定義には、プリントをeメールに処理するスプールディレクトリに関する詳細(/var/spool/lpd/jesprt)及びスプールフィルタプログラム(/var/spool/lpd/jesprt.filter)を含む。

最後に、プリントフィルタ(/var/spool/lpd/jesprt.filter)とそのサポートプログラムを書いた。jesprt フィルタがプリントデータを一時ファイルにスプールし直し、次いでスプールしたデータから行先eメールアドレスその他の詳細を抽出した。特性全部が確定すると、一時ファイルを行先にeメールして、ローカルコピイを削除した。

このフィルタのため四つのサポートモジュールを書いた:

/usr/local/bin/collapse
/var/spool/lpd/tools/jesprt.mailto.awk
/var/spool/lpd/tools/jesprt.subject.awk
/var/spool/lpd/tools/jesprt.notice.text

/usr/local/bin/collapse は、NTプロトコルコンバータプログラムが作ったプリントデータを取り上げて、テキスト行にフォーマットし直した。これが必要な理由は、各プリント行が互いに重なり合う多数の行からなるeach print line consisted of many lines overprinting each other場合に、プロトコル転換が大きいプリントファイルを作るからである。プリントフィルタがプリントデータから情報を抽出するとき、この重複は、単一プリント行にしぼまなければならない。加えて、プロトコル転換は一様な形態の重複を実行し、この場合重複プリントのペアの各々が前のペアに対し1文字だけ右においた。これは調整しないと出来上がったプリントデータでエラーになる。

/var/spool/lpd/tools/jesprt.mailto.awk は、最初のフラッシュペイジから通覧してデータから行先eメールアドレスを抽出した。これは、行先eメールアドレスについて三つの場所を点検した:

1."EMAIL" sentinel textの前書きのあるフラッシュペイジ内のスタンドアローン、
2."EMAIL:" sentinel textの前書きのある"ADDRESS: " 行の第一行又は
3."USERID:" sentinel text に続くユーザー名に導かれるもの

"USERID:"ユーザー名は、MVS/JES2ジョブ提出時に決めた。だが、"EMAIL:"eメールアドレスは、JES2 プリントスプールシステムに渡された四つの ADDRESS パラメータの一つを通じてダイナミックに割り当てた。第一又は第二及びそれに続くADDRESSパラメータにeメールアドレスを置くよう調整したawkスクリプトについて二つの可能性が考えられた。eメールアドレステキストが第一 ADDRESS パラメータを通じて渡されるのであれば、そのテキストは"ADDRESS:"行の1行目の一部としてフラッシュペイジに見出され、"EMAIL:" sentinel textが前に付いている。しかし、メールアドレステキストが引き続く ADDRESS パラメータを通じて渡されるのであれば、そのeメールアドレスはスタンドアローン行のフラッシュペイジに見出され、"EMAIL:" sentinel textが前に付いている。

最後に、どのADDRESSパラメータにもeメールアドレステキストが渡されないときは、eメールアドレスは、規定値のジョブに関するMVS LOGONID となる。これはフラッシュペイジの中で"USERID:" sentinel textに続くユーザー名として見出される。

/var/spool/lpd/tools/jesprt.subject.awk は最初のフラッシュペイジを通覧し、データからeメール題名行を抽出した。この情報は、フラッシュペイジの中の"TITLE:" sentinel text に続くテキストから取得した。 TITLEパラメータに付くテキストはいずれもJES2によりここに置かれる。例えば、ホストプログラムがTITLEをテキスト"email subject goes here"に設定すると、JES2がこれをフラッシュペイジに置き、/var/spool/lpd/tools/jesprt.subject.awk がテキスト"email subject line goes here" をフラッシュペイジから抽出する。このテキストは次いでeメール題名行の作成に用いられる。テキストが見付からないと、eメール題名行は、フラッシュペイジに見出されたソースのジョブ名、ジョブ番号、及びシステムを示す。

/var/spool/lpd/tools/jesprt.notice.text は、このプリントフィルタがリスプールしたテキスト全部の終わりに注記テキストが付属される。これにより、望むなら、各プリントレコードの後に「今日のメッセージ」を付け加えて実行された処理を示すことが出来る。

NTプロトコル コンバータ

VPSプリントスプールパケージは、 SNA LU1を用いて、マイクロソフト Windows NT システム上で走るパケージに送った。このパケージは、Windows NT プリンタドライバを使って、プリントデータを処理し、LAN付属プリンタに連絡した。このシステムのオーナーに、JES2 リモートPTE01 我々のjesprt lpdプリンタのとの間の連絡を設定する配置とした。Windows NT側ではこのプリンタを、Linuxサーバー上のプリンタ jesprt に接続されたローカル"Microsoft LPR" ポートを用いる"Generic" / "Generic/Text Only"プリントドライバとして構成した。

Windows NT プロトコルコンバータは、JES2 フラッシュペイジを抑制しないよう(抑制は規定値設定)構成して、Linux側が、JES2フラッシュペイジテキストからeメール題名とアドレスメタデータを受け取ることが出来るようにした。ホストアプリケーションは、その出力を作成し、プリントスプールシステムへのパイプのような働きをするJES2 "SYSOUT". JES2 "SYSOUT"に向けると期待される。

JES2ホストプリンティング

MVS/JES2 側では、環境の要請にしたがって、アプリケーションは、スプールプリント出力の三つの異なる方法、BATCH プリントスプーリング, IMS "スプール API" プリントスプーリング, 及びCICS "Spool API" プリントスプーリング.、のうち一つを使うことが出来る。

 BATCH プリントスプーリング

MVS/JES2 は、JCL (or "Job Control Language")インストラクションを用いるバックグラウンド処理システムを用いて、プログラムの実行とそのデータの配布をおこなう。この環境では、プリントデータは「システム出力の」意味で"SYSOUT"と呼ばれる。

(我々の場合)プリンタ DEST=PTE01 に向けられたデータはいずれも、(JES2により)VPS上及び、我々のLinuxシステム上のlpdサポート上にスプールし直される。JES2 OUTPUT JCL ステートメントを用いて、eメール題名とと行先eメールアドレスをレポートに設定する。

JCL OUTPUT ステートメントのフォーマットと使用法は、 OS/390 V2R10 MVS JCL Reference22章にドキュメントがあり、DD SYSOUT のフォーマットと使用法は、同じマニュアルthe same manual12章にある。

 IMS "スプール API" プリントスプーリング

JES2スプールに(そしてさらに外界に)プリントする我々のIMS処理のためには a modifiable alternate non-express PCB(修正可能代替非エクスプレスPCB)に対するDLI CHNGISRTコールを実行しなければならない。

先ず、処理のアプリケーションコードがspecific WORKING-STORAGE variables(特定WOIKING-STORAGE変数)とperformed a CHNG call(CHNGコール実行済み)を作成して、修正可能代替非エクスプレスPCB(この場合はPCB APM00001)をIMSスプールインターフェイスに送る。

ついで、アプリケーションは、ISRTコールをもう一度おこなって、プリントデータをPCBに送る。プリントデータはa structure(一つの構造体)内に置かれ、これはIMS ISRT call を通じてJES2プリント待ち行列に送られる。

このISRT を、eメールする行毎に繰り返す。eメールは、作業単位の終わり( COMMIT又はIOPCB上の次の GU)でか、又は修正可能代替非エクスプレスPCBが実行されたときスプールにリリースされる。

"IMS Version 7 Application Programming: Design Guide" の付録AにIMS SPOOL API の概説と、JES2環境におけるその用法がある "IMS Version 7 Application Programming: Transaction Manager" マニュアルの1.3.2節と1.3.7節に、出力をMVSにスプールするに必要な特殊IMS DLIの詳細があり、TSO/E V2R5 Command Reference マニュアルの1.56節にスプール制御パラメータのフォーマットと値がある。

 CICS "Spool API" プリントスプーリング

JES2スプールに対するプリント(及びeメールまで)の処理のためには、CICS SPOOL APIを使用しなければならない。JES2スプールレポートを作成するため使用しなければならないSPOOLOPEN/SPOOLWRITE/SPOOLCLOSE 動詞を"CICS Application Programming Reference" が記述する。

先ず、アプリケーションは、プリンタをSPOOLOPEN しなければならない。これは、SPOOLOPEN 動詞は、print options parameter (プリントオプションパラメータ)がリントオプションリストへのポインタであることを必要とするので、一寸巧妙である。これを働かせるには、プロググラムは(ロジックを実行して)must execute logic toある記憶にGETMAINし、GETMAINされたメモリに返されたポインタを操作してCICS要件に合っていることを確認し、the print options list (そのポイントオプションリスト)をGETMAINされたメモリに戻し、SPOOLOPEN 動詞の中のGETMAINされた領域を使って、SPOOLOPEN が完了したときプリントオプション記憶を FREEMAIN しなければならない。

これをおこなったら、プログラムはテキストデータをprint buffer(プリントバッファ)に繰り返しロードすることが出来るので、EXECutes the SPOOLWRITE function (SPOOLWRITEファンクションを実行して)レポートデータの各行をスプールに書き込むことが出来る。すべてのプリントデータがスプールされると、プログラムは次いで、EXECutes the SPOOLCLOSE function (SPOOLCLOSEファンクションを実行して)スプールを閉じ、スプールした出力をプリンタに送る。

CICS TS for OS/390 V1R3 Application Programming Guideの5.6節は、CICS SPOOL API の概説と其の用例を示す一方で、CICS TS for OS/390 V1R3 Application Programming Referenceの1.277節から1.231節までは、出力をMVSにスプールするに必要な各種EXEC SPOOLxxxx 呼出の詳細な特徴を示し、TSO/E V2R5 Command Referenceマニュアルの1.56節は、EXEC SPOOLOPEN呼出で用いられるスプール制御パラメータのフォーマットと値を示す。

結言

全体として、この実験には開始から実行まで約1ヶ月掛かった。そのほとんどは、CICS とIMS のインターフェイスの開発に費やした。'print to email' 手順のこの実験は、我々の限られた要求には旨く働く方法であると判った。大量試験は実施していないので、'print to email' ソリューションは今後の「概念の吟味」に残される。

この実験から、'print to email' 方法が、MVSシステムプログラミング領域に踏み込むことなく構築することが出来ることを確認しただけでなく、このようなシステムの構築が容易ケアルこともまた確認した。このプロジェクトを棚上げすることになっても、習得した技術(IMS とCICS SPOOLING API、 JES2 プリンタ設定、Linux 及び BSD LPD プリントスプーラなど)は、我々の領域の他のプロジェクトに容易に活用することが出来る。

価値があるのは、多くを学んだことだ。巨人の肩に乗って、自分では見られぬ遠くを眺めた。後継者がさらに高く登る足場を作ったと思う。

Copyright (©) Lew Pitcher, March 2002

この記事には、テキストに広範に結び付く補助ファイルが幾つかある。便宜のため、これらファイル全部のリストを示す。

pitcher.html 及び flowchart.png
これは文書の主要部分および、そのたった一つの図である。
Files_in_etc.html
これは、/etcの中のprint-to-email プリンタを有効にするため変更したファイルを説明する。
Print_Filter_Files.html
これは、Linux print-to-email プリントフィルタを作るファイルを説明する。
Jes_Flash_Page.html
これは、そこからeメール題名とアドレスをを抽出するJES2フラッシュペイジのフォーマットを記述する。
JES2_Spooling.html
これは、print-to-email サーバーにプリントを作ってスプールするためIMS及びCICSに必要なCOBOLコーディングを記述する。
Bibliography.html
これには、このprint-to-email ソリューションを構築するのに使った参考文献に対するリンクが含まれる。
 
Copyright © 2002, Lew Pitcher.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 77 of Linux Gazette, April 2002
 
 
 
Linuxベース呼び戻しサーバーの設定

By Sunil Thomas Thonikuzhiyil

はじめに

PPPダイアルイン設定において、ユーザーは電話線とモデモを通じてだいあるして、遠隔サーバーとの接続を確立する。サーバーにダイアルしたボックスへの呼び戻しをLinuxボックスにおこなわせることが出来る。この記事は、Linuxベースの呼び戻しサーバーを設定する手順をステップバイステップで説明する。

要件

私のサーバーは Debian Potato をkernel2.4.7.17で走らせている。ttyS0 付属のモデモが、ダイヤルイン及びコールバックサーバーとして働く。クライアントマシンは、 Debian Potato とWin98の両方を走らせる。ttyS1には外付けモデモが付いている。サーバーとクライアントの双方の上のISPに対しダイアルするに必要な最低のソフトウエアを搭載していると仮定する。これに加え、サーバー上にmgetty+sendfax を搭載しなければならない。

考え方

呼び戻しサーバーの背景の原理は、次のように纏められる。先ず私(クライアント)が呼び戻しサーバーのモデモの電話番号をダイアルする。サーバーのモデモは、着信接続を受ける構成となっている。接続が確立すると、サーバーは歓迎プロンプトと共に、ログインプロンプトを私に返す。私は特定呼び戻しユーザーとしてログインする。サーバー上のモデモは接続を落として、私のクライアントマシンに付属する特定番号にダイヤルし直す。私のクライアントマシン上のモデモはその呼び戻し接続を受ける準備を整えて待っているので、接続が確立すると、私はログインプロンプトで催促される。そこで、私が通常のPPPユーザーとしてログインすると、接続が完了する。

ダイアルインサーバーのコンフィギュア

上のステップを達成する第一ステップは、着信PPP接続を受け入れるようサーバーを構成することである。

サーバーにおこなったことを示す。

1) pppuserと言う新しいユーザーを作る

pppuser のための /etc/passwd エントリを
pppuser:x:1001:1001:,,,:/home/pppuser:/usr/sbin/pppdと変更する。

2) /etc/inittab に行を加えて特別ポートが着信接続を受けるられるようにする

T0:23:respawn:/sbin/mgetty ttyS0 -D /dev/ttyS0

'init q' とタイプしてinitをスタートし直す
これで ttyS0 行が有効になり、着信接続を受け入れる

3) ディレクトリを /etc/mgetty (mgetty用コンフィギュレーションファイル の保管場所。 Redhat ディストリビューションでは /etc/mgetty+sendfaxにある)に変更する
 login.config をエディットしてそれに次の行を追加する。

 /AutoPPP/ - a_ppp /usr/sbin/pppd file /etc/ppp/options

 他の行すべてをコメントアウトする

4) /etc/ppp/options を如何に変更する



     -detach


     asyncmap 0


     modem


     crtscts


     proxyarp


     lock


     require-pap


     refuse-chap


     ms-dns 192.168.50.100 #put your dns server ip here


     usepeerdns


5) 以下の内容を有するファイル options.ttyS0 を /etc/ppp の中に作る



     192.168.0.100:192.168.0.2


     noauth 


上の二つのipアドレスは、君のサーバーのアドレスとクライアントがサーバーから受ける筈のアドレスである。これらを君のIP番号計画に従って変更する。君のモデモが ttyS1に接続されているときは、上のファイルをoptions.ttyS1と命名する。

6) pppdのパーミッションを変更する(ディストリビューションによっては pppd が既に suid されている)
 chmod u+s /usr/sbin/pppd

7) ppp のためアリアスを追加する

/etc/profileに次の行を追加する



 alias ppp=`/usr/sbin/pppd -detach'`


 

ここで、クライアントからサーバーにダイアルしてみる。このためには、MSウインドウズを使っているときは、ダイアルアップネットワークをクリックして、新しい接続を選び、色々なフィールド埋める。pppuserとしてログインし、ダイアルインサーバーが完全に働いているかを検証する。クライアントからサーバーをpingしで接続を点検する。また、コマンドプロンプト上でwinipcfg をタイプして、クライアントに割り当てたipアドレスを検証することが出来る。

呼び戻しのコンフィギュア

ダイアルインサーバーの準備が出来たら、呼び戻しのコンフィギュアは簡単だ、

おこなったことを示す。

1) backと言う名の新ユーザーを作る

2) callback.confと言う名の空のファイルを /ete/mgetty/の中に作る (必要ならモデモ用にinitストリングをこのファイルに加えることが出来る。だが普通は空のファイルで間に合う)

3) 次の行を /ete/mgetty/login.configに付け加える

 back - - /usr/sbin/callback -S 2561

上の行の-Sの後の番号は、呼び戻すべき番号である。これをクライアントに付けられた電話番号に変更する。

クライアントのコンフィギュア

1)MS windows 98

ダイアルアップネットワークを開いて、新しい接続をスタートする。各種フィールドを満たす。新しく出来たアイコンを右クリックしてプロパティを選ぶ。modem-> Configure->connection->Advanced のオプションを選ぶ。

エキストラ設定に &c0s0=1 を付け加える。

オプションを選んで、ダイアル後ターミナルウインドウを出すチェックボックスを叩く。

ユーザー名とパスワードのフィールドは空白のままで良い。

ここで、サーバーへのダイアルを開始する。ダイアルし終わったら、ターミナル画面が出て、サーバーからログイン画面を与えられる。

'back' (特殊呼び戻しユーザー)としてログインする。

ここでサーバー側もでもが接続を切る、少し待つと、呼び戻される。呼び戻し接続が確立したら、もう一度ログインプロンプトが出る。pppユーザーとしてログインしパスワードを入れる。ターミナル画面の continue を押す。これでログインされる。サーバーをpingしてもう一度接続を確かめる。

このスクリプトを書くことも出来るが、未だ試していない。windowsの別のバージョンについても手順は同じである。設定で重要なのはモデモ init ストリング(&c0s0=1)である。

2)Linux

Linuxクライアントのコンフィギュアは一寸ややこしい。私がkernel 2.4.17を走らせている私のDebianマシンでおこなったことを示す。

1) 次の内容の /etc/options ファイルを作る



    lock


    defaultroute


    noipdefault


    modem


    115200


    crtscts


    debug


    passive


    asyncmap 0


2) /etc/ppp/peers/ の中に次の内容のpppcalback と言うファイルを作る



    ttyS1 19200 crtscts


    connect '/usr/sbin/chat -v -f /etc/ppp/chat-callback'


    noauth


3) 次の内容の /etc/ppp/chat-callback と言うファイルを作る



    ABORT BUSY


    ABORT VOICE


    ABORT "NO DIALTONE"


    ABORT "NO ANSWER"


    "" ATZ


    OK ATDT2562             # サーバーの電話番号


    CONNECT \d\d


    ogin: \q\dback


    TIMEOUT 90


    RING AT&C0S0=1


    ogin: \q\dpppuser


    assword: \q\dpasswordforppuser


作ったアカウントのログイン名とパスワードを反映するように上の行を適切に変更する。(必要なinitストリングに関するモデモの文書をも参照すること。ATZをAT&FX2などのような何かで置き換えなければならないかも知れない)

4) 次の内容の /usr/bin/pppcall と言う名のスクリプトを作る
  #!/bin/bash
  /usr/sbin/pppd -detach call pppcall &

このスクリプトをエグゼクタブルにする。
これで、スクリプト pppcallを呼び出すとサーバーにダイアルすることが出来る。

関連情報

以下の文書を参照した。

1) Callback mini howto
2 Linux callback
3) pppdマニュアル
4) Mgetty+Sendfax Archive/Documentation

呼び戻しサーバーの設定に問題があるときは、遠慮なくメールを送られたい。この記事の改良に関するご意見歓迎。

 

Copyright © 2002, Sunil Thomas Thonikuzhiyil.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 77 of Linux Gazette, April 2002
 
 
 
LCDproc & lcdmodを用いるLCDディスプレイ上への
リアルタイムシステム情報の表示

By Gaurav Taneja

 

システム管理者つまりLinuxのファンとしての我々は、ほとんど常時、ディスク利用、メモリ利用、CPUロード、ログインユーザーなどの重要システム情報に目を曝している。そこで、これら情報全部をモニタの隣に示すのはどうだろうか?

LCDは至る所で見ることが出来る。コンピュータのパラレルポート又はシリアルポート(RS-232)を通じて制御出来る安いディプレーが手に入る。LCDを作っている会社は極めて少ない。ジャンクやで見付かるのは、日立、エプソン、HP、オプトレクス、シャープなどだ。普通の構成は1,2又は4行で、16, 20, 24, 32, 又は40文字を表示する。

私は個人的に日立HD44780 互換16X2 LCDを試した。これは入手が容易でパラレルポートから制御出来る。バックライトのオプションのあるものとないものがあるのに注意。バックライトのオプションのあるものは、バックライト制御用のピンがあるので、高価だ。選択はお好みだ。

警告の言葉

この実験を始める前に、LCDディスプレイは誤配線に極めて弱く、特定の電圧(普通 5V 又は12V)でだけ働くことに注意すること。間違えると壊れる。また、ディスプレイを買うとき、一緒にピン構成と技術データも買って、何時でも参照できるようにすること。

必要なもの全部

着手の前に、下に示すチェックリストの品物全部があることを確かめること。

・日立HD44780 互換LCD ディスプレー(ブランドは気にしない。日立HD44780 互換を確認するだけ。HD44780には、内部規定文字セットから画面上に文字を表示するための標準命令(プロトコル)幾つかを理解するオンボードコントローラがついている)。

・ケーブルの付いたパラレレルポート(Centronics)コネクタ(他端が自由な長いケーブルであることを確認すること)

・ハンダ鏝及びハンダとフラックス(自分で整えられなければ電気に詳しい人に聞く)。

・電源(普通5V 又は12 V DC 電源、電気店で買える交直流アダプタでよい)

・LCDproc (http://lcdproc.omnipotent.net/download.php3でダウンロード出来る)及び/又はlcdmod ( http://lcd-mod.sourceforge.net/で入手出来る)

配線しよう!!

コンピュータにディスプレイを配線する前に、注意しておこなうこと、でないとディスプレー又はコンピュータが壊れる。電気に詳しくなければ、詳しい人に聞くこと。

私はHD44780ディプレーを下記の配線図にしたがってLinuxボックスのパラレルポートにつないだ:

Wiring Scheme (HD44780)

 

 

 

 

 

 

 

 

この配線計画はすべてのHD44780 型ディスプレーで良く働く筈だ。上の図の'Contrast'抵抗器を調節すると、抵抗器を最低値にしたとき、ディスプレー上に黒い帯が現れる。

ソフトウエアのインストール

LCDproc とlcdmod両方の例を取り上げた。どちらをインストールしても良い。初心者なら LCDprocを先ず試すのが良い。

先ず、ダウンロードしたアーカイブを抽出する:



 [root@Linux gaurav]# tar -zxvf lcdproc-0.4.1.tar.gz


次ぎに、君のパラメータでLCDproc をコンフィギュアする



 [root@Linux gaurav]# cd lcdproc-0.4.1




 [root@Linux lcdproc-0.4.1]# ./configure --enable-drivers=curses,hd44780


これは Makefileをコンフィギュアして作成し、プレビューを使ってインストレーションをテストすると同時にHD44780互換ディスプレーが使えるようにする。

ここでコンパイルしてインストレーションを終わる:



 [root@Linux lcdproc-0.4.1]# make install


し終わったら、次のコマンドを出してコンソール自体からインストレーションを点検することが出来る



 [root@Linux lcdproc-0.4.1]# LCDd -d curses -f


これで、生きたシステム情報を一つ宛スクロールするスマートな画面がターミナル上に現れる。LCDディスプレーに電源を入れて接続し、、次のコマンドでスタートする:



 [root@Linux lcdproc-0.4.1]# LCDd -d hd44780 


 [root@Linux lcdproc-0.4.1]# lcdproc C M T X

これでLCDディスプレーが働いて次のようなものが示される:

LCD Display

LCD Display

LCD Display

 

 

LCDProc をコンフィギュアしたとき、このソフトウエアは実際はクライアント−サーバーモデルに基づいていることを知らなければならない。LCDProcサーバーはそれを接続するクライアントプログラムを用いて最初にスタートし情報を表示する。事実LCDProc サーバー(LCD化された、デーモンプロセス)にテレネットして、人手でコマンドを実行することが出来る。しかし、表示の速いメカニズムが欲しくて、ソケットするものがないようにしたければ、lcdmodが助けてくれる。

Lcdmod

Lcdmod はmHD44780互換ディスプレー用にミカエル・マクレランが書いたキャラクタデバイスドライバである。lcdprocより遙かに速く、他の装置と同じくLCDに書き込むことが出来る。

インストレーションをしよう。LCDProc でテストした配線済みのlcdディスプレーがあると仮定する。

先ず、ソースアーカイブを解凍する:



 [root@Linux gaurav]# tar -zxvf lcdmod-0.5.5.tgz




 [root@Linux gaurav]# cd lcdmod-0.5.5


ソースを 'make' してインストールする:



 [root@Linux lcdmod-0.5.5]# make




 [root@Linux lcdmod-0.5.5]# make install


これで、LCDハードウエアをポイントする 'lcd' と言う名のLKM(Linux kernel モジュール) とデバイスが作られる。

次を入れて、構築したLKM を挿入する、



 [root@Linux lcdmod-0.5.5]# insmod lcd io=0x378 disp_rows=4 disp_cols=20


これは、君のパラレルポートのi/oベースのアドレス、君のディスプレーの行(disp_rows) のno.、及び列(disp_cols)のno.を規定するモジュールを挿入する。

ここでモジュールが本当に入ったかを確認する:



 [root@Linux lcdmod-0.5.5]# lsmod


これは lcdmodモジュールのエントリを、他の挿入モジュール(もしあれば)と一緒に表示する筈だ。

ここで、下記などの単独コマンドを送ってLCD上に任意のテキストを表示することが出来る筈だ。



 [root@Linux lcdmod-0.5.5]#  echo Hello > /dev/lcd


これは、ディスプレーに 'Hello' を表示する。この記事の目的は、LCDディスプレーの制御に関する情報すべてを述べることなので、君に特有の筋書きにしたがってこの考えを実行するのは君の創造性と腕前の問題だ。私は、LCDディスプレーを、すべてがウエブで有効になる特注キイパッドを用いる雇用者ログシステムの開発に使った。

追加情報

構成と配線に付いての追加情報は、LCDProc 及び lcdmod プロジェクトペイジにある。

 

Copyright © 2002, Gaurav Taneja.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 76 of Linux Gazette, March 2002
 
 
 
END