Linux Gazette 1999年12月号

今年ももうじき暮れようとしていますが皆さんはいかがお過ごしでしょうか。風邪などひかないようにご注意ください。風邪を引いたら薬を飲んで休養をとりましょう。人間には休養が必要です。

今月のLinux Gazetteの内容


今月のニュース

Linux Journal 1999年12月号発売

今月の特集はシステム管理です。オンラインの記事も公開されています。 http://www.linuxjournal.com/issue68/index.htmlをチェックしてください。

Linux Journal/Linux Gazette Millenium Edition Archive CD-ROM

Linux Journalのすべての記事(1‐56、1994年‐1998年)とすべてのLinux Gazette(1−45、1995年‐1998年)が1枚のCDになりました。詳しい情報はここをクリックしてください。


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


その他のニュース

今後のイベントスケジュール

フラッシュROMのファイル、プリント、CD共有サーバー

KYZOはPizzaBox Linuxの商用版をリリースした。フリーのPizzaBpxサーバーのダウンロードは最初の1ヶ月で500,000ヒットを記録、最近では1日の登録者数が75,000人にのぼっている。商用版にはブータブルのフラッシュROMにプレインストールされ486(以上の)PCを起動できる回路が付属する。システムにはファイル、プリント、CD共有、リモートアクセス、UPSモニタリング、テープバックアップ、ハードウェアモニタリング、APMなどの機能があり、JavaScriptをサポートしたウェブ管理インタフェースが付属する。ターゲットはSME市場だ。

Allegiance Telecom、ウェブホスティングプラットフォームにRaQ 2を選ぶ

Cobalt NetworksのRaQ 2サーバーがAllegiance Telecomに採用される。RaQ 2は低いTCOコストで高品質のウェブホスティングを提供する。1週間前にはCobalt製品ファミリの最上位製品 RaQ3iが発表されている。
www.cobaltnet.com

National Semmiconductor, geodeでLinuxをサポート

National SemiconductorによるとInformatec AGはLinuxベースのJava Network Technology OSをNational Geode WebPADに移植する。National Geode WebPADは無線インターネット方式アクセス機器のハードウェア、ソフトウェアリファランスだ。

Linuxが動作するプラットフォームは?

Current ports of the Linux OSウェブページにはLinuxが動作するプラットフォームがリストアップされている。主なプラットフォームは次のとおり。

「Linux Administration Made Easy」ガイド

「Linux Administration Made Easy」(LAME)ガイドが最近Red Hat 6.1用にバージョンアップされた。ガイドには毎日の管理とメンテナンスの説明が載っている。


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


More 2¢チップ


読者からの投稿に対する返事


オープンソースコンファランス(By Stephen Adler)

6月にオープンソースコンファランスを開こうと思いついて10月に実際に開催するまでは大変な道のりでした。わずか1日のコンファランスだからたいしたことはないとたかをくくっていたのですが実際に準備に取り掛かったら次から次へと問題が出て来ました。研究所の内部の説得、資金集め、協賛企業の獲得、プロモーションなど実際にやってみると難しいことばかりです。でも広告を打って人を集めたコンファランスも始まってみたらあっという間に終わってしまいました。コンファランスが終わってから振り返ってみると会議は大成功でした。5-6年後に振り返ったらこの会議は非常に重要なものと認識されるだろうと言ってくれる人もいます。さあ次は「オープンソースコンファランス 2000」。


SAMBA, Win95, NT, HP Jetdirect(By Eugene Blanchard)

ルーティング研究所には9台のPCと18の席があります。環境はサーバーが1台、HP JetdirectプリンタサーバーをインストールしたHP LaserJet 4050N、PCが9台。サーバーのOSはSlackware 4.0(カーネル2.2.6)、8台のPCはWinNT 4.0(SP5)、1台はWin95aです。Linuxサーバーで必要な機能は次のとおり。

この場合NFSとSAMBAという選択肢がありますがクライアントの環境を修正して再起動することが多いので今回はSAMBAを選択しました。今回はSAMBAの使用と設定の例を紹介します。

SAMBAのインストールはディストリビューションで異なりますが今回使用しているのはSlackwareです。Slackwareの場合はインストール時にSAMBAを選択するか、後でpkgtoolを使ってインストールします。SAMBAは「/etc/rc.d/rc.samba」から起動されます。起動されたsmbdがクライアントにSMB/CIFSサービスを提供します。SMB(Server Message Block)はWin95とNTクライアントがネットワークにアクセスするときに使用するサービスです。nmbdはNETBIOSネームサーバーでIP上でNETBIOSが使用できるようにします。

SAMBAの設定ファイルは「/etc/smb.comf」です。設定例が「/usr/doc/samba-2.0.3/examples」にあります。smb.confは3つのセクションからなります。

Globalセクションはワークグループ名、netbios名、IPインタフェースなどの一般的な設定を、Shareセクションは共有フォルダの設定をします。printers セクションでは共有プリンタの設定をします。smb.confは内容が理解できればマニュアルで修正ができますが、GUIツールのSWATを使うこともできます。SWATを使用するとオンラインのヘルプが利用できます。

smb.confファイルを修正したらsmbd、nmbdサーバーを再起動しなければなりません。WindowsとLinuxで使用するユーザーネームとパスワードを同一にすることも重要です。パスワードの同期は「/usr/lib/samba/private」ディレクトリの mksmbpasswd.sh を実行します。期待通りにいかなかったのはシャドーパスワードを smbpasswd ファイルに移行できずマニュアルでパスワードを設定しなければならなかったことです。これでユーザー、パスワードを入力せずにサーバーにアクセスできるはずです。

プリンタサーバーとプリンタの設定は簡単です。Linux用のドライバは付属していませんがHPの http://www.hp.com/support/net_printingからWebAdiminツールがダウンロードできます。今回はtelnetを使用して直接JetDirectカードを設定します。JetDirectカードにtelnetするにはIPアドレスを設定しなければなりません。デフォルトでは"192.0.0.192”になっています。プリンタのステータスウィンドウから「JetDirectメニュー」を選んで修正しましょう。IPアドレスが修正できたらtelnetでアクセスします。まず管理者のパスワードを設定します。次にデフォルトのゲートウェイとホストネームです。残りはプリンタ組み込みのウェブサーバーでの設定が可能です。

LinuxからJetDirectに印刷するには「/etc/;printcap」ファイルを作成しなければなりません。例えば次のようになります。



# HP Laserjet 4050n





lp|lj4050n:\


        :lp=/dev/null:sh:\


        :mx#0:\


        :sd=/usr/spool/lj4050n:\


	:rm=e328-laser.domainname.com:rp=text:


Windowsから印刷するにはサーバーのプリンタアイコンをダブルクリックするとWindowsがプリンタの設定をするかどうか尋ねてきます。プリンタの設定用CDのdisk1とdisk2フォルダから必要なドライバをインストールします。テストページをちゃんと印刷できれば終了です。

SAMBAの設定は初体験の私でも10分もかかりませんでした。でも気がついたことがいくつか。まず[homes]フォルダが共有フォルダとして見えてしまうことです。[homes]フォルダはクライアントのホームディレクトリなのです。これはGlobalセクションに「Browseable = No」を追加すれば解決します。それにsmbpasswdファイルが自動的にシャドーパスワードに変換してくれなかったことです。これはマニュアルでユーザーネームとパスワードを smbpasswd コマンドを使って入力すれば解決しますがこれに関してはマニュアルには何の記載もありませんでした。でも私が気づかなかっただけかもしれません。


Linux Threads プログラミング(By Matteo Dell'Omodarme)

Linux スレッドとはマルチスレッドプラグラミング用のライブラリだ。カーネルレベルのスレッドを提供し clone() システムコールで生成される。Linux 2.0.0かそれ以上で動作する。スレッドとは連続的なプログラムコントロールでありマルチスレッドとは複数のスレッドが同時に動作しているかのごとく振舞う並行プログラミングであるが、Linuxのマルチプロセスとは若干異なっている。

スレッドから共有メモリにアクセスするには若干の注意が必要だ。オブジェクトに対するオペレーションは単一で割り込み不可でなければならないが共有メモリ上のデータに対するオペレーションやGCCコンパイラの最適化などによりそうでない場合がある。GCCコンパイラが共有メモリ上の値をレジスタバッファに置く問題は volatile 宣言することにより解決する。さらにひとつのプロセスが変更した値を他のプロセスが変更しないようにすることも重要だ。そのためには lock が必要となる。

という手順になる。

Linuxでのスレッドの実装は /usr/include/pthread.h による。最初に pthread_mutex_t 型の変数としてロックを宣言する方法は



int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);


pthread_mutex_init は mutexattr の属性により mutex オブジェクトを生成する。mutexattr が NULLならばデフォルトの値が使用される。POSIXではスレッドの型はpthread_tになる。スレッドは
int pthread_create(pthread_t *thread, pthread_attr_t *attr,


                        void *(*start_routine)


により生成される。成功すれば生成されたスレッドの識別子が保存され、0を返す。

生成されたスレッドは終了しなければならない。



int pthread_join(pthread_t th, void **thread_return);


はスレッドが終了するまでスレッドコールを中断する。スレッドの戻り値が NULL でなければ th の値が thread_return が参照する変数に保存される。

呼び出しルーチンからスレッドへ情報を渡す方法は グローバル変数と構造体とがある。コードのモジュール化には構造体が便利だ。構造体は共有変数とロックの情報、ルーチンが必要とするすべてのデータ、スレッドを識別するインデックス情報などを保持している。


lsコマンドの歴史的考察(By Eric Fischer)

ファイル名をリストする ls コマンドは Unix/Linux の基本的なコマンドであり、当然もっとも古いコマンドのひとつだ。最初は listf の形式で引数により多少のバリエーションがあった。1965年に「*」に対応。CTSS が Multics に移行したときに listf も list に変わり短縮形 ls が使われるようになった。初期の ls のオプションは 最後の listf のオプションよりも少なかったが、”-a、-dtm、-rv”などが含まれていた。

1969年にベル研究所の研究対象が Multics から Unix に変わったときには ls だけが残った。その当時のオプションは”-l、-t、-a、-s、-d”などがあり現在でも使われている。1974年版ではさらに”-r、-u、-i、-f”などが追加された。1975年には”-g”が加わった。1977年に Bill Joy がこの ls コマンドを修正したときには”-l、-c、-x、-q、-m”などが追加され複数のコラムで表示されるようになった。1979年のベル研究所の第7版ではほとんと変更はなく”-c”が inode の変更時刻を表示することとなった。この違いも1980年の4.0BSDでは統一され、”-c”が追加された。その他にも”-F、-R、-b”などが追加されている。


Expectのプログラミング(By David Fisher)

この記事は Expect に関して一通りの知識のある読者向けです。Expect に関しては http://www.cotse.com/dlf/man/expect/index.html を参照してください。Expect を使用して自動スクリプトを作成する場合の問題は不安定な通信とリモートターミナルです。send expectプロシージャはリモートシステムとの通信とコマンドラインの編集、ブロードキャストを示している。ローカルで動作しているプロセスは何ら問題はなく今回の対象外である。外部のプロセスは通信に影響する問題が派生することがある。例えばエラーが発生した場合エラーメッセージを発生させる可能性があるがデータは生存し続けるかもしれない。だから文字列すべてが適正に受信されていることが重要なのだ。

インタフェースの基本的な部分はターミネーティング文字を含まないコマンド文字列を送信しリモートシステムからのエコーを確認することだ。二つが一致すれば送信成功とみなしてターミネーティング文字を送信する。この記事で使用するプロシージャは次の通り。

インタフェースは send_expect_init で生成される。send_only プロシージャは exp_send() のラッパーだ。send_expect はリモートシステムと自動スクリプトのインタフェースだ。send_expect_report はスクリプトの最後にデバッグ関連の情報を表示する。

インタフェースには4つのモードがある。モードがエラーになるとコントロール+Uでコマンドラインをクリヤでき、expectバッファもクリヤされ次のモードが実行される。さらに自己診断の結果を表示することもできる。

詳細なファンクションの説明は直接 Linux Gazetteのホームページを御覧下さい。


Linux, Java, XML(By Eoin Lane)

この記事は XML、XSL を紹介するものです。JServ を使った Apache のウェブサーバーに関しても説明します。最新の記事は http://www.inconn.ie/article/cocoon.htm を御覧下さい。

XMLは強力なウェブマークアップ言語だ。今回の目的はXMLに関する説明よりもそのテクノロジを理解することだ。XMLに関する情報は World Wide Web Consortium(W3C) サイトと XML FAQ サイトで手に入れることができる。 IBM のサイト もお薦めだ。

マークアップ言語は SGML から派生している。SGML は優れた言語で航空機のデザインなどを文書化することができるがウェブアプリケーションとしてはちょっと複雑すぎる。そこで生まれたのが HTML だ。元は科学技術の出版を念頭に置いていたが構造が簡単でありウェブの拡大に伴って広く利用されるようになった。

最近のウェブページはダイナミック、インタラクティブ、データベースのアクセス、セキュリティなどの新機能が必要とされるようになり、XMLの出番となる。XMLはSGMLに比べると単純だがSGMLの80%の機能を利用できる。ここではHTMLとXMLとを実際に使用して比較してみたい。

簡単なHTMLの文書を例にとろう。

    <html>
      <head>
       <title>This is my article</title>
         </head>
         <body>
          <h1 align="center">This is my article</h1>
          <h3 align="center">by <a href="mailto:eoinlane@esatclear.ie">EoinLane</a></h3>
          ...
         </body>
        </html>
  このHTMLファイルで特徴的なことは


XMLはこの点を改善している。同様の内容をXMLで表現すると次のようになる。

        <?xml version="1.0"?>
        <page>
         <title>This is my article</title>
         <author>
          <name>Eoin Lane</name>
          <mail>eoinlane@esatclear.ie</mail>
         </author>
         ...
        </page>

まず留意することはXML文書がウェルフォームドであること。ウェルフォームドであることとは文書内の開始タグと終了タグが対応していることである。検索プログラムは開始タグと終了タグとに挟まれた mail という文字列を検索すれば良い。次に重要なことはこのXML文書はデータのみを保持していること。表現の方法などは含まれていない。中規模クラス以上のサイトではページの表現は統一されておりデータのみが変化する。

XML文書の表現には二通りある。CSS(Cascading Sytly Sheet)とXML文書をHTML、XML、pdf、ps、Latexなどに変換する言語だ。原則は「CSSが使えればCSSを使う。XSLを使わなければならないときはXSLを使う」だ。理由はCSSの方が容易でコストも低い。しかしその単純さ故の限界がある。その場合にはXSLが必要となる。

XSL(eXtensible Stylesheet Language) は文書の変換、表示などの言語で、文書の変換(XSLT)とフォーマットに分類される。1999年11月16日に W3C は XSLT を W3C 勧告として公表した。これで XSLT は確定され XML 文書は HTML 文書に変換されて次の XSLT ファイルを使用すれば通常のブラウザで閲覧することができる。

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">

  <xsl:template match="page">
   <html>
    <head>
     <title>
      <xsl:value-of select="title"/>
     </title>
    </head>
    <body bgcolor="#ffffff">
     <xsl:apply-templates/>
    </body>
   </html>
  </xsl:template>

  <xsl:template match="title">
   <h1 align="center">
    <xsl:apply-templates/>
   </h1>
  </xsl:template>

  <xsl:template match="author">
   <h3 align="center">
    by <xsl:apply-templates/>
   </h3>
  </xsl:template>

  <xsl:template match="mail">
   <h2 align="left">
    <xsl:apply-templates/>
   </h2>
  </xsl:template>

</xsl:stylesheet>

XSLT を学ぶには XSLINFO サイトにアクセスすれば良いだろう。XML ファイルが必要な場合には XSL ファイルも同時に送信され変換はブラウザサイドで行われるようになる(例えば次の Netscape 5 ではそれが可能になるだろう)。現在のブラウザはHTMLの表示を行うものなので変換はサーバーサイドで Java servlets を使用して行われる。

Cocoon servletは Apache の開発グループが開発したサーブレットだ。もしサーバーがサーブレットと cocoon に対応していればXMLを使用したサイトを構築できる。そのためにはまず Apache ウェブサーバーをインストールしなければならない。テスト環境は Red Hat 6.0だ。プレインストールされた Apache サーバーはアンインストールして最新の Apache をゲットして解凍し、コンパイル、インストールしよう。インストールするディレクトリは /usr/local/src だ。

./configure --prefix=/usr/local/apache --mandir=/usr/local/man --enable-shared=max

make

make install

インストールが済んだらシステムを再起動して Apache を起動しよう。

/usr/local/apache/bin/apachectl start

テストをするにはウェブブラウザを開いて http://localhost/ にアクセスすればよい。10月に IBM がLinux 用の JDK 1.1.8 をリリースした。JDK にはこれを利用する。 IBM JDK をダウンロードして /usr/local/src/jdk118 に解凍する。次いで JavaSoft の JSDK2.0 solaris バージョンをゲットして /usr/local/src/JSDK2.0 に解凍しよう。システム起動時用に /etc/profile に

JAVA_HOME="/usr/local/src/jdk118"
JSDK_HOME="/usr/local/src/JSDK2.0"
CLASSPATH="$JAVA_HOME/lib/classes.zip:$JSDK_HOME/lib/jsdk.jar"
PATH="$JAVA_HOME/bin:$JSDK_HOME/bin:$PATH"
export PATH CLASSPATH JAVA_HOME JSDK_HOME

を追加し、コマンドプロンプトで

java -version とタイプして

java version "1.1.8"

と表示されれたら次に

servletrunner とタイプし

servletrunner starting with settings:
port = 8080
backlog = 50
max handlers = 100
timeout = 5000
servlet dir = ./examples
document dir = ./examples
servlet propfile = ./examples/servlet.properties

と表示されたら Apache のサーブレットエンジン、ApacheJServ をインストールする準備ができた。

最新の ApacheJServ を Apache の Java サイト からダウンロードして /usr/local/src/ApacheJServ-1.0/ に解凍してコンパイル、インストールする。

./configure --with-apache-install=/usr/local/apache --with-jsdk=/usr/local/src/JSDK2.0

make

make install

インストールが終了したら http.conf ファイルに次の文字列を追加し、

Include /usr/local/src/ApacheJServ-1.0/example/jserv.conf

ウェブサーバーを再起動する。

/usr/local/apache/bin/apachectl restart

ウェブブラウザで http://localhost/example/Hello にアクセスして

Example Apache JServ Servlet
Congratulations, Apache JServ is working!

と表示されればOKだ。

最後に最新の Cocoon を Apache の Java サイト からダウンロードして /usr/local/src/cocoon のディレクトリを作成し解凍する。

mkdir /usr/local/src/cocoon

jar -xvf Cocoon_1.5.jar

/usr/local/src/ApacheJServ-1.0/examples/ にある jserv.properties ファイルの

# CLASSPATH environment value passed to the JVM

で始まるセクションの最後に

wrapper.classpath=/usr/local/src/cocoon/bin/xxx.jar を

Cocoon 1.5の場合には

wrapper.classpath=/usr/local/src/cocoon/bin/fop.0110.jar
wrapper.classpath=/usr/local/src/cocoon/bin/openxml.106-fix.jar
wrapper.classpath=/usr/local/src/cocoon/bin/xslp.19991017-fix.jar

を追加する。次に /usr/local/src/ApacheJServ-1.0/example/ ディレクトリの example.properties ファイルの最後に

repositories=/usr/local/src/cocoon/bin/Cocoon.jar

を追加する。今回の例では

repositories=/usr/local/src/ApacheJServ-1.0/example

repositories=/usr/local/src/ApacheJServ-1.0/example,/usr/local/src/cocoon/bin/Cocoon.jar

に変更し、最後に

servlet.org.apache.cocoon.Cocoon.initArgs=properties=/usr/local/src/cocoon/bin/cocoon.properties

を追加した。これでJServ エンジンの設定は終了したので Apache の XMLファイル コールを Cocoon サーブレットに任せる。それには jserv.conf ファイルに

ApJServAction .xml/example/org.apache.cocoon.Cocoon

を追加し、更に http.conf ファイルの alias セクションに

Alias /xml/ "/usr/local/src/cocoon/"

<Directory "/usr/local/src/cocoon/">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

Alias /xml/ example/"/usr/local/src/cocoon/example/"

<Directory "/usr/local/src/cocoon/example/">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory> を追加したら Apache を再起動しよう。

現在は 更に改善を目指した Cocoon 2 が開発中です。いずれはXMLの効用が認識され Cocoon 2 が広く使われるようになるでしょう。


ホームネットワークでのDHCP(By JC Pollman and Bill Mote)

家庭と会社でそれぞれ自分のコンピュータを使用している場合にはそれぞれの環境でマシンを接続するたびに環境設定を変更して再起動を繰り返すことになります。そういう場合には DHCP を使うのがベストです。何故って? それは便利だからです。

筆者の環境の IP アドレスは次のようになっています。

* Important machines and network equipment*

    .001             Your router (if present)
    .002 - .009      Network equipment (switches and hubs)
    .010 - .075      Servers
    .076 - .099      Network Printers

* User workstations *

    .100 - .254      DHCP range
 
こういう風に管理しているとログの整理などのときには便利です。

whereis dhcpd[Enter]
とコマンドラインでタイプして
dhcpd: /usr/sbin/dhcpd /etc/dhcpd.conf  /etc/dhcpd.leases /etc/dhcpd.leases~
と応答がなければ DHCP がインストールされていませんのでまずインストールしましょう。

最初は /etc/dhcpd.conf の設定から始めます。筆者の環境では次のようになっています。
 

/etc/dhcpd.conf

September 18, 1999
Author: Bill Mote
default-lease-time 36000;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.10;
option domain-name-servers 192.168.1.10;
option domain-name "mynetwork.cxm";

subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.100 192.168.1.254;


/etc/dhcpd.leasesも作成します。まず
touch /etc/dhcpd.leases[Enter]
で空のファイルを作成します。筆者の例では次のようになります。
 
 

/etc/dhcpd.leases

September 18, 1999
Author: {auto generated by dhcpd}
lease 192.168.1.100 {
        starts 6 1999/09/18 17:27:36;
        ends 6 1999/09/18 17:37:36;
        hardware ethernet 00:60:08:e3:60:03;
        uid 01:00:60:08:e3:60:03;
        client-hostname "NoFear";
}

次は dhcp サーバーを起動しクライアントを動作させます。コマンドラインで
/usr/sbin/dhcpd[Enter]
とタイプして下さい。これでサーバーサイドは完了です。

クライアントはWindowsを使用します。コントロールパネルのネットワークから TCP/IP プロトコルのプロパティを表示します。文章よりも目で見た方が分かりやすいでしょうから画像で示します。
 
 









Windows 98でもインターネット接続共有などを使って同様なことができますが独特の仕様なのでトラブルが発生すると面倒です。それよりも Linux のDHCPを使用した方が張るかに便利でしょう。来月は Linux のクライアント側の説明をしましょう。