追加ニュースとして、SuSE は、SuSE Linux が Oracle9i データベースとして公認されたことを発表 announced した。
Linux Gazetteのモットー「Linuxを楽しもう」信奉者への贈り物として、Eric RaymondがLinux kernelコンフィギュレーションシステムに新らしいインターフェイスを加えた。Zorkを思い出すアドベンチャ・ゲームだ。
ようこそ CML2 アドベンチャ、バージョン1.6.1.へ 曲がりくねった Linux kernel オプションの迷路にいる
メニューは全部違う。
丸天井の部屋、「Linux Kernel configyuration system!」
の看板がある。あらゆる方向から初める
丸天井の部屋。`Processor type' の看板。道は上向き
プロセッサ・アーキテクチャを選ぶ 真鍮のランプがある. この部屋の壁にボタンの列がある. それぞれ: X86, ALPHA, SPARC32, SPARC64, MIPS32, MIPS64, PPC, M68K, ARM, SUPERH, IA64, PARISC, S390, S390X, CRIS と書いてある。 X86のボタンを押す .
Linux Weekly Newsのサービス。.Ericの元々の e-メイルはここ here.
Tridia Corporation には、そのオープンソース・リモートアクセス・ハイブリッドをSymantecと戦わせるとの野心的マーケティング計画がある。 Tridia Corporationのオープンソース・ハイブリッドの利点を紹介する戦略的キャンペーンの始まりである。色々なプラットホームのうち、TridiaVNCはLinux上で働き、特に混合OS環境ではLinux用の有用なeサポートである。発表はcontestにリンクした無料TridiaVNC (バーチャル・ネットワーク計算) ダウンロード・プログラムから始まる計画である。TridiaVNC eコンテストは2001年5月23日から11月23日までの180日である。
● 生命科学におけるLinux
Linux NetworX は, Evolocity クラスタシステムを通じて、新AMD Athlon MPプロセッサ及びAMD-760 MP多重処理チップセットをサポートすると発表した。Evolocityは、コンピューテーショナル・ハードウエアにClusterWorXと言うLinux NetworXクラスタ管理ソフトウエアを組み込んだクラスタ・ソリューションである。
● GNU-Linuxfest
書物 Linux 3D Graphics Programming が発売中。3Dの経験が少ない人に、Linuxで無料入手出来るリアルタイム3Dグラフィック・アプリケーションを用いるプログラミングの基本的理論と実技を理解させるのが目的。X Windowシステム、 OpenGL/Mesa、2D スクリーンアクセス及びラスター化、ハードウエアアクセラレーションなどが話題。Blenderを用いる3Dモデル作成法も講義。
● UkLinux ISP
uklinux.net は英国用の無料(登録料なし)Linux ISPである。サービスの特徴は:
また、uklinux からの全利益はオープンソース/無料ソフトウエアの資金となる。
firstLinux.com にはLinuxチェスインターフェイスのreview がある
Free Software Is Good(無料ソフトが良い)と主張。
アジア文字とユニコードが不都合な理由 inadequate
data warehouse(データ倉庫)の中のLinuxフォークリフト
Microsoft (MS Word 形式)からの FUD 少々。 Linux Weekly News挨拶。ビルゲーツが「Linuxはパックマンのようだ」Linux is a like PacManと思っているとの報告Slashdot。
Macro 4 は、SAP保証出力管理ソリューションのための新S/390 eサーバー Zシリーズ上のLinuxに関するサポートを発表した。IBMプラットホーム上でSAPとLinuxを使ってMacro 4のソリューションを走らせると、ユーザーは、最新e−ビジネスメインフレーム技術のスペース、エネルギ及びコストの軽減の利益と、データベース・ネットワークへの出力アクセスを得ることが出来る。大型SAPの実施には、多数のSAPアプリケーション・サーバーを必要とするので、一度にSAPアプリケーション・インスタンスを150以上も働かせる大企業には一般的でない。組織は、SAPアプリケーション・サーバーを、各アプリケーションがLinuxアプリケーション・インスタンス上で働く1個のZシリーズボックスで置き換えて、そのITシステムを簡略化することが出来るが、まだこれらアプリケーション全部からの出力を管理しなければならない。UniQPrintはユーザーに、Linuxを働かせるIBM e-サーバーZシリーズからプリントするクロス−プラットホーム企業のため制御の単一点を与え、供給源から任意の相手先に対する文書発送を、プリントであれ、e−メールであれ、Webサイトであれ保証する。
● Workstation Solutions が Linux ユーザー用新迅速復元データ保護ソフトウエアを発表
Workstation Solutions は、迅速復元バックアップ及び修復ソフトウエアに関するLinux及びWindowsプラットホームのサポートを発表した。サポート・プラットホームの拡張は、実行が高速、操作が簡単でWindows 2000, UNIX及びLinuxの包括的急速修復に及ぶ。当社はまた、性能、ファイヤウォール・サポートの拡張、DLTテープフォーマット制御、および主要ベンダーから新規に利用出来るテープ・ライブラリのサポートも発表した。
●mnoGoSearchがサーチエンジン・バージョン3.1.14をリリース
mnoGoSearchのイントラネット及びWeb用無料オープンソース・サーチエンジンの新バージョン3.1.14がmnoGoSearch Webサイトから入手出来る。新バージョン詳細は ChangeLog.の文書の通り。mnoGoSearchはLinux及び他の*nix OS上で働く。
Micro Sharp Technology,は、Netule Web Module I (WM-I)及びNetule eMail Module I (EM-I)のリリースを発表した。 EM-I とWM-I はLinuxに基づいている。Linuxは更新が容易で真のマルチタスク・ソリューションを提供する。 EM-Iは短時間で経済的にe-メールサーバーニーズに応える小型サーバー・ソリューションである。WM-I は、ユーザーのWebサーバー要求に応える。各モジュールにはプラグイン即使用に必要なハードウエアとソフトウエアが付いてくる。
●その他のソフトウエア
デベロッパInternational Messaging AssociatesからのInternet Exchange Messaging Server (IEMS) 5が2001年7月12日にリリースされる。IEMS 5は、Linux Red Hat, Caldera, VA Linux, Turbo Linux Server, Suse, Mandrake ならびに Windows 98, Windows 2000, 及びWindows NTの上で働く。.
Aladdin Systemsは、大量ライセンス計画StuffIt OneSourceの新ライセンス参加者を発表した。StuffIt はMacintosh, Windows, Linux 及びSolaris Unixプラットホームをサポートする。StuffItにより、ユーザーは、 .zip, .sit, .rar, .tar, .gzipその他多くの好みのファイル型を選んで容易に管理することが出来る。
プロジェクト及び資源管理用ツール供給者Advanced Management Solutionsは、AMS RealtimeがLinuxの使用出来る最初で唯一のノンブラウザベース・プロジェクト管理ソフトウエアであると主張する。このソフトウエアは、Advanced Management SolutionsのソリューションAMS REALTIMEプロジェクトのLinuxポートである。LINUXユーザーは特別無料試験版を用いてLinux版を試験することが出来る。
ファイルシステムは、ハードディスクのボトルネックを避けるため、出来るだけ同期して働こうとするので、作業を突然中止するとデータがなくなることがある。
例えば、次の状況を考える:Linux標準est2ファイルシステム上にある文書で作業中にマシンが故障したらどうなるだろうか? 幾つかの答がある:
Linuxに利用出来るjournalling filesystemsはこの要求に応える。
ジャーナリング・ファイルシステムとは?
殆どの近代ファイルシステムは、破壊修復にデータベースの世界から借用したジャーナリング技術を用いる。ディスク転送は、ファイルシステム内の最終位置に書き込まれる前に、journal 又はlogと呼ばれるディスク領域に逐次書き込まれる。
ここで、logに書き込まれるデータにより、実行方法は異なる。ファイルシステムのメタデータだけ書き込むこともあるし、すべての書込をジャーナルに記憶することもある。
ジャーナル登録実行前に破壊が起こると、原始データは未だディスク上にあるので、新規変更だけを失う。実際のディスク更新中(ジャーナル登録実行後)に破壊が起こると、ジャーナル登録は、起こった出来事を報告する。だから、システムを再ブートしたとき、単にジャーナル登録だけを返答して、中断した更新を完成する。
いずれの場合も、データもパーティションも無事である。また、logベースの方法の復元時間は遙かに短いので、システムは数秒間オンラインである。
ジャーナリング・ファイルシステムを使っても、ファイルシステム点検プログラム(fsck)は完全に陳腐化しないことに注意するのも重要である。ファイルシステムの無作為ブロックを壊すハードウェア及びソフトウエアエラーは一般的に転送logでは復元出来ない。
利用出来るジャーナリング・ファイルシステム
この記事では、これら三つのソリューションを、二つのプログラムを使ってベンチマークした。
ext3の搭載
これらのサイトの一つから次のファイルを入手する必要がある:
mv linux linux-old tar -Ixvf linux-2.2.19.tar.bz2 tar -Ixvf ext3-0.0.7a.tar.bz2 cd linux cat ../ext3-0.0.7a/linux-2.2.19.kdb.diff | patch -sp1 cat ../ext3-0.0.7a/linux-2.2.19.ext3.diff | patch -sp1
tar -Ixvf e2fsprogs-1.21-WIP-0601.tar.bz2 cd e2fsprogs-1.21 ./configure make make check make install
mke2fs -j /dev/xxx
tune2fs -j /dev/xxx
mount -t ext3 /dev/xxx /mount_dir
XFSはSGIから入手出来る。IRIX システムで全SGIカスタマ用に規定ファイルシステムとして使われる完成した技術である。XFSは、GPLの下でライセンスされる。
XFS Linux 1.0 はLinux 2.4 kernel用にリリースされたので、2.4.2パッチで試した。第一ステップはkernel.org又はミラーからのlinux-2.4.2 kernelの入手である。
パッチはoss.sgi.com/projects/xfs/download/Release-1.0/patches.にある。このデイレクトリから下記をダウンロードする:
mv linux linux-old tar -Ixf inux-2.4.2.tar.bz2
zcat patchfile.gz | patch -p1
tar -zxf xfsprogs-1.2.0.src.tar.gz cd xfsprogs-1.2.0 make configure make make install
mkfs -t xfs /dev/xxx
mkfs -t xfs -f /dev/xxx
mount -t xfs /dev/xxx /mount_dir
ReiserFSの搭載
ReiserFS は、2.4.1-pre4以来の公式Linux kernelであった。必ずこのユテリティを必要とする。(例えば、空のパーティションに ReiserFSを作るmkreiserfs、resizerなど)
ReiserFSの更新は、2.2.x 及び2.4.x kernelsに対するパッチとしておこなう。
第一ステップは、kernel.orgのミラーからのlinux-2.2.19.tar.bz2標準 kernelの入手である。
次いでreiserfs 2.2.19 patchを入手する。現在の最新パッチは3.5.33.である。
2.4.x kernel,に対するパッチを入手するのであれば、utils tarball reiserfsprogs-3.x.0j.tar.gzも入手しなければならない。
kernel とpatchをアンパックする。tarballs を /usr/srcにコピイして、linuxディレクトリをlinux-oldに移し、次のコマンドを走らせる:
tar -Ixf linux-2.2.19.tar.bz2 bzcat linux-2.2.19-reiserfs-3.5.33-patch.bz2 | patch -p0
cd /usr/src/linux/fs/reiserfs/utils make make install
新kernelを搭載してリブートする。ここで次のコマンドを使って新reiserfsファイルシステムを作る:
mkreiserfs /dev/xxxx
mount -t reiserfs /dev/xxx /mount_dir
ファイルシステムのベンチマーク
次の試験は、http://www.coker.com.au/bonnie++/で入手出来るbonnie++プログラムによる解析である。このプログラムは、単一ファイルへのデータベース型アクセスを解析し、作成、読取、及び削除を試験し、Squid, INN, 又はMaildir-formatプログラム (qメイル)のようなプログラムの利用をシミュレートすることが出来る。
ベンチマークコマンドは:
bonnie++ -d/work1 -s10 -r4 -u0
| シーケンシャル出力 |
シーケンシャル 入力 |
無作為 検索 |
|||||||||||
| サイズ:チャンクサイズ | 文字当たり |
ブロック |
再書込 |
文字当たり |
ブロック |
||||||||
| K/sec | % CPU | K/sec | % CPU | K/sec | % CPU | K/sec | % CPU | K/sec | % CPU | / sec | % CPU | ||
| ext2 | 10M | 1471 | 97 | 14813 | 67 | 1309 | 14 | 1506 | 94 | 4889 | 15 | 309.8 | 10 |
| ext3 | 10M | 1366 | 98 | 2361 | 38 | 1824 | 22 | 1482 | 94 | 4935 | 14 | 317.8 | 10 |
| xfs | 10M | 1206 | 94 | 9512 | 77 | 1351 | 33 | 1299 | 98 | 4779 | 80 | 229.1 | 11 |
| reiserfs | 10M |
1455 |
99 |
4253 |
31 |
2340 |
26 |
1477 |
93 |
5593 |
26 |
174.3 |
5 |
| シーケンシャル作成 | ランダム作成 | ||||||||||||
| ファイル 数 | 作成 |
読取 |
削除 |
作成 |
読取 |
削除 |
|||||||
| / sec | % CPU | / sec | % CPU | / sec | % CPU | / sec | % CPU | / sec | % CPU | / sec | % CPU | ||
| ext2 | 16 | 94 | 99 | 278 | 99 | 492 | 97 | 95 | 99 | 284 | 100 | 93 | 41 |
| ext3 | 16 | 89 | 98 | 274 | 100 | 458 | 96 | 93 | 99 | 288 | 99 | 97 | 45 |
| xfs | 16 | 92 | 99 | 251 | 96 | 436 | 98 | 91 | 99 | 311 | 99 | 90 | 41 |
| reiserfs | 16 |
1307 |
100 |
8963 |
100 |
1914 |
99 |
1245 |
99 |
9316 |
100 |
1725 |
100 |
各テストに二つのデータを示した:ファイルシステムの速度(K/sec)とCPU利用度(%)である。高速な程良いファイルシステムである。CPU利用度はその逆。
ご覧の通りreiserFSがファイル管理(シーケンシャル作成及び無作為作成)で他を10倍位引き離して断然良い。加えてシーケンシャル入力・出力でも他に比肩する。他のファイルシステムの間には余り優劣がない。
最後のテストとして、http://www.namesys.com/ の reiserFS benchmark pageからmongo ベンチマークを入手して三つのジャーナリング・ファイルシステムがテスト出来るよう改造した。mongo.pl perlスクリプトに、xfs とext3ファイルシステムをマウントしてフォーマットするコマンドを挿入した。そしてベンチマーク解析を開始した。
このスクリプトは/dev/xxxx,をフォーマットし、マウントして規定回数だけ、Create, Copy, Symlinks, Read, Stats, Rename 及びDeleteの処理をおこなう。CreateとCopyの処理の後、断片化の計算もおこなう。,
Fragm = number_of_fragments / number_of_files
log -生の結果 log.tbl - 比較プログラム用の結果
log_table - テーブル方の結果
テストは次の例のように実行した:
mongo.pl ext3 /dev/hda3 /work1 logext3 1
| ext3 files=68952 size=100 bytes dirs=242 |
XFS files=68952 size=100 bytes dirs=241 |
reiserFS files=68952 size=100 bytes dirs=241 |
|
| Create | 90.07 | 267.86 | 53.05 |
| Fragm. | 1.32 | 1.02 | 1.00 |
| Copy | 239.02 | 744.51 | 126.97 |
| Fragm. | 1.32 | 1.03 | 1.80 |
| Slinks | 0 | 203.54 | 105.71 |
| Read | 782.75 | 1543.93 | 562.53 |
| Stats | 108.65 | 262.25 | 225.32 |
| Rename | 67.26 | 205.18 | 70.72 |
| Delete | 23.80 | 389.79 | 85.51 |
| ext3 files=11248 size=1000 bytes dirs=44 |
XFS files=11616 size=1000 bytes dirs=43 |
ReiserFS files=11616 size=1000 bytes dirs=43 |
|
| Create | 30.68 | 57.94 | 36.38 |
| Fragm. | 1.38 | 1.01 | 1.03 |
| Copy | 75.21 | 149.49 | 84.02 |
| Fragm. | 1.38 | 1.01 | 1.43 |
| Slinks | 16.68 | 29.59 | 19.29 |
| Read | 225.74 | 348.99 | 409.45 |
| Stats | 25.60 | 46.41 | 89.23 |
| Rename | 16.11 | 33.57 | 20.69 |
| Delete | 6.04 | 64.90 | 18.21 |
| ext3 files=2274 size=10000 bytes dirs=32 |
XFS files=2292 size=10000 bytes dirs=31 |
reiserFS files=2292 size=10000 bytes dirs=31 |
|
| Create | 27.13 | 25.99 | 22.27 |
| Fragm. | 1.44 | 1.02 | 1.05 |
| Copy | 55.27 | 55.73 | 43.24 |
| Fragm. | 1.44 | 1.02 | 1.12 |
| Slinks | 1.33 | 2.51 | 1.43 |
| Read | 40.51 | 50.20 | 56.34 |
| Stats | 2.34 | 1.99 | 3.52 |
| Rename | 0.99 | 1.10 | 1.25 |
| Delete | 3.40 | 8.99 | 1.84 |
これらの結果から、Stats Delate 及びRenameではext3が早く、Create と CopyではreiserFSが良い事が分かる。reiserFSの性能が良いのは技術文書からも予測される。
.
まとめ
これはカスタムRed Hat Linux Kernelをコンパイルし、コンフィギュアし、インストールするための詳細説明で、ステップバイステップの手引きだ。カスタムKernelが必要な理由は色々あるが、それには立ち入らない。以下のステップはRed Hat Linuxユーザーを念頭においているが、少し変えれば他にも通用する(例えばinitrdを使わないシステムもある)。
以下のステップは、次の構成のコンピュータシステムでおこなった:コンパックプラセリオ 4010 シリーズ、固定ディスク15.5 GB、96 MB RAM、インテルセルロン400 MHz 、Red Hat Linux 7.0 。使用.Kernel: 2.2.16-22。
以下のステップ全部を終わった後、完全に働くカスタム Kernelを得るのが目的だ。
おこなうステップは次の通り:
ステップ1: "root"としてログインしてから、これらステップを実行
ステップ2:プロンプトで"rpm -q kernel-headers kernel-source make dev86"とタイプ
ステップ3:これら RPMが既に搭載されているときは、ステップ4に進む。搭載してなければ Red Hat Linux 7.0 CD-ROM を入れてrpm -Uvh を実行し、RPMを搭載。
ステップ4:完全に働くX Windowシステムを持っているときは、コマンドプロンプトで "startx" とタイプする。X Windowシステムをコンフィギュアしていないときは、そうすることを強く薦める。便利だからだ。X Windowシステムがないときは、コマンドプロンプトで "make config" 又は "make menuconfig" とタイプする。
ステップ5:GNOME環境に入ったら、GNOMEターミナルを開いて"cd /usr/src/linux"とタイプしてenterを押す。
ステップ6: /usr/src/linuxの中から "make xconfig"とタイプする。
ステップ7:"make config"のGUIバージョンが画面上に出る。これがカスタムKernelを作るための各種オプションを与える。
ステップ8:難しいオプションはそのままにすることを薦める。殆どのオプションは熟練した取扱を要するので、触らない方が良い。以下の変更のみをおこなう。
1.プロセッサの型と特性:使用するプロセッサを選ぶ。私は、Processor Family: PPro/686MX, Maximum Physical Memory: 1 GB, Math Emulation: Yes, MTRR: Yes, SMP: Yesと入力した。
2.Filesystems ダイアログを開いて、次の変更をおこなう:私は、DOS FAT fs support: Yes(y), MSDOS fs support: Yes(y), UMSDOS: m, VFAT(Windows 95) support: Yes(y), NTFS filesystem support (read-only): Yes(y), NTFS read-write support(DANGEROUS): No(n)とした。この変更の後、他は変えていない事を確認する。上記の変更は無害で、既存Linux Kernelを損なうことはない。
3.セーブしてから Main dialogを出る。
ステップ9:次いで、パス /usr/src/linux.の中から"ls -al" を実行する。
ステップ10: "Makefile".と言う名のファイルを見付けられる筈だ。これはこのコンパイル処理に極めて重要なファイルなので、"cp Makefile Makefile.bak"を使って必ずバックアップを取っておくこと。
ステップ11:ここで( /usr/src/linuxの中から) "vi Makefile".をおこなう。
ステップ12:EXTRAVERSION の行に行って、次のような変更を行う。私の場合は
EXTRAVERSION=-22, to EXTRAVERSION="-22ghosh". 好きなように命名してよい。
ステップ13:セーブしてファイルから出る。
ステップ14:以下のステップは全部 /usr/src/linuxの中からおこなう。"make dep clean"とタイプしてenterを押す。
ステップ15:次いで "make bzImage modules" とタイプする。これには時間が掛かる。必要ファイルをコンパイルするまで一寸休憩。私は一寝入りする。
ステップ16:このステップが終わったら、/usr/src/linux/arch/i386/boot に "bzImage" が出来上がる筈。ここに行って "bzImage" が出来上がっているか点検のこと。すべてのコンパイルステップが完全に実行され、"make xconfig" で選んだオプションが正しいときにのみ、このファイルが作成される。このファイルが見付かったら75%を修了だ。見付からなければ、残念乍ら、少し休んで初めからやり直しだ。
ステップ17:(/usr/src/linuxの中で) "cp ./arch/i386/boot/bzImage /boot/vmlinuz-2.2.16-22ghosh" とタイプしてenterキイを押す。
ステップ18: "cp System.map /boot/System.map-2.2.16-22ghosh" とタイプ。
ステップ19:次いで "make modules_install" とタイプしてenterを押す。モジュールすべてが新らしいカスタム化ディレクトリにインストールされているのが分かるだろう。
ステップ20:次いで "mkinitrd /boot/initrd-2.2.16-22ghosh.img 2.2.16-22ghosh" とタイプ。
ステップ21:次いで "vi /etc/lilo.conf" とタイプして次の入力を追加する:
image=/boot/vmlinuz-2.2.16-22ghosh
label=GhoshKernel
initrd=/boot/initrd-2.2.16-22ghosh.img
root=/dev/hdc5
read-only
ステップ22:セーブして出る。lilo.confへの登録は、希望なら任意に変えられること、及びルートは自分のシステムのルートでなければならないことに注意。私のマシンでは /dev/hdc5であった。だからinfoは自分自身のシステムから挿入する。
ステップ23:"/sbin/lilo -v -v"とタイプ。
ステップ24:情報全部を画面で読む。エラーがなければ仕事は完了。おめでとう!!
ステップ25:"/sbin/reboot" 又は"/sbin/shutdown -r now" とタイプしてリブートする。
ステップ26:スタートアップ画面で、Tab(又は、LILOスタートアップ画面であれば Control-X )をタイプすると、前からあるその他の登録と並んで登録 "GhoshKernel" を見ることが出来る。
ステップ27: GhoshKernel とタイプしてenterを押す。カスタムKernelがシステム上でブートしながら働いているのが見られる筈だ。これで自分のシステム上で完全に働くカスタムKernelが得られた。
"root"としてログインした後、"uname -r" とタイプしてEnterを押す。画面上に次の登録を見ることが出来る:Kernelがスタートした2.2.16-22ではなく.カスタムKernelを走らせている証拠の 2.2.16-22ghosh、これで全部だ。単一コンピュータシステム上で働くKernelを幾つでも作ることが出来ることに注意。うまく働かないとき、又は問題にぶつかったときは、auspicious_blessingsindia@hotmail.comに質問や意見のe−メールを送られたい。何時でもお答えする。この記事がお役に立つことを祈る。
自分用Kernelをコンフィギュアする方法に関しては数多くのWebサイトに情報がある。http://www.vmlinuz.nu/ 及びLinux Kernelの取扱及び文書を調べられたい。
ブラザー・インターネット・プリント・プロトコル
最近の記事Internet Printing--Another Way(インターネット・プリント−別法)でBrotherプリンタに使用出来るプリント・プロトコルを説明した。これを使うと、Windowsマシンのユーザーがe−メール経由でマルチパートbase-64コード化プリントファイルをブラザー・プリント・サーバーに送ることが出来る。
この記事は更に進んで、ブラザー・プリント・サーバーの機能性を向上し、Perlプログラムを使って定期的にPOP3サーバーを呼出し、パートが全部到着したジョブについて点検する方法を述べる。このようなジョブが検出されると、そのパートを逐次ダウンロードして、プリントのためデコードする。
Linuxクライアント
上述のPerlプログラムは、私の処で数ヶ月使用しており、Wordその他Microsoft-フォーマット文書を遠隔コンピュータに容易にプリントしている。だがLinuxワークステーションを使う人には、全く容易にしていない。
ブラザーのWebサイトをサーチしたところ、Linuxクライアントを明らかにするのに失敗したので、開発を決心した。以下にその結果を述べる。
実行
在来の知識では、バイナリ入力流をデコーダに順次送るためチャンクにする−多分Perl又はCで実現する−プログラムを書くだろう。事実、普通のBourneシェル及びその派生体は、'split' や 'wc' のような一般的Unix/Linuxツールを一つか二つ使うとき必要な能力すべてを有する。
プログラム通覧
リスト(text version)に示したように、プログラムは二つのアーギュメントを付けて呼び出されたことを点検することによりときスタートし、そうでない場合はユーセージ・メッセージがプリントされる。次いで、各パートが送られるとき後に呼び出されてヘッダをプリントする機能を定義する。詳細には、この機能には通告のためのアドレス、パート番号、パート数、及びジョブ識別子が含まれる。
プログラム本体は発信者用eメールアドレスをタイムスタンプとともに作成することから始まる。これらはつなぎ合わせてscratchディレクトリのための名称作成に使用される。trapを設けてエラーの際にその名称を有するディレクトリを何れも削除し、scratchディレクトリ作成を試みる。
次いで Unix/Linux 'split' ユティリティを用いてプログラム入力をパートに分ける。そのサイズは第一プログラムアーギュメントにより与えられる。これらの各々がbase-64エンコーダーと第二プログラムアーギュメントが与えるアドレスへのメーラーに(適切な前置きを付けて)送られる。
プログラムは、scratchディレクトリの削除とexit状態に戻ることにより終わる。
#!/bin/sh # BIPclient.sh ブラザーインターネット・プリント・クライアント・
# プログラムBrother Internet Print client program.入力流を、 # 設計サイズのパートに分解し、次いで各パートの # base-64 エンコードを行って、それに適切な前置きを付けて # 宛先eメールアドレスに送付する。
# Graham Jenkins, IBM GSA, June 2001.
[ $# -ne 2 ] && echo "Usage: `basename $0` kb-per-part destination">&2 &&
echo " e.g.: man a2ps | a2ps -o - | `basename $0` 16 lp3@acme.com">&2&& exit 2
do_header () { # ヘッダープリント機能
cat <<EOF
START-BROBROBRO-START
BRO-SERVICE=ZYXWVUTSRQ980
BRO-NOTIFY=Always
BRO-REPLY=$Me
BRO-PARTIAL=$Part/$Total
BRO-UID=$Me$Now
STOP-BROBROBRO-STOP
Content-Type: application/octet-stream; name="PrintJob.PRN"
Content-Transfer-Encoding: base64
EOF
}
Me=`whoami`@`hostname`
[ -n "`domainname`" ] && [ "`domainname`" != "(none)" ] && Me=$Me.`domainname`
Now=`date '+%Y%m%d%H%M%S'` # eメールアドレス作成
Dir=/tmp/`basename $0`.$Me$Now # タイムスタンプとディレクトリ名
trap 'rm -rf $Dir;echo Oops>&2;exit 1' 1 2 3 15 # Set cleanup trap
mkdir $Dir || exit 1 #ディレクトリ作成
split -b ${1}k - $Dir/ || exit 1 # パート作成
Total=`ls $Dir|wc -w |tr -d ' '`|| exit 1 # パート計数
Part=0
for File in `ls $Dir/*` ; do # パートのエンコードと送付
Part=`expr 1 + $Part`
[ -t 2 ] && echo "Sending part: $Part/"$Total" to: $2 .. $Now" >&2
( do_header
base64 $File # mmencode 又は base64を使用
echo ) | Mail -s "Brother Internet Print Job" $2
done
rm -rf $Dir # クリーンアップしてexit
exit 0
性能限界
簡易を重視したので、リストに示した 'do_header' 機能は、Windowsクライアントプログラムの作成したヘッダ行の幾つかを残して 'BRO-SERVICE' のためのダミイ値を用いている。その結果、純正Brotherプリントサーバーでは満足に働かないことがある。読者の中にこの装置を持っておられる方があれば、ご意見をお聞きかせ願いたい。
'unique' メッセージ識別子は、ユーザーが二つのジョブを同じ1秒間以内に提出するとダブってしまうことがある。これはBrother識別子フォーマットの限界である。必要ならユーザーのeメイルアドレスの前に処理番号を入れる代替識別子フォーマットを使うことが出来る。
最後に、実質的には生のプリントファイルの複写であるものを保持するためscratchディレクトリを作るのは、クライアントマシンにある一時ファイルのスペース量が限られているとき、問題だと思われるかも知れない。ここでの問題は、各メール成分のヘッダに含めるため、到着したままの生のプリントファイルのコピイを実際に取って、「全体像」を作らなければならないことである。
一時的ファイルを全く使わないで、パーツを大急ぎで作って送ることも(Perl又は 'dd' を使って)出来るが、それには、各パートのヘッダを書くのにサーバープログラムが「全体像」を必要としないように修正されていることが条件である。この方法でおこないたい人には、どなたにも喜んでメールを差し上げる。
PostgreSQL の複数バージョン同時制御特性は、
データテーブルの読取書込同時使用を自由にする
はじめに
今日の問題:殆どの大型マルチユーザー・データベースについて厄介なこと一つを挙げるとしたら何だろう? 待ち時間だと言う人が多いだろう。データベース・システムが、テーブルレベルでもページレベルでも列レベルでも行レベルでも、同じ問題がある。読取(SELECT)は、書込(UPDATE)完了を待たねばならず、書込(UPDATE)は、読取(SELECT)完了を待たねばなららない。「"no-locking" の能力が欲しい!」。
PostgreSQLのno-locking 特性
他のデータベース・システムにおけるロックは、同時性制御とデータ一貫性を維持するため使われる機構に過ぎない。PostgreSQLでは、しかし、ロックに代わってマルチバージョン・モデルを用いる。PostgreSQLにおけるバージョンは、特定時点でのデータのスナップショットである。データの現在バージョンは、ユーザーがテーブルに問い合わせすると何時でも現れる。従って、テーブルに同じ問い合わせをしたときデータが変わっていれば、新バージョンが現れる。このような変更は、UPDATE, INSERT, 又はDELETEステートメントを通じてデータベース内部で起こっている。
例:行(row)ロック 対 MVCC
在来の行レベルロックとPostgreSQLの MVCCとの本質的相違は、ユーザーが特定のテーブルから選んだデータを見ることの出来る時期にある。在来の行レベル法では、データを見るまでユーザーは待たなければならないのに対し、PostgreSQLの MVCCでは、ユーザーは待つ必要がない。これを明らかにするため次の例を見よう。
SELECT headlines FROM news_items
この例では、news_itemsと言う名のテーブルからデータを読み取ってheadlinesと言う名の列のすべての行を表示する。行レベルロックのシステムでは、別のユーザーが同時にデータをテーブルnews_itemsに挿入(INSERT) 又は更新(UPDATE)をしていると、SELECTステートメントがブロックされるので、ユーザーは待たなければならない。データ変更の処理は行のロックを保持するので、テーブルからはすべての行が示出来なくなる。ユーザーはロックが解けるのを待たなければならない。データ読取に際して頻繁にロックに遭遇したユーザーは、このロックシステムでいらいらした経験がある筈だ。
対照的に、PostgreSQLでは、すべてのユーザーが、ロック解除を待つことなくnews_itemsテーブルを同時に見ることが出来る。多くのユーザーが同時にテーブルにデータを挿入又は更新していても事情は同じである。ユーザーがSELECT要求を出すと、PostgreSQLは−ユーザーが要求したとき関わっていたデータの−スナップショットを表示する。オープン処理の一部として行われたデータの挿入又は更新で要求後のものは表示されない。お分かりかな?
MVCCの詳細観察
行レベルロックを使用するデータベースシステム、データの旧バージョンを保有しないので、データ一貫性維持のためロックを必要とする。だがPostgreSQLにおいて "no-locking" がMVCCを通じて働く様子を観察すると、PostgreSQLがこの問題を回避する方法が分かる。PostgreSQLでは各行が二つの処理IDを持っている。行作成処理の作成処理IDと行無効処理の無効処理IDである。誰かが更新(UPDATE)を実行するとPostgreSQLは新行を作成して旧行を無効にする。行は同じだがバージョンが異なる。旧バージョンを保留しないデータベースシステムと異なり、PostgreSQLが行の新バージョンを作成したときは旧バージョンを保留する(注記:旧バージョンはデータベース上でVACUUMと言う処理がおこなわれるまで保留される)。
PostgreSQLはこのようにデータのバージョンを作るが、どのバージョンを表示するか決めるにはどうするのだろうか? 表示には幾つかの基準がある。問い合わせ開始の際に、PostgreSQLは二つのことを記録する。1)現行処理IDと、2)すべての処理中の処理IDである。誰かがデータにアクセスすると、Postgreは以下の基準に合致する行バージョン全部を表示する問い合わせを発行する:行の作成処理IDが実行中の処理であって現行処理カウンタより小さいこと、及び行には無効処理IDがないか又は問い合わせ開始時に無効処理IDが処理中である。
ここにMVCCの秘密が存在する。これはPostgreSQLが処理IDを追跡してデータのバージョンを判定出来るようにし、それによりロックを行うのを避けている。これは処理取扱の極めて論理的で効率的な方法である。新PostgreSQLユーザーは、特に大型複数ユーザー環境にある人は、MVCCの行レベルロックに押し上げた性能に驚くであろう。
MVCCにはまた別の利点もある。ホットバックアップである。他のデータベースでは、一貫性のあるスナップショットを得るためすべてのデータベース又はテーブルの閉鎖をユーザーに要求するが、PostgreSQLでは不要だ。MVCCはデータベースを生かしたままPostgreSQLがバックアップを作るのを可能にする。適切な時点で全データベースのスナップショットを取り、データが挿入、更新、又は削除の最中であっても出力する。
まとめ
MVCCは読取が書込を待たず、書込が読取を待たないことを保証する。これは、在来の行レベルロックより良いデータベース性能を導き出す論理的で効率的なバージョン管理である。
PostgreSQLはGreat Bridge Web site (www.greatbridge.com/download)でダウンロード入手出来る。
この記事はレッドハット・パケージ・マネージメントシステム(RPM)の紹介である。
パート1では、RPMパケージの搭載を扱い、パート2ではRPMパケージのディストリビューション用構築を扱う。RPMとは何か、何故使うか、他のパケージシステムとの比較、及び入手方法を扱かう。大部分を、搭載、パケージの点検、搭載パケージの除去に関するRPM使用法に割く。RPM APIは扱わない。
RPMは、他のUNIXソフトウエアマネージャと異なり特許ファイルフォーマットを使う。これはパケージから一つの成分を抽出しようとするが、RPMユティリティを持っていないときは問題になる。だが、Alienのようなツールを使えば、tar又はarなどを使って管理することの出来るファイルフォーマットを得ることが出来る。
RPMファイルの命名法には標準の慣習があり、(name)-(version)-(build).(platform).rpmのフォーマットを持つ。例えば、名称cat-2.4-7.i386.rpmは、ユティリティ"cat"バージョン2.4,、ビルト7,X86用である。プラットホーム名が"src"で置き換わっていれば、それはソースRPMである。
搭載パケージの管理もまた、良いパケージ・マネージメント・システムが容易にする。搭載ソフトウエア全部のリストを作る。何が搭載されているか見るのに有用だ。重要なのは、アップグレードが容易なことだ。最後に、ソフトウエア・パケージの検証を楽にする。搭載パケージとその成分の特性を知ることにより、問題の診断と修復が早くなる。
他のUNIXパケージ・システムに比較したRPMの行い方
私は、多数のUNIX変形を使う(不)幸運にあって、そのパケージフォーマットの経験を積んだ。RPMが要らぬこともあったが、他のUNIXソフトウエア・パケージ・フォーマットに比べて最も必要とした。以下に他の幾つかのフォーマット及びツールの優劣をまとめる。
| Format | プラットホーム | 長所 | 短所 |
| inst |
IRIX(SGI) |
偉大なグラフィカル・インストーラ |
驚くべく遅い、頻繁なリブート、ネットワークインストール無し(NFS以外) |
| sw |
HPUX(HP) |
(あるかな?), ネットワークインストールをサポート | 恐ろしく遅い |
| pkg | BSD(many) | tarballs, net installs | 署名、sumなし |
| ? | Solaris(SUN) | (あるかな?) | 遅い、署名、sumなし |
| .deb |
Debian |
arだけ、ツールなしで抽出容易 | 署名なし |
簡単に言うと、RPMについて最大の苦情はGUIインターフェイスがないことだ。少しはあるが(gnorpmやglintなど)これらには、SGIのソフトウエアが有するもっと複雑な特性がない。全体として、RPMは競合処理と解像度が他より良く、何と言っても速度が速い。強力なGUIがなくても使いたいと思う。
RPMについて、最も惚れ込んだのは、速度の点と、パケージ署名とsumの双方を使うパケージ点検だ。例として、欠陥GUIテキストエディタ(aka jot)を再搭載したとの理由だけでSGIをリブートしなければならないとしよう。こんな小さいパケージの再搭載にもリブートまで約15分かかる。
RPMがその威力を発揮するのはこのデータベース上である。記憶されているのは、搭載パケージのプロパティすべてである。これが乱されると、rpmツールを用いて修復する。
rpm -i (package)
これでパケージが搭載され、うまく行けばメッセージ無しでコマンドプロンプトを返す。物足りなくて何が起こったか知りたい人は -v フラグを使う。
rpm -iv (package)
パケージ名がプリントされるだけで、処理については何も出ない。-hフラグを使うとハッシュマークの付いた処理の出力が得られる。-ivhを使うのを好む人もいるだろう。
rpm -ivh (package)
ここでも、今起こったことを述べるのでなく、おこなった筈のことを述べるだけだ。したがって、私は(-vv)を使う。これは進行状態を示す。
rpm -ivv (package)
出力は通常スクロールするが、進行状態と問題の有無を正確に見ることが出来る。加えて搭載された場所も判る。
従属成分はRPMがうまく扱うが、これ自体は第一級の良きパケージ構築者に依存する。例えば自分自体に従属するパケージもあって、他のものを壊すのは、パケージに依ると思われる。注意する必要がある。
時には搭載されているが登録されていない従属成分にRPMが泣かされることもある。パケージ用RPM(即ち OpenSSL)を使わないで搭載したためだろう。これを避けるには、従属成分を無視させることだ。
rpm -ivv --nodeps (package)
これは必ずしも賢明ではないので、事態を把握しているときにのみおこなうべきだ。これが搭載物を壊すことはないが、搭載パケージが正しく働かないことを意味する。
稀な場合に、RPMが混乱して、パケージ搭載を催促することがある。これは何かが間違っているサインであるが、避けることが出来る。搭載を強制する。
rpm -ivv --force (package)
注意事項として、従属成分を無視したときのように、パケージ搭載の強制は賢明でないことである。マシンが故障するか働かなくなる恐れがあることを覚悟すること。
これは多分、RPMネットワークインストレーションにおける最もスマートな特性として褒賞ものだ。システムにネットワーククライアントを持っていないがRPM経由でそれらを搭載する必要があることもある。RPMはビルトインFTP及びこれを扱うWebクライアントソフトウエアを持っている。
rpm -iv ftp://ftp.redhat.com/path/package.rpm
rpm -iv http://www.me.com/path/package.rpm
これがSSL HTTP接続をおこなうことが出来るとは思えないが、Debianのパケージでは、BSD パケージと同様、これが出来る。殆どの商業ツールでは出来ないと思う。
rpm -qp (package)
これはパケージ名だけを告げる。物足りないだろう。もっと有用な方法はパケージ自体からパケージ情報を得る方法だ。
rpm -qip (package)
これはパケージについて著者、構築主及び日付、搭載されているか否かなどを告げる。パケージの機能性及び特性についても要約もこれに含まれる。
これでも良いが、実際のパケージ内容を見たいことがある。 (tar -tvfを使った) tarアーカイブの内容一覧表のようにパケージ内容をリストにすることが出来る。
rpm -qlp (package)
これはアーカイブ内のファイル一覧をフルパス名を使って示す。私は何があるかより、その場所を見るのに重宝している。最後に、搭載パケージ全体を見るには、
rpm -qa
これは、現行システムに搭載されたパケージの一覧を示す。( sort, rpm -qa | sortを通じるパイピングによる)ソートに便利だ。この名称をパケージ削除(下記)に使う。
RPMはパケージの検証をおこなう。危ないマシン、または当方のエラーにより脱落または変化したバイナリの検出に有用である。一つのパケージの検証には-Vフラグを使う。
rpm -V (package)
パケージを点検したか否かの簡単な記述を示す。システムの搭載パケージ全部を検証するには:
rpm -Va
検証モードはファイルに関する幾つかの数字を示す。略語は以下の通りである:
| 5 | MD5 sum |
| S | ファイルサイズ |
| L | Symlink |
| T | Mtime (修正時刻) |
| D | 装置 |
| U | ユーザー |
| G | グループ |
| M | モード(パーミッションとファイル型を含む) |
これらは意味のないこともある。例えば、 /etc/inetd.conf ファイルを変更したとき、違うサイズとMD5 sumを示す。だが、/bin/loginのように変わってはいけないものもある。したがって、rpm -Va は、精査すべきものを示して、迅速セキュリティ点検に有用であることがある。
パケージ管理について重要なことの一つは、更新が容易なことである。RPMは二つの、ときには混乱する、更新パケージを有する。一つは単純更新である:
rpm -U (package)
混乱し易いのは、パケージが未搭載のとき生じる作用である。見出した時はパケージが更新される。見出さない時は、パケージが搭載されるとの更新が起こる。これは、パケージを搭載する積もりがなくて、知らずに従う更新が起こるとの、恐ろしいことになることがある。パケージの最新バージョンを入手したいときは"freshen"を使うことを薦める。
rpm -F (package)
これは搭載パケージ更新のみをおこない、パケージがなくても搭載しない。
更新は面白い方法でもおこなわれる。新バージョンが最初に搭載されて旧バージョンとの相違が書き留められる。次いで旧バージョンを削除するが、新部分を削除しないよう独特の部分のみは残される。/usr/local/bin/netscapeが更新され削除された場合を考えて見よ、すべての努力が無駄になる。
rpm -e (package)
搭載及び更新と異なり、package-version.i386.rpmでなくpackage-versionを引用していることに注意。これらは問い合わせモードで使用した値なので、ここでも使う。名称の最も一般的な部分、つまりlinuxconf and linuxconf-develのためのもの、を使って、パケージの全成分を削除出来る筈である。従属成分はここでもまた無視することが出来る。
rpm -e --nodeps (package)
ここでも同じ警告がある。予想より多くのものを壊さないこと。ここでも搭載と同じ情報追加フラグを使うことが出来る。
RPMに対する私の最大の苦情は、名称が部品機能に合致しないことである。上述のように問い合わせツールを用いて掘り返せば避けることが出来るが、予想外に時間が掛かる。名前を付け替えることを薦める。
RPMは通常RPM自体として配布される。gzipped tarball またはソース形式でも手に入る。私は Slackwareに搭載しているが、IRIX またはSolarisにも搭載出来る。Linux以外のプラットホームでは役立たない。パケージが他のUNIXバリアント用RPMで構築されるのは稀だからだ。
現在、Crackを運営しているが、良いパスワードの作り方を考えている。特に、どんな種類のことをしたら良いものが出来るかだ。パスワードはシステムの非合法使用を禁じる最も主要な防衛だ。暗号、ファイヤーウォール、ラビットドッグがあっても、良いパスワードが必要だ。
以下は私のパスワード作成法だ。"Nature" 最新号を開いて遺伝子記事を探し、遺伝子構造名を探してそれを使う。本当だ。これが良いパスワードを選ぶ方法だ。無作為で複雑で作り易い。多くの辞書が遺伝子名を含んでいるが、これは構造名で遺伝子名ではない。だから"Brc1"の代わりに"pRSET5a::20STa::6xHis"などとなっている。後者を使うと滅多に破られない。保証する。
仕掛け、ユーザーが複雑なパスワードを嫌うことだ。これらは覚えるのが難しい。泣かされるがそれで良いのだ。これを克服するには、モニター上ののメモに書き込むかまたは "LucyDoll"のような愚かなものに変えるかだ。
重要なのは、パスワードが指をなめらかに動かすことだ。早く正しくタイプしなければならない。その点で私は、十回打ってリズムを生み出す。うまく行っている。
手早いのは、Crack 5.0a文書への方針変更で、これは付属文書から剥ぎ取る。これはパスワードセキュリティとセキュリテイ一般を扱っており、良いアイデアだ。
良いパスワードが出来た。だが・・、十個以上のアカウントがある。あるものはBBS上に、あるものはsshが出来ないシステム上に、あるものは主ビジネスをおこなうシステム上のルートパスワードか、又は頻繁に回転しなければならないものだ。これら全部をどうやって追跡するか?
私は、二つのことをおこなう。パスワードのレベルを保つ。廃棄出来るパスワードを山程持っている。BBS上で私の使うパスワードを誰かが掴んでflamebait(エサ)を送ったら、私は攻撃を受ける。だが、正直のところ、誰かがそれをやると疑う、私が実際に防護するのは心を配って実行するシステムである。したがって、強力な暗号(つまり安全シェル)無しには絶対に通信線には出ない極めて強力なパスワードを用いて、これらを循環させる。新しいパスワードを(無作為に)選ぶ、古いものを要求の少ない位置、システム及びアカウントに落とす。上記のような仕掛けでうまく行っている。忘れることもあって、恐ろしい瞬間だが、通常は一、二分以下である。
多数のパスワードの追跡は Counterpane systemsからのPassword Safeで容易に扱えるが、windowsシステムでしか働かない。Linux用プログラムを書いて見たが、私には難し過ぎた。日の目を浴びることはないと思う。それでも、覚えるべきパスワードの多い人にはこれを勧めることが多い。同様のアプリケーションが他のPDA用のPalm Pilot に存在する。これは、パスワード銀行を一つのパスワードで防護する。殆どのLinux仲間がPDAを持っているので、これは簡便なソリューションになるだろう。
興味があればFIPS 181 (1)を点検されよ。これは政府の計画で発音出来る音に基づいてパスワードを作成している。スマートな方法で、私も使い始めた(関連ルール(2)Gpw経由)。Crack (3)の働きも点検されよ。これはchez pimp(ポン引き部屋?)だ。比較のため、L0phtCrack (4) の働きを見ると、NTのセキュリティの笑いたくなるだろう。勇気があったら、野生的強制パスワード(6)を考慮されよ。これは辞書発生とルーチンの最適化における興味ある問題だ。
ノートとリンク:
1. FIPS 181は連邦情報処理標準 181 である。文書は(DOS用ソースと共に)http://www.itl.nist.gov/fipspubs/fip181.htm.にある。付属FIPS 文書 FIPS 112, はパスワードの利用法と考察を論じる。
2. Gpw はC/C++ (及びJava も)で書いた発音出来るパスワードを作成するための UNIX ユティリティである。手軽で面白い。http://www.multicians.org/thvv/gpw.html 。追加のものが、http://freshmeat.net/projects/apgd/.で得られる。
3. Crack 5.0a ソースは http://www.users.dircon.co.uk/~crypto/で見出される。http://packetstorm.securify.com/Crackers/crack/でも見付かる。
4. L0phtcrack...大好きだ。 http://www.l0pht.com/l0phtcrack/ 。Mudge はL0phtcrackのリアルオーディオ表現における働きを説明する、Hope, 1997, NYC (1 時間) http://www.2600.com/offthehook/rafiles/l0pht.ram (元々これが最初に書かて以後L0phtcrackバージョン3がリリースされたことに注意。新抽出ツールがコードに組み込まれたが、何人かがパスワード分解の効率の劇的低下を注意した。L0phtcrackを使う多くの友人は、バージョン3を用いた抽出の後、分解用にバージョン2.52を用いる)
5. John the Ripper は有用なパスワード分解ユティリティの著者だ。S/Key 及びMD5 パスワード分解のため幾つかのモジュールが最近紹介された。http://www.openwall.com/john/.
6. これは野性的強制パスワード及び関連技法の説明である。試す価値があるだろう! The ambitious amateur vs. crypt(3)
Xターミナルは家庭又はオフィスでのコンピュータ存在を拡張する偉大な方法である(ここでは、Xターミナルとして機能するPCを指す。NECのXターミナル装置ではない)。これらは高速でスマートにUNIXシステムの力を示し、何より安い。以下は古いPCハードウエアからXターミナルを作り私のDebian GNU/Linuxシステムに接続した記録である。
私のサーバーは、1GHz AMD Athlonプロセッサ付きのPogo Alturaである。Pogo は、部品を掻き集めたり、Windowsライセンスに金を払ったりしたくない人には有り難い会社である。私はその上でDebian を走らせているので、Xターミナルにもこれを使う。
ルート・ファイルシステムの設定
Xターミナルはカスタムkernelをフロッピイ上にブートオフし、次いでNFSを通じてサーバーからファイルシステムを入手する。第一ステップは、このときのルート・ファイルシステムを作ることである。現在稼働中のシステムから手作業でファイル毎にコピイすることも出来るが、私がしたように基本Debianを使うだけの簡便法を使うことが出来る。しなければならない仕事は基本システムtarballのダウンロードで、これはon the Debian webserver にファイルbase2_2.tgzとして見出される。私はこれをダウンロードしてから /usr/xterminalで"tar -xvzf base2_2.tgz"をおこなったところ、1秒後には完全機能のルート・ファイルシステムがそのディレクトリに出来た。サーバーのLinuxが何であろうとDebian システムを使うことが出来る。
次のステップは、このルート・ファイルシステムをコンフィギュアすることである。私はルートに戻って "chroot /usr/xterminal bash --login" を走らせておこなった。これでルート・ファイルシステム「内部」にいるので、実際の /etc/resolv.confを新ルート・ファイルシステムにコピイして、コンフィギュレーションの間ドメイン名を使えるようにした。続いてXを搭載しなければならないが、最良の方法は Debian ユーザーなら誰でも知っているように、apt-getを使うことだ。"apt-get update" 次いで "apt-get install xserver-s3 xfonts-100dpi xfonts-base" を走らせるが、Xターミナルにs3カードを持っていなければ、xserver-s3 を少し違う何かに変える(適切な何かはここ here.を参照)。これがXターミナルに必要な成分をダウンロードして搭載する。apt-getは幾つか質問をして、君のためのXF86Configを作る筈だ。そうでなければ、作られたファイルをtweakする必要がある。XFree86 HOWTOを参照。ルートファイルシステムは殆ど完全だ。私はXターミナルルートのため次のような /etc/fstab ファイルを作った。
10.0.0.1:/usr/xterminal / nfs defaults 0 0
proc /proc proc defaults 0 0
勿論10.0.0.1:/usr/xterminalは、自分のサーバーIPとNFSルートディレクトリに一致するものに変える。私はこのNFSルートディレクトリに自分のアカウントを持っていないので、Xをinitから始めることにした。これには、私の /etc/inittabファイルに次の修正(最後のIPアドレスは人により異なる)が必要であった。
X:123456:respawn:/usr/bin/X11/X -query 10.0.0.1
これで完全無欠との確信はないが、兎も角働く。最後に /sbin/unconfigured.shシェルスクリプトを削除して、新たに作ったルート・ファイルシステムからブートするとき喚かないようにする。
ブートフロッピイの構築
次にkernelを作る。kernelのコンパイル手順に詳しくなければ Kernel HOWTOを参照のこと。私はKernel 2.4.5 を用いてブートディスクを作ろうとしたが、bootpが壊れるような気がしたので、Kernel 2.4.4 を選んだ。定石(make xconfig, make dep, make bzImage)通りにおこなうが、次のオプションを確実に(モジュールとしてでなく)kernelにコンパイルすること:
自分のkernelを構築し、"dd if=arch/i386/boot/bzImage of=/dev/fd0" (ルートとして) 又は同様のコマンドを自分のkernelとフロッピイドライブに用いてkernelを自分のフロッピイにコピイする。これは生のkernelをフロッピイに移しただけなので、NFSにブートを命じる必要がある。(未だルートで)"mknod /dev/boot255 c 0 255"とタイプして/dev/boot255 デバイスを作る。ここで(勿論ルートとして)"rdev /dev/fd0 /dev/boot255"を走らせてフロッピイにNFS上のルートを探させる。もう使わないのでここで"rm /dev/boot255" が出来る。ここで、Xターミナルハードウエアを入手するまでフロッピイを横に置く。
サーバー設定
まだハードウェアの準備が出来ていない。サーバー構成の巧妙な部分に差し掛かった。私はこれをDebian (そう選んで)でおこなったが、マシンにより少し違うだろう。私は先ず、NFSサーバーを搭載してコンフィギュアした (apt-get nfs-user-server)のでXターミナルはそのルート・ファイルシステムを得ることが出来た。構成は/etc/exportsファイルの編集から成る。次のような行がある筈だ(no_root_squash が重要):
/usr/xterminal 10.0.0.4/255.255.255.0(rw,no_root_squash)
ネットマスク(/255.255.255.0)が含まれているので、それぞれ独立に聞かなくともローカルクライアントを更に追加できるが、それだけが望みならipアドレスで足りる。次に私は、"apt-get install bootp"を用いてBOOTPサーバーを搭載した。これを構成するため、次の行を/etc/bootptabファイルに追加した:
/etc/bootptab file:
xterm1:vm=auto:ip=10.0.0.4:ht=ethernet:ha=00a0240d5f52:rp=/usr/xterminal
多分IP、NICのハードウエアアドレス(これはソフトウエアの上に書かれているか、見付からなければbootpサーバーを探すときブートフロッピイkernelが止まったとき見られる)及びルート・ファイルシステムへのパスを変えたいと思うだろう。また/etc/inetd.conf ファイルに続けて次のような行を追加する必要がある:
bootps dgram udp wait root /usr/sbin/bootpd bootpd -i -t 120
次に"killall -HUP inetd"をルートとして走らせてそのコンフィギュレーションファイルをinetd reparseする必要がある。もう一つ設定するのは、XDMである。ここでも Debianは極めて容易にやってのける("apt-get install xdm")。だがXDMでは心配なファイルが少しある。私に取ってこれらは、/etc/X11/xdmの下にあったが、システムにより異なるだろう。私は、私のXセーバーファイルに"10.0.0.4:0 foreign" の行を加え(人により多分違うXターミナルIPになるだろう)". To :0 local /usr/X11R6/bin/X -dpi 100 -nolisten tcp"行をコメントアウトしたので、サーバーにXDMを通じてログインする必要がなくなった。Xアクセスには"10.0.0.4"の行を追加したので、私のXターミナルはxdmに接続することが出来る。最後にxdm-configの中で"DisplayManager.requestPort: 0" と言う行をコメントアウト(前に#を置く)したので、xdmはすべての接続トライを無視しない。これでサーバーが設定された。
組立
古いコンピュータを見付ける面白い箇所だ。私は古いボックスを持っていなかったので、中古コンピュータ店に行った。見付けた486/66に保証はなかったが、僅か30ドルだった。多分これがXターミナルハードウエアの最高峰で、プロセッサ部分は大きいのは過剰だ。S3Trio64がオンボードで来た(800x600x16 しか出来ないので、SVGA Xサーバーの下で働く純正trident Blade3DベースPCIビデオカードと交換した)。またRAM(32MB)が周りにあったので押し込んだ。ハードウエア過剰の別の点は、32MBはXターミナルの必要には過剰だ。Xとkernelを走らせるだけなので8又は16で十分だろう。フロッピイドライブとNIC (3Com Etherlink III)以外は全部取り去ったので、電源ファンの音だけで静かに動いた。モニター、イーサネットパッチケーブル、キイボード及びマウスをつなぎ、私のブートフロッピイをいれて、スイッチを入れた。(短いブート時間の後)立派なXFree86ロゴとXへのログインボックスが現れた。廉価な15インチモニターを付けてこれら高品質Xターミナルを$150-$200で作ることが出来る。
Xターミナルは、私がサーバー上のXの中にいるようにうまく働く。この設定に問題があれば、上記の関係HOWTOを参照するかまたは貴地のLinuxグル(導師)に聞かれたい。これらのインストラクションが、君の家庭又はオフィスに、立派な、早くて、最良の、廉価なXターミナルを差し上げるのに役立つ筈だ。