Linux Gazette 9月号

今月の Linux Gazette の内容


今月のニュース

求む、LG ボランティア

LG ではこのコラムのヘルパーを募集しています。業務量は1号に付き 6 - 8 時間程度。業務内容は送られた HTML ファイルから載せるもの、まとめるものの検討、記事の減量、プレスリリースの要約など。テキストエディタを使えばはできることばかりです。もしボランティアをしてみたいという人は gazette@ssc.com までメールを下さい。

Linux Journal 9月号発売中。今月の特集は組込みシステム。

▼▼▼ディストリビューション関連ニュース▼▼▼

Caldera

Caldera Systems, Inc. は Linux 2.4 テクノロジプレビューをリリース。Java HotSpot、glibc 2.1.91、KDE 2.0 開発版スナップショットなどが搭載されている。

Caldera Systems, Inc. と The Santa Cruz Operation, Inc., (SCO) は Caldera が SCO サーバソフトウェア部門とサービス部門を買収すると発表した。

Caldera Systems, Inc. と Tarantella, Inc. は Tarantella ウェブベースソフトウェアを Linux にバンドルすると発表。Caldera OpenLinux アプリケーションサーバと Tarantella は集中管理とアプリケーションの配備を安定した低コストプラットフォームで提供することができ IT コストも低減する。

InterLan Technologies と Caldera systems は戦略的提携を発表。

Debian

Debian GNU/Linux 2.2、"joel 'Espy' Klecker" リリース
Debian Project は Debian GNU/Linux の最新版 Debian GNU/Linux 2.2 をリリースした。今回の開発には18ヶ月かかっている。今回からは PowerPC と ARM が新たにサポートされている。又ソフトウェアの選択、X ウィンドウシステムのインストールなどが簡略化されており、ネットワーク設定も DHCP を使って簡単にできるようになった。

Kondara

KONDARA MNU/LINUX 2000 はシングルバイナリで多国語化を実現。現在、言語を変えるには Linux システムの再インストールが必須だが Kondara はこれを一つのバイナリで実現した。マルチプラットフォームはシングルソースで実現されている。ソースコードにわずかな変更をするだけで Alpha と Intel に対応できる。カーネルは 2.2.16 だ。
www.df-usa.com

Linux for Windows

Macmillan は Linux for Windows のアップデートを発表した。このソフトは既存の Windows パーティションにインストールすることができ初心者は簡単に Linux を試すことができる。ベースは Linux-Mandrake 7.1 だ。インストールに関するサポートはインターネットファクスで提供される。

Lute

Argent Resources Ltd. が Lute Linux Corp. を買収。LuteLinux の特徴は Linux コミュニティへの関わりとそのコミュニティとの相互の情報交換に務めてきたことだろう。非 Linux ユーザへの情報提供にも熱心だった。

Mandrake

Linux-Mandrake が Sun Microsystems の SPARC と UltraSPARC とに移植された。Linux-Mandrake 7.1 ベースの Corporate Server 1.0 は迅速に基本的なサーバ機能を構築することが可能。WizDrake で幅広い設定やアプリケーションの設定などが可能。

Progeny

Progeny Linux Systems は Ian Murdock と Bruce Perens の新しい企業だ。目的は Progeny Debian のリリースと Linux NOW(Network of Workstation) だ。Linux NOW の基本 OS が Progeny Debian になる予定。詳細は http://www.progenylinux.com/news

Red Hat

Red Hat, Inc. は Red Hat Linux 6.2 をベースにした Red Hat Availability Server 1.0 をリリースした。Red Hat Availability Server 1.0 は特別のクラスタリングソリューションで、個々のサーバをクラスタにまとめ、信頼性の高いネットワークシステムを構築することが可能。ビルトインのセキュリティ機能が通常の侵入からシステムを防護する。finger, talk, wall や他のデーモンはディスエーブルになっているか、インストールされていない。

Rock

Rock Linux はインストールが難しいディストリビューションだ。と言われれば興味を引かれるだろうか。Rock Linux はそういう人のためのディストリビューションだ。ユーザフレンドリと言うより管理者向きのシステムで従来通りのコマンドライン、シェルスクリプトでシステムの設定をする。もちろん X-Window は付属している。
http://www.rocklinux.org

Slackware

Slackware 7.1 がリリースされた。
www.slackware.com

Storm

Stormix Technologies inc. は Storm Linux 2000 スターターエディションをリリースした。これは Windows ユーザを対象にしたインストールが容易なディストリビューションで、Debian/GNU Linux 2.2 をベースにしている。

Stormix Technologies Inc は Storm Firewall をリリースした。SOHO をターゲットにしたネットワークセキュリティソリューションだ。GUI で簡単なオプションか高度な設定かを選ぶことができ、IP マスカレード機能も利用できる。
www.stormix.com

SuSE

SuSE Linux 7.0 のドイツ語バージョンがリリースされた。英語版は9月にリリースの予定。
英語版:http://www.suse.com

Trustix

Trustix Secure Linux 1.1 がリリースされた。http://www.trustix.net/download/http://www.trustix.net/mirrors.php3 からダウンロードできる。基本的にはメンテナンスリリースだが、データベースサポート、メールフィルタリングなどの新機能も取り入れられている。Trustix Secure Linux はサーバ市場をターゲットにしている。詳細は http://www.trustix.net/products/trustix-1.1/

▼▼▼その他のニュース▼▼▼

今後開催予定のコンファレンスとイベント

Linux Business Expo
(co-located with Networld + Interop event)
September 26-28, 2000
Atlanta, GA
www.key3media.com/linuxbizexpo

Atlanta Linux Showcase
October 10-14, 2000
Atlanta, GA
www.linuxshowcase.org

ISPCON
November 8-10, 2000
San Jose, CA
www.ispcon.com

Linux Business Expo
(co-located with COMDEX event)
November 13-17, 2000
Las Vegas, NV
www.key3media.com/linuxbizexpo

USENIX Winter - LISA 2000
December 3-8, 2000
New Orleans, LA
www.usenix.org

LinuxWorld Conference & Expo
January 30 - February 2, 2001
New York, NY
www.linuxworldexpo.com

Linux Square

ITsquare.com は Linux Square を立ち上げた。これは既存の b2b 市場を補完するためだ。20以上の Linux 開発企業にアクセスでき、ウェブベースのフレームワークでセキュアな調達が可能。

MaxSQL

MySQL AB と Sleepycat Software, Inc. は MaxSQL をリリースした。オープンソース、ハイパフォーマンスのトランザクション SQL サーバだ。2社が協力し MySQL のデータアクセス言語と Sleepycat の Berkley DB のハイパフォーマンストランザクションサービスを統合した。MaxSQL は www.maxsql.com からダウンロードできる。MaxSQL は信頼性、スケーラビリティ、パフォーマンスに優れたオープンソースリレーショナルデータベースエンジンだ。

Linux エキスパートのための新サイト

IQLinux.com は Linux エキスパートのためのテクニカルサポートウェブサイトを立ち上げた。同サイトでメンバはビジネスリレーションの構築やコンサルティングチーム、交渉、契約、価格設定などができる。

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

FIASCO

FIASCO がリリースされた。FIASCO は低ビットレート用のビデオ圧縮システムだ。その性能は JPEG や MPEG をしのぐ。ライブラリ関連情報は http://ulli.linuxave.net/fiasco から。

その他のソフトウェア

画像処理、ペイントアプリケーションの Corel PHOTO-PAINT がダウンロード可能。

11カ国語に対応した Sun の StarOffice 5.2 がダウンロード可能。

Intel の Universal Plug and Play (UPnP) Software Development Kit (SDK) 1.0 がダウンロード可能。


好みの Window マネージャを選ぶ (By Matthias Arndt)

Linux では好みのウィンドウマネージャを選ぶことができる。ウィンドウマネージャの使い方やウィンドウマネージャそのものについて説明しよう。しかしウィンドウマネージャの設定に関してはそれぞれのマニュアルを参照して欲しい。

Linux で利用できるウィンドウマネージャの主なものは次の通りだ。

ウィンドウマネージャ 説明
TWM XFree のデフォルトのウィンドウマネージャ、こだわりのある人向けか
FVWM Linux では一番使われているウィンドウマネージャ
FVWM 2 FVWM の改良版、使ったことはないがテーマと色は多い
FVWM 95 Windows 95 風の FVWM
AfterStep NextStep 風のウィンドウマネージャ、ワーフとパネルがある
Enlightenment 使ったことはないが非常にカラフル(らしい)。ウィンドウマネージャというよりは遊びに近い?;-)
KWM KDE デスクトップ用のウィンドウマネージャ、使用も設定も簡単
IceWM スクラッチから書かれたウィンドウマネージャ、Windows 95 風のタスクバーがあり主観的には起動は KDE よりかなり速い

これらが Linux では一番使われているが、その他 olvwm、wm2、Windowmaker などもある。

友人に Linux の素晴らしさを聞いて使い始めてから2年になる。最初に使い始めたのは TWM だが、Linux が初めてなので感動していた。1999年の春に ダイアルインの BBS を運用しようと考えた。それには Linux が最適だったので Linux を再インストールし研究を続けた。その当時の主な関心はシステム設計とプログラムだ。Linux の情報が増加するにつれて TWM の設定もできるようになったがより使いやすいものを探して FVWM 95 に変更した。Windows 95 を使っていたから親しみやすい。10月には Debian をインストールした。とてもモダンなディストリビューションでインターネットアクセスも容易だ。それ以後は Windows 95/98 の利用頻度が減少した。Debian には KDE と GNOME が付属していたがどちらもまだ完全とは言えなかったので FVWM と AfterStep をインストールした。

FVWM は FVWM 95 や TWM よりは優れているが概観は AfterStep が好みだ。ドックも気に入ったのでそれ以来 AfterStep を使っている。ディスク容量が不足して SuSE Linux はインストールできなかった。しかし2000年春に Athlon 600 のシステムを手に入れたので SuSE Linux 6.4 をインストールした。ディスク容量の問題もないので KDE と GNOME をインストールして使っている。

ドイツの Linux 関連雑誌は KDE の記事が多いので最初は KDE を試した。非常に強力なデスクトップで MS の製品よりも遥かに優れている。そこでログインも KDM を使うことにした。しばらく使っているうちに IceWM を見つける。KDE の外観はより Windows 98に近いが IceWM は UNIX らしい。IceWM は KDE の持つ機能をほとんど有し通常の方法で設定できる。が、KMail という E-Mail クライアントや kfm などの KDE アプリケーションはいまだに使用している。現在 Windows 98 を使っているのはゲームと Atari ST エミュレータのためだ。

ウィンドウマネージャは大きく三つに分類できる。TWM のような単純なウィンドウマネージャ、FVWM や AfterStep のような機能豊富だがカスタマイズには設定ファイルを修正する必要のあるもの、KDE のような機能豊富で設定も GUI でできるもの。Linux の初心者には3番目のカテゴリに属する KDE か GNOME がいいだろう。カラフルでデスクトップテーマやサウンドを使いたいなら FVWM2 か AfterStep がいい。Windows 95 の雰囲気を残したいなら FVWM95 か IceWM だ。スタートメニューやタスクバーが使える。IceWM の設定はいくつかに分かれていて変更も容易だ。従来の Linux の雰囲気を好むなら FVWM1 がいいだろう。メモリに余裕がないなら KDE は諦めたほうがいい。メモリが少ないシステムには IceWM がお薦めだ。

それぞれのウィンドウマネージャの長所短所を簡単にまとめると次のようになる。

ウィンドウマネージャ長所短所結論
TWMほとんどのディストリビューションに付いている 外観はあまりよくない
メニューが大きい
ワークスペースがない
こだわりのある Unix ユーザ向け
FVWM 事実上標準のウィンドウマネージャ
設定やチップスに関する情報も多い
外観も悪くない
設定ファイルが一つ
GUIでの設定は不可
迷った場合には選択するのもいい。
初心者には薦めない
FVWM2 現代的にした FVWM
テーマが使用可能
GUI ベースの設定は不可 FVWM の別種
カラフルなデスクトップを好む人にはいい
FVWM95 FVWM ベース
タスクバー
スタートメニュー
GUI ベースの設定は不可
記憶する限りワークスペースは一つ
FVWM の別種
Windows 95 風の外観を好む人にはいい
AfterStep ワーフ
NextStep 風の外観
ワーフの設定が難しい
記憶する限り GUI ベースの設定は不可
NeXT か NextStep を使ったことがあるならこれがいい
KDE 現代的な外観
テーマが使える
スタートメニュー
タスクバー上でドラッグアンドドロップに対応
多数のアプリケーションが付属
使用、設定が容易
ワークスペースが最大8個
GUI ベースの設定が可能
細かいカスタマイズが可能
多量のメモリを使用
外観が Windows に近すぎる
完全なデスクトップソリューション
初心者には最適
IceWM 起動が早い
メモリ使用量が少ない
GUI ベースの設定が可能
タスクバー
ワークスペースが4個
スタートメニュー
テーマが使える
設定ファイルを使ってカスタマイズ 非常に強力なウィンドウマネージャ
メニューの設定が容易
初心者にもベテランにも最適

好みのウィンドウマネージャを探す際の参考にして下さい。


Copyright © 2000, Matthias Arndt
Published in Issue 57 of Linux Gazette, September 2000

HelpDex(By Shane Collinge)

今月のHelpDexこちらからご覧下さい。


Bash の文字列操作 (By Pat Eyler)

多数のファイル名を一度に変更したいと思ったことは? 値がないときはデフォルトの値をセットする、ということが bash の文字列演算子を使えば可能です。${foo} のように使います。変数の置換には3つのパターンがある。

今回はパターン照合と置換について説明しよう。

パターン照合には左からと右からの二通りある。演算子の例は次の通りだ。

演算子 機能 使用例
${foo#t*is} 先頭から最小マッチ部分を削除する export $foo="this is a test"
echo ${foo#t*is}
is a test
${foo##t*is} 先頭から最長マッチ部分を削除する export $foo="this is a test"
echo ${foo#t*is}
a test
${foo%t*st} 文末から最小マッチ部分を削除する export $foo="this is a test"
echo ${foo%t*st}
this is a
${foo%%t*st} 文末から最長マッチ部分を削除する export $foo="this is a test"
echo ${foo#t*is}
 

これらを組み合わせるといろいろなことが可能になる。例えば次のスクリプトは ".html" という拡張子を ".htm" に変更する。


#!/bin/bash

# quickly convert html filenames for use on a dossy system

# only handles file extensions, not file names



for i in *.html; do 

   if [ -f ${i%l} ]; then

       echo ${i%l} already exists

   else

       mv $i ${i%l}

   fi

done



もう一つの便利な機能は置換だ。bash には4つの置換用の演算子がある。使用例は次の通りだ。

演算子 機能 使用例
${foo:-bar} $foo に値があれば $foo を返す。値がないか null の場合は bar を返す export foo=""
echo ${foo:-one}
one
echo $foo
 
${foo:=bar} $foo に値があれば $foo を返し、$foo に値がないか null の場合は $foo に bar をセットして bar を返す export foo=""
echo ${foo:=one}
one
echo $foo
one
${foo:+bar} $foo に値があれば bar を返す。値がないか null の場合は null を返す export foo="this is a test"
echo ${foo:+bar}
bar
${foo:?"error message"} $foo に null 以外の値があればその値を返す。値がないか null の場合はエラーメッセージを表示する。エラーメッセージが表示されなければ parameter null or not set が表示される export foo="one"
for i in foo bar baz; do
eval echo \${$foo:?}
one
bash: bar: parameter null or not set
bash: baz: parameter null or not set

これらの演算子も便利だ。次の例ではコマンドラインからの引数がなければデフォルトの値を使用する。


#!/bin/bash



export INFILE=${1-"infile"}



export OUTFILE=${2-"outfile"}



cat $INFILE > $OUTFILE



bash に関して興味のある人は私のホームページ をご覧下さい。


Copyright © 2000, Pat Eyler
Published in Issue 57 of Linux Gazette, September 2000

ngrep を使う (By Pat Eyler)

ngrepはネットワークトラフィックを監視するツールで libpcap ライブラリを利用する。正規表現にも対応し表示するトラフィックを選択できる。ほとんどのディストリビューションには含まれていないがインストールから使用法までを説明しよう。

ソースコードは http://www.packetfactory.net/Projects/ngrep/ から入手できる。Redhat 6.2 を使っている場合はその前にhttp://www.tcpdump.org/releaseから libpcap を手に入れてインストールしておこう。コンパイルしてインストールする方法は次の通りだ。

$ tar xvzf libpcap-0.5.2.tar.gz

$ cd libpcap_0_5rel2

$ ./configure

$ make

$ su

Password: ********

# make install-incl

# make install-man

# exit

      




$ tar xzvf ngrep-1.38.tar.gz

$ cd ngrep

$ ./configure

$ make

$ su

Password: ********

# make install

# exit

      

これでインストールは完了だ。

ngrep を使用するにはサーチするパターンを決める必要がある。方法は libpcap スタイルと GNU grep スタイルの正規表現とがある。次の例では "ssword" というパターンを含むパケットを表示する。

[root@cherry /root]# ngrep -x ssword

interface: eth0 (192.168.1.0/255.255.255.0)

match: ssword

################################

T 192.168.1.20:23 -> 192.168.1.10:1056 [AP]

  50 61 73 73 77 6f 72 64    3a 20                      Password:

#########################exit

59 received, 0 dropped

[root@cherry /root]# 

      

ngrep の使用法はいろいろあるが主要なものは libpcap スタイルのパケットフィルタリングだろう。フィルタはプリミティブと and, or の組み合わせからなる。プリミティブは シンボルネームとtype, direction, protocol の3つの修飾語からなる id だ。修飾語 type は id が参照するものを示し、host, net, port などのオプションをとる。デフォルトは host だ。type プリミティブの例は:host crashtestdummy, net 192.168.2, port80だ。

修飾語 direction は方向を示す。オプションは src と dst だ。修飾語 protocol は監視するプロトコルを制限する。protocol が指定されなければすべての ip パケットが監視される。オプションは tcp, udp, icmp だ。

プリミティブの組み合わせでより複雑な設定も可能だ。ホスト rose の telnet, ftp-data 以外のトラフィックを監視するにはhost dst rose and not port telnet and not port ftp-dataのようなフィルタを使う。

表1、ngrep のコマンドラインスイッチ

-e Show empty packets.
-n [num] Match num packets, then exit.
-i [expression] Search for the regular expression without regard to case.
-v [expression] Search for packets not containing the regular expression.
-t Print a YYYY/MM/DD HH:MM:SS.UUUUUU timestamp on each matched packet.
-T display a +S.UUUUUU timestamp on each matched packet.
-x Show the packets in the alternate hex and ascii style.
-I [filename] Read from a pcap style dump named filename instead of live traffic.
-O filename Write output to a pcap style file named filename.
-D Mimic realtime by printing matched packets at their recorded timestamp.


ngrep はトラブル処理時には便利だ。アプリケーションレベルのトラブルの場合には原因の切り分けができる。例えば cherry (192.168.1.10) から cuke (192.168.2.10) へ接続したいがうまくいかない場合のトラブル処理は次のようになるだろう。

症状:cherry からリモートネットワークのホストに接続できない。他のネットワークのホストには接続できる。同ネットワークの cherry 以外のホストはリモートネットワークにアクセスできる。

環境:関連するホストは cherry, rhubard(リモートネットワークへのゲートウェイ), cuke

仮定:問題は cherry かルーターの設定ミスらしい。

問題の絞込み:接続できないホストは cuke だけらしい。cuke の問題が解決できれば rhubarb に到達できるだろう。

アタックプラン作成:cherry から cuke に ping を飛ばしてトラフィックを ngrep で監視する。(ngrep host cherry)

結果:cuke へ ping を送出した時の出力は次の通り。

[root@cherry /root]# ngrep -e -x host 192.168.1.10

interface: eth0 (192.168.1.0/255.255.255.0)

filter: ip and ( host 192.168.1.10 )

#

I 192.168.1.10 -> 192.168.2.10 8:0

  eb 07 00 00 31 86 a7 39    5e cd 0e 00 08 09 0a 0b    ....1..9^.......

  0c 0d 0e 0f 10 11 12 13    14 15 16 17 18 19 1a 1b    ................

  1c 1d 1e 1f 20 21 22 23    24 25 26 27 28 29 2a 2b    .... !"#$%&'()*+

  2c 2d 2e 2f 30 31 32 33    34 35 36 37                ,-./01234567    

#

I 192.168.1.1 -> 192.168.1.10 5:1

  c0 a8 01 0b 45 00 00 54    25 f2 00 00 40 01 d0 52    ....E..T%...@..R

  c0 a8 01 0a c0 a8 02 0a    08 00 dc 67 eb 07 00 00    ...........g....

  31 86 a7 39 5e cd 0e 00    08 09 0a 0b 0c 0d 0e 0f    1..9^...........

  10 11 12 13 14 15 16 17    18 19 1a 1b 1c 1d 1e 1f    ................

  20 21 22 23 24 25 26 27    28 29 2a 2b 2c 2d 2e 2f     !"#$%&'()*+,-./

  30 31 32 33 34 35 36 37    b4 04 01 00 06 00 00 00    01234567........

  00 10 00 00 01 00 00 00    e8 40 00 00                .........@..    

exit

2 received, 0 dropped

[root@cherry /root]# 

    

2 パケットが表示されている。一つは タイプ8、コード0の ICMP パケット、ping リクエストだ。もう一つはタイプ5、コード1の ICMP パケット、リダイレクトでゲートウェイマシンの mango から送られている。

結果の検証:ホスト mango が絡んでいるとは予想外。"-v" スイッチで ICMP リダイレクトを監視すれば cherry が rhubarb ではなく 192.168.1.11 へリダイレクトされているのが分かる。正しいゲートウェイに送出されていなければアクセスできない。これは cherry で 192.168.2.0/24 への route を追加すれば解決する。

設定を修正後、正しくアクセスできた。


Copyright © 2000, Pat Eyler
Published in Issue 57 of Linux Gazette, September 2000

IDE, CD-Writer の追加インストール (By Daniel Feenberg)

CD-Writing HOWTO と cdrecord のドキュメントは http://www.guug.de/~winni/linux/www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdrecord.html に豊富に揃っている。古いドライブやカーネルを使うのでなければカーネルの再コンパイルをする必要はない。ここでは簡単に CD を焼く方法を説明しよう。これができればオーディオ、ブータブル、マルチセッション、ハイブリッドディスクなどにも手が届くようになる。必要なものは次の通り。

まずドライブをインストールする。ケーブルの向き、マスタ、スレーブの設定などを間違えずに。BIOS の設定は必要ない。起動時に BIOS が認識しているかどうかをチェックしておこう。

インストールが完了したら SCSI エミュレーションの設定だ。

  1. CD-ROM ドライブ名を得る。これは /dev/hdc, /dev/hdb, /dev/hdd などのようになる
  2. ルートになる
  3. ファイル /etc/rc.local の最後に次のスクリプトを追加する insmod ide-scsi rc.local ファイルがなければ上記のコマンドを起動する方法を見つけなければならない
  4. 次のコマンドにより LILO を再設定する lilo
  5. "cdrecord" と "mkisofs" をインストールする cd /cdrom/RedHat/RPMS rpm --install cdrecord* rpm --install mkisofs* Redhat 以外のディストリビューションではバージョンが古かったりパッケージに含まれていない場合がある。その場合は www.freshmeat.org からダウンロードしてコンパイル、インストールしよう tar -xvf cdrecord*tar cd cdrecord-1.8 make make install 最新の "cdrecord" はドライブを自動的に見つけてくれるので余計な設定は必要ない
  6. CD-R をCD-ROM としても使用する場合は /etc/fstab を修正しよう /dev/scd0 /cdrom auto defaults,ro,noauto,user,exec 0 0
  7. マシンを再起動する
  8. 正しくインストールされたかどうか確かめる cdrecord -scanbus 出力は "Removable CD-ROM" などと表示される。"-R" や "RW" と表示されたらそれはCD-R/RW だ。 0,0,0 0) 'Richoh' 'MP602A' '2.03' Removeable CD-ROM Drive 重要なのは最初の三つの数字で、コントローラ、SCSI ID、LUN を表している。うまくいかない場合は scsi エミュレーションが正しくインストールされていないかドライブが対応していない場合が多い。ドライブが認識されない場合は Windows で認識するか、Linux のIDE で認識するか、最後に SCSI エミュレーションで認識するか確認しよう

最後はいよいよ書き込みだ。

  1. まず ISO ファイルシステムを作成する mkisofs -v -o file.iso file... 書きこむファイルが一つのディレクトリならその階層も保存される。でなければすべてルートディレクトリに書きこまれる。その他のオプションもいろいろある
  2. 実際に CD-R/RW に書きこむ。 cdrecord -v dev=0,0,0 file.iso "dev=0,0,0" は出力機器だ。"cdrecord" はメモリのページをロックするのでルートになって起動しよう。筆者の古典的な AMD 233 MHZ, 5400 rpm HDD, 4倍速 CD-R/RW でも問題なく書きこめる。"mkisofs" と "cdrecord" を一度に入力するには次のようにする mkisofs file... | cdrecord -v dev=0,0,0 - 最後のハイフンは標準入力から入力するという意味だ。

この記事はhttp://www.nber.org/cdrecord.htmlで見ることができる。今月はもう一つ CD-R/RW に関する記事がある。


Copyright © 2000, Daniel Feenberg
Published in Issue 57 of Linux Gazette, September 2000

Linux 認定プログラム (By Ray Ferrari)

2年前に発足した Linux Professional Institute (LPI) は Linux に関する知識、技術の認定の標準化、多国語化が目的だ。2年足らずで Linux Professional Institute Certification (LPIC) は事実上の標準となりつつある。http://www.lpi.org/はすでに日本語、ドイツ後化が終了し、フランス語と中国語化が進んでいる。ボランティアによる他の言語への翻訳も今後進むだろう。翻訳のボランティアを望んでいる人はpdunstan@pfeffer.eduまで連絡を下さい。LPI-Japan も設立された。その他 LPI 中国なども問い合わせがある。北京の IDG ショー(8月29日〜9月1日)、同台北(9月7日〜9日)、同クアラルンプール(11月7日〜9日)などにも招待されている。

企業関連では MacMillan から LPIC Exam 101 に関する書籍が出版された。IBM も LPIC を取りいれている。

LPI 準備のウェブサイトは http://www.lpi.org/c-preperation.html。Linux トレーニングに関する情報はhttp://www.lintraining.comから得られる。

ウェブベースのレベル1コースは CyberState 大学でスタートした。費用は995ドルで、LPI のレベル1の受験資格が得られる。

LPI は短期間であっという間に広がってしまった。日本語のウェブサイトはhttp://www.yesitis.co.jp/LPI/だ。LPIC 試験の情報はhttp://www.vue.comから得られる。


Copyright © 2000, Ray Ferrari
Published in Issue 57 of Linux Gazette, September 2000

Tuxedo Tails (By Eric Kasten)

penguinstrike.png inetrevolt.png
Eric の Sun Puppyhttp://www.sunpuppy.comで見ることができる。


Copyright © 2000, Eric Kasten
Published in Issue 57 of Linux Gazette, September 2000

CVS (バージョン管理システム) (By Mark Nielsen)

CVS は優れたソフトウェアバージョン管理プログラムだ。プログラミング初心者やフリーソフトを使いたい人には最適だ。

まず読者諸君が bash を使っているものとする。複数でアクセスすることも出来るが今回は1ユーザ、"mark" で使用するものと仮定する。"mark" で使用する前に "root"で次のコマンドを実行しよう。
mkdir /usr/local/cvs
chown mark /usr/loal/cvs
つぎに "mark" でログインして .bashrc に次の行を追加する。
CVSROOT=/usr/local/cvs 保存したら "source .bashrc" を実行しよう。これで /usr/local/cvs がデフォルトのディレクトリになる。初めにディレクトリも作成しておこう
mkdir /usr/local/cvs/CVSROOT

ホームディレクトリに "Temp_Source" というディレクトリを作って新しいファイルを置く
mkdir Temp_Source
ls > Temp_Source/File1.txt
ls Temp_Source/* > Temp_Source/File2.txt

Temp_Source のファイルを CVS の管理下に置く。
cd Temp_Source
cvs import -m "Test Import" My_Files Revision1 start
これで作業ディレクトリを作成する準備が整った。早速ファイルを作業ディレクトリにダウンロードしてみよう。CVS からファイルをチェックアウトするときにはディレクトリを作成してくれる。今回は "My_Files" というディレクトリが作成される。では CVS からファイルをダウンロードしよう。
cvs checkout My_Files

My_Files ディレクトリで新しいファイルを作成し CVS リポジトリへ追加してみよう。
ls /etc > File3.txt
cvs add File3.txt
ファイルは追加されたが実際にはアップロードはされていない。
cvs commit
"cvs commit" はデフォルトのエディタを開くのでファイルを保存しエディタを終了する。終了時に続けるかどうか尋ねられるので "continue" を選択する。これでアップロードは終了だ。

cvs にファイルを追加したので今度はファイルを削除してみよう。
rm File3.txt
cvs remove File3.txt
cvs commit
最初のコマンドでファイルを実際に削除し、次のコマンドで現在のディレクトリの設定を変更し最後のコマンドで cvs リポジトリを変更する。

ファイルの追加と削除ができるようになったので今度はファイルを修正してみる。方法は次の通りだ。
ls /var >> File2.txt
cvs commit
 

他の人が管理しているリポジトリをダウンロードするには次のようにしよう。
cvs update -dP
 

cvs は優れたソース管理プログラムだ。メジャーのディストリビューションには標準で添付されいるし、メジャーのフリーソフトウェブサイトでも cvs を利用している。複数のバージョンがあるドキュメントを管理するには最適のプログラムだ。


Copyright © 2000, Mark Nielsen
Published in Issue 57 of Linux Gazette, September 2000

ウェブデータベースのインストール (By Mark Nielsen)

Zope, Apache, Mysql, PostgreSQL, Perl, Python, PHP

rpm を使わずに サービスをインストールするのは簡単だ。筆者は Debian GNU/Linux 以外ではほとんど rpm を使用していない。これからインストールするソフトウェアは非常に人気のある ウェブ/データベースプログラムで、学習用としても最適のプログラムばかりだ。さらにそのパワーも非常に強力なものばかりだ。フリーソフトウェアの費用抑制効果は抜群でその限界は人とハードウェアだと言ってもいいだろう。

今回インストールするプログラムは次の通りだ。

  1. Python -- Python を使うまでは筆者は熱狂的な Perl のファンだった。今ではどうしても Perl が必要でなければ Python を使っている。Python は RAD 用の言語で Zope ウェブサーバでも使われている。乱暴な言い方が許されれば Perl は過去の言語になりつつある。Python はオブジェクト志向言語でバイナリも作成できる。
  2. Perl -- ウェブサーバ開発の標準言語。ウェブ/データベース開発の最強の言語だろう。PHP ほど使いやすくはないが機能は非常に多い。
  3. PHP -- ウェブ/データベース開発には最適の言語。筆者は高機能な Perl、Python が好みだ。
  4. Apache -- 最も優れたウェブサーバ。もう説明の必要はないだろう。Apache と ssl を Zope のフロントエンドにすれば Zope も間接的な暗号化が可能だ。
  5. Zope -- セキュリティ、データベース、スクリプト言語をまとめて提供する非常に強力なウェブサーバ。Apache と Zope はお互いに両立できるウェブサーバでこれらを使えれば他のウェブサーバを学ぶ必要はない。
  6. PostgreSQL -- 優れたフリーのデータベースサーバ。SQL は Oracle に似ている。pgSQL はプロシージャを利用することもでき、Perl モジュールを利用可能にしてあれば Perl も利用できる。ただラージオブジェクトの扱いはスマートではない。
  7. MySQL -- 非常に高速なデータベースサーバで PHP との連携で利用する企業が多い。MySQL は多機能ではないので筆者は PostgreSQL を好んで使っている。簡単で高速なデータベースが必要な人には最適だ。

これらのプログラムをインストールする手順は次の通りだ。

#### Before anything is done, goto the apache/src

#### directory and edit Configuration.tmpl add uncomment info and so.  

#### Answer y to just configure apache with mod_perl,

###      but don't let mod_perl build apache. 

### Add

#       AddModule modules/mod_snake/libmod_snake.a

# to the end of src/Configuration.tmpl in apache. 



### Then do this stuff. 



cd mysql-3.22.32

mkdir /usr/local/mysql-3.22.32

./configure --prefix=/usr/local/mysql

make

make install



cd ../postgresql-7.0.2/src

mkdir /usr/local/postgresql

./configure --prefix=/usr/local/postgresql --with-perl -with-odbc

make

make install

chown -R postgres /usr/local/postgresql



### Just configure apache, but don't build it

cd ../apache_1.3.12

make clean

./configure --prefix=/usr/local/apache



cd ../mod_snake-0.2.0

./configure  --prefix=/usr/local/mod_snake --with-apache=/usr/local/src/apache_1.3.12

make

make install



### Do not have perl build apache, just let is configure apache 

cd ../mod_perl-1.24

make clean

perl Makefile.PL EVERYTHING=1 APACHE_PREFIX=/usr/local/apache

make test

make install



### Build apache

cd ../apache_1.3.12

make

make install



### For those of you who might try to get php3 working with php4, 

### you can try to get the stuff installed, but I got the error

#Syntax error on line 208 of /usr/local/apache/conf/httpd.conf:

#Cannot load /usr/local/apache/libexec/libphp3.so into server: /usr/local/apache/libexec/libphp3.so: undefined symbol: dlst_first

#/usr/local/apache/bin/apachectl start: httpd could not be started

### Thanks to Chad Cunningham for metioning you can get both php3 and php4

### working in Apache at the same time. I still had some errors, 

### so I just abandoned php3. 



#cd ../php-3.0.16

#./configure  \

#--enable-versioning \

#--with-pgsql=/usr/local/postgresql \

#--with-mysql=/usr/local/mysql \

#--with-config-file-path=/usr/local/apache/ --enable-track-vars \

#--with-apxs=/usr/local/apache/bin/apxs --with-xml

#make

#make install



cd ../php-4.0.1pl2

./configure  \

--enable-versioning \

--with-pgsql=/usr/local/postgresql \

--with-mysql=/usr/local/mysql \

--with-config-file-path=/usr/local/apache/ --enable-track-vars \

--with-apxs=/usr/local/apache/bin/apxs --with-xml

make

make install



cd ..

mv Zope-2.2.0-src /usr/local/Zope

chown -R nobody /usr/local/Zope

cd /usr/local/Zope

### Setup the password and remember this password

su - nobody 'python wo_pcgi.py

### My hack to get a password I can remember, very bad security risk

su - nobody 'python zpasswd.py -u mark -p Something'



### Start the web servers

su -c nobody '/usr/local/Zope/start' & 

chown -R nobody /usr/local/apache

/usr/local/apache/bin/apachectrl start



#### Execute this command so that php can find the mysql libraries



ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.6.0.0 /usr/lib/libmysqlclient.so.6



### Put this in your startup script for apache.

### this gets PHP working. 



LD_LIBRARY_PATH=/usr/local/postgresql/lib

export LD_LIBRARY_PATH

PATH=$PATH:/usr/local/postgresql/bin

export PATH

export LIBDIR=/usr/local/postgresql/lib



/usr/local/apache/bin/apachectl start





### REMEMBER to initialize the database for postgresql and mysql.

### Execute the shell commands above

### For postgresql,



mkdir /usr/local/postgresql/data

chown -R postgres /usr/local/postgresql

cd /usr/local/postgresql

su postgresql -c '/usr/local/postgresql/bin/initdb -D /usr/local/postgresql/data'

/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data start



### To initialize MySQL 

cd /usr/local/src/mysql-3.22.32

chown -R postgres  /usr/local/mysql

su postgres -c 'scripts/mysql_install_db'

su postgres -c '/usr/local/mysql/bin/safe_mysqld' &

### Remember to change the password for the server and to setup

### permissions for other users. 



#### Remember to setup permissions in MySQL and PostgreSQL for

#### the username that Zope and Apache un under. 



#### Here are some httpd.conf file option I put at the bottom



 

 SetHandler perl-script

 PerlHandler Apache::OutputChain Apache::SSIChain Apache::Registry 

 PerlSendHeader On

 Options ExecCGI

 



AddType application/x-httpd-php4 .php4 



### I haven't yet done anything with the mod_snake module. 



#### These are my files and directgries in /usr/local/src

Apache-OutputChain-0.07           Zope-2.2.0-src

Apache-OutputChain-0.07.tar.gz    Zope-2.2.0-src.tgz

Apache-SSI-2.13                   apache_1.3.12

Apache-SSI-2.13.tar.gz            apache_1.3.12.tar.gz

ApacheDBI-0.87                    mod_perl-1.24

ApacheDBI-0.87.tar.gz             mod_perl-1.24.tar.gz

DBD-CSV-0.1023.tar.gz             mod_snake-0.2.0

DBD-ODBC-0.28.tar.gz              mod_snake-0.2.0.tar.gz

DBD-Oracle-1.06.tar.gz            mysql-3.22.32

DBD-Pg-0.95.tar.gz                mysql-3.22.32.tar.gz

DBD-XBase-0.161.tar.gz            php-3.0.16

DBI-1.14                          php-3.0.16.tar.gz

DBI-1.14.tar.gz                   php-4.0.1pl2

Install                           php-4.0.1pl2.tar.gz

Install~                          postgresql-7.0.2

Msql-Mysql-modules-1.2214         postgresql-7.0.2.tar.gz

Msql-Mysql-modules-1.2214.tar.gz



これらのツールを CVS と組み合わせて使用すれば非常に優れたツールとなるだろう。最近ではこれらの技術に関連する求人が増えてきているが、これらを学ぶ機会はそう多くはない。他のシステムではかなりの費用がかかるだろう。Linux ならすべてがフリーで揃う。

関連サイト

  1. apache.org
  2. zope.org
  3. php.net
  4. python.org
  5. perl.com
  6. postgresql.org
  7. mysql.com


Copyright © 2000, Mark Nielsen
Published in Issue 57 of Linux Gazette, September 2000

シェルスクリプトへの招待 (By Ben Okopnik)

関数は非常に便利なものだ。形式は単純な一群のコードで簡単に呼び出すことができ、新たにシェルを起動することもない。簡単な関数の例を示そう。

 

#!/bin/bash

#

# "venice_beach" - translates English to beach-bunny



function kewl ()        # Makes everything, like, totally rad, dude!

{

     [ -z $1 ] &&& {

        echo "That was bogus, dude."

        return

     }



     echo "Like, I'm thinkin', dude, gimme a minute..."

     sleep 3

     echo $@', dude!'

     # While the function runs, positional parameters ($1, etc.)

     # refer to those given the function - not the shell script.

}



clear



kewl $(echo "$@"|tr -d "[:punct:]")    # Strip off all punctuation

このスクリプトは "I'm thinkin'....." の後に引数を表示する。


Odin:~$ venice_beach Right on

Like, I'm thinkin', dude, gimme a minute...

Right on, dude!



Odin:~$ venice_beach Rad.

Like, I'm thinkin', dude, gimme a minute...

Rad, dude!



Odin:~$ venice_beach Dude!

Like, I'm thinkin', dude, gimme a minute...

Dude, dude!

関数を利用する上で一つ注意しなければなら名ことは "exit" ステートメントの使用だ。スクリプトがカレントシェルで実行されているとき "exit" が実行されるとカレントシェルをログオフしてしまいシェルがハングアップする可能性がある。関数を終了させる場合は "return" を使うようにしよう。

今まではスクリプトがファイルとして保存され再使用されるということを前提にしてきたが一度だけしか使わない場合、もしくは保存したくない場合には次のようにする。


Odin:~$ (

> echo

> [ $blood_caffeine_concentration -lt 5ppm ] &&& {

> echo $LOW_CAFFEINE_ERROR

> while [ $coffee_cup != "full" ]

> do

> brew ttyS2 # Enable coffeepot via /dev/ttyS2

> echo "Drip..."

> sleep 1m

> done

> echo

>

> while [ $coffee_cup != "empty" ]

> do

> sip_slowly # Coffee ingestion binary, from coffee_1.6.12-4.tgz

> done

> }

>

> echo "Aaaahhh!"

> echo

> )

Coffee Not Found: Operator Halted!

Drip...

Drip...

Drip...



Aaaahhh!



Odin:~$

"(" はシェルにスクリプトが続くことを指示する。シェルはサブシェルを起動してその後に続くスクリプトを実行する。単純なループや "if" ステートメントなどは次のように表現できる。


Odin:~$ for fname in *.c

> do

> echo $fname

> cc $fname -o $(basename $fname .c)

> done

シェルで実行するワンタイムスクリプトでは "#!/bin/bash" も必要ない。又最終コマンドを繰り返すアップアローを押すとちゃんと1行で表示してくれる。

優れたシェルスクリプトを書くにはプログラムについて学ばなければならない。コマンドを熟知するだけでは問題を解決できない。筆者は X Window の起動後に背景を自動的に変更するスクリプトを書き、".xinitrc" 実行時に起動するようにしたのだが X Window がスタートする前に背景変更スクリプトが起動してしまったりして正しく動作させるまで何度も思考錯誤を繰り返したことがある。

昔 ASCII コードと ACSI エスケープシーケンスを使って見栄えのするメニューをつくるということを良くやった。メニューを作るにはいくつかの機能が必要になる。カーソルの操作、テキストの属性の変更、それに色などだ。単純な例は次のようになる。


#!/bin/bash

#

# "ho-hum" - a text-mode menu



clear



while [ 1 ]         # Loop `forever'

do

# We're going to do some `display formatting' to lay out the text;

# a `here-document', using "cat", will do the job for us.



cat << !



            M A I N   M E N U



        1. Business auto policies

        2. Private auto policies

        3. Claims

        4. Accounting

        5. Quit



!

echo -n " Enter your choice: "



# Why have I not followed standard indenting practice here? Because

# the `here-doc' format requires the delimiter ('!') to be on a line

# by itself - and spaces or tabs count. Just consider everything as

# being set back one indent level, and it'll all make sense.



read choice



case $choice

in

    1|B|b) bizpol ;;

    2|P|p) perspol ;;

    3|C|c) claims ;;

    4|A|a) acct ;;

    5|Q|q) clear; exit ;;

    *) echo; echo "\"$choice\" is not a valid option."; sleep 2 ;;

esac



clear

done

改良版を次に示す。


#!/bin/bash

#

# "jazz_it_up" - an improved text-mode menu



tput civis        # Turn off the cursor



while [ 1 ]

do

    echo -e '\E[44;38m'    # Set colors: bg=blue, fg=white

    clear                  # Note: colors may be different in xterms

    echo -e '\E[41;38m'    # bg=red



    for n in `seq 6 20`

    do

        tput cup $n 15

        echo " "

    done



    echo -ne '\E[45;38m'    # bg=magenta

    tput cup 8 25 ; echo -n " M A I N   M E N U "

    echo -e '\E[41;38m'     # bg=red



    tput cup 10 25 ; echo -n " 1. Business auto policies "

    tput cup 11 25 ; echo -n " 2. Private auto policies "

    tput cup 12 25 ; echo -n " 3. Claims "

    tput cup 13 25 ; echo -n " 4. Accounting "

    tput cup 14 25 ; echo -n " 5. Quit "



    # I would have really liked to make the cursor invisible here -

    # but my "xterm" does not implement the `civis' option for "tput"

    # which is what does that job. I could experiment and hack it

    # into "terminfo"... but I'm not *that* ambitious.



    echo -ne '\E[44;38m'     # bg=blue

    tput cup 16 28 ; echo -n " Enter your choice: "

    tput cup 16 48



    read choice

    tput cup 18 30



    case $choice

    in

        1|B|b) bizpol ;;

        2|P|p) perspol ;;

        3|C|c) claims ;;

        4|A|a) acct ;;

        5|Q|q) tput sgr0; clear; exit ;;

        *) tput cup 18 26; echo "\"$choice\" is not a valid option.";

            sleep 2 ;;

    esac

done

最良の例とは言えないがレイアウトや色の使い方などは分かるだろう。ただシステムによっては動作が異なるかもしれない。スクリーンの操作は "tput" と "echo -e" で賄っているがハードウェアや "terminfo" のバージョンで違いが出るかもしれない。ターミナルで使えるカラーを調べるには次のスクリプトを使えばいい。


#!/bin/bash

#

# "colsel" - a term color selector



for n in `seq 40 47`

do

    for m in `seq 30 37`

    do

        echo -en "\E[$m;${n}m"

        clear

        echo $n $m

        read

    done

done

このスクリプトを実行して表示される色のコードを "echo -e '\E[,m" ステートメントで使用すればいい。もし思考錯誤を繰り返しているときにターミナルのテキストが読めなくなった場合は "reset" か "tput sgr0" と入力しよう。

今回はまとめられるかどうか自信がなかったが何とかまとめられたようだ。次回は "source", "eval", "trap" などを解説しよう。


Copyright © 2000, Ben Okopnik
Published in Issue 57 of Linux Gazette, September 2000

セキュリティスキャナ (By Kapil Sharma)

スキャナはセキュリティを自動的にチェックするプログラムだ。ネットワークの弱点を表示してくれるのでシステム管理者はそれに応じた対応を取ることができる。スキャナの基本的な機能は次の通り。

今回はホストスキャナ、ネットワークスキャナ、侵入スキャナなどに分けてそれぞれのツールを紹介しよう。

Host scanners
ホストスキャナはローカルマシンで実行してセキュリティ上の問題をチェックする。

Cops
Cops はセキュリティツールのコレクションでコンピュータセキュリティの気づかれにくい部分をチェックする。Cops はhttp://www.fish.com/cops から入手できる。

Tiger
Tiger はUNIX のセキュリティチェッカーで、シェルスクリプト、C コード、データファイルからなり、システム設定ファイル、ファイルシステム、ユーザ設定ファイルなどをチェックする。Tiger はhttp://www.giga.or.at/pub/hacker/unix から入手できる。

check.pl
perl スクリプトですべてのファイルシステムをチェックする。アクセス管理のためにもユーザ権限で週に一度は実行すべきだろう。チェックの結果は標準出力に表示される。check.pl はhttp://opop.nols.com/proggie.htmlから入手できる。

Network scanners
ネットワークスキャナはホストマシンから他のマシンのサービスなどをチェックする。もしセキュリティホールが見つかれば攻撃者もそれを利用できるということだ。ファイアウォールなどをチェックするにはいい。

NSS (Network Security Scanner):
NSS は それぞれのホストやサブネット全体をチェックする perl スクリプトだ。次のようなものをチェックする。
1:  sendmail
2: Anon FTP
3: NFS Exports
4: TFTP
5: Hosts.equiv
6: Xhost
NSS はhttp://www.giga.or.at/pub/hacker/UNIX から入手できる。

SATAN (Security Administrator's Tool for Analyzing Networks):
SATAN は自動的にネットワークを探査して弱点を探し出し、報告するツールだ。リモートホストの既知のセキュリティホールをチェックする。
    1: FTPD, FTP の書き込み可能ディレクトリ
    2: NFS
    3: NIS
    4: RSH
    5: sendmail
    6: X server

Strobe:
Strobe は TCP ポートのチェックに最適化されている。ホストのリスニングポートを探しレポートする。チェックは帯域をフルに使用するがプロセスリソースは抑えられている。単純で高速だが最新のスキャナほど高機能ではない。Strobe はftp://suburbia.net/pub/ から入手できる。

Nmap

最新の高機能のホストスキャンツール。対応機能は次の通り。

Nmap はhttp://www.insecure.org/nmap/index.html から入手できる。

Network Superscanner
http://members.tripod.de/linux_progz/

Portscanner
リスニング TCP ポートをスキャンするネットワークユティリティ。オープンソースで公開されている。http://www.ameth.org/~veilleux/portscan.html から入手できる。

Queso
ホストの動作 OS をスキャンするツール。http://www.apostols.org/projectz/queso/ から入手できる。

Intrusion Scanners
実際にセキュリティホールをチェックするプログラム。

Nessus
モジュールの形を取る非常に高速で優れたツール。クライアント/サーバの形を取り、サーバは Linux, FreeBSD, NetBSD, Solaris に対応している。クライアントは Linux, Windows に対応しており Java クライアントもある。IP アドレスかホストネームでポートスキャンをする。ホスト探索にはネットワーク DNS も利用できる。Nessus はhttp://www.nessus.org/ から入手できる。

Saint
セキュリティ管理者の統合ネットワークツール。クライアント/サーバで使用できるが www インタフェースにも対応している。リモートホストのネットワークサービスをチェックして情報を収集する。出力は理解しやすい。さらにアドインのスキャンモジュールもある。Saint はhttp://www.wwdsi.com/saint/ から入手できる。

Cheops
多数のホストの OS をチェックするツール。探したいものを特定するためのスキャンには便利。Cheops はhttp://www.marko.net/cheops/ から入手できる。

Ftpcheck / Relaycheck:
ftp サーバとメールサーバのリレー機能をチェックするユティリティ。http://david.weekly.org/code/ から入手できる。

BASS
BASS (Bulk Auditing Security Scanner) は既知のインターネットセキュリティホールをチェックする。http://www.securityfocus.com/data/tools/network/bass-1.0.7.tar.gz から入手できる。

Firewall scanners:
ファイアウォールをチェックするプログラム。通過できるかどうかなどもチェックする。

Firewalk
traceroute に似たテクニックで IP パケットからパケットフィルタリングのルールをチェックする。システム管理者は自分のネットワークの強度チェックに利用できる。Firewalk はhttp://www.packetfactory.net/Projects/Firewalk/ から入手できる。

セキュリティはソリューションではない。システム管理者は常に自分のシステムのセキュリティホールをチェックしなければならない。そうすることによりセキュリティが強化される。セキュリティホールは常に発生しているし、治療よりは予防のほうがいい。


Copyright © 2000, Kapil Sharma
Published in Issue 57 of Linux Gazette, September 2000

Window 9x を含んだネットワーク (By Juraj Sipos)

筆者がこの記事を書こうと思い立ったのは HOWTO やヘルプなどがあまり役に立たないためだ。知りたい情報は限られているのだがそれにたどり着くまでにかなりの情報を読破しなければならない。そこで今回は2台のコンピュータを接続する簡単な方法を解説する。但しメールの送受信はできない。分厚いドキュメントよりも簡単な例を立てて説明してくれたほうがわかりやすいと思う。そこで今回はそのような例を使って説明してみよう。「私のLinuxマシンのパラレルポートが設定できない」、「2番目のパラレルポートからの接続ができない」、記事の中で既に解説されていることなどに関するメールはやめてほしいが、sendmail の設定方法に関するメールは歓迎する。

まず2台の Linux マシンを PLIP かネットワークカードを使って接続し、その後 Windows マシンと Linux マシンの接続を説明する。今回使用したのは RedHat 6.0 だ。

PLIP

PLIP を使用するのにカーネルのコンパイルは必要ない。Linux の汎用カーネルで十分だ。PLIP で接続するには次のようにする。

  1. ラップリンクのパラレルケーブルを手に入れる。
  2. 2台のマシンに Linux をインストールし inet などの適当なネットワークサービスを使用可能にする。
  3. エディタで /etc/hosts ファイルを開いて次の行を入れよう。2台のマシンとも同じように修正すること。
    
    127.0.0.1               localhost localhost.localdomain
    
    10.0.0.1                one
    
    10.0.0.2                two
    
    
  4. 2台目のマシンの BIOS 設定を "Halt on all Errors" から "halt on all Errors except Keyboard" に変更しよう。
  5. 2台目のマシンの /etc/rc.d/rc.local ファイルを開いて次の行を適当な個所(最後がいいだろう)に入れよう。
    
    modprobe plip
    
    ifconfig plip0 two pointopoint one up
    
    

これで2台目のコンピュータはキーボードが認識されなくても起動し plip インタフェースが使用できるようになる。キーボードがなくても telnet, ftp, ssh などでアクセスできるから心配はない。"modprobe plip" と入力したときにシステムが "unresolved symbols", "...device busy" などのエラーが返ったときは PLIP HOWTO では解決できなかった。問題は IRQ の割り当てだろう。次のようにすれば問題はないはずだ。


echo 7 > /proc/parport/0/irq

これはカーネルに IRQ 番号を直接割り当てさせる。しかし最初は必ず "modprobe plip" を使用するように。これで /proc/parport/0/irq に7が割り当てられたので "modprobe plip" と入力して plip をインストールしよう。もし2台目のマシンで同じようなエラーが発生したら /etc/rc.d/rc.local ファイルを次のように変更しよう。

modprobe plip

echo 7 > /proc/parport/0/irq

ifconfig plip0 two pointopoint one up

1代目のマシンの設定は次のようになる。

modprobe plip

echo 7 > /proc/parport/0/irq

ifconfig plip0 one pointopoint two up

これで telnet, ssh, ping, ftp, lynx などが使えるはずだ。念のために "telnet two" としてみよう。root では telnet でログインできないので注意しよう。

Windows マシンと Linux マシンの接続

DOS/Windows 用の plip ドライバがftp://ftp.crynwr.com/drivers/plip.zip にあるが、これは Windows 9x には対応していない。そこでネットワークカードでの接続をお勧めする。筆者が進めるのは安価な 10Base 2 での接続だ。コンピュータが2台ならターミネータを一つ使わなければならない。通常ネットワーク接続の方法は三つある。


10Base 5  - 古い

10Base 2  - 今回の記事で使用しているもの

10Base 10 - ハブを利用する、若干高価

NE2000 か互換のカードを購入することをお勧めする。非常に安価だ。最初のコンピュータで次のコマンドを入力しよう。

modprobe ne2k-pci

ifconfig eth0 one

2台目のコンピュータでの入力は次の通りだ。

modprobe ne2k-pci

ifconfig eth0 two

これで2台のコンピュータで telnet, ssh, ping, ftp が利用できる。NFS を使うならばNFS Howtoを見るか /etc/exports ファイルに次の行を入れよう。

/ two (rw)

rpcinfo -p を実行すると次のような出力が得られるはずだ。

program vers proto   port

  100000    2   tcp   110   rpcbind

  100000    2   udp   111   rpcbind

  100024    1   udp   903   status

  100024    1   tcp   905   status

  100011    1   udp   914   rquotad

  100011    2   udp   914   rquotad

  100005    1   udp   924   mountd

  100005    1   tcp   926   mountd

  100005    2   udp   929   mountd

  100005    2   tcp   931   mountd

  100005    3   udp   934   mountd

  100005    3   tcp   936   mountd

  100003    2   udp   2049  nfs

Windows マシンと Linux マシンとはネットワークカードを介して会話をすることができる。Windows マシンはネットワークカードは装着すれば自動で認識してくれる。もしだめだったらコントロールパネルからハードウェアの追加を選べばいい。認識できたらコントロールパネルのネットワークから認識されたカードの TCP/IP プロパティを設定する。設定するのは IP アドレスとネットマスクだ。それが済んだら再起動する。次に Windows のシステムディレクトリにある hosts.sam と lmhosts.sam を hosts と lmhosts にそれぞれコピーして次のように修正しよう。


c:\windows\hosts

c:\windows\lmhosts

127.0.0.1               localhost localhost.localdomain

10.0.0.1                one

10.0.0.2                two

これで2台のマシンで通信が可能になった。Linux マシンで Apache サーバが走っていれば Windows マシンから

http://two

とすることでアクセスできる。Linux マシンのユーザ ID があれば Linux マシンへ ftp することもできる。

ラップリンクのパラレルケーブルは結構値段も高いので安価なネットワークカードを買ったほうが通信速度も速く快適だ。ところで sendmail をホームネットワークで使う場合の設定方法が分かる方は教えてもらえないだろうか。


Copyright © 2000, Juraj Sipos
Published in Issue 57 of Linux Gazette, September 2000

ウェブツール (By Martin Skjoldebrand)

最後の記事を書き終えてから SCREEM に関するメールをいくつか受け取った。記事を書いているときに Freshmeat でそれらしい名前を見た記憶がある。それと Quanta からもメールを受け取った。確かに拡張 Ascii コードはまだ完全ではないが LC_ALL= で解決できる場合がある。もう一つは F5 を押してプレビューをアップデートすることらしい。

最近サーバが変わったのでホームページを移動する必要があった。ダイアルアップでは FTP での転送は手間がかかるので自動的に移動するツールを探してみた。コマンドラインで使用する wget はサイトをまとめてダウンロードしてくれる。筆者はグラフィック環境で使用しているのでそのフロントエンドの Kwebget を利用した。ディレクトリやファイルへの移動が速やかに行われるのでダウンロードの時間は早い。

それでは SCREEM を見てみよう。SCREEM は単なる HTML エディタではない。今はまだ分からないが最終的には ウェブ環境構築プログラムを目指しているらしい。SCREEM のインストール時には gnome-libs、libguile、libreadline の最新版が必要というエラーが出た。インストールするときにはあらかじめアップデートしておこう。

サイトを構築するときはプロジェクトの作成から始まる。必ずプロジェクトを作成する必要はない。ブラウザはファイルのブラウズとプロジェクトのブラウズとが可能だ。

SCREEM in action - running under KDE 1.92

SCREEM は使いやすい。メニューとタブバーからなるがまだメニューは荒削りだ。サポートするフォーマットは HTML、PHP3、RXML、SSI などと多い。CSS も利用できるが、まだ不安定だ。タグ補完機能は便利だ。それにプレビューモードも若干不安定だ。エディタに含まれている機能としてストラクチャブラウザと属性ブラウザがある。ストラクチャブラウザではドキュメントで使用されているタグが一覧される。属性ブラウザでは属性を簡単に修正できる。SCREEM は非常に良くできたエディタだが目的はもっと高度なところにあり、今後どのように進化するかはまだ分からない。


Copyright © 2000, Martin Skjoldebrand
Published in Issue 57 of Linux Gazette, September 2000

Java のハッシュテーブル (By Ben Tindale)

ハッシュテーブルはアクセス可能な要素を持ったビンと呼ばれるメモリ上の連続したセクションだ。ハッシュテーブルに格納されたデータは迅速な検索、挿入、削除が可能だ。データ操作の迅速性のためにメモリの使用効率を犠牲にしている。ハッシュテーブルはデータ操作の非常に標準的な手段であり、それゆえ Java にも採用されている。Java でハッシュテーブルを提供するクラスは hashtable だ。hashtable は Dictionary から派生し、Map, Cloneable, serializable をインプルメントしている。

キーはハッシュテーブルのアクセス可能な要素の一つにマップされる値だ。Java はキー生成のためのインタフェースを提供している。ハッシュ機能は一群のデータの一部からキーを作成しそのキーを基にアクセスするメモリ領域を特定する。そのためにはデータがランダムに分散しておりハッシュが適切に実行される必要がある。

ハッシュテーブルの中の総ビン数のうちの使用されている割合をロードファクタという。このロードファクタからコリジョンの発生数を予想することが出来る。Java ではロードファクタが75%を越えると新たなメモリが割り当てられる。

二つのデータがハッシュにより同じキーを差すことをコリジョンという。キーが生成される方法が分かればコリジョンを発生させることも可能だ。次の例は異なった文字列がコリジョンを起こす Java コードだ。


import Java.util.*;

import Java.lang.*;



// x + 31x = x(31 + 1) = x + 31 + 31(x-1)

public class Identical

{

    public static void main(String[] args)

    {

        String s1 = new String("BB");

        String s2 = new String("Aa");

        System.out.println(s1.hashCode());

        System.out.println(s2.hashCode());

    }

}

Red Hat 6.2 の kaffe でコンパイルした結果は次の通りだ。

[bash]$ javac Identical.java

[bash]$ java Identical

2112

2112

[bash]$

それぞれのビンの要素がデータエレメントへの連鎖リストを指し示しているものがチェーンだ。コリジョンが発生すれば何らかの方法でこの連鎖リストにインサートされる。削除をするときはマッチするデータが見つかるまでリストを手繰っていく。Java Foundation クラスはこの方法を採用している。

データ要素がすべてハッシュテーブルに格納されている場合をオープンアドレスという。それぞれのビンには一個のデータが格納されている。これが最も単純なハッシュテーブルの例で配列でも同じことが出来る。オープンアドレスの場合はデータ挿入時の空のビン検索でコリジョンが発生すれば単純にリニアにリストを辿っていく。コリジョンを避けるために常に次のビンが検索される。

string クラスはハッシュテーブルのキー生成のために hashCode() というメソッドがある。string オブジェクトの hashcode は次のように計算される。
s[0]*31^(n-1)+s[1]*31^(n-2)+...+s[n-1]

例に利用しているスクリプトでは String のハッシュ機能を利用しているが似たような文字に偏る難点がある。使用される文字列のキャラクタ数が限られているとコリジョンが発生する可能性が高い。理想的にはデータをハッシュテーブルにランダムに分散し偏らないことが望ましい。hashCode メソッドは又インテジャのキータイプが 2^32 -1 に限られている。これは64ビットデータタイプよりもコリジョン発生の可能性が高い。

Java Foundationa クラスで実装されている Hashtable クラス、メソッドは非常に優れているが、データが大きくなると偏りが多くなりパフォーマンスが低下する。データをよりランダムに配置し、キーにはより長いデータタイプを採用すべきだった。例に使用した CloseWords のコードは次の通りだ。


import java.lang.*;

import java.util.*;

import java.io.*;



/** CloseWords: Exploit the clustering tendency of the native hashCode() method

 * in the String class to find words that are "close" to the argument.

 */

public class CloseWords

{

    Hashtable ht;

    String currString;



    /** In the code below we create an instance of the Hashtable class in which to store

     * our hash of all of the words in the system dictionary (yes, this is a very memory

     * inefficient way of indexing the words).

     * 

     * @param args 

     */

    public static void main(String[] args)

    {

        ht = new Hashtable();

        try

            {

                DataInputStream in = new DataInputStream(

                                                         new BufferedInputStream(

                                                                                 new FileInputStream("/usr/dict/words")));

                while((currString = in.readLine())!=null)

                    ht.put(new Integer(currString.hashCode()), currString);



                int i = args[0].hashCode();

                int found=0;



                while(found < 5)

                    {

                        i--;

                        if(ht.get(new Integer(i))!=null)

                            {

                                System.out.println(ht.get(new Integer(i)));

                                found++;

                            }

                    }

                i = args[0].hashCode();

                found=0;



                while(found < 5)

                    {

                        i++;

                        if(ht.get(new Integer(i))!=null)

                            {

                                System.out.println(ht.get(new Integer(i)));

                                found++;

                            }

                    }

            }

        catch(IOException ioe)

            {

                    System.out.println("IO Exception");

            }

    }

}


Copyright © 2000, Ben Tindale
Published in Issue 57 of Linux Gazette, September 2000