Linux Gazette 9月号
今月のLinux Gazette の内容
n今月のニュース
nウイークエンドメカニック
nAtari ST マシンをLinuxターミナルとして使う方法
nブラウザを使わないダウンロード
nLinuxシステムのブートストラップ−解析
nGTK+を使うGNOMEプログラミング
nホメロスのオープンソースOddyssey 2001
n数値ワークベンチ:パートII
nCSL、共通サウンドプレイヤ
nPostgreSQLに集合関数と演算子を使う
 
 
 
今月のニュース
▼▼▼ディストリビューション関連ニュース▼▼▼
Debian
Debian は、新規 Debian Multimedia Distribution計画を発表した。
ドイツの "Lebensmittelzeitung" によれば、ドイツスーパーマーケットチェインGlobus は、その現金デスクにある480台のコンピュータをDebian GNU/Linux に転換した。全体システムは、キャッシャ二人が1台のコンピュータを共有することが出来る(ほとんどの時間に486/25MHz を使用)。ドイツ語の経過説明がある German.
詳しいニュースはDebian Weekly Newsで。
SuSE
SuSE Linux は、IBMの中小企業向け高性能、統合ビジネスサーバー、IBM eサーバー iシリーズにLinux OSを供給する最初のプロバイダとなると発表 announced した。"IBM eサーバー iシリーズ用SuSE Linux デベロッパ版" を用いて、SuSEは、システム管理者とアプリケーション開発者が、SuSE Linuxを、OSベース及び企業全体にわたるe-ビジネスアプリケーションプラットホームとして最初から利用出来るようになる。IBMは新eサーバー iシリーズを、そのOS/400オペレーションシステムのバージョン5リリース1とともに出荷する。これで幾つかのOSを使用することが可能になる。

 

▼▼▼その他のニュース▼▼▼
Sklyarov, DMCA, FTAA最新ニュース

LG 印刷中に Sklyarov/DMCA 事件に関する出来事いくつかが明らかになった。

・米大陪審は、Dmitry Sklyarovが"encryption circumvention"デバイスを製造販売したのは、1998年制定デジタルミレニアム著作権法に反すると述べた。公正使用擁護者達は、原告Adobe システム社が訴訟を取り下げた今でも司法省が刑罰を下すか見守っている。だが大陪審は、デミトリの雇用主Elcomsoftにも共謀の罪を問うて、擁護者達を驚かせた。Elcomsoftがロシアにあり、そこでは製品が合法であっても、Elcomsoftは受注に米国ウェブ組織を使用したので、司法省は裁判権を主張する。また、刑罰も膨大で、デミトリは25年の懲役と$2,250,000ドルの罰金が課せられ、Elcomsoftにも$2,250,000ドルの罰金が課せられる。
・デミトリは、無罪を申し立てた。次の段階は法廷審議で、これには数ヶ月かかる。ところで、デミトリは保釈金$50,000ドルで釈放されたが、北カリフォルニアを離れることはできない。
・米国著作権事務所の報告では:
1.DMCAが勝訴したと断定するには時期尚早である。
2.事務所は、この時期に「第一販売原則」(本/CD/ビデオテープの最初の購入者は、それを貸与又は中古品として販売することが出来ると言うこと)に関し法改正をする理由が薄弱であると見ている。図書館はこの原理をデジタル媒体に拡張するとこを望んでいるが、出版業界は反対している。に
3.事務所側は、ユーザーが自分の購入したソフトウエア及び内法のバックアップコピイを取るのを認めるよう、法改正をすべきであると考えている。
公正使用擁護者の多くは、自由発言という重要問題を提起しなかったと感じており、Slashdotに関する正論を主張せず、公聴期間内に著作権事務所に意見を述べないで、大衆の関心が薄いと事務所が判断したことを反省している。
The Copyright Office report (著作権事務所報告)(報告及び投書と公聴意見を含む PDF フォーマットのファイル3個)
A Washington Post article.(ワシントンポスト記事)
・反対運動はモスコー(ロシア)、ロンドン(英国)、ボストン、サンフランシスコ、ロスアンゼルス、レノ、ネバダ州ブラックロックシテイで続いている。シアトルでは、公立図書館での教育宣伝活動が始まった。ビラ配り、署名運動、図書館員への働きかけなどである。

Electronic Frontier Foundation (電子フロンティア基金)(EFF) は、米国自由貿易(FTAA)協定に米国デジタルミレニアム著作権法から反対の条項を持ち込もうとする産業界の試みに対する反対意見を述べている。(南北米州を含む自由貿易地帯を作るFTAAは未だ未完の条約である)「FTAA機構は、FTAA条約がDCMAより大きい制限を出版社に与えている場合を除き、DMCAのような抜け道防止条項の通過を国家に任せる条約文を考慮している」この問題に関心があれば、EFFにご意見を寄せられたい。

LGは月刊なので、DCMA反対運動の経過を適切にお知らせ出来ない。Linux Weekly News 、EFF home page, 及び nodmca.orgfreesklyarov.org.など、他の活動家サイトを参照されたい。LWN's August 30 editorial は、デミトリが「強盗、強姦、誘拐」より重い懲役刑を宣告されるかも知れぬと皮肉っている。「米国はある種のソフトウエアが書かれないことを望んでいるとの印象を受ける。これは、汎用コンピュータが 'trusted computing platform' で置き換えられ、'seal data within domains'(データを領域内に密封)しないソフトウエアが「回避手段」として取引される将来を想像していない。正確には何の罪で、LinuxはDMCAの下で非合法になるのだろうか?書いた場所では合法なコードのせいで、プログラマが25年の刑を受ける世界では、この考えを偏執狂過ぎるとは見られないだろう」

年老いた LWN 編集者カナダでDCMA類似の条項を著作権法に入れることを試みている。

ところで、Slashdotは、米国ラジオ局が「広告、特許料及びDMCAについての懸念から」ウエブキャスティングのスイッチを切ったと NPR 記事 で報告している。Slashdotは続いて「人々は、制限付きの音楽で余り有益でないものは高い金を払ってオンラインで買おうとは思わない」と CNN 記事 で言っている。加えて「これは音楽産業に対する天啓だ」とも言う。

Total Impact とTerra Soft Solutionsが提携してPowerPC Linux製品を提供

G3/G4コンピュータのメーカーTotal Impactと、PowerPC Linux 技術開発者のTerra Soft Solutionsは、Total Impactの briQ をTerra Softの Yellow Dog 及び Black Lab Linux OSと緊密に統合し販売するため提携すると発表した。Total Impact は現在、Yellow Dog Linux 2.0パケージをbriQの各ユニット販売に結合し、要求に応じBlack Lab Linuxを搭載して強化している。Terra Softは、briQをスタンドアローンYellow Dog Linux 計算ノード又はBlack Lab Linux を用いて4及び8ノードに搭載し構成して提供している。

新I/O モジュール
48-ビットTTL I/O インターフェイスを特徴とする MEN Micro'sの新 PC-MIPメザニンカードにより、 埋め込みシステムデザイナは、開発の手間をかけないで基本的デジタルI/Oを実現することが出来る。コントロールスイッチやアクチュエータなど、簡単なデジタルI/Oのため、単一ボードコンピュータ(SBC)に新PCキ MIPカードを追加して、システム開発を促進することが出来る。MENドライバ・インターフェイス・システム(MIDIS)を通じて、P13はVxWorks、OS-9、WindowsNT、Linuxをはじめとする.広範なOS用ドライバによりサポートされる。
Linux世界における新Keyspan USB製品

Keyspan は、USB PDAアダプタと高速USBシリアルアダプタの新版を発表した。Linux 2.4 用の「オフザシェルフ」サポートに加え、KeyspanのシリアルUSBアダプタはまた、Windows 98、Windows Me、Windows 2000、の他Mac OS 8.6 以上をサポートする。Mac OS X 用ベータドライバも入手出来るavailable.

AlabanzaがSMARTを取得
自動ウエブホスト・ソフトウエアの主要メーカーAlabanza Corporation は、 SMARTS 担当サービス保証ソリューションを用いて、サービスレベルを維持し、Alabanzaコンピュータ・ユーザーの実感を改善すると発表した。Alabanza によれば、サービス提供前に直ちに問題を発見して処理するためSMARTSと提携する。
Sair Linux とGNU のニュースレター9号

SAIR Linux and GNU Certification's のニュースレター9号がオンラインonline.で見られる。

IBM

IBM は、e-ビジネス用IBM "Start Now" ソリューションを発表した。中小企業が迅速に強力な、価格効率の良い、e-ビジネスソリューションを実現するのを助けるファミリである。8個のStart Nowソリューションが、e-ビジネスを初期インターネットアクセスからe-メールを経由して、検索及び情報、ウエブサイト管理、単純及び複合e-コマース、ビジネス監視、統合活動、ビジネスチャンスまでの要求を満足する。IBM Start Now ソリューションに関する詳しい情報はhttp://www.ibm.com/software/smb.

IBM は又、Linux用無料評価キットの供給を発表した。このキットは、開発者がLinux市場向けアプリケーションを作るのに役立つ。Linuxベースのアプリケーションが年40%も伸びているので、この評価キットは、各種産業用の新アプリケーションを駆り立てるであろう。詳しくは、 www.ibm.com/linux/software and www.ibm.com/linux/.

書物"Advanced Linux 3D Graphics Programming"発行

書物"Advanced Linux 3D Graphics Programming"が発行された。最初の"Linux 3D Graphics Programming"の続編である。この2巻目では、Linuxと基本的3Dグラフィックに習熟したプログラマに、3D理論のまとまった概観とゲームのような大型会話型アプリケーション・プログラミングの文脈内で練習を提供する。織物と光のマッピング、Blender,におけるモルフターゲットの作成、IKアニメーションの3Dエンジンへの移植と作成、BSPツリー、ポータル、レベル編集、粒子システム、衝突検出、デジタル音響、コンテント作成システム、などの話題を満載している。内容目録はonline で、購入は purchase online.で。

UnixBoulevard社

UnixBoulevard.com は、Unixベースのサーバー又はネットワークを使用、管理する個人及び企業用のウェブ位置選択として設計された無料のサイトである。このサイトは、製品と技術支援と同時にUNIX社会ようフォーラムを提供してメンバーに会話して貰う。

COWが無料VXA媒体をLinux用に提供
CDW は、完成特注技術ソリューションの提供社だが、VXA RakPak 又はVXA AutoPak.を買った人に、データ記憶及びバックアップ用に無料で5個の33/66GB VXA V17 を提供する。350ドル以上の660GBまでの無料媒体を9月末まで提供する。提供を受けるには、http://www.cdw.com/ のCDWを訪ねてペイジの上方右手にあるSmartSearch ボックスに"VXA with free media"と入力すればよい。
GX TechnologyがLinux NetworXクラスタシステムを石油ガス探査に利用
有力なクラスタ計算提供者Linux NetworX は、地震画像ソリューションの会社GX Technology が、石油ガス探査に用いるプロセッサ84個の Evolocityコンピュータクラスタを購入したと発表した。これはGX Technology がLinux NetworXを用いて作ったクラスタコンピュータシステムの3台目である。

Linux NetworX は、Evolocity クラスタをGX Technologyの地震画像アプリケーションで働くよう最適化し、波動方程式及びキルヒホッフプレスタック深度移動とプレスタック時間移動などの処理を実行する。42ノードの Evolocity システムには、1.2 GHz AMD Athlon MP プロセッサ84個が含まれており、1.5GBのメモリを含むノードと、冗長用に10/100イーサネットネットワークが付いている。GX Technology はまた、inux NetworX ClusterWorX 管理ソフトウエアツールも利用し、システム安定性を保証する現行サービス協定に署名した。

Linuxリンク
The Duke of URL:
Linux Buyer's Guide #12
Review of Slackware Linux 8.0

メキシコ派 (Red Escolar)のLinuxプロジェクトが失敗した fails。主として"winmodem"問題によると思われる。もっと積極的に、Linuxはコロラド派領域内で役割を見出すと思われるfinding a role 。ニュースは Slashdot.。

CanadaComputes.com は現在利用出来るLinuxブラウザの纏め round up を持っている。Linux Journal ウエブ記事:

Vi IMproved--Vim and Happy Hacking Keyboard Lite 2, Don Marti著のブックとキイボード概観。.
・You Can Get There from Here, Marcel's latest series. part 1

Suite101.com は新Linux サイトを加えて Windows ユーザーにLinuxに代えても同じであることを説明している。

The Register は、規定値インストレーションの幾つかのRed Hat 6.2 システムが、侵入者を同定するためわざとオンラインに残すセキュリティ調査プロジェクト project 中に72時間壊れた、と報告した reported

利用性と美観の観点からWindows XPベータをLinux Mandrake 8.0とを比較した評価Evaluation では、Windowsは前より良くなっている。Microsoft はLinuxの仕掛けを真似ている。

ユーザーに優しいサイトに関するRPM調査ペイジ Search page

Slashdot は、初心者用に最良のLinuxディストリビューションのある最新Slashdotトークバックthread を有する。

The State of Corporate IT: A case for Linux. 「多くのアカウントによれば、企業が直面するオーナーシップ増加の最大コストはライセンス関連であった。NTが主流になるにつれ、ライセンス条項が特殊なものとなって効果になった。
この物語は、Unix/Novell からNT に転換した雇用企業7000社を追跡した。「管理の容易さとオーナーシップの安さ」のためだったが、月日とともに管理をライセンスコストが急上昇した。元のUnixとNovellプラットホームは、ファイル、プリント及びメイルs−ばーを単一サーバーに渡した。−NTはサービス毎に1台のマシンに加えそれぞれの専用バックアップを必要とするが− Red Hatは、サイト訪問に単一のペンティアム級システムを持ち込み、その技術者が早くからおこなった聞き込みのお陰で、そのボックスをネットワークに組み込み、最も多忙の一セグメントに対するファイル及びプリントサーバーリクエストすべてを関し4時間以内に取り上げることが出来た。このシステムは次の10営業日の間、停止時間無しで働いた−NTマシンではそう簡単には出来ないことだ。Red Hatは有力な協力者あることを証明した。インフラストラクチャ全体の交換を推進しようとするのでなく、補完として働かせた。−数ヶ月後、市場が未だ軟化していて、ボトムラインが株主に取り次第に重要になって来たとき、チームは選択が正しかったと感じた」

ロサンゼルスタイムス Los Angeles Times には、Windowsが到る処で世界的な破滅を生じる未来の世界に関する科学小説 science fiction story が載っている。Slashdot. 提供

 
▼▼▼ソフトウエア関連ニュース▼▼▼
Loki

TimeGate Studios, Inc.Loki Software は、Linuxプラットホーム上の不滅の王者Kohanが、http://www.lokigames.com/products/demos.php3 で自由にダウンロード出来ることを誇らしく発表した。詳しくは game site. を訪ねられたい。予約注文は Loki webstore.から可能。


No Starch PressLoki Software は、Linux用ゲーム開発のための完全で信頼出来るガイドの立ち上げを発表した。PROGRAMMING LINUX GAMES: LEARN TO WRITE THE GAMES LINUX PEOPLE PLAY(2001年8月, 1-886411-49-2, $39.95, 432 頁ペーパーパック、 http://www.nostarch.com/?plg)は、単純直接媒体層(SDL)に焦点を当て、重要なLinux開発ツール及びゲームAPIを通じて、読者を指導する。 Loki Softwarのゲーム主任が書いたこの本はLinuxゲーム開発者の究極資料となるであろう。書店、Loki Software (http://www.lokigames.com/orders)、又はNo Starch Press (1-800-420-7240, http://www.nostarch.com/).から入手出来る。

Linux用eVeビジュアルサーチ・ツールキット

eVision は、Linux用JavaベースSDK、eVeビジュアルサーチのバージョン2.1公表ベータのリリースを誇らしく発表した。このツールキットにより、Linux開発者は、キイボードとテキストではなく画像とビジュアルを同じように使うサーチアプリケーションを開発することが出来る。ユーザーがサンプル質問画像又は部分画像を選ぶと、サーチエンジンが、色、肌合い、形、3D陰影の点で対象物と視覚的に似ている他の画像を見出して格付けする。この技術は、画像コンテント、ビデオコンテント、オーディオコンテント及びデジタルパターンの何れにも適用出来る。http://www.evisionglobal.com/developers/sdk/で、SDKの無料500画像限定版ダウンロードのサインアップが出来る。

開発者用Great Bridge WebSuite
オープンソース・データベースPostgreSQL,に関する商用サービスとサポートの提供者、Great Bridge は、世界で最も進んだオープンソース・ツールを用いるオープンソース・アプリケーション開発プラットホームを発表した。Great Bridge WebSuite は、高性能ウエブベース・アプリケーション構築のためPostgreSQL データベース、PHPスクリプト言語、Apache ウエブサーバーを結合する統合オープンソース・プラットホームである。
無料APStripFilesユティリティ

Appligent, Inc. は今、無料ユティリティを提供している。APStripFilesは、付着又は埋込ファイルをPDFドキュメントから除去sるうコマンド行アプリケーションである。システムに悪意のあるPDFファイルが付着するのを防止することが出来る。

AIX、HP-UX、Sun Solaris 、Red Hat Linux用のAPStripFilesは、無料で下記からダウンロードすることが出来る。http://www.appligent.com/newpages/freeSoftware_Unix.html

 

Copyright © 2001, Michael Conry and the Editors of Linux Gazette.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 70 of Linux Gazette, September 2001
 
 
 
ウイークエンド・メカニック

By Thomas Adam

目次:

8月版へようこそ
簡単な紹介:Apache
プログラム概観:upx
プログラム概観:bb
終わりに

8月版へようこそ

ご機嫌いかがですか?僕はA級試験を終えた処です。先月ウイークエンドメカニックを書かなかったのはその為です。

A級試験(大学入試です)を終えたので、悲しいけど学校を休みました。そこでLinuxに割ける時間が増えたと言う訳です。

簡単な紹介:Apache

インストレーション
Apacheを走らせる
Apacheの利用:http//localhost/
Apacheの利用:Pre-user webspace
Apacheの利用:Aliase
Apacheの利用:ディレクトリの安全

インストレーション

インターネットは急速に発展し、ほとんどすべてのISPで自分のウエブペイジを公開できる。これはコンピュータ(ホスト)とApacheなどウエブサーバー・プログラムを用い手おこなう。他にもあるがApacheが最も広く使われており、安定している。

「だが、これをローカルマシンで使えないか?」と思うだろう。Apacheを走らせるのは、大量のHTML文書があるとき、優れた情報記憶手段となる。LDPのハウツーとLinux Gazetteの記憶にApacheを使った!!

RPMファイルフォーマットを使うディストリビューションを使っているなら、次のようにタイプして、Apacheがインストールされているかどうかを調べる。

  rpm -qa | grep -i apache


うまく行くと、次のような行があらわれる:

  apache-1.3.12-95


これはApache ウェブサーバーが搭載されていることを示す。システムにApacheが搭載されていなければ、搭載する必要がある。多くのディストリビューションはApacheが付いてくるので、ディストリビューションCDに入っている。入っていないか、君のディストリビューションがRPMフォーマットをサポートしていないなら、http://www.apache.org/で入手出来るtarred/gzipped format (*.tar.gz)にあるソースファイルをダウンロードしなければならない。ダウンロードしたら次の方法で搭載する。

 1.ルートとしてログインする:

 2.ファイルを Gunzip/untar する:

    tar xzvf /path/to/tarfile/apache*.tar.gz


 3.新たに作った Apache ディレクトリにcdする:

    cd Apache*


 4."configure" スクリプトを走らせる:

    ./configure


 5.これに数分かかる。成功したら、"Makefile" と言うファイルがディレクトリの中にmakefileされている筈だ。なければ、コンパイラプログラム(C, C++, g++など)、又はヘッダファイルがないか、Kernelソースファイルを搭載していないかだ。makeユティリティが搭載されていない可能性もある。これらを搭載すること。

コンフィギュアが終了したら、次のようにタイプしてファイルを "make" する:

   make


このステップには時間が掛かる。マシンが古いと特に掛かる。

makeにエラーがないとすると、最後におこなうのはコンパイルしたファイルの搭載で、次のようにタイプする:

   make install


これでApacheが搭載された筈だ。Apacheの搭載/コンパイル中エラーに遭遇したら、付属文書を調べること。"make"処理の間、情報が画面にエコーされる筈だ。Apacheコンパイル中に繰り返しエラーが出るときは、次のコマンドを入れる。

   make -k all


このコマンドは、途中でエラーに遭遇しても、強制的に継続させる。だが、これは最後の解決策だ。Apache文書を読めばほとんどのコンパイル問題は解決する筈だ。

Apacheを走らせる

搭載を終えたらスタートだ。"httpd"デモンを使う。Apacheは規定値ではrun-revel中に自動的に走るので、マシンをリブートしていないときは、ユーザー "root" に続けて次をタイプする:

  httpd


画面に何もエコーしないで、プロンプトが返る筈だ。"httpd"デモンが走っているのを確認宇するには、古い "ps" を使う:

  ps aux | grep -i httpd


上のコマンドは、全プロセスを(ttyに付属しないものも含めて)リストアップした上で、そのリストをgrepコマンドにフィルタ(パイプ "|")する。これは"apache"の表現に一致する。スイッチiは、ケースセンシティビティを無視する。

数多くの行が出る筈だが、その内一つは次のようになっている:

  wwwrun    1377  0.0  2.0  4132 1340 ?        S    11:09   0:00 httpd


これは、Apacheが走っていることを示す。そのコマンドの結果が単に"root blah blah grep -i httpd" であるときは、httbdをもう一度はしらせなければならない。同じメッセージが続くようなら、 init 6に切り換える。

Apacheの利用:http://localhost/

"httpd"デモンが働くことを確認したので、実際に使える。ウエブブラウザ(Netscapeなど)を開いて、次のURLを入れる:

  http://localhost


この種のウエブペイジが出る筈だ。これは通常Linuxディストリビューション毎に異なる。SuSeボックスでは、上部中央にSuSeマスコットのあるSuSeデータベースが出る。

見えているのはサイト"localhost"にあるメインペイジだ。このペイジは次のディレクトリに記憶されている:

  /usr/local/httpd/htdocs


このディレクトリは特別名 DocumentRoot.を持つ。実際のパスはシステムにより異なるが、名前は不変だ。このディレクトリの中に幾つかのファイル、特に *.html ファイルがある。 "http://localhost/"に行ったときロードされるファイルはindex.htmlファイルだ。やったことは、"htdocs" の中に"oldhtdocs"と言うサブディレクトリを作り、すべてのファイルをその中にコピイした。こうして新しく出発する。必要ならオリジナルも持っている。

ノンルート・ユーザーは DocumentRootフォルダーの読取書込が出来ないことにお気付きだろう。この問題を避けるには、次のコマンドが"/path/to/htdocs"を正しいパスで置き換える:

  chmod +rw /path/to/htdocs


ファイルが"http://localhost/" のためうまく置かれたが、apacheをコンフィギュアする方法は?一寸待って欲しい。探しているファイルはhttpd.conf で、普通 "/etc/httpd" 又は"/usr/local/apache"ディレクトリにある。SuSE とMandrakeシステムでは、後者が規定値の場所である。以下の章では各種カストマイズを実行するのに"httpd.conf" を用いる。

Apache の利用:Pre-user webspace

ほとんどの人が、チルド記号(~)の後に名前と(/)が続くURLに行ったことがあると思うが、意味は分かっているだろうか?URL内のチルド記号(~)は、コンピュータシステム上のユーザーが、メインドメインとは別に、所有する「サブドメイン」を示す。そこで私は学校に、有効な次のURLを持つウエブサーバーを有する。

   http://linuxservertom.purbeck.dorset.local/~thomas_adam/


ここでやっているのは、ユーザー"thomas_adam"のユーザーアカウント下の特別フォルダに記憶されたファイルを復元することである。この能力は、ネットワーク上のユーザーに、自分のウエブペイジを収容するスペースを与える。その方法は?簡単だ・・・

自分のスペースを許されたすべてのユーザーは、グループnogroup (又はDebianの下の www-dataなど)に入らなければならない。これは、ファイル"/etc/group" (as root)をエディットし、"nogroup"用の行をおいておこなう。次いで行の最後に、コンマで区切ってユーザーの名を付け加える。

ユーザーのホームディレクトリには、public_html と言う名のディレクトリを作らなければならない。つまり(ユーザールートとしてタイプする):

   cd /home/auser/ && mkdir public_html


ここで "auser" はシステム上で有効なユーザー名である。次ぎにパーミッションを設定する。これは次のようにタイプする:i

   chmod 755 /home/auser/public_html


最後におこなうのは、新たに作ったフォルダのグループをnogroupに設定することだ。これは次のようにタイプしておこなう。

   chown auser.nogroup /home/auser/public_html


ここで "auser" は、適当にに付けた有効なユーザー名である。すべてのユーザーに同じ処理をする。新ユーザーの追加に "useradd"を使う考えもある。 "public_html" ディレクトリがパーミッションと共に自動的に作られる:

 

[実際は、public_htmlディレクトリとすべてのファイルが世界中で読めることを確かめていれば、ユーザーとグループの中身全部におこなう必要はない:

   chmod -R a+r /home/auser/public_html


重要なことは、Apacheがファイルに読取アクセスを有することである. -- Mike Orr]

次ぎにやることは、自分のやることをApacheが理解しているか確かめることである。"httpd.conf" ファイルを開いて、眺めて見る。

最初から、キイワードUserDirを検索する。次のようなものが見付かる筈だ:

  <IfModule mod_userdir.c>


      UserDir public_html


  </IfModule>


上の行のどれかの前にハッシュ(#)記号が付いていたら、それを削除する。上の行はApacheに、各ユーザー用のhtmlにはディレクトリ"public_html"を使うことを告げる。

下記のディレクトリは、付加すべき制限をApacheに告げる行だ。下記の行の場合は、読取専用となっている。これらのcomment outするには、uncommentする。

  <Directory /home/*/public_html>


      AllowOverride FileInfo AuthConfig Limit


      Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec


      <Limit GET POST OPTIONS PROPFIND>


          Order allow,deny


          Allow from all


      </Limit>


      <LimitExcept GET POST OPTIONS PROPFIND>


          Order deny,allow


          Deny from all


      </LimitExcept>


  </Directory>


残ったのは、ウェブペイジの書込だ。有用な唯一の方法は、前の私の例を見ることだ:

   http://linuxservertom.purbeck.dorset.local/thomas_adam/


私はロードする".html"ファイルを規定していない。既にApacheに規定値ファイルを告げているからだ。このようなファイルは DirectoryIndexと呼ばれ、ロードする規定値ファイルを定義することが出来る。次を"httpd.conf" ファイルに入れる。

  <IfModule mod_dir.c>


      DirectoryIndex index.html index.shtml lwm.html home.html


  </IfModule>


これがApacheに告げているのは、上例のように、後の拡張ファイル(*.htm*)無しでURLが規定されたとき、フラッグ"DirectoryIndex"の後に規定する規定値ファイルを探すこと、だ。こうして、"public_html"ファイルの中に、"index.html"と言うファイルがあれば、これが規定値でロードされる。Apacheが上のファイルのどれも見出さないときは、(ロードするファイルを示さない限り)代わりにディレクトリリストが表示される。

ここで、説明しておきたいのは、ホスト名を"/etc/hosts"に規定したときは、その名を"http://localhost"の代わりに代入出来ることである。これは便利で、ここで使用している。さらに、"httpd.conf"の中で、次のフラッグを見出して localhost を君のホスト名の最初の部分で置き換えることを薦める:

    ServerName  grangedairy


こうして、私のホスト名は grangedairy.laptopなので、単にgrangedairyと入力する。これをする理由はAliasの章を読むと明らかになる。

最後にしなければならないのは、"httpd.conf"の変更だ。停止して再スタートしなければならない。これは、次をタイプしておこなう(ルートとして):

  killall httpd


  httpd


Apacheの利用:Aliase

この章では、Aliasesの短いトピックを述べる。"httpd.conf" ファイルを用いると、キイボードAliasを検索したいとき、aliasのリストを見ることが出来る。次のようなリストが出る筈だ。

Alias /howto        /usr/share/doc/howto/en/html/


Alias /mini           /usr/share/doc/howto/en/html/mini/


Alias /lg              /usr/share/doc/lg/


Alias /hilfe          /usr/share/doc/susehilf/


Alias /doc          /usr/share/doc/


Alias /cgi-bin-sdb  /usr/local/httpd/cgi-bin/


Alias /sdb               /usr/share/doc/sdb/


Alias /manual         /usr/share/doc/packages/apache/manual/


Alias /htdig            /opt/www/htdocs/htdig/


Alias /opt/kde/share/doc/HTML      /opt/kde/share/doc/HTML/ 


Alias /opt/gnome/share/gnome/help/  /opt/gnome/share/gnome/help/


Alias /errors/      /usr/local/httpd/errors/


Alias /icons/              /usr/local/httpd/icons/


Alias /admin        /usr/local/httpd/admin/


Alias /lwm                /usr/share/doc/lg/lwm/


ご覧の通り、上が示すのは、URLが例えば "/howto" で終わると、Apacheはそのウエブペイジを "/usr/share/doc/howto/en/html"ディレクトリから獲得する。繰り返すが、ロードされる規定値ウエブペイジは、前に見たように DirectoryIndexから獲得される:

   http://grangedairy/howto


前に、"httpd.conf"の中でServerName フラッグを規定した方が良いと言った。これは、上のaliasのうち一つをURLにタイプしたら、URLの余分のスラッシュを置く必要がないようにするためおこなった。元々、上記のaliasには次のように、余分のスラッシュがalias名に付いている:

Alias /howto/        /usr/share/doc/howto/en/html/


Alias /mini/           /usr/share/doc/howto/en/html/mini/


これを付け加えるのが面倒になので、Apacheに代わってやること命じた。 ServerName フラッグを設定すると、次のようにタイプすれば、Apacheは私のマシン名を理解する:

   http://grangedairy/howto


Apacheの利用:ディレクトリの安全

Apache講義の最後は、ロードの前にユーザー認証を必要とする "secure directory"(安全ディレクトリ)の設定と作成だ。Aliases例のリストの中に "/admin" 用のものがあったのにお気付きだろう。これが安全ディレクトリだ。

安全ディレクトリは、今回だけディレクトリ自体及びそれを見る方法に付いて少しApacheに告げなければならない他は、通常のaliasに付いてするのと同じ方法で設定することが出来る。安全ディレクトリmysecuredir を "/usr/local/httpd/mysecuredir/" に作りたいときは、次のようにする:

1.aliasリストに "/mysecuredir" を付け加える

   alias /mysecuredir    /usr/local/httpd/mysecuredir


2. alias リストで規定したフォルダーの位置を次のように変更する:

   cd /usr/local/httpd


3.次のようにタイプしてディレクトリ"mysecuredir"を作成する:

   mkdir mysecuredir && cd mysecuredir


 これがディレクトリを作って、これに変更した

4.ここで作業が始まる。使うファイルが二つある。.htaccess とhtpasswdだ。.htaccessを先ず設定しなければならない。これは "mysecuredir" の使い方に関する情報を記憶する。

コンソールで、nano (pico の双子)、jed、emacs, などのエディタを用いて、.htaccess ファイルを作成し、次の情報を、Apacheは敏感なのでこの通りに、入力する。

 AuthType Basic


 AuthName "Restricted Directory"


 AuthUserFile /usr/local/httpd/admin/htpasswd


 require valid-user


( ,htaccess はペリオドから始まるので、通常のディレクトリリストには示されない。見るには "ls -a" を用いる)

上のコマンドは安全ディレクトリ作成に最も普通のものである。下記の表にコマンドの簡単な説明とカストマイズの仕方を示す。

オプションタグ 意味
認証型 これは認証型を設定。通常basicを常に使用する
認証名
 
これは接続しようとするディレクトリのログインホックス名を設定。(下記の screenshot を参照)
認証ユーザー
ファイル

 
これは認証の点検用に使われるファイル。つまり、ユーザー名とパスワードを記憶する(勿論暗号化) htpasswd ファイルの全パスを使用しなければならない。
有効ユーザーに要求
 
これは htpasswd ファイル中に有効登録を有する者のみアクセス出来ることを告げる。

注記:安全性を増すためには、htpasswd ファイルをURLからアクセス出来ない場所−ウエブディレクトリの外でaliasディレクトリの外−に置く。.htaccessファイルは、それの守るURLアクセス可能ディレクトリになければならないが、htpasswdファイルは何処にあっても良い。お望みなら同一htpasswdファイルをhtaccessファイル数個で共有することも出来る。

さて、ディレクトリの扱い方を apache に教えたので、password ファイルを作らなければならない:

5.passwordファイルを作るには、次のコマンドをタイプする(".htaccess" ファイルと同じディレクトリに):

  htpasswd -c htpasswd username


ここでは"username"を自分の名前で置き換える。ユーザーをファイルに追加し続けるには、"-c" フラッグを抜かした同じコマンドを発行する。

6.お馴染みの /etc/httpd/httpd.conf をエディットして、aliasリストの最後に次を加えよう。

  <Directory /usr/local/httpd/*>


      AllowOverride AuthConfig


  </Directory>


これを少し変更するが、apache が ".ht*" のいずれかに合ったときは、セキュリティを適用するのにのそれを使うことを確認する。これを外すには、上記に付いて、AllowOverride AuthConfigAllowOverride Noneに変更する。

ここでストップしてhttpd デモンを再スタートする。

試す準備が整った。ファイルをセーブして、ウエブブラウザに行き、次をタイプする:

  http://servername/mysecuredir


"servername" を必ず自分のhostname、又は "localhost" に変えること。うまく行くと、下のスクリーンショットと同じダイアログボックスが出る筈だ。

正しいデータを入力すると、ここから出る。しかし、何の資格証明もなく"mysecure" に接続することが出来る。これが起こると、"/etc/httpd/httpd.conf" ファイルで次を点検しなければならない。

これは、apacheが".ht*"ファイルの使用を認識するようコンフィギュアされていないためである。AccessFileNameタグを設定してApacheにこれをundoさせなければならない:

   AccessFileName .htaccess

これでこの章は終わりだ。perlとcgiに付いて述べるべきだが、他に良い記事があるのでそれを参照されたい。

プログラム概観:Upx

UPX (Ultimate Packer for eXecutables) は圧縮プログラムである。このプログラムがおこなうことは、時効充足で、実行又はメモリパフォーマンスを示さないバイナリ実行ファイルを圧縮することである。この型のプログラムは、固定ディスクスペースが心配なあるラップトップでの使用に最も適している。私はラップトップを使用しており、固定ディスクに3.2GBしかないので、"/usr/bin"に記憶されたファイルを圧縮すると、ディレクトリの容量が半分になることを見出した。

バイナリファイルを圧縮するだけなので、"/etc"などに記憶されたファイルを圧縮使用とするのは良くない。次のディレクトリを圧縮するのは構わない。

 /usr/bin


 /usr/X11R6/bin


 /usr/local/bin


一つの警告は、"/bin""/usr/sbin" の両方にに記憶されたファイルは絶対に圧縮しないことである。コンピュータを再ブートしたとき、Init が走らないことに気付いた。"Tom's root/boot" が出てきて、これらのファイルを圧縮すると、何かの理由で、Init プログラムに問題が生じることを発見した。

このプログラムを使うには、パケージを http://wildsau.idv.uni-linz.ac.at/mfx/upx.html. からダウンロードする。ソースパケージをダウンロードするか前コンパイル実行可能ファイルをダウンロードするかの選択肢がある。

私は前コンパイル実行可能ファイルをダウンロードし、アンパックして、 main upxプログラムを"/usr/bin"にコピイした。これでファイル圧縮が出来る。

ファイルを圧縮するには、次のようにタイプする:

  upx /path/to/program/progname


これで規定したプログラムが圧縮される。ディレクトリ内の全ファイルを圧縮するには、次のようにタイプする:

  upx /path/to/programs/*


これで UPX がすべてのファイルに働き、 Linux/386 フォーマットでないファイルは直ちに無視する。

 作動したUPXのスクリーンショットを下に示す。

 

 

 

 

 

ファイルの圧縮を解くには、次のように"-d" フラッグを使う:

  upx -d /path/to/prog/*


コマンド行オプションの共通リストは:

  Usage: upx [-123456789dlthVL] [-qvfk] [-o file] file..





コマンド:


  -1     迅速圧縮                   -9    良好圧縮


  --best  最良圧縮 (大きいファイルでは極めて遅くなる)


  -d     圧縮解除                    -l    圧縮ファイルリスト


  -t     圧縮ファイル試験           -V    バージョン番号表示


  -h     ヘルプを示す                -L    ソフトウエアライセンスを示す


オプション:


  -q       静かに                    -v    言葉を多く


  -oFILE   出力を`FILE'に書込


  -f       疑わしいファイルを強制圧縮


  --no-color, --mono, --color, --no-progress   見掛けの変更


バックアップオプション:


  -k, --backup        バックアップファイルを保存


  --no-backup        バックアップファイル無し[規定値]


オーバーレイオプション:


  --overlay=copy      ファイル付属の余剰データ全部をコピイ[規定値]


  --overlay=strip       ファイル付属の余剰データ全部を削除[危険]


  --overlay=skip       オーバーレイのあるファイルは圧縮しない


全体として、圧縮ファイルの性能は合格で、機能性の喪失は認められなかった。圧縮した後、ロードに時間が掛かった唯一のプログラムは、netscape だったが、それ程困らなかった。(netscape は沢山のメモリを使うので、ロードするのに何時でも長く待たされる).

プログラム概観:bb

Linux Gazette 67号(6月号)で、Mike Orr氏が、メッセージを吹き出しで表示する「お喋り牛」cowsay/cowthinkを解説された。全部Perlで書かれており表示はASCIIだった。これに興味があったので、ASCIIプログラムを探したところ、SuSeディストリビューションCDの産物にプログラムbbを見付けた。

bb は、ANSI C を使用しSVGAコンパチブルの、完全なASCIIデモだ。bbはaa_libパケージ(ASCIIアートライブラリ)を利用するので、メインパケージの他にこれを搭載しなければならない。デモは色々な模擬画面を発生する。

bbftp://ftp.bonn.linux.de/pub/misc/bb-1.2.tar.gz.から入手出来る。

bbはホームペイジを持っていたが、残念乍らなくなった。だが、bbはプロジェクトaa(ASCIIアートライブラリ)に基づいており、これはt http://aa-project.sourceforge.net/にホームペイジを持っている。aa ペイジは、 aview (ASCII アートビューワ), aatv (テキストコンソールでTVを見るため), ttyquake (Quakeのテキスト版), Dumb (Doom のクローン), apron (mpeg1 プレーヤ)その他のプログラムを述べる。ttyquake はgraphical Quake のインストールを必要とするので、オリジナルの Quake ゲームファイルを使用する。ある批評家は ttyquake について「この世界で人々は飢えて死ぬ・・・何人かはそれまで時間がかかる」と書いている。

bb は、コンソールから走らせるのが最良だが、下図のように X-terminal ウインドウ内で走らせることも出来る。

bb 用の有効なコマンド行オプションは:

Usage: bb [aaoptions] [number]





オプション:


  -loop          無限ループでデモを演じる





AAlib オプション:


  -driver        ドライバ選択


                  利用出来るドライバ:linux curses X11 stdout stderr


  -kbddriver     キイボードドライバ選択


                  利用出来るドライバ:curses X11 stdin


  -mousedriver     マウスドライバ選択


                  利用出来るドライバ:X11 gpm cursesdos 





サイズ・オプション:


  -width          幅設定


  -height         高さ設定


  -minwidth      最小幅設定


  -minheight      最小高さ設定


  -maxwidth      最大幅設定


  -maxheight     最大高さ設定


  -recwidth      推奨幅設定


  -recheight     推奨高さ設定





属性:


  -dim          dim (半輝度)属性の利用を可能にする


  -bold          bold (倍輝度) 属性の利用を可能にする


  -reverse        reverse (反転)属性の利用を可能にする


  -normal        normal (正常)属性の利用を可能にする


  -boldfont       boldfont (太字)属性の利用を可能にする


  -no<attr>      disable (つまり太字でない)





フォント表現オプション:


  -extended      256 文字全部を使用


  -eight         8ビットasciiを使用


  -font <font>   フォント選択(このオプションは、aalibが実行フォントを


                  決められぬハードウエア上だけに効果を持つ


                  利用出来るフォント:vga8 vga9 mda14 vga14 X8x13


                  X8x16 X8x13bold vgagl8 line





表現オプション:


  -inverse       反転表現を可能にする


  -noinverse     反転表現を不能にする


  -bright <val>  高さ設定(0-255)


  -contrast <val> コントラスト設定(0-255)


  -gamma %lt;val>   ガンマ補正値設定(0-1)





ディザリング・ オプション:


  -nodither        ディザリングを不能にする


  -floyd_steinberg   floyd steinberg ディザリング


  -error_distribution  error distribution ディザリング


  -random <val>    無作為ディザリング値設定(0-inf)


モニター・パラメータ


  -dimmul <val>    dim カラー(5.3)に関する係数を掛ける


  -boldmul <val>    dim カラー(2.7)に関する係数を掛ける


  規定値パラメータは私のモニターに合うよう定めた(15" goldstar)


  コントラストは最大に輝度は黒色背景を作るよう設定した


  この値はモニター(及びコントロールの設定)に依る 


  規定値設定はPCモニターにはOKの筈だが、理想的モニターは


  dimmul=1.71 boldmul=1.43の必要がある。例えば、SGI の使うモニターは


  この値に近い。古い14" vga モニターは高い値が必要。


終わりに

来月は、マニュアルの効果的書き方その他を書きます。アイデアが枯渇するので、記事に関するご意見を歓迎します。

この記事に現れたスクリーンショットは、M4 プロセッサAnotherLevelで走る"GNU Image Manipulation Program"を使って作ったものと、 FVWM2 ウインドウマネージャのものです。

最後に、もう学校にいないので私の"n6tadam@users.purbeck. dorset.sch.uk" はもう無効です。下記の新アドレスにいます。

ご意見を下さい

ご意見、アイデアなどがあれば、下記のe-メイルアドレスをクリックして送って下さい。

mailto:thomas_adam16@yahoo.com

 

Copyright ゥ 2001, Thomas Adam.
Copying license copying.html
Published in Issue 70 of Linux Gazette, September 2001
 
 
 
 
Atari ST マシンをLinuxターミナルとして使う方法

By Matthias Arndt

要約

この記事は古いSTをターミナルとしてLinuxボックスに接続するのに役立つだろう。

はじめに

この記事で述べることはAtari ST以外のボックスにも通用する。Amiga 又はSinclair QLもターミナルとして使うことが出来る。

Atari STは10年前に初めて買ったマシンなので愛着がある。未だに働いているので、ゲーム以上の用途に使おうと思った。

そこで、Linuxターミナルとして使うことにしたが、2台目のターミナルを作る気はない。単なる経験だ。

このソリューションはSTにファイルとプログラムを送ることが出来、最後には限定されたインターネットアクセスをすることが出来る。ターミナルエミュレータが良ければ、lynxとw3mをウエブサーフに、muttをメール読取に、tin又はslmをニュース読取に使うことが出来る。 Nettris のようなコンソール用2人ゲームを楽しむことも出来る。

ターミナルとは?

ターミナルとはキイボード付きのディスプレイで、所謂エスケープシーケンスでコードされた特殊属性が多分付いた入力テキストを表示する能力と、キイストロークを遠隔端に送る能力だけを備えている。

一般的にハードウエアターミナルは馬鹿で、これ以上のことは出来ない。

昔のコンピュータでは、ターミナルを用いて多数ユーザーをメインフレームに接続した。

こんな旧型ターミナルがあれば、ここに述べるのと同じ方法で接続することが出来る。

ターミナルの機能−受信、送信、表示−は、ソフトウエアを用いて容易におこなうことが出来る。これがここで述べる方法だ。STを昔のターミナルのように働かせるため特殊ターミナルソフトウエアを使用する。

必要なハードウエア

この計画には次のハードウエアが必要だ:

1.Atari ST コンピュータ、1MB 以上のメモリ付きが好適
2.ST用モノクロモニタ又はカラーモニタ、表示性能が良く60Hzの能力のもの
3.STとPCのシリアルソケットを繋ぐモデモケーブル
4.ユーザー一人以上をサポートするに十分なハードウエア付きの Linux 又は類似Unix ボックス(486er 以上が付いていれば何でも完全に働く)

上記のように、Atari STマシンは、RS232ソケットと80列ディスプレイのある任意のコンピュータで置き換えることが出来る。

ソフトウエアのダウンロード又はアップロードは出来ないが、同じ方法で実際のターミナルを使うことが出来る。

ソフトウエア要件
1.シリアルサポート付きLinux kernel
2.シリアルラインを用いる能力のある getty (agetty もmgetty もうまく働く)
3.ZModem 転送用.lrzsz (オプション)
4.Kermit ファイル転送用kermit (オプション)
5.ST用ソフトウエア
・ターミナルプログラム、VT52 エミュレータ以上が好適
・XYZ.TTPのようなファイル転送ソフトウエア (オプション)
・シリアル Fix ソフトウエア、TOS (STのOS) の中のRS233取扱ルーチンはバグが多いため
6.ターミナルから使うのに有用なコンソールアプリケーション多数(Linuxディストリビューションから供給される)
Atari ST,以外のマシンを使うときは、 VT100 又はANSI エミュレーションとファイル転送の能力のあるターミナルプログラムが必要。

Kernelには問題はない。外付きシリアルモデモを使ってネットに接続出来るのであれば、すべてはボックスの外で働く。

多くの場合、Kernelはコンパイルされているか又はKernelモジュールとして供給されたシリアルサポートを有する。もしなければ、新Kernelをコンパイルしなければならない。ここではその詳細は述べない。幾つかのハウツーがある。

ログインプロンプトをシリアルライン上に置く

このステップは、シリアルラインを通じてSTにログインプロンプトを示すのに必要だ。

先ず適切なgettyが必要だ。このプログラムはプロンプトの表示とライン上のユーザー名プロンプト入力に使われる。プログラム /bin/login を呼び出してシステムにユーザーをログインする。

gettyプロセスは全部initプロセスから生じる。initはファイル/etc/inittabから、どのgettyプロセスを生むかを知る。

ほとんどのディストリビューションはgetty又はmgetty又は両方を供給するので、これはagettyの使用に焦点を当てる。

さてbecome rootしたので 好みのエディタを使って/etc/inittab を開く。

次のステップは、ファイルにラインを追加して新gettyプロセスを生むことだ。これは次のようになる。

  S0:12345:respawn:/sbin/agetty -w -h -L 19200 ttyS0 ansi


変かな? 大丈夫、中身の意味を説明する。

1の行のパーツが最左端であるとする(S0)。番号順に説明する。

1.S0−これは行独自の識別子だ。単なるマークだが、 /etc/inittab ファイル全体で唯一でなければならない
2.12345 −これはgettyを呼び出すべきランレベルだ。
3.respawn −これは完了後gettyプロセスを再スタートすることをinit に告げる。
4./sbin/agetty ... −この行が実際のコマンド行で次章で述べるgettyプロセスを立ち上げるのに用いられる

ここでファイルをセーブしてエディタから出る。シェルで init q とタイプしてinittabファイルを読むよう告げる。

agettyとそのコマンド行アーギュメント

先ず、agettyにフルパスを示す。場所が不明なら、シェルでlocate bin/agetty を試す。

厚着に、以下のコマンド行アーギュメントの一つ以上を得る(例は前章を参照)

 -w はagetty に、行上のCR (ASCII 13) を待ってからプロンプトを示せと告げる

 -h はagetty に、行上のハードウエア・フロー・コントロール(aka RTS/CTS)を使えと告げる。

 -L はagettyに、これはローカルラインであることを告げる。この時はキャリヤをモニターしない。

 ## これは使用するボーレートだ。19200、9600、2400 が良い値である。ST は19200以上を扱えない。

 ttyS? これは使用するシリアルデバイスだ。COM1にはttyS0 、COM2には ttyS1, 以下同様につかう。モデモポートを使わないこと。シリアルポートが一つしかないときは、モデモとターミナルを切り換える。この倍委はmgettyを使う方が良い。入信と出信を同時に一線で扱うことが出来るからだ。(モデモ利用を目的とするが)。

 ansi は使用するターミナル型だ。ターミナル・ソフトウエアの能力によりvt100 又はatari を試すことが出来る

疑わしいときは、シェルの man agetty を走らせるとヘルプになる。

ST 設定

先ず最初にnullモデモケーブルを用いて両マシンを接続する。STには隣に電話記号のあるソケットが着いている。これがシリアルポートだ。

DB25 からDB9、又はその逆のアダプタケーブルが必要になるだろう。STのはブロードポートであるのに、ほとんどのPCのは小さいからだ。nullモデモは、コンピュータショップで見付かる。PCのシリアルポートに合うものと、nullモデモをSTに繋ぐアダプタを買う。

ここでターミナルプログラムをSTにロードする。agettyと8N1とに同一ボーレートを与えて設定すること。Returnを数回押す。ST画面上にLinuxのログインプロンプトが出るので、ログインしてシェルとプログラムに向いたラインを使用出来る筈だ。

カースベースのプログラムを使って、ターミナルソフトウエアの能力を点検することが出来る。良いターミナルソフトウエアを使うと、lynx、w3m、mutt、viが使える筈だ。Midnight Commanderを正しくカラーで表示できるターミナルソフトウエアもある。

推奨 ST ソフトウエア

STと一緒に供給されるVT52エミュレータは、簡単な課題とテスト用に使える。これには世間並みのANSIターミナルとファイル転送オプションとがない。

STに1MB以上のRAMが装備してあれば、Rufus 又はConnectを試すとよい。

ST Termは、half-Meg STでうまく働く。VT52エミュレータとANSIエンハンサの組合せは、メモリ問題のため良い選択だ。

ANSITERM は、低解像度でカラーと80桁表示を含むANSIフルサポートを保証する。しかし、良いモニタを使わないと目を傷める。

TAZ は、中程度モノクロ解像度で働く。これは、中解像度でペイジフリッピング及びパレット切り換え技術付き16色を特徴とする。しかし、このモードは60Hzの能力を必要とする。
インターフェイスはminicom又はtelixに似ており、それで十分だ。
私はこのプログラムを推奨する。ターミナルエミュレーションが大変良くて、見事な特性を持っているからだ。試していないがhalfmeg STで働く筈。

必ず80 桁で使用すること、これ以下ではほとんどのプログラムが働かない

持っていれば、モノクロモニタが断然良い。 カラーは出ないが、TAZ では問題にならない筈だ。

ftp://wuarchive.wustl.edu/systems/atari/umich.eduに、ダウンロードで入手出来る STプログラムが幾つかある。

ファイル転送

この特性が、nullモデモを通じてSTを接続して、古いSTファイルをセーブしたりネットからダウンロードしたソフトウエアを使用したりする主な理由だ。

ZModem プロトコルを使用しなければならない、理由は:

・標準で
・エラーがなく
・Linux ボックスで容易に使用出来る

ST側に必ずZModem送受信器を持つこと。

ファイルをLinuxボックスからSTに送るには、シェルプロンプトで、単に:

 sz filename


とタイプする。これでST側の受信処理を呼び出した。Zmodemダウンロードを自動的に開始出来るターミナルもある。

別の方法は、もっと簡単に、シェルプロンプトで:

  rz                              Zmodem


とタイプする。これでターミナルソフトウエアの ZModem アップロード機能が起動する。

引っ掛かったら Ctrl-C を数回押す。失敗したら、linuxボックス上で rz/sz 処理を殺す。

まとめ

正しいハードウエアがあれば、物事は直線的で設定は容易い。カラクリはST側用に適切なターミナルソフトウエアを見付けることだ。

ターミナルとしての他のシステム

ターミナルとしては Atari ST に限らない。勿論、Commodore Amiga やSinclair QL も同じように使える。使用するシステムは次のパターンに合えばよい:

・80 桁表示
・標準 RS232 ポート
・ターミナルソフトウエアが利用出来る

これでSTと同じことが出来る。.

古いマシンに興味を持たれ、イーサネット廉価版を知るのに少しお役に立てば幸い。

 

Copyright © 2001, Matthias Arndt.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 70 of Linux Gazette, September 2001
 
 
 
 
ブラウザを使わないダウンロード

By Adrian J Chung

巨大なファイルをリンクからダウンロードしようとして、ウエブブラウザを数時間も数日間も開き放しにしたことはないか?単一ウエブペイジに40個もファイルがあって全部必要なとき、ウンザリしながら一々クリックしていないか?終わる前にブラウザが止まったらどうする?GNU/Linuxは、ブラウザに関係なく、バックグラウンドでダウンロードする手軽なツールを装備するに到った。これにより、ログアウト、中断ダウンロードの再開、ネット繁忙時期を避けたスケジュールさえ出来るようになった。

会話型が邪魔になる時

ウエブブラウザはウエブを会話的にする設計となっている−クリックすれば数秒で結果が出る。だが、最速の接続でもダウンロードに数秒以上を要するファイルがある。実例は、自分のGNU/Linux CD-ROMディストリビューションに夢中になっている人達の間のISO画像だ。ウエブブラウザの中には、メモリが漏れたり最も重要な時期に潰れたりして、長時間の使用に耐えないものがある。幾つかのブラウザをファイルマネージャに融合させても、多くは、幾つかのファイルを転送して一つに纏めるのを容易にするマルチセレクションとラバーバンド操作をサポートしない。ファイル全部が到着するまで待たなければならない。最後に、ダウンロードを始めるリンクをクリックするため、オフィスにいなければならなず、帯域幅を共有する同僚の顰蹙を買う。

巨大ファイルのダウンロードには、別のツールのセットが似合っている。この記事では、各種GNU/Linux ユテリティ、即ち lynx, wget, at, crontab, など、を組み合わせて各種の転送状況を解決する方法を論じる。少量の簡単なスクリプトも採用するので、bash シェルに関する知識が少しあると役立つ。

wgetユティリティ

ほとんどの主要ディストリビューションには wget ダウンロードツールが含まれている。

  bash$ wget http://place.your.url/here


これは、FTP、日付スタンプを扱い、ウエブサイトツリー全体−注意しないとウェブサイト全体及びそれがリンクするサイトは何であろうと、繰り返しミラーすることが出来る:

  bash$ wget -m http://target.web.site/subdirectory


ロードが高くなる可能性があるのでこのツールは、サーバーにおくことが出来る。これは、ミラーするとき "robots.txt" プロトコルにしたがう。追うリンクの型とダウンロードするファイル型を制限して何をミラーするか制御するには幾つかのコマンドがある。

例:GIF画像を飛ばして関係リンクのみを追うには:

  bash$ wget -m -L --reject=gif http://target.web.site/subdirectory


wget はまた、不完全ファイルを与えられたとき残りのデータを追加して、中断ダウンロードを復元する(" c"オプション)。この操作はサーバーがサポートする必要がある:

  bash$ wget -c http://the.url.of/incomplete/file


復元とミラーは組み合わせることが出来るので、別々のダウンロード区分にわたるファイルの巨大な集積をミラーすることが出来る。これを自動化する方法は後述。

ダウンロード中断を度々経験するなら、URLを数回試みるよう wget に命じることが出来る:

  bash$ wget -t 5 http://place.your.url/here


ここでは5回で諦めている。絶対に諦めないなら "-t inf" を用いる。

プロキシ・ファイアウォールはどうなるか? http_proxy 環境変数又は .wgetrc コンフィギュレーションファイルを用いて、ダウンロードを経由するプロキシを指定する。プロキシした接続の中断接続に伴う問題は、復元に失敗することがあることだ。プロキシしたダウンロードが中断したら、プロキシサーバーは、ファイルの不完全コピイのみをキャッシュする。ファイルの残りを獲得するため "wget -c" を使うと、プロキシはそのキャッシュを点検して、既にファイル全部を入手したと誤って報告する。ダウンロード要求に特殊ヘッダを追加して、そのキャッシュを迂回してプロキシをなだめることが出来る:

  bash$ wget -c --header="Pragma: no-cache" http://place.your.url/here


"--header" オプションは、ヘッダの数がマナーを任意に加えて、それによりウエブサーバーとプロキシの行動を変更することが来る。ソースが外部のリンクを経由してファイルを提供することを拒み、内容は、同じサイトの他のペイジを経由してアクセスしたときのみブラウザに引き渡されるサイトもある。"Referer:"ヘッダを付けてこれを回避することが出来る。

  bash$ wget --header="Referer: http://coming.from.this/page" http://surfing.to.this/page


反社会的サイトの中には、内容を特定ブランドのブラウザのみに提供する。 "User-Agent:" ヘッダを用いてこれを回避する。

  bash$ wget --header="User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)" http://msie.only.url/here


(上記チップを警告することは、コンテンツのライセンス機構を回避すると見なされることがあり、これらの行動を非合法と見なす反社会的システムが存在する。自国の法律を点検のこと。マイレージが変わるかも知れない)

ダウンロードの時刻

巨大ファイルのダウンロードを、会社のコンピュータで、共有回線を通じておこなうのであれば、繁忙時をさけてファイル転送を開始しなければならない。誰もいない事務所に残る必要はないし、夕食後リモートログインをおこなう必要もない。ジョブスケジューラを使う:

bash$ at 2300
warning: commands will be executed using /bin/sh
at> wget http://place.your.url/here
at> press Ctrl-D

ここでは、午後11:00にダウンロードを開始する。atd スケジュールデモンがこの仕事の背後で働いていつのを確認すること。

所要日数

1個又は数個のファイルでダウンロードするデータが多く、帯域幅がキャリヤピジョンプロトコルとほぼ同じときは、翌朝出社したとき未だダウンロードが完了していないことがある。この時はジョブを打ち切って、回線を他の人に渡すのがよい。それには"wget -c" を使う。これを必要なだけ繰り返す。 crontab を使ってこれを自動化するとよい。次のような内容の"crontab.txt",と言う無地のテキストファイルを作る:

 0 23 * * 1-5    wget -c -N http://place.your.url/here


 0  6 * * 1-5    killall wget


これが、どのjobをどんな定期的間隔で繰り返すかを規定する crontab ファイルだ。初めの5列は、コマンド実行時期を示し、各行の残りの部分は実行内容を示す。初めの2列は、午後11時0分に wgetを開始し、午前6時0分に wgetを停止することを示す。3列と4列の * は、これら処理が毎月毎日起こることを示す。5列は、各操作を何曜日におこなうかを示す。"1-5"は、月曜から金曜までだ。

そこで毎週日午後11時にダウンロードが始まり、毎週日午前6時に進行中の wget があれば終了する。この crontab スケジュールを起動するには次のコマンドを入れる:

  bash$ crontab crontab.txt


wget の "-N" オプションは、目標ファイルのタイムスタンプを点検して、一致したら、それは全ファイルが転送されたことをしめすので、ダウンロードを中止する。見るだけで放って置けば "crontab -r" がこのスケジュールを削除する。私は共有ダイアルアップ接続を用い、この方法で多数のISO画像をダウンロードした。

動的に作られるウエブペイジ

日に数回など頻繁に変更されるので、要求に応じて作成されるウェブペイジがある。このターゲットは、技術的にはファイルでないので、ファイル長さがなくダウンロードの復元は意味をなさない− "-c" オプションが働かない。例: Linux Weekend NewsのPHP-作成ペイジ:

  bash$ wget http://lwn.net/bigpage.php3


ダウンロードを中断して再開すると、仕切線から開始する。私の会社のネット接続は貧弱だったので、動的HTMLペイジが完全に渡された時期を判定する簡単なスクリプトを書いた:
#!/bin/bash





#create it if absent


touch bigpage.php3





#check if we got the whole thing


while ! grep -qi '</html>' bigpage.php3


do


  rm -f bigpage.php3





  #download LWN in one big page


  wget http://lwn.net/bigpage.php3





done


上記の bash スクリプトは、ファイルの終わりを示すストリング "</html>" が見付かるまで文書のダウンロードを続ける。

SSL とクッキー

"https://" で始まるURLは、ソース・ソケット・レイヤを経由してリモート・ファイルにアクセスしなければならない。この状況に適した簡単な curlと呼ばれる別のダウンロードユティリティがある。

要求コンテントを提供する前にブラウザにクッキーを強制送付するウエブがある。ウエブブラウザのクッキーファイルから得られる正しい情報には "Cookie:" ヘッダを追加しなければならない。 lynxMozilla クッキーファイル・フォーマットについては:

このサイトにこのブラウザを用いて既に登録していると仮定すると、

  bash$ cookie=$( grep nytimes ~/.lynx_cookies |awk '{printf("%s=%s;",$6,$7)}' )


が、http://www.nytimes.com/から内容をダウンロードするため必要なクッキーを構築する。w3mは、少し違うクッキーファイルフォーマットを使用する:

  bash$ cookie=$( grep nytimes ~/.w3m/cookie |awk '{printf("%s=%s;",$2,$3)}' )


ダウンロードは次のようにおこなうことが出来る:

  bash$ wget --header="Cookie: $cookie" http://www.nytimes.com/reuters/technology/tech-tech-supercomput.html


または curl ツールを用いて:

  bash$ curl -v -b $cookie -o supercomp.html http://www.nytimes.com/reuters/technology/tech-tech-supercomput.html


URLリストの作成

ここまでは単一ファイルのダウンロードまたはウェブサイト全ディレクトリのミラーをおこなった。ウエブペイジにURLの示されている多数のファイルのダウンロードに興味はあるが、サイト全部をミラーする気はないことがある。トップ100の音楽ファイルを順に表示するサイトのトップ20だけをダウンロードしたいときなどである。ファイルエクステンションだけに作用する "--accept" と "--reject" オプションは、ここでは役に立たない。代わりに "lynx -dump" を使用する。

  bash$ lynx -dump ftp://ftp.ssc.com/pub/lg/ |grep 'gz$' |tail -10 |awk '{print $2}' > urllist.txt


Linuxからの出力は次いで、各種GNUテキスト処理ユティリティを用いてフィルタすることが出来る。上の例では、"gz"で終わるURLを抽出し、これらの内終わりの10個をファイルに記憶する。可愛いいbashスクリプトコマンドがこのファイルにリストされたURLを自動的にダウンロードする。

bash$ for x in $(cat urllist.txt)
> do
> wget $x
> done

これで Linux Gazette.の最新10号をダウンロード出来た。

帯域幅内を泳ぎ回る

帯域幅内でダウンロードする選ばれた人の一人で、ファイルダウンロードが、ウエブサーバー側の隘路だけによって遅くなっているとき、このカラクリがファイル転送処理を「狙い打ち」するのに役立つ。これは curlの使用と、目標ファイルと同じコピイがあるミラーウエブサイト幾つかを必要とする。例えば、次の三つの位置から Mandrake 8.0 ISOをダウンロードしたいとする:

url1=http://ftp.eecs.umich.edu/pub/linux/mandrake/iso/Mandrake80-inst.iso


url2=http://ftp.rpmfind.net/linux/Mandrake/iso/Mandrake80-inst.iso


url3=http://ftp.wayne.edu/linux/mandrake/iso/Mandrake80-inst.iso


ファイルの長さは 677281792 なので、curlの "--range" オプションを用いて、三つの同時ダウンロードを開始する。

bash$ curl -r 0-199999999 -o mdk-iso.part1 $url1 &


bash$ curl -r 200000000-399999999 -o mdk-iso.part2 $url2 &


bash$ curl -r 400000000- -o mdk-iso.part3 $url3 &


これは、ISO画像の異なる部分を異なるサーバーからそれぞれ転送する三つのバックグラウンド・ダウンロード処理を生じる。"-r" オプションは目標ファイルから抽出するバイトのサブレンジを規定する。完了すると、三つの部分全部を単に cat してまとめる − cat mdk-iso.part? > mdk-80.iso. (CD-R が焼ける前にmd5 hash の点検を薦める)。 "--verbose" オプションを使いながら、各 curl をそのウインドウに打ち上げると各転送の進行を追跡することが出来る。

まとめ
リモート転送の実行に非会話型方法を使うのを恐れてはいけない。ウエブデザイナが、そのサイトを会話型でサーフさせようとしても、処理の自動化を助ける無料ツールが常にあって、ネット経験を豊富にしてくれる。
 
Copyright © 2001, Adrian J Chung.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 70 of Linux Gazette, September 2001
 
 
 
 
Linuxシステムのブートストラップ−解析

By Subhasish Ghosh

世界中で数百万のLinuxユーザーがコンピュータの電源を入れて、OSがブートし最後に "login" プロンプトが出るまで数秒(時には数分)待っている。

コンピュータがブートストラップしているとき、画面に沢山のメッセージが出るのに気付いておられるだろう。これは後でコマンド: cat /var/log/dmesg | more を入力すると見られる。そこで問題は、メッセージの意味は何かだ。答は簡単だ:Linux教科書を見ると「これはKernel ブートメッセージを示す」など、と書いてある。じゃ、Kernel ブートメッセージとは何だ?

Linuxの内部作用を理解するには、「Linux Kernel アーキテクチャ」の正しい理解が必要で、それには努力が要る。ほとんどのLinuxユーザーにはその興味も時間もないだろう。

この記事は「Linux Kernel アーキテクチャ」の説明ではない。それには厚い本が必要だ。コンピュータシステムの最も基本的な概念−Linuxを走らせるコンピュータのブートストラップを詳細に説明する。言い換えると、電源投入から、画面にログインプロンプトが現れるまでの過程を(CLIモードを使っているとして)説明する。

注記:

1. Linux Kerne の内部作用の理解は読者に代わって仮定する。
2.この記事で述べるファイルは全部 Linux Kernel 2.4.2-2. を基準とするが、このファイルはすべての Linux Kernels に共通なので、どんな Linux システムでも見出される。私は Red Hat Linux 7.1 ディストリビューション・リリースを使った。

1.ブートストラップとは?

ブートストラップとは、昔、(疲れて横になっているとき)ブーツを引き寄せて起立することを意味した。OSでは、処理のうち、それを実行するプロセッサのメインメモリにOSを持ち込む過程を指す。Linux Kernelの内部データ構造も始動され、変数値も設定されて、プロセスが作られる(これが後に重要なプロセスを生む)。コンピュータのブートストラップは長くて複雑な仕事だ。電源を入れたとき、ハードウエアは予期出来ない状態にあるし、RAMは働いていなくて勝手な状態にあるからだ。覚えておかなければならないのは、「ブートストラップ」は、コンピュータアーキテクチャに大きく左右されることだ。

注記:

1.ここでは IBMの PC アーキテクチャを論じる
2.コンピュータを起動するのにCPUを蹴飛ばす人がいる。これを「ブートストラップ」ではなく「ブートスラップ」と言うが、述べたプロセスは同じく通用する。

2.BIOS とは? その作用は?

コンピュータの電源を入れただけでは使えない。RAMが起動していないし、OSがないからだ。ブートストラップを始めるには、特別のハードウエア回路がCPUのRESETピンの論理値を上げる。次いで、幾つかのCPUレジスタが固定値に設定される。レジスタには、cs (プログラム命令を含むセグメントを指すセグメント・レジスタ−コード・レジスタ) とeip (CPUがプロセッサ検出例外を発生したとき、言い換えるとCPUが命令実行中の異常を検出したときCPUが生じる例外で、これらは、CPUコントロールユニットが例外を発したときKernelモードスタックにセーブされたeipレジスタの値に依って、 "faults", "traps"、"aborts"の三つに分けられる.)が含まれる。次いで、物理アドレス 0xfffffff0に見出されるコードが実行される。このアドレスは、通常ROM(読取専用)とよばれる読取専用の特殊メモリにハードウエアがマップする。BIOS (Basic Input/Output System)は、ROMに記憶されたプログラムのセットだ。これは、コンピュータシステムを構成するハードウエアがデバイスを扱う各種オペレーティングシステムが使う間欠駆動、低レベルプロシージャから構成される。Microsoft DOS はこのようなOSの一つである。

ここで生まれる疑問は、Linuxはコンピュータシステムに付属するハードウエアの起動にBIOSを使うのか?そうではなく他の何かなのか?である。イエスなら、では何か?となるが、答は簡単でない。答は慎重に理解されなければならないからである。80386モデルに始まって、インテルマイクロプロセッサは、(論理アドレスから --> 線型アドレス--> 物理アドレスまで) アドレス翻訳を、 "Real mode" と"Protected mode"と言う、二つの違った方法で実行する。Real modeは、主として古いモデルとの互換性維持のため存在する。事実、BIOSプロシージャはReal modeで実行される。だが、Linux KernelはProtected modeでReal modeではない。したがって、一旦起動すると、LinuxはBIOSを全く使わないで、それ自体のデバイスドライバを、コンピュータ上の各ハードウエアデバイスに使用する。

ここで生まれる疑問は、Linuxが"Protected mode"を使うのは何時で、BIOSが同じモードを使えないのは何故か?である。BIOSは、作動にReal mode アドレスを使い、コンピュータの電源を入れたとき利用出来るのはReal mode アドレスだけなので、Real mode を用いる。Real mode アドレスはsegセグメントでoffオフセットなので、対応する物理アドレスは seg*(2*8)+offで与えられる(注記:セグメントデスクリプタは長さが8バイトなので、GDTまたはLDT内部の相対アドレスは、セグメントセクターの最有意13バイトに8を掛けると得られる)

では、Linuxはブートストラップの全過程でBIOSを使わないとの意味だろうか?答はノーだ。Linuxは、Kernel画像をディスクまたは他の外付デバイスから回収しなければならないとき、ブートストラップ段階でBIOSを強制的に使わされる。

この章をまとめるのは、ブートストラップ時にBIOSがおこなう主作用に似て来る。これらは次の通りだ:

1.これはハードウエア上で膨大な量のテストをおこなう。これは、存在するハードウエア、正常に働くものとそうでないもの、を点検するためだ。このステップは、通常POST (Power-On Self-Test)と呼ばれる。バージョンバナーと一連のメッセージが、このステップの間に、表示される。(ブートストラップの代わりのブートスラップでもエラーはなかった!!)
2.次いで、ハードウエアを初期化する。このステップは極めて重要だ。すべてのハードウエアがIRQラインまたはI/Oポート上で競合しないで作動することを保証するからだ。このステップの終わり頃、搭載PCIデバイスのリストを表示する。
3.次ぎは「オペレーティングシステム」の番だ。BIOSはブートするOSを探す。BIOS設定にしたがって、このステップは、フロッピイディスク、ハードディスク、またはCDROMのブートセクターにアクセスしようとする。
4.有効なデバイスを見出すと、BIOSはその第一セクタの内容を、物理アドレス0x00007c00 から始めてRAMにコピイし、そのアドレスにジャンプして、今ロードしたコードを実行する。これで全部だ。これらは、BIOSが実行すると計画されている作業だ。終わった後を引き受けるのはブートローダーだ。だから次の章に進もう。

3.ブートローダーとは? その作用は?

BIOSは、オペレーティングシステムKernelの画像をRAMにロードするのが主な(唯一の仕事である特殊プログラムを呼び出す(実行ではない)。このプログラムをブートローダーと呼ぶ。先に進む前に、システムをブートする各種方法を見てみよう。

・Linux をフロッピイ・ディスクからブートする
・Linux をハード・ディスクからブートする
1.Linuxをフロッピイ・ディスクからブートする:フロッピイディスクからブートするときは、フロッピイディスクの第一セクターに記憶された命令がRAMにロードされて実行される。これらの命令は次いでKernel画像を含む残りすべてのセクターをRAMにコピイする。
2.Linux をハードディスクからブートする:ハードディスクからブートするときのブート処理は異なる。マスターブートレコード(MBR)と呼ばれるハードディスクの第一セクタには、パーティションテーブルと小プログラムが含まれている。このプログラムが、スタートすべきOSを含むパーティションの第一セクターをロードする。Linuxは大変融通性がある高級ソフトウエアなので、MBRの中のこの小プログラムをLILO (LInux boot LOader)と言う高級プログラムで置き換える。LILOにより、ユーザーはブートするOSを選ぶことが出来る。

ここで、システムをブートするこれら二つの方法を詳細に調べよう。

4.Linux をフロッピイ・ディスクからブートする

Linux Kernel は一枚の 1.44-MB フロッピイ・ディスクに入る(実際は、"stripped-off"型と言うRed Hat Linuxがあり、これは、Red Hat Linuxシステムを動かすのに、ほぼ2MBの物理的RAMと1.44MBのハードディスクスペースを必要とする)。だが、Linux Kernelを一枚のフロッピイに収容する唯一の方法は、"Linux Kernel Image"を圧縮することだ。ここで覚えるべき重点は、解凍はブート時にローダーがおこなうが、圧縮はコンパイル時におこなうことだ。

Linuxをフロッピイディスクからブートするときのブートローダーは極めて簡単だ。これは、アセンブリ言語ファイル/usr/src/linux-2.4.2/arch/i386/boot/bootsect.S. にコードされている。Linux Kernel ソースをコンパイルして新Kernel画像を得るとき、このアセンブリ言語ファイルから生じた実行可能コードがKernel画像ファイルの始めに置かれる。これがLinux Kernelを含むフロッピイディスクの作成を容易にする。

ディスクの第一セクタから始まるKernel画像をコピイすれば、フロッピイが出来上がる。BIOSがフロッピイディスクの第一セクタをロードすると、ブートローダーもコピイされる。ブートローダーは(物理アドレス0x00007c00に飛ぶことにより)BIOSに呼び出されて、次の作用をする。

1.自分自身をアドレス 0x00007c00 からアドレス 0x00090000に移動。
2.アドレス 0x00003ff4を用いて、"Real Mode" スタックを設定。
3.パラメータファイルを設定。これはBIOSがフロッピイディスク・ドライバを扱うのに利用。
4.BIOSプロシージャを呼び出して、メッセージ "Loading" を表示。
5.次に、BIOSプロシージャを呼び出して、フロッピイディスクからKernel画像の setup( ) コードをロードし、これをアドレス 0x00090200から始まるRAMに置く。
6.最後にBIOSプロシージャを呼び出して、フロッピイディスクからKernel画像の残りをロードし画像を、アドレス 0x00010000 ("make zImage" を用いてコンパイルされた小型Kernel画像用の "low address" と言う)またはアドレス 0x00100000 ("make bzImage" 大型Kernel画像用の "high address" と言う)のいずれかから始まるRAMにロードする。
7.次いで、最後に setup( ) コードにジャンプする。

5.Linux をハード・ディスクからブートする

Linux Kernelはほとんどハードディスクからロードされる。これには2段階ブートローダーが必要だ。Intelシステムで最も普通に使われるブートローダーの名は、LILOだ。他のアーキテクチャ用には別のLinuxブートローダーがある。LILOは、活動ディスクパーティションのMBR又はブートセクタのいずれかに搭載することができる(注記:Red Hat Linux 搭載中にユーザーがLILOをMBRに書くかまたはブートセクタに置くかの選択をしなければならないステップがある)。

LILOは二つの部分に分ける。MBRに入れるには大き過ぎるからだ。MBR又はディスクパーティションのブートセクタには、小さいブートローダーが含まれ、これをBIOSがアドレス 0x00007c00 から始まるRAMに書き込む。この小プログラムは自分で、アドレス0x0009a000に移動し、Real Modeスタックを設定して、最後にLILOブートローダーの残り部分をロードする(注記:Real Modeスタックは 0x0009b000 から0x0009a200までに及ぶ)。

LILO の第二部分は、利用出来るOSすべてをディスクから読み取ってリストを示し、ユーザーがその何れかを選べるようにする。ユーザーがロードするKernelを選択した後(私のシステムでは8個のカスタムKernelから1個のLinux kernel を選ぶ)ブートローダーは、相当するパーティションのブートセクタをコピイして実行するか又は、Kernel画像を直接RAMにコピイする。

Linux Kernel画像をコピイしなければならないので、Linuxブートローダーは、実質的に、Kernel画像に組み込まれたブートローダーと同じ作用をする。(物理アドレス0x00007c00 に飛んで)BIOSが呼び出したブートローダーは、次の作用を実行する:

1.自分自身をアドレス0x00007c00 からアドレス0x00090000 に移動。
2.アドレス 0x00003ff4を使って、 "Real Mode" スタックを設定。
3.ディスクパラメータテーブルを作成。これは、ハードディスクデバイスドライバを扱うため、BIOS が使用。
4.BIOSプロシージャを呼び出して、メッセージ"Loading Linux" を表示。
5.次いで、BIOS プロシージャを呼び出してKernel画像のsetup( ) コードをロードし、これをアドレス 0x00090200から始まるRAMに置く。
6.最後にBIOSプロシージャを呼び出して、フロッピイディスクからKernel画像の残りをロードし画像を、アドレス 0x00010000 ("make zImage" を用いてコンパイルされた小型Kernel画像用の "low address" と言う)またはアドレス 0x00100000 ("make bzImage" 大型Kernel画像用の "high address" と言う)のいずれかから始まるRAMにロードする。
7.次いで、最後に setup( ) コードにジャンプする。

6.setup()ファンクション。その作用

やっと、「ブートストラップ」過程に欠かせない、本質的アセンプリ言語ファンクションの幾つかを詳しく眺める時機が来た。ここではsetup()ファンクションを調べる。

setup() ファンクションはファイル /usr/src/linux-2.4.2/arch/i386/boot/setup.S. にある。setup()アセンブリ言語ファンクションのコードは、Kernelの統合ブートローダーの直後、つまりKernel画像ファイルのオフセット0x200、にリンカーが置く。これにより、ブートローダーはこのコードを容易に見出して、物理アドレス0x00090200から始まるRAMに置くことが出来る。

setup()ファンクションの作用は、名前から分かるように、何かを設定することだ。

Kernelが正しく働かせるには、コンピュータのハードウエアデバイス全部を検出し、順序正しく初期化しなければならない。setup()ファンクションの作用はハードウエアデバイス全部を初期化して、Kernelが働く環境を作ることにある。

だが一寸待て、少し前に、BIOSがこれら全部をおこなうと言わなかったか?その通りだ。BIOSがほとんど全部のハードウエアを既に初期化したけれども、Linux Kernelはそれに頼らないで、自分の方法でそれらを初期化する。しかし、何故そうするのか?の答は容易であると同時に説明は極めて難しい。Linux Kernelは移植性と強健性を強くするよう設計された。このため、Linux Kernelは、利用出来るUnix及びUnix類似Kernelのうち最良のものとなり、色々な点で特徴のあるものとなった。Linux Kernelが何故どのようにこの特徴を実現したかを正しく理解するには、この話題の範囲を超えLinux Kernel アーキテクチャの本質的特性を、極めて詳細に述べる必要がある。

setup( ) コードは、主として次の仕事を実行する:

1.第一に、システム内で利用出来る物理RAMの全量を検出。RAM検出のためBIOSプロシージャを呼び出す
2.キイボード繰り返し遅延と速度を設定。
3.ビデオ・アダプタ・カードを検出。
4.ディスクコントローラを再初期化し、ハードディスク・パラメータを決定。
5.IBM マイクロチャンネル・バス(MCA)を点検。.
6.PS/2 ポイント・デバイス(バス・マウス)を点検。
7.アドバンス・パワー・マネージメント(APM) BIOS サポートを点検。
8.RAMにロードされたKernel 画像の位置を点検。RAM.の "low" (zImageを使ったときで、アドレス 0x00010000にある) にあるときは、RAMの "high" (物理アドレス0x00001000)に移す。だが、Kernel 画像が既にRAMの "high" に "bzImage" ロードされていれば、何処にも移さない。
9.Sets up the Interrupt Descriptor Table (IDT) and a Global Descriptor Table (GDT).
10.浮動小数点装置(fpu) があるときは、このステップでリセットする。
11.このステップでPIC (プログラマブル・インタラプト・コントローラ) を再プログラムする。.
12.cr0 ステータス・レジスタのPEビットを設定して、CPU "Real mode" から"Protected mode" に切り換える。
13.stratup_32( ) アセンプリ言語ファンクションにジャンプ。

この後、「ブートストラップ」過程が少し複雑になるので、少し難しくなる。ここからは気持ちを引き締めて理解に務められることを望む。

7.setup_32()ファンクション−第一ファンクション。その作用

込み入った点を真っ直ぐに進もう。startup_32()と言う二つのファンクションがある。setup_32()ファンクションは、二つともアセンブリ言語ファンクションで、「ブートストラップ」過程で必要だが、全く異なるファンクションなのだ。ここで説明するものは、/usr/src/linux-2.4.2/arch/i386/boot/compressed/head.S ファイルにコードされている。setup()コードを実行した後、このファンクションは、Kernel画像がRAMの "high" にロードされたか "low" にロードされたかにより、物理アドレス0x00100000 又は物理アドレス0x00001000に移されている。

このファンクションを実行すると、次の作用をおこなう:

This function when executes, performs the following operations:

1.臨時スタックに沿ってセグメンテーション・レジスタを初期化する。
2.Kernelの未使用データの領域を0で埋める。これは、記号 _edata と_end により識別。
3.次いでファンクションdecompress_kernel( )を実行。このファンクションは、Linux Kernel画像の解凍に用いられる。その結果、"Uncompressing Linux . . ." メッセージが画面上に表示される。Linux Kernel画像が正しく解凍された後 "OK, booting the kernel." メッセージが示される。Linux Kernel画像が "low" にロードされていれば、解凍Kernelは物理アドレス0x00100000に置かれ、"high" にロードされていれば、解凍Kernelは圧縮画像の後に置かれた一時的バッファに置かれる。解凍Kernelは、次いで、物理アドレス0x00100000から始まる最終的位置に移される。
4.最後に、コード実行は物理アドレス0x00100000 にジャンプする。

ここで、4番目の作用を終えた後、コード実行は、別のstartup_32( )ファンクションが引き継ぐ。つまり、第二のものがブートストラップ処理を引き継ぐ。

8.setup_32()ファンクション−第二ファンクション。その作用

解凍Linux kernel 画像は別のstartup_32()ファンクションで始まる。このファンクションは、 /usr/src/linux-2.4.2/arch/i386/kernel/head.S ファイルにある。

二つの同名のファンクションを用いても、両ファンクションともその初期物理アドレスにジャンプして実行され、独自の実行環境で実行されるので、何ら問題はない!!

第二startup_32( ) fファンクションを機能的に見てみよう。このファンクションを実行すると、これは本質的に第一Linuxプロセス(プロセス0)のための実行環境を設定する。このファンクションは次の作用をおこなう:

1.セグメンテーション・レジスタをその最終値で初期化。
2.プロセス0のため Kernel モードを設定。
3.次いで、ファンクションsetup_idt( ) を呼出し、これが、IDT (インタラプト・デスクリプタ・テーブル)をnull インタラプト・ハンドラで満たす。
4.BIOSから得られたシステム・パラメータを第一ペイジフレームに置く。
5.プロセッサの「モデル」を識別。
6.gdtr 及び idtr レジスタに GDT 及びIDT テーブルのアドレスをロード。
7.最後に start_kernel( ) ファンクションにジャンプ。

9.start_kernel( ) ファンクション。その作用

start_kernel( ) ファンクションがLinux Kernel の "initialization" を完成する。このファンクションを実行するとKernelの重要成分全部が初期化される。これは全「ブートストラップ」処理の最終ステップとなる。

このファンクションを実行すると、次のことがおこる:

1.ページテーブルを初期化するpaging_init() ファンクションが実行される
2.ページデスクリプタを初期化する mem_init() ファンクションが実行される
3.IDTを最終的に初期化するtrap_init() とinit_IRQ() ファンクションが実行される
4.Slabアロケータを初期化するkmem_cache_init() と kmem_cache_sizes_init()ファンクションが実行される
5.システム日付と時刻を初期化するtime_init()ファンクションが実行される
6. kernel_thread()ファンクションを呼び出して、プロセス1のためKernel thread を作る。これは転じて、別の kernel threads を作り /sbin/init プログラムを実行する。

start_kernel( ) 開始直後に "Linux version 2.4.2 …" メッセージが表示される。他の多くのメッセージもまた表示される。一番最後に、お馴染みのログインプロンプトがコンソールに現れる。これはユーザーに、 Linux Kernel が立ち上がって働いており、世界を支配しようと張り切っていることを告げる!

10.まとめ

Linuxシステムの全「ブートストラップ」過程についての長く苦しい旅を終わる。お気付きのように、使用した他のコンポーネントについては全く説明しなかった。それらには、IDT, GDT, eip レジスタ, cs レジスタなどが含まれる。数ペイジの記事にこれら全部を含むのは不可能だった。それでも、この記事からLinuxシステムのブートで起こる色々なことを理解されたことを望む。paging_init( ) やmem_init( )のような関連ファンクションの説明はこの話題の範囲を超えた。

 

Copyright © 2001, Subhasish Ghosh.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 70 of Linux Gazette, September 2001
 
 
 
 
GTK+を用いるLinuxにおけるGNOMEプログラミング

By Subhasish Ghosh

この記事は、GTK+ツールキットを用いるLinuxにおけるGNOMEプログラミングを述べる。読者は、Linux基礎、GNOME環境の使い方を知っており、C及びC++プログラム経験があると推定している。

テキストと一緒に用意したコード見本は、次の構成のコンピュータで点検した:コンパック・プレサリオ 4010 シリーズコンピュータ、固定ディスク容量15.5 GB、RAM 96 MB 、400 MHz インテル・セルロン・プロセッサ、Red Hat Linux 7.1 ディストリビューション・リリース、アンダーラインkernel: 2.4.2-2

この記事は、理解を容易にするため下記の章に分ける:

1.GNOMEとは? 緒言
2.GNOMEアーキテクチャ
3.GTK+ − 紹介
4.基本プログラム
5.信号とコールバック
6.コンテナ
7.ボタン
8.Entry wedget

9.リストボックスとコンボボックス
10.メニューとツールバー
11.ダイアログボックス
13.まとめと次の学習のためのLink

1.GNOMEとは? 緒言            記事の目次へ

GNOMEプログラミングの世界に入る前に、GNOMEの説明をする。GNOMEは、"GNU's Not Unix Network Object Model Environment"(GNUの非Unixネットワークモデル環境)の略だ。複雑そうだが、GNOMEは、Linuxユーザーに使い易くて強力で完全なデスクトッププログラミング環境を提供するとの単純な目的を持ったソフトウエア・プロジェクトだ。GNOMEは現在、LinuxのRed Hat 及びDebianの最新ディストリビューション・リリースと共に搭載される規定値デスクトップシステムになっている。

詳しい情報は http://www.gnome.org/ にあるGNOMEプロジェクトホームペイジを見られたい。GNOMEに関する沢山の情報があるし、殆どのLinuxと互換性のあるGNOMEのバイナリとソースコードのダウンロードも出来る。

「Linuxプログラマ」と「Linux管理者」の二つの観点からGNOMEを見てみる。基本的な質問は、GNOMEと言うとき、同じものを考え、同じものを渡して呉れるか?だ。この質問に答えるのは難しい。難しくしたのは、過去現在のLinuxシステム管理者とプログラマだ。平均的Linuxシステム管理者にとって、GNOMEは環境は、管理業務を極めて簡単にする豊富なツールを提供する。プログラマは、もっと良いプログラムを設計して提供する責任を持っている。だから、お互いの仕事に関する限り、完全には調和しない。

GNOMEの機能性を覗くと、GNOMEは実際には、Xウインドウシステム(又はX)とウインドウマネージャ・ソフトウエアの中間に位置するプログラム層なのだ。だから、前に言ったように、linux GUIプログラマには、Linuxベースのプログラムを設計し易い多数の機能性を提供する。だが最も重要なのは、GNOMEがすべてのLinux/Unix開発者に欠かせない理由が、完全なGUIの付いたオープンソース・アプリケーションを構築するのため特別に設計された統合フレームワークをこれら開発者/プログラマに提供することにあることだ。

GNOME プロジェクトは、1997年8月に発足した。創始者には、Peter Mattis, Spencer Kimball, Richard Stallman, Red Hat, Inc. のErik Troan とMark Ewing が含まれる。

2.GNOMEアーキテクチャ       記事の目次へ

GNOMEの極めて強力だが融通性に飛んだアーキテクチャは、GNOMEが恐るべき機能性を提供することだ。GNOMEの基本ツールキットは、GTK+(GIMPツールキット)と呼ばれる。これは元々 GIMP(GNU 画像取扱プログラム)で使うため書かれた。GTK+の正しい理解は、GNOMEプログラミングの理解に特に肝要だ。GTK+ は、主としてアプリケーション作成のため使用されるGNOMEと独立なオブジェクト指向、クロス−プラットホーム、言語中立の、ツールキットだ。すると次の質問が生じる。GTK+をGNOME用に選んだ理由は何か?答は簡単だ。C, C++, PERL, Python, ADA などを含む多くのプログラム言語をサポートするからだ。だが、GNOMEもGTK+も、Cを使って書かれているのを覚えて置くと役に立つ。そこで、ここではCだけを扱う。

読者が持つ次の疑問は、何故これを「ツールキット」と呼ぶかだろう。GTK+, Qt (KDE 環境はQtに基づく) のようなツールキットは、widgetのコレクションだ。

Widgets は、ボタン、メニュー、ダイアログボックスその他のGUIオブジェクト、又はオブジェクト関連一般ファンクションだ。これは、マイクロソフト・プラットホームのアクチブ・テンプレート・ライブラリ (ATL 3.0)と比較することが出来る。これらは、コンポーネントオブジェクトモデル(COM)開発者に、COMオブジェクト及びコンポーネント(ActiveX EXE 及びActiveX DLL)を作るため既製フレームワークを提供する。

3.GTK+ − 紹介            記事の目次へ

ここでGTK+の特徴の幾つかを詳しく調べよう:

1.GTK+が使うライブラリのセット: GLIB(GIMPライブラリ)とGDK (GIMPダウンロード・キット).

2.GLIB はデータ型を決定し、エラー取扱とメモリルーチンを扱うファンクションを提供する。

3.GDKは、元々のグラフィックスAPIとGTK+との間に存在するプラットホーム依存層である。

4.これで全部ではない。GNOMEは、GNOME特有のwidgetとライブラリを付加して、GTK+ に追加の機能性を追加する。

5.こうしてGNOMEは、全特徴を備えた、オブジェクト指向の広範なwidgetセット起動アーキテクチャとなる。

6.GTK+の機能性の他に、GNOMEアーキテクチャの中に、ORBitと呼ばれるCORBAシステムのカスタム実行が付け加わって, ソフトウエアオブジェクトが容易に効果的に連絡することが出来るようになった。

7.GLIB は、それ自体の基本的データ型を定義する。それらの殆どは、標準Cデータ型と同等である。







 
GLIB データ型 C 言語型
gchar char
gshort short
glong long
gint int
gboolean boolean
gpointer void*

8.GTK+ の正しい理解に必要なのは「Widget階層」の概念だ。GTK+におけるwidgetは階層に従属しているので、widgetのセットに共通のファンクションは一度実行する必要があるだけだ。

例えば、gtk_widget_showファンクションは、ダブったコードを除去するので、スマートで早いプログラム開発が出来る。新widgetは既存の高位widgetから、このwidgetに独特の特徴だけをプログラマが書くよう導出される。例として、このwidget階層を見てみよう:

GtkObject --> GtkWidget --> GtkContainer --> GtkBin --> GtkWindow --> GnomeApp

このように、注意深く見ると、GnomeApp widgetは高位GtkWindowから導出されており、それは高位 GtkBin から導出されるなどなどとなっているのが分かるだろう。C++プログラ言語の本質的特徴を考えると、これは「インヘリタンス」(継承)の概念を想起させる。その通りで、導出機能性をGTK+に組み込むのは「widget階層」のこの特徴だ。

wedget作成ファンクションを一寸見てみよう。これらのファンクションが正しく作用させるためには、GNOMEとGTK+ライブラリ全部が正しく搭載されていることを確認しなければならない。別に気を付けなければならない重要なことは、コード完成前にライブラリのパスを正しく設定することだ。

先ずwedget作成関数 gnome_app_new()を考察する。このファンクションは、示すように包括的widgetであるGtkWidget ポインタを返す。これは次のように示される:

  GtkWidget *ghosh;
  ghosh = gnome_app_new(………);

これもまた、gnome_app_set_menus()などのGnomeAppに特有のファンクションを呼び出したいときは、macroを使ってGtkWidget型からGnomeApp型へのキャストを実行しなければならないことを意味する。GnomeApp はGtkWidget から導出されるので、これだけが可能である(上の階層を参照)

4.基本プログラム           記事の目次へ

Linuxプログラム習得に最良の方法は、Kernelの内部作用を理解することと、自分でプログラムを組むことである。理解を深めるため小さいプログラムを調べる。

システムをLinuxでブートし、CLI(コマンド行インターフェイス)モードにいるときは、コマンド"switchdesk gnome"を使ったgnomeに切り換え、"startx"コマンドを出してXウインドウシステムGUIモードにブートする。GNOME環境に入ったら、GNOMEターミナルを開き、viを用いてmyapp.cと言う名のファイルを作り、次をタイプする:

/* A sample GNOME program
Created By: Subhasish Ghosh
Date: 8th August, 2001
*/

#include <gnome.h>

int main(int argc, char *argv[ ])
{

GtkWidget *ghosh;
gnome_init("sample", "0.1", argc, argv);
ghosh = gnome_app_new("sample", "My Window");
gtk_widget_show(ghosh);

gtk_main();
return 0;

}

ここでプログラムmyapp.cを完成するには、次をタイプする(back-tickに注意):

# gcc myapp.c -o myapp `gnome-config --cflags --libs gnomeui`

GNOMEは、コンパイルに必要な正しいフラッグをコンパイラに渡すgnome-configと言う名のシェルスクリプトとともに来ることに注意。コンパイルしたら次のコマンドを用いてプログラムを走らせる:

# ./myapp &
としてenterを押す。

画面上にからのウインドウが現れる。これは移動、サイズ変更、閉鎖をすることが出来る。ここで、コードを詳しく見てみよう。トップに、プログラム、作者、作成日付を示す注釈行がある。不可欠ではないが、プログラム毎にこれは付けるのは良い習慣だ。次は、ヘッダーファイル gnome.hで、必要な GNOME とGTK+ライブラリファンクション及び定義全部の面倒を見る。次ぎに来るのが"ghosh"で、これは GtkWidget ポインタだ。これは、新しいウインドウオブジェクトを指す。次いでファンクションgnome_initを呼び出す。これはライブラリを初期化し、セッション管理を正すのに用いられる。このgnome_initファンクションに渡されるIDは"sample"、バージョン番号は"0.1"、次いでメインのコマンド行アーギュメントだ。これらはGNOMEの内部作用のため必要だ。次ぎに来るファンクションgnome_app_new()は、実行するとウインドウを作成する。これは、サンプルコードに"sample" と"My Window"と示したように、二つの引数を取る。"sample"はアプリケーション名で、"My Window" はウインドウタイトルだ。だが、このファンクションの名はgnome_app_new()であるけれども、これは新しいアプリケーションの種類などは作成しないことに注意。これは、トップレベルのウインドウを作るだけだ。次ぎに呼び出すファンクションは、gtk_widget_show()で、ウインドウを見られるようにする。次が、極めて重要なファンクションgtk_main() だ。これはイベントやボタン押しなどのGNOMEファンクションが実行されたことを、GNOMEへの機能性を扱って、確認する。

これが、最初のGNOMEプログラムの内部作用だ。

5.信号とコールバック          記事の目次へ

ここでGNOMEプログラミング環境:信号とコールバックを詳しく調べる。マウスを動かす、widgetに出入する、ボタンを押す、トグルボタンを切り換える、などの度に信号がアプリケーションに送られる。この信号はcallbackファンクションに渡すことが出来る。そこで、常にではないが時に、アプリケーションは一定の動作をするためこれらイベントをつなぐ必要がある。GNOME/GTK+では、信号をハンドラ・ファンクションにつなぐためgtk_signal_connect と言うファンクションを呼び出す。

gtk_signal_connectファンクションには次の四つのパラメータがある:

1.GtkObject *object −コールバックが関連する

2.const gchar *name − 扱う信号

3.GtkSignalFunc func − 信号を送るとき呼び出すファンクション

4.gpointer data − 信号取扱ファンクションに与える任意のデータ

各種widgetが各種信号を編集することに注意しなければならない。ボタンからの信号は次の通り:

1.clicked − ボタンをクリックした(押した及び離した)

2.pressed −マウスでボタンを押した

3.released − ボタンを離した

4.enter − マウスをボタン領域上で動かした

5.leave −マウスをボタン領域外に動かした

後で展開するアプリケーションにおいて、信号とコールバックが重要な役割を演ずるのを見る。

6.コンテナ              記事の目次へ

次ぎに、GNOMEプログラミングの別の重要成分:コンテナを調べる。GTK+は、沢山のコンテナを用いる。GTKは実際は "container-based"と呼ばれるツールキットだからだ。これは、widgetを収容する親コンテナを有することを意味する。ウインドウズは単一widgetコンテナである。そこで、覚えておかなければならない重要なことは、GTK+が複数のwidgetを入れる見えない「包装箱」を使ってウインドウレイアウトを作ることだ。「包装箱」には垂直と水平の二つの型があり、それそれgtk_hbox_new とgtk_vbox_newのファンクションを使って作る。後で作るアプリケーションでこれらのファンクションの働きを見る。今は、これら二つのファンクションのパラメータを見る。次のパラメータがある:

1.homogeneous :型 −> gboolean :ボックス内のすべてのwidgets が、ボックス内の最大widgetと同じ領域を占めるようにする

2.spacing:型 −> gint : 隣接widgetの間隔を決定

3.expand:型 −> gboolean:包装箱が残りのスペースを満たすよう拡大できるようにする

4.fill:型 −> gboolean:特定のwidgetが残りのスペースを満たすよう拡大できるようにする

5.padding:型 −> gint:widgetを囲むフレームの幅を決定

7.ボタン              記事の目次へ

次ぎに、GNOMEプログラミングの別の重要成分:ボタンを調べる。GTK+には4種のボタンがある:

1.単純プッシュボタン −> クリック作用をおこなう

2.トグルボタン −> 特定の状態がある:上げる/下げる

3.チェックボックス −> 特定の状態がある:オン/オフ

4.ラジオボタン −> オプションの組から唯一つを選択する

ラジオボタンの作り方はチェックボックスと似ていおり、余計にしなければならないのはラジオボタンに属する組の決定だけだ。ラジオボタンは、トグルボタンから導き出されるチェックボックスから導き出される。だから、状態を読み取って変更しまた同じ古いイベントをりようする同じファンクションの組を持っていることとなる。特定のファンクションに関する情報に付いては: http://www.gtk.org/で入手できる GTK+ Reference Documentation を参照のこと。

8.Entry Widget            記事の目次へ

"Entry widgets"と言う単一行テキストwidgetを作るため、gtk_entry_new()と言うファンクションを使う。Entry widget は主として少量の情報入力に使う。ボタンが押されて信号が出たとき、「ログインウインドウ」を作ってパスワードフィールドを出力するプログラムを見よう。次をタイプして、プログラムを上述のように実行する。

/* Creating a Login GNOME-style using GTK+ Toolkit:
Created By: Subhasish Ghosh
Date: Wednesday, August 8, 2001
*/

#include <gnome.h>

static void enter_pressed(GtkWidget *button, gpointer data)
{
GtkWidget *text_entry = data;
char *string = gtk_entry_get_text(GTK_ENTRY(text_entry));
g_print(string);
}

int main(int argc, char *argv[])
{
GtkWidget *app;
GtkWidget *text_entry;
GtkWidget *label;
GtkWidget *hbox; gchar *text;

gnome_init("example", "0.1", argc, argv);
app = gnome_app_new("example", "entry widget");
gtk_container_border_width(GTK_CONTAINER(app), 5);

hbox = gtk_hbox_new(FALSE, 0);

/* we now create a Label: */
label = gtk_label_new("Password: ");
gtk_misc_set_alignment(GTK_MISC(label), 0, 1.0);
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);

text_entry = gtk_entry_new();
gtk_entry_set_visibility(GTK_ENTRY(text_entry), FALSE);
gtk_box_pack_start(GTK_BOX(hbox), text_entry, FALSE, FALSE, 0);

gtk_signal_connect(GTK_OBJECT(app), "delete_event", GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
gtk_signal_connect(GTK_OBJECT(text_entry), "activate", GTK_SIGNAL_FUNC(enter_pressed), text_entry);

gnome_app_set_contents(GNOME_APP(app), hbox);
gtk_widget_show_all(app);
gtk_main( );
return 0;
}

このプログラムを実行すると、画面にログインウインドウが出る筈だ。任意のテキスト(パスワードと仮定)をタイプして、enterを押すと何が起こるか分かる。

9.リストボックスとコンボボックス   記事の目次へ

リストボックスとコンボボックスは、マイクロソフトプラットホームと同じ役割を演じる。リストボックスwidgetは、ユーザーが選ぶことが出来るようwidgetに接続された一つ以上の文字列を保有する。コンボボックスは、ユーザーがオプションを選択出来るプルダウンメニューの付いたentry widgetだ。

10.メニューとツールバー       記事の目次へ

ここまでに述べたwidgetは、通常でない機能性は発揮しない単一widgetだ。ここでは、機能性に富むもっと複雑なwidgetをあたえる特殊GNOMEプログラミングライブラリを調べる。

今までの普通のコードで、十分な仕事が出来るが、特殊GNOMEプログラミングライブラリにはそれなりの存在理由がある。

単純で変化のないGTK+コードでは、コードの繰り返しが多く、プログラムが膨大になることがある。そこで、そんなことがないように、沢山の追加機能性を含みプログラム作成労力少なくする特殊GNOMEプログラミングライブラリを使用する。

「メニュー」と「ツールバー」を見る。GNOMEは、GnomeApp widgetsのため、ウィンドウに入れたり出したり出来るメニューとツールバーを作らせる。先ずアレーに必要情報を満たし、gnome_app_create_menus 又はgnome_app_create_toolbar を呼び出す。

メニューとツールバーにはそれぞれアレーで定義されたプロパティがある。プロパティには、タイプ、文字列、コールバックポインタなどが含まれる。殆どの場合メニュー登録は簡単で、GNOMEが用意するマクロの一つを使うだけで自分用の構造を作ることが出来る。そこで、最も使用されるトップレベルのマクロを見よう。

注記:マクロは、次の GnomeUIInfo構造のいずれか又は全部を含むアレーを渡したとき、トップレベルメニューを作るものだ。

メニュー マクロ
ファイル GNOMEUIINFO_MENU_FILE_TREE(ツリー)
エディット GNOMEUIINFO_MENU_EDIT_TREE(ツリー)
ビュー GNOMEUIINFO_MENU_VIEW_TREE(ツリー)
設定 GNOMEUIINFO_MENU_SETTINGS_TREE(ツリー)
ウインドウ GNOMEUIINFO_MENU_WINDOWS_TREE(ツリー)
ヘルプ GNOMEUIINFO_MENU_HELP_TREE(ツリー)
ゲーム GNOMEUIINFO_MENU_GAME_TREE(ツリー)

トップレベルメニューの中には、共通メニュー項目を作るため30個以上のマクロがある。マクロは小さい画像(pixmaps)とアクセラレータ奇異を各メニュー項目に結合する。項目が選択されデータポインタをそのファンクションに渡すとき callbackファンクションを呼び出さなければならない。

これら共通メニュー項目とそれぞれのマクロを見てみよう。

File -->>
New --> GNOMEUIINFO_MENU_NEW_ITEM (label, hint, cb, data)
Open --> GNOMEUIINFO_MENU_OPEN_ITEM (cb, data)
Save --> GNOMEUIINFO_MENU_SAVE_ITEM (cb, data)
Print --> GNOMEUIINFO_MENU_PRINT_ITEM (cb, data)
Exit --> GNOMEUIINFO_MENU_EXIT_ITEM (cb, data)

Edit -->>
Cut --> GNOMEUIINFO_MENU_CUT_ITEM (cb, data)
Copy --> GNOMEUIINFO_MENU_COPY_ITEM (cb, data)
Paste --> GNOMEUIINFO_MENU_PASTE_ITEM (cb, data)

Settings -->>
Preferences --> GNOMEUIINFO_MENU_PREFERENCES_ITEM (cb, data)

Help -->>
About --> GNOMEUIINFO_MENU_ABOUT_ITEM (cb, data)

メニューバーと同く、ツールバーはGNOMEUIINFO_ITEM_STOCK (label, tooltip, callback, stock_id) マクロをつかるアレーを必要とする。ここで、"stock_id"は、その項目に使うため予め定めたアイコンのidである。

この例を見ると、アレーとマクロの実際の働きが分かるだろう。

#include <gnome.h>

static void callback (GtkWidget *button, gpointer data)
{
g_print("Item Selected");
}

GnomeUIInfo file_menu[ ] = {
GNOMEUIINFO_ITEM_NONE ("A menu item", "This is the Status bar info", callback),
GNOMEUIINFO_MENU_EXIT_ITEM (gtk_main_quit, NULL),
GNOMEUIINFO_END
};

GnomeUIInfo menubar[ ] = {
GNOMEUIINFO_MENU_FILE_TREE (file_menu),
GNOMEUIINFO_END
};

GnomeUIInfo toolbar[ ] = {
GNOMEUIINFO_ITEM_STOCK ("Print", "This is another tooltip", callback, GNOME_STOCK_PIXMAP_PRINT),
GNOMEUIINFO_ ITEM_STOCK ("Exit", "Exit the application", gtk_main_quit, GNOME_STOCK_PIXMAP_EXIT),
GNOMEUIINFO_END
};

int main (int argc, char *argv[ ])
{

GtkWidget *app;

gnome_init ("example", "0.1", argc, argv);
app = gnome_app_new ("example", "A Sample Toolbar and Menu");

gnome_app_create_menus (GNOME_APP (app), menubar);
gnome_app_create_toolbar (GNOME_APP (app), toolbar);

gtk_widget_show_all (app);
gtk_main();
return 0;

}

このプログラムは、埋込メニューとツールバーのある小さいウインドウを作る。これを画面上で、クリック、ドック、アンドック、ドラッグすることが出来る。

11.ダイアログボックス         記事の目次へ

GNOME環境内でテキスト情報をユーザーに表示するwidge、ダイアログボックス、をここで調べる。ダイアログボックスと作