▼▼▼法制化に次ぐ法制化▼▼▼
●Alan Cox がDMCAに応じKernel Changelog を検閲
Linux 2.2.20-pre10のchangelog の中で Alan Cox は、「詳細は米国DMCAにしたがって検閲」として、ある「セキュリティ・フィックス」に関する詳細をリストするのを拒否した。ファイル所有権と許諾権とは明らかに著作権保護のため用いられべきで、Changelogでフィックスに光を当てるのは、著作権回避による情報公開と見なされる。Linux Kernel に関するこの決定から、Alan は行き過ぎだとの議論がある一方で、DMCA違反になるかも知れぬリスクを冒すか冒さないかはAlan 次第だとの意見もある。Alanの立場は、法的な助言を得たもので、最も用心深い行為だ。
この話に関するLWNの記事は、Changelogは検閲されたが、実際のコードと手直しは検閲されていないとの事実を強調している。これはlinux-kernelでも認められている。http://thefreeworld.net/ にリンクすれば、Changelogを、米国では許されていない情報/ツールと一緒に入手することが出来る(これは米国以外からのビジター用)。
アイルランド政策に対し別に重要な影響を与えたのは欧州連合だ。これは必ずしも悪いことではない。良い政策はEUから来るからだ。エシュロン文書は、早い時期に「e−メールは誰にも暗号化出来るし、またすべきだ」と言っているが、セキュリティの重要性に関する価値ある警鐘だ。Bruce Schneier は、新EU暗号条約に関し幅広いセキュリティ専門家の採用をEUに要請した。併せて、欧州特許局はソフトウエアに特許を与えない。遙かに迷惑な進展はDMCAのようなEU著作権指針である。これは世界知的所有権組織が吹き込んだもので、同様の規定を含んでいる。然し、欧州指針は、国内法のガイドラインであって、憲法に優先するものではないから、EUがDMCA並の厳しさに完全にしたがうまでは、未だ長い道程であろう。。
市民の自由と権力乱用のもっと広い話題には、アイルランドの経験から学ぶ有益な教訓がある。アイルランドの複雑な歴史は、嘗て、反テロリストのような手触りの悪い法律を生み出した。また電話盗聴があってジャーナリストと政治家が被害者になった。電話盗聴は米国で法制化された手段のように、有用なセキュリテイ使用だが、乱用されやすい。今の総理大臣(Taoiseach )は乱用を謝ったけれども、害悪は起こってしまっている。盗聴に責任のある前大臣が政府テレコム調査の長になっているので、この論争はまた始まった。
●反テロリズム法案との比較
アメリカ市民自由連合(American Civil Liberties Union (ACLU))は、盗聴/偵察規定ついて現行法と各種反テロリズム法案との間の相違を表にした。
セキュリティに焦点を当てて、リチャード・フォルモは、自由を安易に犠牲にする危険を述べている。リチャード・ストールマンもまた、特に米国法における市民自由消滅の危険を述べている。
10月24日、米国パトリオット法(HR 3162)が357-66で下院を通過し、翌日98-1で上院を通過した。
●James Love がロビイ活動と会議開催に熱心
消費者運動者ジェームス・ラブにスラショットが最近インタビューしたところ、Linux擁護者が関心を持ちそうな問題に政策決定者の注意を引き付けようとしているとのことだった。特に、議員だけでなく専門問題に取り組む議会関係職員に手紙を書くことを勧めた。また、新聞に投書するのも良いとの意見であった。
この作戦は効果が大きそうだ。私の国、アイルランド、の官庁では主要新聞を読む役目の公務員がおり、役所に関係ある記事を切り抜いている。投書欄には特に注意を払い、それらの切り抜きは、各官庁の高級官僚や大臣が読む。
ラブが提起した別の問題は、「裁判管轄権と外国判決に関するヘーグ会議」(Hague Convention on Jurisdiction and Foreign Judgements)だ。ラブの話の重点もここにある。問題の会議は、色々なことのなかで、国境を越えた特許の強化を実行する条約だ。「外国特許の侵犯には万人に責任があるので、ヘーグ会議が加盟各国特許の有効性と侵犯に関する独占裁判権を有する」。この問題に関するウエブサイトは http://www.hcch.net/.
●RIAAの迷惑
スラショットによれば、アメリカレコード産業協会(RIAA)は、反テロリズム法案に、他人のコンピュータを覗いて未承認MP3があれば削除を要求出来るようにする条項を含ませることに関心を持たせようとした(失敗)。彼らはこの権利があると考えているが、新しい米国法の下でこれをおこなうとサイバーテロと非難されるのを恐れている。勿論、最大の懸念は個人のコンピュータに起こる不都合だ。RIAAはこの責任を回避したがっている。これはArsTechnicaが取り上げ、RIAAが反駁したが、正面から反対しないで、事実を曲げている。
同じことを、多分不正確に、RIAA代表者間の秘密会合でレジスターが報告し、大新聞が大々的に取り上げた。面白い読み物だが、警告が残るだけだ「我々のソースのため人々が苦情を受けることはないだろうが、RIAAのコメントの真実性には疑問が残る」
●有効なIDにもうハッカーがいるのではないか?
●W3Cと特許
Linux Weekly News (LWN)は最近、W3Cが特許技術をウエブ標準に含める方針案を持っていると報じた。LWNは、これがインターネット上のソフトウエアの将来を危うくすると評している。W3Cが既に採用している"Scalable Vector Graphics" (SVG)標準にはアップルの特許が含まれている。W3Cは既に新方針を発動したような行動をとっている。
多くの第三者に取って最も迷惑だったのは、こっそり変更されていたことだ。このメッセージthis message.を送ったLWNのAdm Warnerのお陰でほとんどの人が注意を払い、激しい反対がに起こった。GIFをめぐる特許法に続いて起こっりPNGに発展したのと同じことになると予測する者もいる。ウエブの普遍閲覧性を脅かす非公開技術を用いてW3Cがウエブを破壊するなら、無料ソフトウエア社会は将来別のウェブ標準を作らなければならないかも知れぬとLWNは、忠告する。
●LWNの苦労
不幸なニュース。無料ウエブニュースサイドと同様Linux Weekly News が資金難に落ちいている。Tucows は支援を続けられなくなった。その結果、LWNのコラミストミッチェル・ハンメルがLWNを辞めた。
もっと困ったことに、LWNは「給料支払いの方途が見付からない限り、LWNは完全にネットから離脱せざるを得ない」と言う。LWNの将来については、(現在は登録が必要)、http://vena.lwn.net/mailman/listinfo/discussion へ。
●Kernel の弱点
ヨーロッパではIDGネットが、ドイツ下院の5000台のコンピュータをウインドウズからLinuxに変更中と報じている。主な理由は、セキュリティ、安定性、及びマイクロソフトの最近の更新契約に対する金銭的節約である。議院委員会は今年末か来年初めには、今のウインドウズNTをどのOSに代えるか結論を出す。
最後に、Technews.com は、タイ国政府が、経費とソフトウエア海賊行為を少なくする方法として、無料のタイ語「オープンソース」ソフトウエアを使う考えに戻ったとの話を紹介している。消息筋は、「外国ソフトウエアに頼らないため、国は人的資源の開発と、オープンソース・ソフトウエアに沿った知識基板を構築する必要がある」と言っている。
●Linux NetworX クラスタが医療開発においてBiocrystの助けに
Linux NeteorX は、Biocryst薬品がインフルエンザやC型肝炎などの病気治療薬開発の助けにLinux NetworX Evolocityクラスタを使用していると発表した。新薬開発をおこなうのに、Biocrystの科学者は、原子同志で疾病原因となる蛋白質に結合する合成小分子抑制剤を作る。
BioCrystの新 Evolocity クラスタには、ペンチアムIII 933MHxプロセッサ32個が含まれており、16GBのメモリと10/100イーサネットがある。Linux NeteorX は、X-線結晶學や合成化学など複雑な模型化アプリケーションを扱うようクラスタを構成した。BioCrystは、Linux NetworX ClusterWorX ソフトウエアを利用し、現行保守契約にも署名した。
●無料ALS:11月5-11日、オークランド
不確実な政治情勢と今日の経済不況とを反映して、USENIX 協会とAtlanta Linux Showcase社とは、本日合同で、来月オークランドで開催のLinux年次ショウケース&コンファレンスの技術セッション参加希望者は誰でも無料で登録を受け付けると発表した。理由はこのコンファレンスの内容が極めて重要なものだからである。
●SAIR Linux とGNU
SAIR Linux とGNUのIDG との提携は第三回連続ショウに関して大変な成功だった。ベンダー不問訓練カリキュラムとオープンソース・ソフトウエアに関する認証の指導的開発者として、SAIR Linux とGNU は、無料Linux講習と無料認証試験をサンフランシスコのモスコンセンターで開かれるLinuxWorld コンファレンス&エキスポで提供する。
詳細はhttp://www.linuxcertification.com/linuxworld/ 又はhttp://www.linuxworldexpo.com/ へ。
Debian HURD isoを貴地の ftp.gnu.org ミラーで頒布中。三つのisoが入手出来るが、システムを動かすには最初の一つだけが必要。ダウンロードされたい。
Debian セキュリティ・セクレタリには、チンメルマンとメイヤーハンスが採用された。
更新webalizer パケージの詳細Details がDebian Changesに移植された。バグを直したので、Webalizer は2001年10月5日に稼働を停止した。
●Red Hat
Red Hatは、Red Hat Linux 7.2.を発表した。発表詳細はここ press release。
●SuSe
SuSE Linuxは、専門家用と個人用双方でSuSE Linux 7.3 を発表した。セキュリティに配慮して SuSE Linux 7.3 は、KDE 2.2.1、KDE 2.2.1付きKDE 2.2.1、各種ドライバ及びUSBサポートを含み、ハードウエア自動検出を改良した。
SuSE Linux は、ミュンヘンで10月に開催されたIT エキスポ SYSTEMS に第3世代e-メールソリューションを展示した。SuSE Linux eMail Server III は、中小企業向けソリューションで、ワークグループと行政の専用となっている。カレンダとスケジュール機能を備えた Skyrix が新しい特徴である。
Gnect は、GNOME用の「四つ並べ」ゲームである。テトリスに似ているが、7×7の格子の中に、四個のマーブル/タイルを任意の方向に一列に並べることを目的とする。このタイルは自動的に下り来ないので、時間制限はない。行を選ぶとタイルが上から落ちて来る。ライセンスはGPLで、Velenaストラテジイエンジンを含む。
●Loki
Lokiはから間もなくゲームPostal Plus. が出る。詳細は、Loki のpress release 。
●MOSIXVIEW クラスタ管理ソフトウエア
MOSIXVIEW は無料ダウンロード用でGPL-ライセンスモデルに基づいている。詳細については、http://www.mosixview.com/ 又は http://www.waplocater.de/mosixview/へ。
● webMathematicaがウエブに計算を持ち込む
Mathematica技術計算ソフトウエアのメーカーWolfram Research がwebMathematicaの配布を発表した。webMathematica はJava servlets上に構築されており、Servlet 2.0 API 以上をサポートするいずれのウェブサーバー、servletエンジン又はアプリケーションとも互換性がある。webMathematica は当初、Windows 95/98/Me/NT/2000 及びIntelベース Linux プラットホームに利用出来る。webMathematica でユーザーに出来ることは、
●PHP黒書、Coriolisから新版
●Micro Sharp Technology とAstaroファイアウォールで提携
Micro Sharp Technology は、Astaroとの提携を発表した。
Micro Sharp Technology は、ファイアウォール・ソフトウエア製品をNetuleラインの製品としの販売することつき、Astaroと合意したことを発表した。Netule は、頑丈で小さいサーバー・アプライアンス・ソリューションである。OEM版は、システム構築者が廉価で頑丈なアプライアンス・ソリューションを中小企業向けに供給するのを可能にする。
●IMAインターネット・メッセージ交換サーバー5.1
International Messaging Associates は、その最新のメッセージソリューション−Internet Exchange Messaging Server (IEMS) 5.1を発表した。一番の特徴は、IEM 5.1がウイルスと迷惑メール撃退機能を強化しアタッチメント除去フィルタモジュールを加えたことだ。IMES5.1は、Linuxとウインドウズで働き、10月末にはソラリスとHP-UXのサポートを加える。メッセージ交換プラットホームをウインドウズからLinuxに代えようとしている政府機関、企業は、簡単にIEMSを移植することが出来る。ダウンロードは http://www.ima.com/download/v5eval.html
GIMPで構築した手書きの漫画。
面白い絵です。下記をクリックして、オンラインで見て下さい。
漫画の説明
Debian Geek: Debian は本当のハッカー・ディストリビューションと思われている。描いたキャラクタはハードコアハッカーだ。貧乏なので破れた服しか持っていない。長髪を後ろで束ねていて、髭は剃らない
Redhat Geek:ビジネスマンだ。会社人間で古風だ。年を取ったので、頭は薄くなったし、腹が出てきて、眼鏡が必要になった。
Suse Geek: Suse は若いと思う。ドイツから来た人は普通金髪か赤髪でソバカスだらけだ。全くのハッカーではなく、会社などで重要視されるほど年長でもない。
Mandrake Geek: うん、これで良い。この子は未だディストリビューションで売り出し中だ。子供顔なので新人と思われ、ディストリビューションは、誰がウインドウズからリナックスに移ったかをビギナーが知るのに便利と見られている。
別の絵やスケッチを見たい人は、私の projects page. へ。
第一に、操作全体を眺める。Sambaを用いて「疑似プリンタ」サービス(クライアントには標準プリンタのように見える)を提供する。これがGhostscript を使って、その上に並ぶ任意のPostscript プリンタジョブから、PDF文書を作成する。次いで、ウインドウズマシンをコンフィギュアし、この共有プリンタを使ってジョブをPostscriptフォームでそれに送る。
Samba
初めてSambaを搭載するのであれば、smb.conf ( /etc 又は /etc/sambaを見る)コンフィギュレーション・ファイルの中の基本コンフィギュレーション・オプションを閲覧/編集するのが良いだろう。サービス開始のため注意すべき主なことは、セキュリティ・ポリシー(セキュリティ=共有又はセキュリティ=ユーザー)と「ゲスト口座」設定である。Sambaコンフィギュレーションの詳細は http://www.samba.org/ 又は SMB HOWTO にあるSamba文書を参照されたい。コンフィギュレーション・ファイルの完全なサンプル(低セキュリティ)を後で示す。
単純なクライアント用ファイル共有を作って接続方法と(もしあれば)認証方法を試験することを薦める。どんな場合にも、クライアントがSambaサーバーに接続することが出来たら、PDF「疑似プリンタ」の準備は終わりだ。だが、実際にPDF文書を作るのに正しいユティリティをもっているかどうかを、先ず確かめよう。
Ghostscript
Ghostscriptは、Linuxシステムで使うことの出来る別の偉大なアプリケーションだ。Ghostscript は、Postscriptをプリンタ用に正しい列フォーマットに転換するため使われることが多いが、 Postscript とPDFの間のフォーマット転換にも使うことが出来る。Ghostscript は、プリンタサポートのため多くのディストリビューションで搭載されるようになった。システム上で "gs" コマンドが利用出来るなら、多分Ghostscript が搭載されている。でなければ、ディストリビューションのパケージ(Red Hat ではghostscript 、 Debian ではgs 又は gs-aladdin ) を搭載するか、又は、冒険する気があれば、ソースをhttp://www.cs.wisc.edu/~ghost/ からダウンロードする。
Ghostscriptパケージには、ps2pdf と呼ばれる、Postscript を PDFに極めて容易に転換するスクリプトが含まれている。このユティリティが使えるようになったちじりで、Samba上のPDFサービスの作成を始めよう。
一緒にまとめる
[hpdeskjet]
path = /tmp
printable = yes
writeable = no
create mask = 0700
guest ok = yes
printer name = lp
(writeable の中のサイレント "e" に注意。コンフィギュレーション・ファイルは、元の言葉になくても、これを含む。同じことが以下の browseable にもある。実際、Sambaはどちらでも受け入れるが、Sambaのマニュアルは writeable を使う)
通常は、プリントジョブがこの共有に巻き取られると、lprのようなコマンドが働いて、ジョブをLinuxプリントシステムに渡す。ここでの方法は、lprの代わりに別のプリントコマンドを規定するSambaの優れた構成能力を使う。明細には、コンフィギュレーション変数を「プリントコマンド」と言う。規定のコマンドが実行され「プリントコマンド」の中に %f 又は %s が出たときは何時でも、変数は置き換えられて、ウインドウズクライアントが送ったプリンタスプールファイルの名になる。例えば、任意のプリントジョブを単に破棄するには、上のプリンタコンフィギュレーションに次ぎの行を入れることが出来る:
print command = /bin/rm %f
chown nobody /shr/pdfdropbox chmod u+rwx /shr/pdfdropbox
#!/bin/sh # 特定postscript ファイルを PDF 文書に転換しSambaサーバーが # 共有する位置に置くする簡単なスクリプト # # アーギュメント # 1st - スプールファイルの名称 # # John Bright, 2001, jbright@winfordeng.com # 現在の日付と時刻に基づいてpdf を一時一ファイルに作成する # 完了後、同一日付だが .pdf で終わるファイルに名前を変える。 # こうするのは、書込中のPDFをユーザーが開こうとしたとき、 # 開く前に、競合があるとのメッセージを出すためだ。 DATE=`date +%b%d-%H%M%S` # 出力を置くディレクトリ # このディレクトリが存在し、Sambaが(例えば nobody)として # 働かせているユーザーが書込出来ることを確認すること OUTDIR=/shr/pdfdropbox ps2pdf $1 $OUTDIR/$DATE.temp mv $OUTDIR/$DATE.temp $OUTDIR/$DATE.pdf rm $1
簡単だと言ったが、そうでしょう?ツール全部をまとめると全く大したことはない。
Samba 設定の完了
[global] guest account = nobody invalid users = root ; セキュリティを少し引き締める:ローカルアクセスだけ許す interfaces = 127.0.0.1 eth0 bind interfaces only = Yes ; IP アドレス 192.168.x.x を持つローカルネットワークにいると仮定する。 hosts allow = 192.168. ; 共有レベルセキュリティが一般的に容易だが、それ程安全ではない security=share workgroup=WORKGROUP ; 公共共有を設定、これはPDFの再生に用いる ; 共有名は、ウインドウズユーザーに "shr" として理解される [shr] path = /shr browseable = yes writeable = yes guest ok = yes force user = nobody ; 我々のPDF-作成プリントサービスを設定 [pdf] path = /tmp printable = yes guest ok = yes print command = /usr/bin/printpdf %s ; プリントジョブのリスティングや削除は不要、 ; サーバーは、到着次第その処理を開始するからである。 ; だから、lpq (待ち行列リストジョブ) と lprm (待ち行列内ジョブ削除) ; コマンドを空白に設定する。 lpq command = lprm command =
好みにしたがってsmb.confコンフィギュレーション・ファイルをcreate/edite した後、勿論、Sambaを start/restart する必要がある。
ウインドウズ・クライアントの設定
まとめる方法を簡単に説明すると、Linuxマシン上のPDFサービスは、入力をPostscriptフォーマットで受け取ることを期待している。printpdfスクリプトはプリントジョブをウインドウズクライアントが送った通りに受け取るので、これはウインドウズクライアントにプリントジョブをPostscriptフォームで送って貰う必要があることを意味する。上述のように、これは、PDFネットワークプリンタをインストールするとき、任意のPostscriptプリンタ用ドライバをウインドウズ・クライアント上で選んでおこなう。私は、普通ウインドウズ・プリンタドライバリストから各種HP Laserjet PS printerを選ぶ。マイクロソフトが供給するPostscriptドライバはすべてPostscriptを作るのに同じコアドライバを使うので、どれでも良いのだが。
PDFネットワークプリンタをウインドウズマシンにインストールしたら、プログラムから新しいプリンタに何でもプリントしてみると、PDF文書が出る筈だ。
磨き上げ
そこで、print$共有ディレクトリにどコピイしなければならないドライバファイルを見出す必要がある。またSambaにプリンタ定義を与えて、クライアントにどのドライバを必要とするかを知らせるようにしなければならない。make_printerdefと言うSambaユティリティのお陰で、これら全部を1ステップでおこなうことが出来る。このユティリティは、プリンタを定義するウインドウズINFファイルを有し、そのフルネームを知っていることを必要とする。プリンタを定義するINFファイルを見付け出す必要がある。例えば、この LaserJet はC:\WINDOWS\INF\MSPRINT3.INFで定義されているなどである。C:\WINDOWS\INFは隠しディレクトリであることに注意のこと。このファイルをLinuxマシンにコピイし、make_printerdef ユティリティを用いて、Sambaの読むローカルプリンタ定義ファイルを作る。例えば:
make_printerdef MSPRINT3.INF "HP LaserJet 5P/5MP PostScript" >> /etc/samba/printers.def
ここで、プリンタコンフィギュレーションをつくるため、標準アウトプットを printers.defファイルにリダイレクトしている。make_printerdefプログラムはまた、標準エラーに渇する説明を出力するのが見られる。必要なドライバファイルを告げる筈だ。これらはC:\WINDOWS\SYSTEM またはC:\WINDOWS にあるので、これをLinuxマシンのprinter$共有のパスにコピイする。(今の場合は/etc/samba/printerdrivers/)。ここで作った(または追加した)printers.def.ファイルは、ウインドウズマシンと共有する必要はなく、Sambaが読むだけである。そこで、Sambaにprinters.defファイルとdriverファイルを告げる必要があるだけである。これは、グローバルセクションの中の「プリンタドライバファイル」設定と、smb.confの各プリンタセクションの中の「プリンタドライバ」と「プリンタドライバロケーション」を用いておこなう。以下の改訂 smb.conf ファイルは、これら設定の使い方を示し、printer共有の例もまた示す。このコンフィギュレーション・ファイルはここ here. からダウンロードすることが出来る。
[global] guest account = nobody invalid users = root ; セキュリティを少し引き締める:ローカルアクセスだけ許す interfaces = 127.0.0.1 eth0 bind interfaces only = Yes ; IP アドレス 192.168.x.x を持つローカルネットワークにいると仮定する hosts allow = 192.168. ; 共有レベルセキュリティが一般的に容易だが、それ程安全ではない security=share workgroup=WORKGROUP printer driver file = /etc/samba/printers.def ; 公共共有を設定、これはPDF再生に用いられる ; 共有の名は、ウインドウズユーザー "shr" として理解される [shr] path = /shr browseable = yes writeable = yes guest ok = yes force user = nobody ; 我々のPDF-作成プリントサーバーを設定 [pdf] path = /tmp printable = yes guest ok = yes print command = /usr/bin/printpdf %s
ウインドウズプリンター共有をLinuxからプリントするには数多くの方法がある。最良の方法は、(smbclientを使う)smbprintスクリプトをフィルタとして /etc/printcap入力にリストすることだろう。この方法を使うと、ウインドウズ共有プリンタを、Linuxユーザーやアプリケーションの使い慣れた標準lprコマンドを用いて使うことが出来る。コンピュータにsmbprint 及びsmbclientプログラムを持っている必要がある。ssmbclientプログラムは、Debianシステムの"smbclient"パケージと、Red Hatシステムの"samba-client"パケージの中にある。Red Hatでは、smbprintスクリプトが"samba-client"パケージと一緒に含まれている。Debianでは、"printfilters-ppd"パケージと"lprngtool"の異なるバージョンと同様に "samba-doc"と一緒に含まれている。ここ here.からダウンロード出来る。稼働中のsmbprintを/usr/bin/smbprint に持っていて実行可能(chmod +x /usr/bin/smbprint)と仮定する。smbprintの例を示す:
#!/bin/sh
# このスクリプトはUNIXマシン上でのprintcap用入力フィルタである
# これは、subclientプログラムを使用して、指定のsmbに基づく
# サーバーまたはサービスにファイルをプリントする
# 例えば、次のようなprintcap入力があるとする
#
# smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
#
# これは、このスクリプトを経由してプリントされる"smb"と言うUNIXプリンタ
# を作る。自分のシステムに適切なパーミッションと所有権を得て、
# スプールディレクトリ /usr/spool/smb を作る
# これらを、プリントしたいサーバーまたはサービスに設定する
# この例では、パスワードなしで移出された "printer" と言うプリンタ
# を持つ"lapland" と言うワークグループPC用ウインドウズを持っている
#
# スクリプトはさらにhamiltom@ecnz.co.nz (Michael Hamilton)
# が改造して /usr/var/spool/lpd/PRINTNAME/.config ファイルから
# サーバー、サービス及びパスワードを読めるようにした
#
# これを働かせるため /etc/printcap エントリには
# accounting ファイル(af=...)を含まなければならない:
#
# cdcolour:\
# :cm=CD IBM Colorjet on 6th:\
# :sd=/var/spool/lpd/cdcolour:\
# :af=/var/spool/lpd/cdcolour/acct:\
# :if=/usr/local/etc/smbprint:\
# :mx=0:\
# :lp=/dev/null:
#
# /usr/var/spool/lpd/PRINTNAME/.config には次を含む:
# share=PC_SERVER
# user="user"
# password="password"
#
# ファイル中の順序を変えないこと
# 例:
# share=\\server\deskjet
# user="fred"
# password=""
#
# フィルタへの最後のパラメータは accounting ファイル名である
# ファイル名からディレクトリ名を引き出す
# /.config を用いてこれを頭切りし config ファイルを得る
#
eval acct_file=\$$#
spool_dir=`dirname $acct_file`
config_file=$spool_dir/.config
# config ファイルに設定された次の変数を読み取る:
# share
# hostip
# user
# password
eval `cat $config_file`
share=`echo $share | sed "s/[\]/\//g"`
if [ "$user" != "" ]; then
usercmd="-U"
else
usercmd=""
fi
if [ "$workgroup" != "" ]; then
workgroupcmd="-W"
else
workgroupcmd=""
fi
if [ "$translate" = "yes" ]; then
command="translate ; print -"
else
command="print -"
fi
#echo $share $password $translate $x_command > /tmp/smbprint.log
cat | /usr/bin/smbclient "$share" "$password" -E ${hostip:+-I} \
$hostip -N -P $usercmd "$user" $workgroupcmd "$workgroup" \
-c "$command" 2>/dev/null
次のステップは、新 /etc/printcapエントリを加え、フィルタとしてsmbprintスクリプトをリストすることである。printcapエントリの例を示す。text fileとして入手出来る:
# PDF Service entry
lp|pdf|PDF Printer:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/pdf:\
:af=/var/spool/lpd/pdf/acct:\
:mx#0:sh:\
:if=/usr/bin/smbprint:
スプールディレクトリ/var/spool/lpd/pdf/ (または LPRngがあればrun checkpc -f)を作る必要がある。printcapエントリのaccountingファイル行はそのままにし、accountingファイルが .configファイルと同じデイレクトリあるのを確かめること、smbprintスクリプトが.configファイルを見出す方法だからだ。また、これが上に示した"lp"と言う名のシステムの規定プリンタを持つ標準手順だからである。 /etc/printcapファイルが既にあって、既存の規定プリンタをそのままにしたいときは、上のエントリから頭の"lp|"を取り除く。次ぎに ".config"と言う名のコンフィギュレーションファイルを作る必要がある。これは、/var/spool/lpd/pdf/.configに作らなければならない。.configファイルはプリントジョブを送るサーバーを定義する。例を示す:
share=//yourserver/pdf user="" password=""
ここで、yourserberはPDFサービスを提供するコンピュータの名で置き換える。これで問題があれば、smbprintスクリプトが.config ファイル読取のパーミッションを持っているか確かめること。でなかったら暫く頭を冷やすこと。最も安全な方法は、chmod a+r /var/spool/lpd/pdf/.configなど、全部に読取パーミッションを与える。
最後に、PDFサービスをLinuxからプリントするには、Postscriptファイル上で、次のコマンドを呼び出す:
lpr -Ppdf file_to_print.ps
gnome-gv のユーザーインターフェイスが最も良いと考える。これは GTK+に基づいているので、マウスのような回転板が特別の配慮なしに使える。残念乍ら、幾つかのPDF文書が読めなくてghostscriptからの妙なエラーを表示する。私の経験では、文書の翻訳が出来るacroread が極めて良い。昔、不具合になったこともあるが、それ以来は好調だ。gvは殆ど使わないけれども、ghostscript.に基づいているので、gnome-gvと同じ不具合がある。最後に、xpdf は極めて安定なPDFリーダーだ。故障したのを思い出せない。文書翻訳にも問題はない。それでも、偶に問題があって、表示品質が極めて良いと言えぬことがある。完全な特性表はないが、覚えて置いて良いリーダーだ。尻込みされたかも知れないが、平均してPDFをLinux上で見るのに問題はない。
1999年、ITの長になった時の問題は、学校/管理/経理システムに基づく所有ソフトウエアが、新入生のデータを扱えないことにあった。楽な解決法は別のソフトウエアを買うことだが、数々の改良が必要で、予算も足りなかった。1993年以来Linuxを使っていたので、無料ソフトウエアをもとに自分で新システムを構築しようと考えた。PHPに関する情報を集めて計画を練り、校長の許可を得た。
2000年初頭から、旧システムと同じER (Entity-Relationship) モデルを使ってSAGUを書き始めた。Linuxを使うデスクトップもあったし、SAGUには初めからウエブベース・インターフェイスを持たせる−プラットホーム不問nisuru−予定だった。MySQLデータベースサーバーを使って開発を始めたが途中でPostgreSQLに切り換えた。MySQLもPostgerSQLも使っていなかったので、SAGUをデータベース不問とすることに決め、common.php と言う構造体(実際はPHPプログラム)を作った。これはデータベース接続を扱い−別のデータベース変更の必要があるときは、common.phpだけを変えればよいようにした。後に、PostgreSQLに拘泥することに決め、SAGU及びMIOLOと言う別の無料ソフトウエア用に新トランザクション/プレゼンテーション・ベースを作った。
SAGUはSistema Aberto de Gestão Unificadaの頭文字で、オープン統一管理システムの意味だ。SAGUは、学生と教科との間のすべての関係を、入学から卒業まで自動化する。
SAGUは2000年7月から稼働した。最初の製品バージョンは、開発者グループが6ヶ月以内で開発した。SAGUサブシステムは、教科の機能を模倣しようとするので、入試(回答の光学読取、分類、教室割り当て)入学手続(学生の選択科目、必修科目)学校データ(評点、学歴)経理会計データ(給料、前払い、奨学金、銀行その他とのインターフェイス)を扱うモジュール及びレポートツールを有する。
現在、SAGUはオブジェクト指向技術を用いて書き換え中で、データベーストランザクションとプレゼンテーションのすべてをMIOLO (MIOLOはポルトガル語で、パンの中身の意味)で扱おうとしている。
SAGUの詳細とソースコードは、http://sagu.codigoaberto.org.br/ で入手出来る。残念乍ら情報の殆どはポルトガル語である。SAGUを南アフリカで働かせるため、スエーデンのKaziroの強力で英語版を準備中である。Kaziroのアドレスは、 kaziro@spray.se 。教育分野に携わっておられる方なら、GNUTECA に興味を持たれるかも知れない。アルファテスト中だが、品名カタログ、ローン及び協力システムを含む図書館管理に関する無料ソフトウエアである。GNUTECAはライブラリ標準(MARC)と互換性があり、CDS/ISIS システムのユーザーのため、無料ソフトウエア世界へ良き移住パスも備えている。GNUTECAの詳細は、http://gnuteca.codigoaberto.org.br/.へ。
デスクトップPCにGNU/Linuxを使う人が増えるにつれ、マシン1台だけのユーザーが当たり前になりつつある。多くの新ユーザーは、linuxのサポートするマルチユーザーログインを殆ど使わない。新ユーザーからの要求の多くは、単一非優先ユーザーのため、ログインIDやパスワードを入れないで、グラフィカルデスクトップ環境(つまりKDEまたはGNOME)に自動的にブートアップするよう、Linuxシステムをコンフィギュアしたいと言うことである。
この質問が余りに多く、他に案内書がないので、そのような役目を果たすに十分ではないかも知れぬこの記事が、何かの指針になれば幸い。
プリパケージ・ソリューション
自動ログインは前にも提案されており、一つの答がLinux Gazetteの古い号に載っている (http://www.linuxgazette.com/issue27/kodis.html) 。特定のソリューションは、ブートアップの際 init が立ち上げる /sbin/mingetty プログラムに手直しを必要とする。(手直しの方法はhttp://users.jagunet.com/~kodis/autologin/autologin.htmlを参照)。仮想コンソール上の自動ログインは出来るが、これ自体では、グラフィカルデスクトップを起動しない。ヒントと設定方法は下記を読まれたい。
代わりに、自動ログイン・パケージ(http://www.linux-easy.com/development/autologin/) を搭載することも出来る。これは、ブートアップの際にグラフィカルデスクトップの立ち上げも扱うことが出来る。これを標準で含むGNU/Linuxディストリビューションは余り多くない。
自動ログインは kdm ( xdm -- X11 ログインマネージャの KDE-スタイル代用品)の最新版が備えた特徴である。/etc/kde2/kdmrc をエディットして次の行をアンコメントにする:
AutoLoginEnable=true AutoLoginUser=fred
これで、スタートアップに際し、ユーザーの介入なしに、fred に自動ログインして fred の選んだグラフィカルデスクトップを起動するよう、 kdm がコンフィギュアされる。Mandrakeは、kdm 特性を可能にするGUI成分を備えているので、面倒なテキストエディットは不要である。
しかし、kdm は必要ないかも知れない( kdm は古いPCには重荷で、ディスクスペースが足りないかも知れぬ)。幸い、手直しや追加ダウンロードなしで、ブートアップ直後に仮想コンソールの一つに自動ログインする方法がある。この手順は少し沢山のものが関係するが、程々のGNU/Linuxボックス−GNOME, KDE, kdm は不要−で働く。Xなしでさえも、ブートアップに際してコマンドプロンプトに自動ログインする。
ボルト−ナット法
好みのテキストエディタを使って、 autologinfred.c と言う名のファイルを作り、この短いCプログラムをタイプする:
int main() {
execlp( "login", "login", "-f", "fred", 0);
}
execlp システムコールは、コマンド "login -f fred" を呼び出して、現在の処理手順をこの呼出で置き換える。 login dに関するマニュアルに -f アーギュメントの説明がある。GNU Cコンパイラを使ってこのCプログラムをコンパイルする:
$ gcc -o autologinfred autologinfred.c
ルート優先権を獲得し(suを使って)実行可能プログラムをパブリックディレクトリにコピイする:
# cp autologinfred /usr/local/sbin/
ここで /etc/inittabを眺める。これは、Linux初期化のときスタートする一番最初のプロセス init が使うコンフィギュレーションファイルである。次のに似た行がある筈だ:
1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3
/etc/inittab の正確な内容はディストリビューション毎に異なる。 Debian システムでは次のようになる。:
1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3
"1:2345" で始まる行をエディットして、次のように書き直す:
1:2345:respawn:/sbin/getty -n -l /usr/local/sbin/autologinfred 38400 tty1
上記により、ユーザー fred が自動的に第一仮想コンソールにログインされる。GNU/Linux ディストリビューションによっては( RedHatなど)、代わりに /sbin/agetty を使わなければならない。gettyに対する -l <alternative login> アーギュメントが、規定値 /sbin/loginプログラムを、前にコンパイルしたもので置き換える。 -n は getty にユーザーIDをプロンプトしないよう命じる。
ログインに際するデスクトップ初期化
リブートすると、ユーザー fred が自動的に第一仮想コンソールにログインされるので、コマンドシェルが自動的にスタートする。グラフィカルデスクトップを起動するには、ユーザー fred にさらに startx コマンドをタイプインしなければならない。これも自動化出来るだろうか?
fred のログインシェルが /bin/bash であるときは、実行すべき最初のコマンドは常にファイル ~fred/.bash_profile にリストされている。 startx コマンドをここに加えることは出来るが、それでは問題が起こる。なぜなら、.bash_profile は、第二の仮想コンソールにログインうするときや xterm を開くときなど、別の状況でも使うからである。そこで代わりに、次の行を加える
if [ -z "$DISPLAY" ] && [ $(tty) == /dev/tty1 ]; then startx fi
第一仮想コンソール上でスタートした新ログインシェルはいずれも、自動的にグラフィカルデスクトップを起動する。囲んでいる ifステートメントは、ログインシェルがデスクトップから立ち上げられたこと、つまり、第一以外の仮想コンソールで起動したものは、直ちにはGUIデスクトップをスタートしないこと、を保証する。 /bin/shのユーザーは上記を ~fred/.profile に追加し、 tcsh のユーザーは上記を等価 csh スクリプトに転換しなければならない。
GUIデスクトップが( xdm, gdm,kdmなどを経由して)既に働いているときは、代わりに startx -- :1 を呼び出す。1台のデスクトップだけを働かせる必要があるときは、ランレベルを下げるか (RedHat)、または /etc/rc?.d/S99?dmスタートアップ・コンフィギュレーション・ファイルをアンリンクして (Debian)、存在する Xserver インスタンスをディスエーブルにするのが良い。
変形
これで、マシンをブートするときはいつでも、ユーザー fred が自動的に第一仮想コンソールにログインされ、 bash ログインシェルが起動され、~/.bash_profile をソースとなり、startx が呼び出される−すべてにユーザー介入またはパスワード記入は不要だ。
さらにこの ~/.xinitrc ファイルを使って、特定のデスクトップ・アプリケーションを起動させることが出来る。(詳細は startx マニュアル)ここに好きなゲームを置くと、Linuxボックスを飾りのないゲームセンター機械のように使うことが出来る。 Ogg Vorbis プレーヤを立ち上げると、専用ミュージックマシンになる。
プロンプトのないログインはまた、グラフィックでない場合にも有用だ。 /usr/bin/top を自分のシェルとして持つ特別ユーザーをログインする工夫にすることが出来る。ここでは、仮想コンソール一つを活動プロセスの会話的リスト専用とする。可能性は無限だ。
まとめ
LinuxはWindowsに比べ、安定、廉価(ダウンロードすれば無料)、付属ソフトウエアが多数、など数々の長所がある。なのに、殆どのPCで使われないのは何故だろう?
不格好で使い難いと言う人もいる。確かにコマンド行Linuxは万人向きでないかも知れないが、最近のディストリビューションには、自動搭載CD、ドラッグ・アンド・ドロップ機能など、新しい利便性も備わっている。もっと洗練すべき面もあるが、平均的ウエブサーファーや事務員には、GnomeやKDEデスクトップは、ウインドウズより少しましだ。それでも使われないのは何故だ? 私の経験が説明に役立つかも知れない。これから述べる話は、面倒を避けるため名前だけ仮名にしたが、全部本当の話だ。
私は中規模(職員全部本当だ。
私は中規模の本屋で働いている(店員20名、年商250万冊余り)。古いDOSベースのPOSを使っているが、来年にはウエブベースのシステムになる。この新システムは、Windows XP搭載PCを各勘定場に置くので、莫大な投資になる。だが代わりにLinuxを使えば、端末当たり$300から$400の節約になると踏んでいる。また私のデスク用にポータブルワークステーションが必要になった(店用にe-メールニュースレターを開設する積もり)。そこでラップトップにLinuxを搭載することにした。これは、Linuxを私が理解すると同時に、職場の人間に示し、Windows以外のOSを薦める機会になると考えた。新POSシステムがデモ段階(ベータテスト)に入ったとき、私のLinuxワークステーションはそれに繋げる状態になっていた。ウエブベースと考えたので、Linuxでは普通のウエブブラウザの一つや二つは、それらと正しくインターフェイスすると思った。我が社のオフィスサーバーがApache ウエブサーバーを使って働くか否かは全く別の問題だったが、店中の一つ一つのターミナルは、基本的に、ウエブブラウザであると思われた。
色々はLinuxディストリビューションを調べて、Linuxで最も有名なものの一つに絞った。サーバー/クレジットカード・サポートを約束したからだ。(これはウェブベース・キャッシュレジスタに絶対必要だった)その上で、月次の保守支援契約の締結を進めた。我が社のPOSシステムは文字通り全店で働くので、技術的問題のあるときは店を閉めて全員を帰宅させる訳には行かない。このLinuxディストリビューションを「商業Linux」と呼ぼう。これこそが明らかに彼らの狙う市場だからだ。
新ラップトップが買えなかったので、中古IBMシンクパッドを買った。Googleで調べたところ、買ったのと同じモデルで沢山の人がLinuxの各種機能を楽しんでいた。Linuxが色々な方法で搭載出来ることは知っていたが、入札前に「商業Linux」で点検して、CD-ROMがシステム環境として記載されていないのを確かめた。PCMICAイーサネットカードも、「商業Linux」のハードウエア互換性リストを点検して「サポートされておりインストールが楽」と記載されているのを見出した後、購入した。
「商業Linux」を家のデスクトップPCに搭載してソフトウエアに感心した。プラグアンドプレイはマイクロソフトの改良デスクトップ並だった。プリンタ設定のインストラクションが良くて、スムーズに進んだ。ftpサーバーを設定し、Installファイルをコピイして確信を持って「商業Linux」を新規に入手したラップトップに搭載した。
プランA:デスクトップとラップトップの両方をイーサネットケーブルに繋いでPCMICAブートディスクをラップトップに挿入した。3com PCMCIAカードはLinux kernel がサポートしているが、PCMCIAブートデスクはしていない−ラップトップの空白HDを余り使っていない。「商業Linux」ウエブサイトにも綺麗なインストレーションマニュアルにも、PCMICAブートディスクがどちらのネットワークカードを実際にサポートするかはリストは含まれていない。
プランB:デスクトップの「商業Linux」にはPLIPサーバーが含まれておりそのブートディスクにはPLIPドライバが含まれている。そこで、パラレルポート、つまりラップリンクケーブルをつないで、ネットワークインストールをしようとした。どうなったと思いう?「商業Linux」はネットワークインストールの仕方につき何のインストラクションも示さない。ウェブサイトには示されず、印刷インストラクションガイドにも説明はなく、質問にe-メールすると、2ヶ月の顧客サポート($80を支払っている)にネットワークインストールは含まれていないと言われた。そこで1週間掛けて思いつく限りの可能なあらゆるオプションとコンフィギュレーションを試したが、全く接続出来なかった。ふと「商業Linux」のインストレーションソフトウエアが規定値で設定するファイアウォールに思い当たり、これが接続を切っていると思った。どうだったと思う?「商業Linux」にはファイアウォールプログラムにはファイアウォールをコンフィギュアする方法についてのインストラクションは何も含まれていない。「商業Linux」ウェブ上でファイアウォールを検索した。持っていた最新のリストは三つのソフトウエアバージョンからの一般的情報だった。インストラクション無しでファイアウォールをコンフィギュアしようと数日を費やした末諦めて、ファイアウォール無しでデスクトップに再インストールした。ここでもPLPサーバー(驚いたことにこのインストラクションはない)について思いつく限りの可能なあらゆるオプションとコンフィギュレーションを試したが、まだ全くネットワークにつながらない。インターネット検索中最後に、「商業Linux」は最早PLPインストールをサポートしないとの第三者ウエブサイトを発見した。(事実であるのは電話で確かめたが、「商業Linux」自体のウェブサイトには全く記載されていない)
プランC:インストレーション・ファイルのコピイとHDドライブ・インストールにランップリンク・ケーブルを使うことが出来た。良い方法に思えたが、試して見て色々なことが分かった:殆どのLinuxディストリビューションは、ディレクトリ構造体を目標HDに単にコピイさせるが、「商業Linux」はその全インストレーションCDのISO9660イメージをHDにコピイさせる。悪いことに「商業Linux」は必要パケージの幾つかを第二CDに入れている。だから、1.4GB位のインストレーションファイルになる!(Windows98SEは400MB以下、他のLinuxディストリビューションは完全デスクトップ用に100MB以下)。私の場合、普通の要件を超えるラップトップには、「商業Linux」とLinux OS の双方を同時に入れる余地はない。冗長であるのを承知して「商業Linux」ウエブサイト及びそのマニュアルは、真に必要でないプロシージャ、ファイルリスト、HDスペース要件を説明している。それに、電話で質問したとき、カスタマサービスの人は、間違った情報を呉れた。ラップトップのOSをWindowsに代えた。HDインストールをしないで、cab ファイルをコピイし、 "install" をクリックするだけで、インストールは済んだ。
話はかわるが、「商業Linux」をデスクトップで働かせた。工場CDはSstarOfficeの三つのバージョンを含んでいたが、一つその以上は正しくインストールされなかった。そのウエブサイトにSstarOfficeに関する問題に関する情報はない。ウェブサーチをしたらその「商業Linux」に苛立った他のユーザーが既に、SstarOfficeが「商業Linux」の最新版と互換性がないと結論付けていた。別のワープロを試した(これも工場CDから)。これは正しくインストールされたが、立ち上げるや否や、コンピュータもキイボードも全体をロックした。ファイルシステムが壊れてLinuxさえブートしなくなった。この点から、「商業Linux」は第三者ソフトウエアを自分のOSでさえ試していないと疑う。
すべてを告げて、「商業Linux」にインストレーション問題を聞いた。全部三つの間違った回答を受け取った。一つは問題の議論を拒否、一つはe-メールが戻された。それは「商業Linux」だけではない。別の四つのLinuxディストリビューションにHDドライブインストールをサポートするかを聞いた。二つは全く返答なし、3番目は翌日e-メールして、製品登録番号を先ず示さないとどんな質問にも答えないと拒絶した。一つだけが、時間が掛かったが回答をくれた(次回どのディストリビューションを買うか当ててご覧)
対照的に、IBMのシンクパッドサポートは素晴らしかった。私の760EはWindows3.xと95の転換期に作られた。IBMのウエブサイトには両OS用のデバイスドライバの(98用ソフトウエア手直しも含む)完全なセット、膨大な文書、インストレーション覚え書き、故障探査ガイド、実際探すもののサーチエンジンが揃っていて、全部無料で利用しダウンロード出来る。
ある点では、Linuxは既にWindowsの提供するより良い文書を作っている。Linuxに埋め込まれたマニュアル("man pages") がある。熟練ユーザーが書いた沢山の外部インストラクションがある。注意深いディストリビューションならこれら資源を活用して、運営、サーバー設定などに関する共通問題につき(自分のディストリビューション特有の)広範なヘルプファイルを作ることが出来る筈だ。明らかにこんな考えを持った人はいない。
それは多分、Linuxが伝統的にコンピュータ狂、趣味としてコンピュータをいじくる人、またはUNIXに慣れた人に売られていたからだ。その結果、Linuxディストリビューションを作る人は「ソフトウエアをCDに入れたよ。そのソフトウエアが使えるか、必要な情報が手に入るかは、我々の問題ではない。我が方でなすべきことはしたから、金を送れ」と考える癖がついたのだと思う。この同じ人が、一般公衆にも中小企業にもLinuxは何故売れないのかと考える。
世界はソフトウエア販売業者を求めている!働かなかったり、働かせるに必要な基本事項を顧客が承知していなかったら、どんな良いソフトウエアでも売れない。Linux販売業者のため乱暴で急進的な考えを述べる。第一に、詰まらないソフトウエアか発表前に試験すること、ビデオドライバ全部をテストすることは出来ないが、出荷しようとするソフトウエアが正しいディレクトリにインストールされ、OSと明らかに互換性がないこと位はテスト出来る筈だ。多くの販売業者はそうしようとしており、最新最大のソフトウエアを常にテストすること出荷を急ぐこととの対立する要求に悩んでいると思う。しかし、ビジネスユーザーとしては、発表を数週間待っても、働くソフトウエアを手に入れたい。小さい販売業者が包括的テストに必要な資源を持っていないならA)ソフトウエアにテストしていないと注記するB)一般的インストール手順、ディレクトリパスなどの情報を含めて、ユーザーがパケージを正しくインストールする機会を見付けられるようにする。
第二に、適切な文書を作成する!販売業者に簡単なテストをして見よう。ラップトップを持って地方の学校に行く。コンピュータ科学の教室で、linuxを知らない学生三、四人を任意に選ぶ。(ユーザー用に用意した文書に基づいて)何かのソフトウエアのインストールかオペレーションをやってくれたら皆にピッツアを買おうと提案する。ピッツアが出来上がるまでに、少なくとも扱い方を彼らが呑み込めなかったら、十分な情報を与えていないことになる!別の"Guide to Linux"ことを言っているのではない。Linux自体の文書は良く出来ている。然し、個々のディストリビューションは、インストールに必要な情報をほとんど提供せず−貴方まかせにしている。Linux販売業者大手が、基本的埋め込み文書を含んでいない限り第三者ソフトウエアを受け付けないその方針を立てれば、全Linux社会のバーを上げることが出来るだろう。
私のラップトップは?インターネットの小さいディストリビューションをダウンロードした。HDのインストールを知っていたそれを「パパママLinux」と呼ぼう。グラフィックデザイナの配置してインストレーション・マニュアルの代わりに、4ペイジの一般的Linux「ハウツウー」を持っていた。殆ど支障なくLinuxをラップトップにインストールした後、「パパママLinux」のブートローダーが働かなくなった。明らかにtarballからRPMに切り換えられ、多分その結果、どんな新プログラムもラップトップにロード出来なくなった。コンピュータをブート出来ることとプログラムをインストール出来ることが、OSに対し本当に望んでいたことなのに。然し、少なくともLinuxがシンクパッド上で働くことは証明した。
この時、プロジェクトは2ヶ月遅れになっていた。IBMのウエブサイトを検索して、ドッキングステーションを追加すれば、私のラップトップに(ブート不能)CD-ROMドライブと(ブート可能)フロッピイとを同時に持つことが出来ると知った。必要ハードウエアを整えるのに予算を50%超過したが、結局Linuxラップトップが機能した。前の「パパママLinux」のインストールからXウインドウの正しい設定が分かっていたので、喜んで「商業Linux」をそのCDからインストールした。どうなったか?「商業Linux」のXサーバーがラップトップでは働かない。予想通りビデオチップをリストした。設定すべてを念入りに点検したが、"startx" とタイプして出て来たのは1ペイジ半にエラーリストだけだった。「商業Linux」についての今までの経験から、問題解決に必要な情報をウェブサイトで見付ける希望を持った。その技術サポートは何も教えなかった。60日のインストレーションサポート期間が過ぎていたからだ。
私の本屋に関する限り、Linuxはどんな小企業にも価値ある代案にはならないと今は信じる。仮にそうしても、「商業Linux」にオフィスネットワークをサポートする能力があると経営者に信じさせることは出来ないだろう。IBMシンクパッドへのインストレーションをサポートする能力さえないことを示したからだ。
妙な話だが、私は未だLinuxが良いOSであると信じており、機能的ディストリビューションを捜している。だが、今のところ、私のシンクパッドで実際に働いているOSはWindowsだ。本当はLinuxを走らせたい(Windows XPが支配的になったら、ラップトップでLinuxを走らせるか、投げ捨てるかだ)。Linuxを走らせたいと思うビジネスマンは沢山いると思う。だが、幾つかのLinux販売業者がまとまるまで、そうはなるまい。
たとえ話を言おう:車を捜しているとして、この新車は50MPGで値段は$5000と聞いたとしよう。だが、買おうとすると、タイヤがないと言われ、発電機もない(だからバッテリ充電に何か別の方法を考えなければならない)としよう。その上、ブレーキが働かないので、余りスピードを出してはいけない。そして、車が壊れたら、車を売るディラーは車に手を付けないので、自分で予備品を見付けて自分で修理しなければならない。そんな車を買うだろうか?もっと重要なことは、明日の仕事のため信頼性のある輸送手段を必要とする人に、そんな車を薦めるだろうか?多くのLinux販売業者が、そのソフトウエアを買う人に言っているのは、正にこう言うことなのだ。自動車のたとえ話に返ると、同じ販売業者が、大声でシボレーがラジオを標準装置に入れるのは不公正だと文句を言っている。よろしい、シボレーを買わない人々は、ラジオを組み込んでいるからだろう。シボレーを買う人々は、タイヤが付いていて、故障すればディラーが直して呉れるからだろう。同じように、人々がWindowsを買うのは、ボックスの外で働き、マイクロソフトは働かないとき少なくともサポート提供しようとするからだ。
Sun SPARC Ultra 5へのLinuxインストール
(ソラリス・デスクトップ上のLinux画面を見るには下記をクリック)
オープンソース・ソフトウエア開発者として当然だが、私はすべての仕事をLinux OS 上でおこなう。利用出来るソースコードは全部持つのが有利なのは周知だ。一例だが、私は(Open Source Audio Library Project)と言うプロジェクトで働いている。オーディオ機能を持つC++クラス・ライブラリだ。開発中、あるオーディオサンプルレートで、Linuxデスクトップではうまく行くテストがLinuxラップトップでは問題があることがあった。色々調べた結果、ラップトップの電源を切らないで別のOSを励起しLinuxにブートアップしたとき、オーディオチップのレジスタがリセットされないで、この問題を生じると分かった。オーディオ・コードの中のドライバを直したらうまく行った。手直しを Alan Cox に送ったので次のkernelリリース(2.2.17)に入る。この問題が販売用OSで起こったら手直しされることは稀れだろう。
ライブラリ試験の一部として、三つのことが必要となった。1)もっと多くのOSをサポート出来ること、2)最新CPUのサポートが出来ること、3)64ビットコンピュータをサポートできること、である。どのコンピュータが良いか考えた末、サン・マイクロシステムを選んだ。最も普及したUNIXコンピュータを作っており、新モデルは最新の64ビット UltraSPARC CPUを使っているからだ。
サンにはUltra 5と言うコンピュータがある。新品は$2000 - $3000はするが、中古なら約 $500 - $700だ。270 Mhz UltraSPARC II プロセッサ、メモリ 64MB、HD 4.3 GB の中古を買った。選び方はhttp://www.linuxdoc.org/を点検するとよい。またソラリス8もサンから$75で買って(www.sun.com/software/solaris/binaries/get.html) 搭載した。私のソフトウエアをソラリスに移植した。Ultra 5 にはLinuxも搭載し、両方で働けば良いと考えた。以下はLinuxをUltra 5 に搭載した経験だ。
ステップ1−ディストリビューションの選択
SuSEが好きなのでSPARCディストリビューションに決めたが、ディストリビューションを決めていない人はhttp://www.ultralinux.org/ ウエブサイトを点検すると良い。サン・ワークステーション用にLinuxをサポートするディストリビューションの一覧がある。
ステップ2−インストレーションの計画
4.3GBのHDしか持っていなかったので、SolalisとLinux両方を入れるのは難しかった。LinuxをSPARC I を搭載した経験がなかったので、最初は中古の3GBHDを買って搭載試験をした。問題はなかった。SuSEのYaST2と言うインストーラを使って、パーティションを作ることは出来なかった。YaST2には二つのオプションがある。オートマチックと人手カスタムだ。オープションでも人手でもパーティションを作ることが出来なかった。最後に、ドライブをフォーマットする必要があると考えてソラリスを搭載することに決めた。うまく行ったようだった。この後YaST2を走らせ人手カスタム・パーティションメニューを使ってSunOS Swapパーティションを残した後、16MB/ブート・パーティション、2GB/パーティション、200MB/Linux swapパーティションを作った。ファイルのこのインストレーションの後はうまく行った。非ソラリスディスクを使うときは、fdiskを走らせてHD上にSolarisディスクラベルを作る必要があると、後に、ウエブサーフィン上で発見した。このラベルはそのHDの第一パーティションに記憶されるので、これをLinux swap パーティションにすることは出来ないことも分かった。
そこで本当の搭載に入った。初めから終わりまで完成したかったので20GBの新HDを購入してUltar 5に取り付けた。電源を入れてUltra 5の初期化中にStop - Aキイの順で押した。これでUltra 5のPROMに入る。CD-ROMドライブにinstall Solaris 8 CDを入れて"boot cdrom" と入力するとSloaris のインストールが進む。インストールがHDを探ってもスペースがない。Solaris Gazetteでないからだ。そこでコマンドプロンプトからformatを入力して第三パーティション(2#)にバックアップラベルを作り、そのほかに0を入れてこれをHDにラベルした。その後Solaris 8のインストールに戻って成功した。
Solaris インストールのため、512MB Solaris スワップパーティションと2GB /export/homeを持つ5GBのルートパーティションを作った。ここでLinuxのインストールに取り掛かり、先ずSuSE CDをインストールしてコンピュータを再ブートした。ブートが始まったときStop-Aを押して"boot cdrom"とタイプした。YaST2 を走らせてマニュアル・パーティションエ・ディットを選んだ。512MB Linux スワップパーティションと、16 MB ブート・パーティションとを作り、Linux パーティションとした。
ステップ3−Linuxソフトウエアのインストール
次ぎにLinuxをインストールする。好きなパケージを選んだのでSILOコンフィギュレーション付きだった。カスタムSILOコンフィギュレーションを選んで検証した。SILOはブーと・パーティションにインストールした。MBR(マスター・ブート・レコード)でなくこれにしたのは、LinuxとSolarisの何れかを選ぶのPROMの中のOpenBootを使うからだ。SILOをブートにインストールすると、色々なLinux kernelをテストしてブートすることが出来る。それからユーザーアカウントを作ってルートユーザーのパスワードを入力した。その後、全部で124のソフトウエアをインストールした。
誰もがLinuxインストール後におこなう残りの作業にはYaSTを使った。ネットワーク用にはSun Happy Meal 10/100base Tインターフェイスを選んだ。他のネットワーク設定は、インテルシステム上のLinuxと同じである。続いて最初のCD-ROMのマニュアルにしたがって、Ultra5用のオーディオをコンフィギュアした。/etc/init.d/boot.localの中のファイルに次の2行を付け加えた:
modprobe audio modprobe cs4231
ここでの唯一の問題は、マニュアルではファイルが/sbinでなく/etcの中にあると書いてあることだ。経験者にはこれが間違いと直ぐに分かるが、初心者にはわからない。SeSEに通知したところ、直ちに返事があり、訂正したとのことだった。
オーディオ・アプリケーションを走らせようとしたところ、オーディオ・デバイス /dev/audio 上のオープンコールが話中になって戻らなくなった。調べたところ、KDEがそのデバイスを使うオーディオサーバーを走らせていた。KDEコントロールパネルに戻ってこのオーディオサーバーを止めたら、うまく行った。
次ぎにSolaris 8ディスクパーティションをLinuxに搭載して見られるようにした。Solarisの使うパーティションはufsと言う。能力は経験的だとあったので、次のようにしてSolarisから/と/homeの両パーティションをLinuxに搭載した。fdisk /dev/hda"を実行して第一HDにあるパーティションをリストアップする。/として/dev/hda1、/homeとして /dev/hda8があるとわかった。取付ポイントを、/と決めて次のようにした:
cd / mkdir sun_root mkdir sun_home Next I added to /etc/fstab the following lines: /dev/hda1 /sun_root ufs defaults,ro,ufstype=sun 1 0 /dev/hda8 /sun_home ufs defaults,ro,ufstype=sun 1 0
これで取付ポイント"mount /sun_root" と"mount /sun_home"が取り付けられた。これでSolarisパーティションをLinuxから見ることが出来る。
ステップ4−ジュアルブートのコンフィギュレーション
次のステップはUltra 5上に二つのOS間のブートを設定することだ。殆どの人はインテルマシンのLinuxではLILOに慣れているだろうが、SolarisではSILOになっている。私は、各種Linux KernelをブートするにはSILOを使うが、SolarisとLinuxの間のブートには、Ultara 5上のOpenBootと呼ばれるPROMを使う。Ultara 5すべてにある筈のOpenBoot 3.xバージョンには次のインストラクションが通用する。OpenBoot プロンプトを出すには、 Stop-Aキイを押す。プロンプトが出たら、devaliasをタイプすることが出来る。これで定義したalisas全部がリストされる。次のようなディスクエントリが見える筈だ。
disk /pci@1f,0/pci@1,1/ide@3/disk@0,0 disk3 /pci@1f,0/pci@1,1/ide@3/disk@3,0 disk2 /pci@1f,0/pci@1,1/ide@3/disk@2,0 disk1 /pci@1f,0/pci@1,1/ide@3/disk@1,0 disk0 /pci@1f,0/pci@1,1/ide@3/disk@0,0
右側の中身は、全部デバイスエントリである。ここで自分のaliasを作ることが出来る。私はLinuxとSolarisの二つを作った。
linux /pci@1f,0/pci@1,1/ide@3/disk@0,0:d solaris /pci@1f,0/pci@1,1/ide@3/disk@0,0:a
disk0のエントリがあるが、これはインテル上のLinuxにあるハードドライブ /dev/hda である。デバイスエントリの右側にある:は、そのHD上のパーティションを指す。だから、第一パーティションを指すには最後に:aを、第四パーティションを指すには:dを用いる。これらのエントリを非揮発性RAMに記憶するには、OpenBootでnvaliasコマンドを使って上のエントリを作る必要がある。エントリのあるaliasが右にあるときは、新しいaliasで置き換えられることに注意。
OpenBootに設定することが出来る別のパラメータがある。それは次ぎだ:
setenv auto-boot? = false
これは、電源投入のときokプロンプトでコンピュータを止める。これにより、solarisか linuxか、どのOSをブートするか選ぶことが出来る。"boot solaris" 又は "boot linux" とタイプするだけで十分だ。
ステップ5−雑記
以下は Linux をSPARC上で扱って発見した諸々の事柄だ。
1.ブートの間にkernelから "Unimplemented SPARC system call 69/44" のメッセージが出たら、無視する。システムコール44と69はgetuid32()/geteuid32() でこれはUltraSPARC上では必要ない。
2.UltraSPARC上のLinuxに付いて読んだところでは、kernelは明らかに64ビットだが、userland は未だ32ビットだ。何を意味するか分からないが、アプリケーションを64ビットでコンパイルすることは出来なのを意味すると思う。
3.SuSE 7.1 やその他のディストリビューションではStop-Aキイが働かない。SuSEではmisc セクションに行くことによりこれを YaST2 中で働くように出来る。私はこれを働かせようとしたが、Stop-Aをおこなったらコンピュータが止まってプロンプトが出なくなった。Linuxのときはそのままにするのが良さそうだ。
まとめ
最初のディスクパーティション問題を除いて、すべてうまく運んだ。だが、ディスクの問題ではいらいらした。SPARCディストリビューション上のLinuxにはSuSEを推薦する。各種ソフトウエアを開発されたオープンソースLinuxのプログラマ皆様に感謝したい。
はじめに・・・
物語を書いたり語ったりする人に対する常套句に「知っていることを書け」、「発端から始めよ」と言うのがある。そこで、「我々の」発端から「我々の」知っていること、ネットワークの始まり、ハードウエア技術者、コンピュータ科学者、システム管理者その他我々の世界にいる人達、に焦点を当てたい。
アイデアが生まれたのは、Binary Freedom(バイナリの自由)のため書かれたAdventures in Babysitting(子守の冒険)という題の記事に付いてクリス・キャンベルと私が意見を交わしたときだった。この記事は、次代の若者に対するクリスの慨嘆を述べており、技術の歴史に対する彼らの無関心と無理解を描いている。始業ベルが鳴ったときアドミラル・ブレースやケン・トムソンのような名ははない。彼にとっては落胆する経験だった。これらの人は結局彼の英雄になった。これらを探求するため、このコラムを提案する。
そこで、最初に近いところから始めるため、コンピュータのゴッドファーザ、チャールス・バッベイジから始めたい。
別の種類の始まり・・・
チャールス・バッベイジは、コンピュータの父、祖父、パトロンなど色々な名で呼ばれる。すべては彼から始まる。私はコンピュータのゴッドファーザと呼びたい。理由はこの物語でわかる。
バッベイジは1791年英国デボンシャーの富裕だが平凡な家庭に生まれた。少年の頃から、「何故」を超えて「どのように」の疑問に関心を持った。この疑問の現れは、玩具や家中の機械を分解したことに見られる。
「性格破綻」探求・・・
技術者である私の義父は、好んで技術は性格破綻の現れだと言った。彼の意見では、技術者は世界を変な、然し同じような、一種の精神障碍の見方で考え観察する。何か新しいものを見付けると、引き離そうとする。何か問題を見付けると、自分の専門であろうがなかろうが、「一番良い解決策」を提案する。一般的に、世界は、良い技術者だけが解決出来る壊れたパズルのようなものだ。私には彼の指摘が分かる。一方、どう働くのか理解するため骨董の時計を壊すことは少なくとも乱暴だと見なされる。最後には、残骸に爪をかけたまま「普通の」優雅な人に窓から放り出される。
面白いのは、この「破綻」が子供の頃かた見られることだ。早くから兆候があらわれる。時計を壊したり積み木から素晴らしい建物を造る趣味のある子供は、後々技術者になる。あらゆる点でバッベイジは、子供の頃迷惑がられていた。好奇心に目を輝かせて、ものを壊すのは明らかな兆候だった。技術者の兆候は早く捕らえられて注意深く扱われれば消えるものだが、彼はその幸運に恵まれなかった。彼の運命は学校図書館で「子供数学者の案内」に出会ったとき決まった。このときからバッベイジは生涯を合理的な考え方と科学的知識に捧げることになる。
学校を卒業して、バッベイジはケンブリッジを目指し、トリニティ・カレッジに入った。トリニティにいる間、読者の何人かは御存知の方法で、注意深い学生が自分の講師の忍耐力と能力を試す傾向がある。バッベイジと同じ数学の道を歩むその解析学会が見た反乱事件が、英国でなされた。
当時、英国では殆どニュートンの「ドット記号」を使う複雑な数学を好んだ。記号の選択は実際の利用より市民のプライドだった。物事のあるべき姿の冒涜だと思った。それは、効率と明確さに反し、バッベイジの合理的感覚を傷つけた。彼は代わりにライプニッツが完成しヨーロッパで広く使われている科学的記法を支持した。バッベイジの属する解析学会はラクロニクスの「微分及び解析計算に対する例」をフランス語から翻訳して、科学的計算に切り換える戦いを主導した。この業績が英国に近代計算を持ち込む助けになった主要事件の一つと見なされている。
アイデアの始まり・・・
バッベイジの計算機械に関する最初の見解についての物語は色々あるが、それら全部は能率が悪く不当な複雑さに耐えられないバッベイジの気持ちに焦点を当てている。バッベイジは、当時の複雑な計算の助けに使われた「計算表」の幾つかを調査したらしい。それらに含まれる数多くの間違いは、彼とその協力者を忽ち苛立たせた。表は普通手書きで写されるか印刷用の板に転写されたので、途中で間違いが入るのは避けられない。百年も前の間違いが、船の航路を誤らせたり経済計画を狂わせたりしている。
バッベイジは、協力者にこれらの計算が蒸気で出来たらと洩らしたと言われている。この考えが最初のプログラム可能機械計算器になった。これは後に、Difference Engine(差分エンジン) として生まれ、さらに後にはもっと野心的で多様なAnalytical Engine(解析エンジン)の計画となった。1820年のことだ。
計算機械・・・
計算機械についてのバッベイジの最初の試みは、複雑な計算を助ける数値差分に長所のある歯車六個の小さいモデルの形を取った。Difference Engine(差分エンジン) と名付けられたこの機械は、強力で簡単な点が優美だった。
バッベイジは、反復算法に還元出来る計算はいずれも機械化出来ることに気付いた。早くから彼がこの合理化の線を自動化の哲学として貫いたと思われる。自動化は、動物、バレリーナ、音楽家などの生き方を真似た機械的創作だ。複雑だが、反復性の数学の仕掛けを追うことによって、自動化を通常でない生き方と見なすことが出来た。バッベイジが興味を持ったのは、この制御された、殆ど目に見えない複雑さであった。
バッベイジの表問題は、自動化のそれと同じだった。表を写すときの間違いを正す面倒に煩わされて、優れた機械に任せるのが良い解決策だと思った。バッベイジは差分法を用いて、この複雑な計算を助ける計算機械を作ることが出来ると考えた。以下はその方法である。
差分法・・・
差分の働きはこうだ。先ず一組の連続数を取り、それぞれに関数を設定する。簡単のため、開始数の二乗を使おう。次いで結果の間の差を次々と調べて、共通の数字が見付かるまで続ける。見付かったら、今度は逆順で加算(機械を作りやすい何か)だけをおこなえば、表中の一連の開始数について関数に対する答を満たすことが出来る。唯一の必要条件は、手順にしたがって、最終的に静止型となる「既知」開始数一定量から始めることである。
我々の例に付いて言うと、開始点として、1、2、3、4を用い、これをx列とする。関数列f(x)は、この場合x列の数を二乗して得られる。値は順に1、4、9、16となる。次の列delta1は、各f(x)の間の差とする。1と4の差3、4と9の差5、9と16の差7が得られる。次ぎにdelta1の間の差を取る。delta2に書く答は、3と5の差、5と7の差で、すべて2となる。差が同一の静止点に達した。一旦この点に達すると、この道を逆に辿って、表を満たすことが出来る。表は最初、次のようになっている。
| x | f(x) | delta 1 | delta 2 |
| 1 | 1 | ||
| 3 | |||
| 2 | 4 | 2 | |
| 5 | |||
| 3 | 9 | 2 | |
| 7 | |||
| 4 | 16 |
ここで、xの新しい値について、表に関数の値を満たす。なすべきことを点検して見よう。delta2列のトップの値(2)から出発する。これをdelta1列のトップの値(3)に加えるとdelta1列の次の値が得られる。5になる筈だ。以下同様にしてdelta2の列が満たされる。delta2列の値をf(x)列の値に加えると次のf(x)値が得られる。同様にして、次々と表を満たすことが出来る。x=5まで満たした結果を下に示す。
| x | f(x) | delta 1 | delta 2 |
| 1 | 1 | ||
| 3 | |||
| 2 | 4 | 2 | |
| 5 | |||
| 3 | 9 | 2 | |
| 7 | |||
| 4 | 16 | 2 | |
| 9 | |||
| 5 | 25 |
お分かりの通り、極めて簡単だ。これは機械的におこなうことが出来る。ここにバッベイジの非凡な才能がある。彼は多分勘で、証明の前に、複雑な計算が機械で出来ると察した。ユーザーが機械を使ったときの転写間違いを避けるため、バッベイジの目標は、得られた結果を印刷する一種のプリンタを作ることであった。バッベイジが導いた方法は、表の間違いを一掃した。彼が生涯主張したのは、彼の解決策が正しいことの認識であった。
解析エンジン・・・
バッベイジ差分エンジンの早期の原型は、大変な反響を巻き起こした。バッベイジはロンドン社交界の花形となり、彼が招待に応じるか否かがパーてーの成否を左右するほどになった。この原型は彼に15,000 から17,000ポンドの英国政府資金をもたらした。この資金は、完全な差分エンジン、後には解析エンジンと呼ばれる複合計算機械の開発に注がれた。
バッベイジの考えは証明され、理論家に受け入れられた。差分エンジン原型の原則証明を超える新版の作成に伴う彼の主な問題は、変わらぬ旺盛な好奇心だった。バッベイジは常に、目標達成の能率的な方法を発見し、機械製作上の精度問題を克服した。機械が工場を出るや否や、前の考えの改良が頭に浮かんだと言われる。この不変の好奇心が、進行中の計画の障碍になることもあった。気持ちが活発過ぎて、仕事の物理的完成を待つのがまどろこしかったのかも知れない。
バッベイジが完全な差分エンジンつまり解析エンジンを完成することはなかった。彼がロンドンの家で亡くなったとき、窓の外には彼に別れを告げようと国中から集まった流し音楽家(バッベイジが街頭から追放使用としたグループ)の不協和音が流れていた。グループの中に彼が友人を作ることは無かったと言える。だが我々は彼を覚えている。複雑計算を機械でおこなうとの避けられない考えの他に、彼は何を貢献しただろうか?
バッベイジの考えの美しさとコンピュータ科学に対するその功績は、その完全性にある。バッベイジは、パンチカード入力でプログラム出来るシステムを想像した。それは色々な型の計算をすることが出来、受ける命令の分だけ多様に、ソフトウエアを通じて多様に、なる。プリントの考えを通じて、バッベイジは、基本的にパンチカードとプリンタを通じる入出力(IO)の考えの先駆者だった。これを一歩進めると、彼の解析エンジンの考えは計算を記憶(パンチカードで)することが出来、記憶プログラムおよびプログラム可能論理にそれぞれ基づいて、それを後で続けたり、ある計算結果を他に流用したりすることが出来る。
残念乍ら、自分の考えが最終的に実現するのをバッベイジが見ることはないが、彼の見通しは、機械を正しく働かせ使用したラブレース伯爵夫人アダが踏襲した。彼の考えが歴史の闇消えないで恐るべき彼の業績が称賛されるのは、バッベイジの講義に関するアダの豊富な注釈付きノートのお陰だ。彼女のノートとバッベイジの日の目を見なかった計画は、1991年にロンドンの科学博物館が複雑な差分エンジン2号、解析エンジンの先祖、を構築したときの助けになった。彼は彼の見通しと考えにより評価されるべきである。彼が程々に成功するだけで世界は大きく変わっていただろう(可能な結果の一つは一つのギブソンとスターリングの差分エンジンを読まれたい)。バッベイジは、万人をパンチに駆り立てたので、コンピュータのゴッドファーザである。彼に利用出来た技術、金属加工、工作、蒸気、を駆使して、電子次代の早期コンピュータに似たものを作ることが出来た。
彼の見識は時代の前を行っていた。出来るだけ彼のようになりたいものだ。
私は色々な企業やプロジェクトで働いたが、その各々が独特のプログラミングスタイルや仕事の進め方を持っていた。早く仕上げたい余り、余り考えない。パート3を受け持つことになったので、Perl とPostgreSQLを用いて仕事を進める標準方法を述べ、あらゆることが専門的になるようにする。
良いコードですべてを標準化すると、すべてが易しくなる。個人的には、各テーブルが100%独特のIDを持つ標準記憶プロシージャ付きのデータベースを使わないプロジェクトを取り上げる気にはなれない。標準でない環境には入りたくない。時間が惜しい。私はR&Dに携わり、労力を使う仕事は人にやって貰いたい。
ある大企業では大きいデータベース設計を持っていたが、Perlプログラマはデータベース管理者の添え物だった。扱うのがおぞましいデータベースもあった。データベース管理者は尊敬するけれども、プログラマとして強くなるにはデータベースを担当しデータベース管理者は案内人になるべきだと思う。プログラマはデータベースを正しく扱う方法を知らず、物事を禁止するのでなく許可するため管理のある場所にいる。データベース管理者がプログラマを助けると思われるとき、不本意にも戦う羽目になった。ネットワーク管理者はデータベース管理者に使え、データベース管理者はプログラマに仕え、プログラマはボスに仕え、ボスは、秘書、経理部、顧客、営業、その他社内外の人々に仕える。言い換えると、底辺の人にとって唯一正当なのは、トップの仕事がうまく行くのを助けることだ。仕事を進める仲間を持たないコンピュータ野郎を沢山見て来た。コンピュータ人は、他の人が社内で使える目標を果たしたときにのみ価値がある。
毎日データベース管理と戦ったと大言壮語した上で、PerlとPostgreSQLのバート3ではまた、データベース管理の必要性が大幅に減ると考える。私のPerlスクリプトは、テーブルを削除する。これは生きたデータが生きたサーバー上にあるとき、データベース管理を必要とする悪事になり兼ねない。しかし、削除したテーブル全部をバックアップし、列が変更又は追加されたとき一つのテーブルから別のテーブルに移住させる能力を加える。それを用いて、データベース管理が仕事をするのに標準プログラマを締め付ける力がなくなるか、又はデータベース管理者の仕事がなくなり、給料が安くなる。高給過ぎるプログラマもまた高給過ぎるデータベース管理者と同じく問題なのだが!私は私がスクラッチから搭載したOSの世界のみを扱う。私はPerl, Apache, Zope, Python, PostgreSQL, MySQL をスクラッチから搭載する。使い易いウエブペイジになっている。ウエブペイジの下で問題を起こすものは何であろうと、私は取り除く。これが私の考え方で、プログラマに役立つ管理者だけを尊敬する。私はプログラマの仕事が制限されており、会社のトラブルを知らされていないのを何度も経験している。ネットワークとデータベース管理者がプログラマを優遇するなら皆が幸せになる(必要なときプログラマが駆けつけて手を染めるのが如何に阻害されているかを知るべきだ)。
すべてのテーブルに関し正確に記憶された標準のプロシージャ、ビュー、シーケンス、ID、タイムスタンプ、作動/不作動状態を用いて、良い結果を出す限り、データベース管理者は喜んでプログラマにデータベースを設計させるだろう。私のPerlスクリプトがデータベース全体を設定し、Perlモジュールがデータベースに記憶されたプロシージャにアクセツするなら、データベース設計とその変更を許可する以外にデータベース管理者の仕事はなくなる(プログラマはデータベース設定方法を知らないからだ)。また、ウエブ管理者は、プログラマでないと困ることになる。データベースにアクセスするのにプログラマがPerlプロシージャを使うようウェブ管理者が制限すれば、プログラマでない管理者はプログラマ無しで命を縮めることはなくて喜ぶ筈だ。何もかもが標準化されると、初心者でも何かをすることは出来るので、変なコードに走ることがない。
最低線では、Perlスクリプトを働かせるには関係者全員が問題を起こす可能性がある。これを出発点とする。加えたいことはあるが、これをバージョン1と呼ぶ。バージョン2では、PHP、Python 及び出来れば JAVA モジュールとウェブペイジを、バージョン3では生きたシステムのための(削除や再作成でなく)修正を、バージョン4ではGUIを狙っている(GUIは同時に開発できるけれども)。
明らかに、バージョン4までは長い道程だ。ここまでで4ヶ月掛かった。実際していることより、何をなすべきかで悩んだ。開発では、良い方法が浮かぶと沢山のコードが無駄になる。無駄は多い方が良い。良い考えが浮かんで沢山のコードを無駄にする楽しみは、肩にのしかかるプログラマの苦労を知らない管理者の圧力を忘れさせる。
私のスクリプトでは、 table TABLENAME_diff とselect stored proceduresを用いる二つのオプションはおこなわない。理由はPostgreSQL 7.2のベータ版をダウンロードしただけで、多数の変数(又はカーソル)を返す記憶プロシージャの周りでゴタゴタしないからだ。変数一つだけを返す記憶プロシージャは使う。PostgreSQL 7.2が現れたとき、沢山の情報を返す賢い記憶プロシージャを作ることが出来る。
SDS バージョン1.0 は次の通りだ:
Standard Database Setup (SDS) version 1.0.
Copyright by Mark Nielsen, 9/2001.
1. あらゆるテーブルは次を含まなければならない:
a. TABLENAME_id.に等しいプライマリ・キイ
b. データ作成と修正用のタイムスタンプ、 date_createdとdate_updated
c. TABLENAME_backupと言う名のバックアップテーブルがある
d. あらゆるファイルは小文字
e. 0 ステータスがイナクティブで 1 がアクティブのアクティブ・フィールド
f. "_id".で終わるフィールド名を除き、フォーリンキイはすべて
拡張子"_fk" を有する
g. テーブル定義内で "_id"の付いたフィールド名はすべて
自動的にフォーリンキイ束縛を得る。"TABLENAME_id" のフィールド名は
プライマリキイ"TABLENAME_id を用いてテーブル"TABLENAME" に
"フォーリンキイ束縛を持つ
h. アクティブ、イナクティブ(削除済み)及びパージに関するビューを作る
i. 挿入、更新、削除、コピイ、変更、パージ、アンパージ、バージワン
及びアンパージワン・ファンクションもまた
ファンクションが "TABLENAME_FUNCTION_sql と名付けられる
データベース修正すべてに用いる".
j. 記憶プロシージャが複数の変数を返すことが出来るときは、すべての
select ステートメントが同じく記憶プロシージャを通じて実行される
すべてのselect ステートメントは "_select_sql"で終わる
select 記憶プロシージャの二つの型は:
1. 独特のid番号を与えられて、select ステートメントが要求するのは
その列のすべてのフィールド。この記憶プロシージャの名は
"TABLENAME_select_sql.
2. 他のすべてのselect ステートメントはカスタムメード。
selectステートメントは極めて複雑になる。カスタム
selectステートメントは、カスタム記憶プロシージャを用いて作る
k. あらゆるテーブルへの変更はすべて、"TABLENAME_backup"に記録する.
変更は、標準記憶プロシージャを通じておこなわれ
記憶プロシージャがこれら変更の記憶を扱う。
"backup_id" はバックアップテーブルすべてのプライマリキイ
l. テーブル選択はすべて、テーブル作成の際に望むなら、オプションとして
テーブル"TABLENAME_select" を用いて記録される
"TABLENAME_select" は、フィールド select_id, date_created,
date_updated, TABLENAME_id, error_code、及びmiscを有する。
m. 挿入と変更を相違に関して記録するため、オプションのメソッドを、
使うことが出来るが、次ぎの基準ににしたがわなければならない。
これは規定値ではMAPPSに含まれない。
1. バックアップテーブルの名はTABLENAME_diff とする。
2. "diff_id" を各テーブルのプライマリキイとする。
3. 各diff table は正確にこれらのフィールドを有する。
a. diff_id
b. date_updated :データが入力されたのタイムスタンプ:
c. diff_data :これは今回入力データと前回入力データの相違
d. diff_method :これは使用した相違メソッドを記述する。
これは任意で、プログラマにより左右される。
所定メソッドを示すと:
1. "diff" 又は"gnudiff" は GNU diff に相当。バージョンを
与えて、どこかに記録する。
2. "subversion" サブバージョンと関係
3. cvs は標準に関してオプションでない。"subversion" が
cvsを置き換えるので、SDS は全く固定、subversion.orgから
subversion.は容易
e. diff_prev :これはデータを比較する前回のdiff_id 。
これは、diff_id が削除されると、エラーがあると
言えるように、おこなわれる
f. fieldname :これはデータの属する列のフィールド。
g. primary :これは今見ている列のプライマリキイ。
h. error_code : "start" は、このものの前に diff_id がないことを
意味する。"diff" は、比較する前回入力があることを意味する。
"stop" は、プライマリキイが削除されたことを意味する。
その他のエラーコードも可能。
n. フォーリンキイへのエントリ0 はヌルを意味し、プライマリキイ
0 を持つすべての列は、テキストについて空白、
数値又は既定値(規定してあれば)については0を意味する。
2. 使うことの出来ない独自名は:
a. "error_code", "backup_id", "date_created", "date_updated",
, "diff_id" 及び "active" は保留フィールド
3. Perl モジュールとプログラム言語を用いる主な標準慣習は
a. Perl モジュール(又はその他のプログラム言語) はすべて、
メソッドが各記憶プロシージャに対応するオブジェクトを作る。
各メソッドの命名法は、正確にsql ファンクション名からテーブル名と
"_sql"を引く。 したがって "TABLENAME_FUNCTION_sql" は、
Perlモジュールでは "FUNCTION" となる。sqlファンクション全部と
sqlファンクション及びPerlメソッドからカスタムのsqlファンクション
又はPerlメソッドを引いたものとの間には正確な対応がある。
b. カスタムの perl メソッドはすべて、データの変更と選択
mv misc/nielsen/Test /tmp/ cd /tmp/Test/ mv Create_Functions.pl.txt Create_Functions.pl chmod 755 Create_Functions.pl
/tmp/Test/Create_Functions.pl sample
perlスクリプトを実行出来ないときだけの、SOLコマンド、Perlモジュール、ウエブスクリプトが下記にある。
Perlスクリプトを働くように設定する方法 文頭へ
| Docs/SDS.txt | これは標準データベース設定設計方法の説明 |
| Config.txt | これはperlに使われる変数二つを有する |
| Templates/Constants.pm Templates/Set_Info.pm_header Templates/Set_Info.pm_template Templates/Email.pm_header Templates/Get_Info.pm_header Templates/Misc.pm |
これらは、すべてのデータベースに使われるモジュール |
| Templates/Custom.sql Templates/Generic.fun |
これらは、データベース内で変更され次いで実行される二つのファイル。 Generic.fun は各テーブルにつき実行される。 |
| Templates/Custom_Html1.html Templates/Custom_Lists.html |
これら二つのwebpages/perl スクリプトは各テーブルにつき実行される。 |
| Templates/Error_No_User.pl.txt Templates/Error_No_User.pl Templates/Password Templates/htaccess |
これら四つのファイルは、ユーザー認証用。 |
| Create_Functions.pl.txt |
これは実行されて"Create_Functions.pl".と命名し直す必要のあるメインファイル。 |
| sample/Custom/Sql/users.sql sample/Custom/Sql/contact.sql sample/Custom/Sql/class.sql sample/Custom/Sql/students.sql |
これらは、perlスクリプトが規定値データベース設定を作成した後、実行されるカスタム sql コマンド。 |
| sample/Config.txt |
これは、このデータベースのためのコンフィギュレーション |
| sample/Tables.txt |
これは、我々のデータベース用のテーブル全部を定義するテキストファイル。 |
システムはうまく働いており、夢中になってウェブペイジを吸い上げている。全部自分で面倒を見たので、もう、間で何がおこなわれているか心配する必要はない。変更や追加をするのになすべきことを沢山知っているが、先ず最も重要なことを考える。「本当にそうしたいのか」を考えるのに時間を掛ける。
ウエブペイジを早く作り、ウエブ/データベースシステム開発のストレスを軽減するのに、これが役立つことを望む。私の将来目標は、このPerlスクリプトにPhp及びPytonコード作らせると同時に、GUIインターフェイスを作らせ、データベース作成、エラー点検、レポート作成、グラフ作成、データベース変更などをさせることだ。私の考えでは、良いPython/TK ソリューションが素晴らしいと思う。XWindowの環境下で働くからだ。GNOMEや KDEを使う人だけでなく万人が使えれば良いと思う。PytonはJAVAも出力する。
(中略)