祝、Linux Kernel 2.4 リリース
Linux Journal 12月号発売中。今月の特集はマルチメディアです。
▼▼▼ディストリビューション関連ニュース▼▼▼●Caldera
Caldera Systems, Inc., が Samba チームの Richard Sharpe 氏と契約。目的は Linux と Microsoft との統合を容易にするクライアントライブラリの作成。その他 Samba コードの再構築、再利用とライブラリ API のドキュメンテーションも含まれている。ライブラリと API は GPL で公開される予定。より詳細な情報は Samba Web page. で得られる。
●Mandrake
OSF/Motif のサプライヤ Integrated Computer Solutions, Inc. (ICS) と Mandrake は Linux-Mandrake に最適化された Open Motif が間もなくリリースされると発表した。詳細は プレスリリース を参照。Linux-Mandrake 7.2 用の Open Motif は ICS のポータルサイト www.motifzone.net からダウンロードできる。
●Red Hat
Cradle Technologies, Inc. は Red Hat の組み込み技術の開発に取り組む。目的はストリームアプリケーション用のシリコンプラットフォームの提供だ。今回の契約にはコンサルトサービス、GNUPro 組み込み開発ツール、eCos、組み込み Linux の Cradle Universal Microsystem (UMS) プラットフォームへの移植も含まれる。
Red Hat, Inc. は Rymic Systems と提携。目的は 陸軍の車両、戦闘車両の支援だ。次世代の Rymic アプリケーションは 車両の障害の可能性を検知する。軍関係車両の配備、引き上げ、保守のための情報を提供する。
Red Hat 組み込み Linux に関する情報は www.redhat.com/embedded で得られる。
●SuSE
SuSE Linux は SGI との戦略的提携を発表。SGI は SuSE に資本参加し Linux OS やコードの開発、展開、サポートなどの支援をする。両社は今年始めに SGI IRIX の IRIS FailSafe に基づいたスケーラブルで高可用性の Linux FailSafe ソリューションを発表している。Linux Failsafe は Linux に高性能のクラスタリング機能を提供するものだ。
SuSE Linux 7.0 の カーネル 2.2.16 には Pentium 4 を認識する機能が統合されている。
▼▼▼その他のニュース▼▼▼
●SSH/SSL のセキュリティリスク
SSH/SSL のセキュリティリスクに関する記事がいくつかリリースされている。 1999年9月 に記事を書いた Kurt Seifried 氏は最近でも www.SecurityPortal.com で 記事 を いくつか リリースしている。この記事は波紋を広げ Slashdot の投稿記事でも議論されている。最近の問題は鍵の交換と信頼性に集約されているようだ。SSH の唯一の危険性は最初にアクセスするホストの信頼性だ。これは SSH 特有の問題ではなく公開鍵暗号化システムに共通の問題であり、ユーザを煩わせることなく公開鍵を安全に公開する方法が求められている。最大の危険はソフトウェアではなく不正に対する警告に気づかないユーザにある。
最近注目されているのは新たにリリースされた dsniff というソフトウェアだ。これは SSH での通信プロセスの傍受を自動化する手軽なツールでありシステムへの攻撃の可能性を増加させる。最良の方法はユーザ自身がセキュリティに関する理解を深めシステムをより安全に保つことだ。
●ゲノム解析に Linux クラスタを利用
Lawrence Berkeley 国立研究所ははえのゲノム解析に Linux NetworX, Inc. の Linux NetworX クラスタコンピュータシステムを使用する。このシステムでは40個のプロセッサが使われている。Linux NetwoX クラスタはコスト効率がよく、スーパーコンピュータと違い後にコンピュータモジュールを追加することができる。>
●ShowMeLinux が公開
Linux デベロッパーの LuteLinux.com は ShowMeLinux を公開した。作成者は ShowMeLinux/LuteLinux のグラフィック/ウェブデザイナ、Adam Puchalski 氏だ。ShowMeLinux は 読者の最新の Linux テクノロジの変更、配備、保守などのを理解を支援するのが目的だ。
●HP と Sprint PCS が無線メールで提携
Hewlett-Packard と Sprint PCS が提携。Sprint PCS Wireless Web for Business で HP の Openmail Anywhere が利用できるようになり、インターネット電話を通してビジネスユーザは自社のメールに無線でアクセスできる。Openmail は HP のビジネスメッセージング、コラボレーションソリューションだ。Openmail の詳細は http://www.hp.com/go/openmail で得られる。
●フリーのワイヤレスメールを発表
BizRelations Inc. (WEB、WAP) はフリーの無線メールシステムを発表した。無線でインターネットデータサービスにアクセスできるモバイルフォンを持つユーザはメールの送受信、アドレスブックへのアクセス、メールのチェックのほか Quick Reply メッセージング機能も利用できる。BizRelations は オープンソースの Linux 上で ほとんどのIT インフラを構築しており、Linux Virtual Server (LVS)、RedHat's Piranha クラスタリングツール、SQL サーバとしてSybase ASE 11.0.3.3 for Linux などが利用されている。メールソリューションは qmail だ。さらに NetSaint がシステム、ネットワークを常にモニターしている。
▼▼▼ソフトウェア関連ニュース▼▼▼
●KDE 2.0.1KDE は KDE 2.0.1 を発表した。
ニュースリリース
ここからダウンロードできる。
XFree86 が XFree86 4.0.2 をリリースした。Duke of URL が レビュー を掲載している。
news section
Release Notes
●Smart Batteries
SoftTools Technology, Inc. は Linux Smart Battery System Software Suite (Linux SBS3) を発表した。Linux SBS3 は Linux で Smart Battery System コンポーネントを組み込んだシステムにサポートを提供するソフトウェアソリューションだ。ユーザフレンドリな GUI で正確なバッテリ情報を提供することができる。
●SCM (System Configuration Management)、Elego ComPact
ベルリンで elego Software Solutions GmbH が設立された。この会社は SCM (System Configuration management) ソフトウェアに注力し、コンフィグレーションマネージメントのサポート、サービス、コンサルティングなどを提供する。Elego ComPact は良く知られているバージョン管理システム (CVS) に基づいたフル機能のコンフィグレーションマネージメントシステムで、 CVS に新機能やコンセプトを追加している。Elego ComPact は非商用の場合にはフリーで使用できる。商用の場合にはライセンスが必要。現在開発のスナップショットか非商用のフリーバージョンが ここ からダウンロードできる。詳細な情報は www.elego-software-solutions.com で得られる。
●VMware がサーバ製品を発表
VMware, Inc. は同社のサーバ向け新製品を発表した。プレスリリースは www.vmware.com/news/ で見ることができる。また VMware の news も参照してください。
●WARP がウェブパフォーマンスを改善
WARP Solutions, Inc. は WARP Performance Suite を発表した。含まれるものは WARP Intelligent Content Distributor、WARP Global Load Balancer、WARP Load Balancer だ。将来は WARP Dynamic Content Director、WARP Cache Master、WARP Secure などが追加される予定。この製品はパフォーマンス、信頼性、スケーラビリティ、セキュリティ、速度、相互運用性などの点でウェブパフォーマンスを改善する。最初の製品には Solaris、Compaq Tru64、Linux などが対応している。
●ACCESS、Linux ベースのブラウザ開発キットをリリース
ACCESS Co., Ltd. は NetFront 2.6 Linux Software Development Kit (SDK) を発表した。これは ACCESS の NetFront ブラウザ の Linux ベースインターネットアプライアンスや非 PC アプリケーションへの統合を容易にする。1995年に発表されて以来、NetFront ブラウザは40のベンダから1,800万以上の組み込み製品が出荷されている。NetFront はインターネット TV、PDA、セットトップボックス、カーナビ、スマートホン、ウェブホン、ビデオゲームコンソール、インターネット kiosk などには最適のブラウザだ。ブラウザのカーネルは270 KB で1.3メガの ROM と2メガの RAM で動作する。NetFront は HTML 3.2 と HTML 4.0 の一部をサポート、さらにフレーム、JavaScript、クッキー、ウェブプリンティング、多国語化にも対応している。この SDK を使えば外見の変更とプラグインの追加ができる。SDK には 2.6 ブラウザカーネル、サンプルユーザインタフェース、PIM スイート、インターネットメールモジュール、ピアインタフェースレイヤー/グラフィックレイヤー用のサンプルライブラリ、ドキュメントなどが付属している。
●Linux ベースのブロードキャストソリューション
ストリーミングソリューションプロバイダの 2netFX と MPEG-2 製品大手の Zapex Technologies, Inc. は ハードウェア/ソフトウェアブロードキャストソリューションの開発で提携した。最初のシステムは実用的なブロードキャストクオリティのストリームを提供する Linux ベースのサーバソリューションだ。これには 2netFX の StreamRider クライアント、ThunderCast/IP サーバ、Zapex の ZL-330 Dolby デジタルオーディオ/MPEG-2エンコーダなどが使用されている。Linux OS 初のドルビークオリティエンコーダだ。
●Linux2order.com
Eric Vogel 氏は Linux2Order.com を立ち上げた。このサイトは Linux アプリケーションを提供する。フリーのダウンロード、CD-R での提供、優先的なダウンロード予約などアプリケーションの取得にはいくつか方法がある。
●Fox
Fox on Linux は商用の会計用途を扱うためのグラフィカルソフトウェアパッケージで Linux で動作する。その他企業のフロントエンドアプリケーションを組み込むこともできる。マルチユーザで12KBSの帯域しか使用しないのでインターネットでも利用できる。インストールも簡単で短時間で使用可能になる。興味のある方は www.foxonlinux.com を参照。
皆さん明けましておめでとう。まだ Linux を使ったことのない人は Linux でよりいい年にしよう。
Linux はデスクトップで使えるのか? サーバ用の OS ではないのか? などの疑問があるが Linux はネットワーク環境を標準で装備したマルチユーザの OS だ。それがデスクトップで使えないわけはない。
Linux は安定しているが、コマンド入力が難しいので MS Windows のほうが使いやすいという人もいる。果たしてそうだろうか。不正な処理、エクスプローラの応答なし、シェアウェアのポップアップなど煩わしいことも多い。一度 Linux を試してみよう。
Red Hat 7.0 や Debian 2.2 などの最新のディストリビューションを手に入れてインストールしてみよう。インストールに際しては同梱のマニュアルを参照して欲しい。まだ Windows を削除する必要はないが、1GB 以上のパーティションが別途必要だ。
Linux のインストールが完了し、ログインするユーザの登録と GNOME デスクトップ環境がインストールされているものとする。これは筆者の好みの環境で最良ものではないかもしれない。
グラフィカルログインでスタートしよう。使用言語はログイン時に選択できる。ログインするとパネルやデフォルトのランチャが表示されるはずだ。
パネルにはメインメニュー、アプレットランチャが格納されている。複数のパネルを作ることもできるがとりあえずは一つで十分だ。アプレットとはタスクリストや時計のようなパネルに組み込まれた小さなアプリケーションだ。アプレットの追加、削除はアプレットかパネルをマウスの右ボタンでクリックして Add to panel か Remove from panel を選べば簡単にできる。サウンドカードのボリュームを設定する Mixer などを Multimedia から追加しておくと便利だ。
デスクトップをリストする Desk Guide アプレットもある。MS Windows と違って複数のデスクトップを切り替えて使うと多数のアプリケーションを開いたときには非常に便利だ。筆者はターミナル、エディタ、インターネットブラウザを別々のデスクトップで使用している。デスクトップ間の移動はデスクトップガイドをクリックするか ALT+F1、ALT+F2 (これは sawfish のデフォルト設定) などで可能だ。
もう少しパネルについて説明しよう。筆者はシンプルなものが好みなのでアフターステップの時計を単純な時計に変えた。サイズも小さくしている。方法はパネル上でマウスの右ボタンをクリックしてメニューを表示しパネル→プロパティ→すべてのプロパティを選択してサイズを変更すればいい。ランチャををパネルに追加することもできる。
ウィンドウはウィンドウマネージャが管理している。Sawfish は優れたウィンドウマネージャだ。コントロールセンターでいろいろ設定を変えて試して欲しい。Netscape はメニューかパネルのランチャから起動できるが筆者は Ctrl+Meta+N で起動するように設定している。方法は Sawfish ウィンドウマネージャのショートカットで挿入を選びシェルコマンドで (netscape) と入力してショートカットキーを押す。その他にも Ctrl+Meta+M でウィンドウの最大化、Ctrl+Meta+D でウィンドウの終了などを設定している。ウィンドウには重力があり新しいウインドウはスペースの開いているところへ開かれる。
その他の便利なキー操作は次の通りだ。
筆者のデスクトップは次のようになっている。
外観が気に入らなければテーマを使って変更しよう。 themes.org には多数のテーマがある。ではこれはどうだろう。
次にシステム管理ついて若干説明しよう。MS Windows ならシェアウェアのウィルスソフト、デフラッグユティリティ、Norton ユティリティ、シェアウェアへのリンク、インストール法、レジストリのバックアップなどの話をしなければならないだろうが、Linux ではアプリケーションのインストール、アンインストールについて説明すれば十分だろう。アプリケーションは rpm や deb などのパッケージで提供される。ここでは rpm パッケージについて説明する。
GnoRPM (メインメニュー→プログラム→システム) を立ち上げてインストールされているパッケージを見てみよう。必要なソフトウェアは freshmeat で検索してインストールしよう。例えば HTML エディタの Bluefish が必要ならダウンロードし GnoRPM を使ってインストールしよう。この原稿も Bluefish を使って書いている。
CD-ROM にアクセスするには CD を挿入してからファイルマネージャのウィンドウを開こう。多分自動でマウントされているはずだ。CD-ROM や フロッピ、ハードディスクのような記憶機器にアクセスするにはディレクトリへ必要なデバイスをマウントしなければならない。通常 CD-ROM は /mnt/cdrom にマウントされる。Window 形式でフォーマットされたフロッピにアクセスするときは次のようなコマンドを使用する。
mdir a:,
mcopy file.txt a:, mformat a:
今月の解説は以上だ。Getting Started と GNOME のマニュアルにも目を通して欲しい。最初はざっと目を通し、必要なときにじっくりと読めばいいだろう。自分で操作し習熟すれば Linux が気に入るはずだ。くれぐれも通常の操作では root 権限を使用しないように。知らずに使うのは非常に危険だ。
自分のファイルはきちんと整理しよう。筆者の場合はルートに /opt と /my の二つのディレクトリを作っている。標準では /opt はアドオンのアプリケーションのインストールに使用されるが筆者は mp3 や ドキュメンテーションなどの CD のファイルも保存している。/my は標準のディレクトリではないが、自分のファイルのバックアップ用に使っている。/home は /my/home へのシンボリックリンクだ。ウェブサイトや MySQL を使っているなら /var/www や /var/lib/mysql を /my へリンクするのもいいだろう。/etc や /boot のバックアップも必要だろう。
次回は mp3 や動画について説明しよう。Linux Weekly News、Linux Today, Slashdot、Freshmeat. は面白いサイトだ。時々訪れて欲しい。
今月の HelpDex は ここ をクリックしてください。
リモートマシンに telnet でアクセスするとデータがネットワークを流れるのでクラッキングの可能性が高くなる。強力な符号化ソフトを使えばネットワークのセキュリティが大幅に改善される。
Ssh (Secure Shell) のマニュアルには ssh はリモートマシンにログインしコマンドを実行するものだと説明されている。rlogin や rsh に代わるもので、ネットワーク上でセキュアな通信を提供する。パスワードのような重要なデータを符号化して安全性を高めるほかにも X11 コネクションや TCP/IP ポートも安全に伝送される。
現在 ssh には ssh1 とssh2 の二つのプロトコルが存在する。ssh2 は ssh1 を改良したものだ。現在は Diffle-Hellman、DSA、公開鍵方式、RSA などに対応している。ssh2 はデフォルトでは ssh1 互換ではない。ssh2 で ssh1 も併用するには ssh2 サーバと ssh1 サーバが両方必要になる。
ssh2、ssh1 は master FTP server かそのミラーサイトから入手することができる。ssh1 の最新のバージョンは ssh-1.2.30.tar.gz、ssh2 の最新のバージョンは ssh-2.3.0.tar.gz だ。インストールは簡単だ。まず ssh1 のソースを展開してコンフィグレーションを実行しよう。
tar -zxf ssh-1.2.30.tar.gz cd ssh-1.2.30 ./configure
configure スクリプトはシステムを走査してコンパイルに必要なライブラリやプログラムをチェックする。スクリプトが終了したらコンパイルし root 権限でインストールしよう。
make make install通常はクライアント (scp1, ssh-add1, ssh-agent1, ssh-askpass1, ssh-keygen1, ssh1) を /usr/local/bin に、サーバ (sshd1) を /usr/local/sbin/ にインストールする。続いて ssh2 をインストールしよう。方法は ssh1 と同じだ。
tar -zxf ssh-2.3.0.tar.gz cd ssh-2.3.0 ./configure make make install
ここからは ssh1 と ssh2 の両方をインストールしたとして話を進めよう。ssh2 サーバで ssh1 接続もサポートするには /etc/ssh2/sshd2_config ファイルを修正する必要がある。ファイルを開いて次の行を追加しよう。
Ssh1Compatibility yes Sshd1Path /usr/local/sbin/sshd1さらに ssh1 に関する情報も ssh2_config ファイルに追加しなければならない。
Ssh1Compatibility yes Ssh1Path /usr/local/bin/ssh1これで ssh2 クライアントは必要に応じて ssh1 クライアントを起動するようになる。
マシン起動時に sshd をスタートするには二つの方法がある。
echo "Starting sshd ...." /usr/local/sbin/sshd再起動すると sshd が起動され Starting sshd .... と表示される。手動で起動するには次のように入力する。
/usr/local/sbin/sshd
ln -s ../init.d/sshd2 S90sshd2なお、$number は読者の標準のランレベルだ。次に /etc/rc.d/rc0.d ディレクトリで次のように入力して欲しい。
ln -s ../init.d/sshd2 K90sshd2/etc/rc.d/rc6.d ディレクトリでも同じように入力しよう。再起動すれば sshd2 がスタートするが手動で起動するなら次のようにする。
/etc/rc.d/init.d/sshd2 start
sshd が起動したら ssh クライアントからログインをしてテストしてみよう。リモートマシンが host1、ログイン名が myname とすればコマンドは次のようになる。
ssh -l myname host1ssh2 クライアントは host1 のポート22にアクセスし、sshd2 デーモンはリクエストを補足しパスワードを要求する。パスワードが正確ならログインに成功しシェルが起動する。
ssh は authentication Key に基づいた認証システムも提供している。これは公開鍵方式によるものだ。公開鍵方式でアクセスするにはまず ssh-keygen コマンドで鍵を作成しなければならない。公開鍵とプライベート鍵が作成されパスフレーズが要求される。終了すると $HOME/.ssh2/ ディレクトリに id_dsa_1024_a と id_dsa_1024_a.pub のファイルが作成される。
host1 の ID を myname1、host2 の ID を nyname2 と仮定し host1 から host2 にアクセスする場合の手順は次のようになる。
# identification IdKey id_dsa_1024_aこれで sshd はアクセスに鍵ペアを使用するようになる。
ftp host1 [...] cd .ssh2 get id_dsa_1024_a.pub host1.pub
# authorization Key host1.pubこれは信頼できる公開鍵のファイルだ。autorization ファイルに含まれる公開鍵のユーザがアクセスすると認証手続きが開始される。
host1 から host2 に ssh を使ってアクセスすればテストができる。間違いがなければパスフレーズを要求されるはずだ。パスワードが要求されたらもう一度手順を見直してみよう。次回は ssh-agent、ssh-add、sftp、scp などの ssh 関連のプログラムを紹介しよう。
筆者は Amiga から Slackware Linux に移行して6年、Directory Opus に代わるファイルマネージャを探してきた。いろいろと試したが一長一短だ。あるものは遅かったり、早いものは設定が十分にできなかったり。しばらくは Midnight Commander を使った。mc なら設定もできるしほとんどのことができる。でもこれはコンソールベースだ。そうしてやっと見つけたのが emelfm だ。
グラフィカルなファイルマネージャとしてはこれに匹敵するものはないだろう。想像するほとんどの操作が可能だ。さらに簡単なシェルスクリプトを作成してボタンやコンテキストメニューに関連付けることができるし、マウスのドラッグでファイルを選択することもできる。筆者は GUI にもコンソールにもあまりこだわりはない。必要に応じて使い分けている。逆にスクリプトを必要としている。が、コマンドをすべて記憶するわけにもいかないのでそれをコンテキストメニューなりボタンなりに関連付けられれば言うことはない。emelfm のパワーはこれだけではない。
通常 GUI のファイルマネージャにはダブルクリックなどのデフォルトのアクションがある。emelfm はそれ以上だ。同じファイル上でマウスの右ボタンをクリックすると複数の操作から処理を選択することができる。オプションは多く、操作はコンテキストにより変化する。具体的に説明すると筆者の場合は htm, html, shtm, shtml ファイルをダブルクリックすると kless でファイルを閲覧できる。同じファイルをマウスの右ボタンでクリックするとすべてのオプションが表示される。
emelfm はタールボールや zip ファイルを閲覧するための vfs、アーカイブ作成の pack プラグインにも対応している。その他にもファイルタイプにより色分け、gtk アプリケーション同士のドラッグアンドドロップ、プラグイン、同じディレクトリ内でファイルの別名コピー、クリック一つでのソートなど多様だ。
emelfm のインストールは簡単だ。パッケージをダウンロードし展開したら該当ディレクトリに移動し "make" を実行する。終了後 root 権限で "make install" を実行すればいい。emelfm と入力すれば起動できる。KDE を使っているなら khotkey に emelfm を割り当てれば簡単に起動できる。
上下のカーソルキーはそのままの動作をする。左の矢印は一つ上のディレクトリへ、右の矢印は一つ下のディレクトリへ移動する。Tab/スペースはぺインのアクティブを切り替える。ファイル上でリターンキーか右のカーソルキーを押すとデフォルトのコマンドを実行する。上下に移動中にシフトキーを押すとファイルをハイライト表示する。デフォルトのキーバインドは次の通りだ。
Default Key Bindings
~~~~~~~~~~~~~~~~~~~~
Open Enter, Right Open/Close Ctrl+W
Up Dir Backspace, Left output window
Home Dir HOME
Switch Panels Space, Tab Switch focus Ctrl+Z
Tag Ctrl+T, INS to command line
Find Ctrl+F
Toggle Hidden Ctrl+H
Copy Ctrl+C files
Copy As Ctrl+Shift+C
Move Ctrl+M Maximize/Minimize Ctrl+, (left)
Move As Ctrl+Shift+M Panels Ctrl+. (right)
SymLink Ctrl+S
SymLink As Ctrl+Shift+S Menu Ctrl+P
Rename Ctrl+R Plugins Menu Ctrl+[
Delete DEL User Menu Ctrl+]
Make Dir Ctrl+D
Refresh Ctrl+L
Sync Dirs Ctrl+X
Quit Ctrl+Q
Command Line Tricks
~~~~~~~~~~~~~~~~~~~
Ctrl+Enter Copies the selected filenames in the active pane
Ctrl+L Copies the selected pathnames in the inactive pane
Ctrl+D Copies the active directory name
Ctrl+O Copies the inactive directory name
Ctrl+Z Close output window and change focus to current file list
(Note: Command line shortcuts also work with Alt+)
もちろんマウスでも直感的に操作をすることが可能だ。ただマウスのドラッグアンドドロップはマウスの中ボタンを使うことに注意しよう。emelfm は "Dopus" に似ているがそれ以上に多機能だ。元 Amiga ユーザや Linux 初心者には非常に使いやすいプログラムだと思う。
[Eric は Sun Puppy も描いています。 http://www.sunpuppy.com から見ることができ ます。]
Ricochet モデムは使用可能地域が限られているがワイヤレスネットワークに対応している ISP を利用すればワイヤレスでインターネットにアクセスできる。Ricochet は技術者やプログラマが使用するような OS には対応していない。当然 Linux、FreeBSD などの優れた OS はサポート外だ。
速度はシリアル経由なら約80Kbps、USB 経由なら約128Kbpsだ。接続は通常のダイヤルアップに比べると高速で安定している。全体的には満足できる状態だ。
現在 Linux をサポートしている ISP はない。筆者は Wireless Web Connect を選んだ。モデムもプロバイダを通して約100ドルで購入した。
モデムのインストールは Metricom modems support in Linux を見れば簡単だ。ppp インタフェースを追加して電話番号、ユーザ名、パスワードを設定し PAP を選択する。ppp インタフェース追加後編集ボタンを押して "noipdefault" を追加すればいい。PPP の設定は上記のインストラクション通りに進めれば問題ない。
筆者はデスクトップとラップトップを使用している。タッチパドは好きではないのでラップトップはシリアルポートにマウスを接続している。そのため Ricochet のモデムを接続することができない。そこでデスクトップをファイアウォールとして使用することにし Ricochet モデムをデスクトップに接続することにした。デスクトップでは ssh 以外のポートは使用していない。nmap を使えばオープンなポートをチェックできるので読者も一度試してみてはどうだろうか。ファイアウォールの設定に関しては筆者は多数の記事を Linux Gazette に投稿しているので参考にして欲しい。その他 linux.org の HOWTOS も便利だ。
筆者は常にワイヤレスモデムとファイアウォールを起動している。電話を使用せず、ケーブルが這い回ることもないので快適だ。移動の多い仕事の筆者にはワイヤレスモデムは非常に便利だ。ビジネスとして使用するのでなければ DSL を選択したほうがいい場合もある。コストも安いしスピードも速いだろう。
Apache プロジェクトは最近非常に大きくなっている。Apache は非常に強力でしかも柔軟、設定も容易だ。設定や Apache に関するドキュメントは非常に多い。他のウェブサーバは比べものにならない。現在筆者は gnujobs.com で使っているコンピュータに若干問題がある。"http://www.tcu-inc.com/mark/articles" へのリクエストを "http://www.gnujobs.com/Articles" にリダイレクトしたいのだがうまく行っていない。 Redirect directive も試してみたがうかくいかなかった。そこで問題点を検証してみることにした。
問題点は "http://www.tcu-inc.com/mark/articles" から "http://www.gnujobs.com/Articles" へのリダイレクトがうまく機能しないことだ。どちらのサイトも同じウェブサーバ上にある。そこで次のような処理をすることにした。
perl は使い慣れているので最初に perl を使うことにした。理解しやすいとは言えないが慣れると非常に便利なスクリプトだ。さらに Apache サーバの再コンパイルも必要ない。設定を若干修正するだけで使えるようになる。mod_perl をインストールする必要はないがインストールするなら設定が若干複雑になる。しかしこれは perl に限ったことではない。
httpd.conf ファイルは次のように修正した。
<VirtualHost 206.21.120.103> ServerAdmin info@gnujobs.com ServerName www.tcu-inc.com DocumentRoot /www/htdocs/ ScriptAlias /mark/articles "/www2/TCU.pl" </VirtualHost>ここで重要なのは ScriptAliasだ。これは /mark/articles からのリクエストを TCU.pl へリダイレクトする。
その perl スクリプトは次のようになる。
#!/usr/bin/perl
print "Location: http://www.gnujobs.com$ENV{'REQUEST_URI'}";
ここで重要なのは $ENV{'REQUEST_URI'}で、www.tcu-inc.com ウェブサーバへファイルを要求しているのと同じだ。Perl スクリプトがファイルの要求を受け取りブラウザを別のサイトへとリダイレクトする。なお TCU.pl には実行可能属性を付けておく必要がある。
筆者の Perl ソリューションはあまりいいものではない。mod_rewrite を使用すればいいのは分かっているのだが気が進まない。もう長いこと mod_rewrite は使っていない。Apache でこのオプションを使うなら mod_rewrite を組み込まなければならない。mod_rewrite はルールに基づいて要求された URL をリライトする非常に強力なモジュールだ。ウェブマスターやウェブプログラマになるのなら必須だろう。mod_rewrite のコンパイル後 httpd.conf を次のように修正した。
<VirtualHost 206.21.120.103>
ServerAdmin info@gnujobs.com
ServerName www.tcu-inc.com
DocumentRoot /www/htdocs/
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.tcu\-inc\.com$
RewriteRule ^(/articles)(.*) http://www.gnujobs.com/Articles$2 [R]
</VirtualHost>
RewriteCond は mod_reweite の設定をし、www.tcu-inc.com が要求されているかどうかをチェックさせる。RewriteRule はルールを設定する。要求されたファイルが "/articles" で始まれば www.gnujobs.com にリダイレクトする。"$2" は "(.*)" だ。
ここまできて本来のリダイレクトでミスをしたことに気がついた。Redirect コマンドをバーチャルホストセクションに入れてなかった。Redirect コマンドを追加したらちゃんと機能した。
<VirtualHost 206.21.120.103> ServerAdmin info@gnujobs.com ServerName www.tcu-inc.com DocumentRoot /www/htdocs/ Redirect /mark/articles http://www.gnujobs.com/Articles </VirtualHost>
無駄な努力だったかもしれないが読者には今後の参考になるかもしれない。まとめると次のようになる。
Linux のユーザなら Perl のことは聞いたことがあるだろう。知らずに使っているかもしれない。"inews", "mirror", "debconf", "majordomo", "sirc" などは Perl で書かれている。Debian の382パッケージが Perl を使っている。
Perl は "Practical Extraction and Report Language" のことだ。Perl の作者 Larry Wall <larry@wall.org> は Perl は "Pathology Eclectic Rubbish Lister" だとドキュメントのなかで言っている。まあ、いいだろう。
Perl には別名が非常にたくさんあるが実際には一行のスクリプト、すぐに実行できるプログラム、大きなプロジェクトなど非常に幅広く使われている。プロジェクトで使用しているのは Amazon.com の編集、コントロール、Netscape のコンテンツ管理、デリバリシステム、人ゲノムプロジェクトなどだ。さらに Unix で使われているユティリティをエミュレートすることもできる。"awk", "sed", "grep", "tr" などを使うなら Perl を勧める。
Perl はオブジェクト志向のプログラムが可能だ。ネットワーク(ソケット)は非常にポータブルでもあり、作成/デバッグ期間が短い。コンパイルが必要ないのでスクリプトを書いたらすぐに実行できる。さらに多数のモジュールが用意されている。CPAN (Conprehensive Perl Archive Network) は優れたリソースのアーカイブだ。
「Perl とは何か?」に答えるのは難しい。答えがあるのかどうかも疑問だ。
「Perl が不得手なことは」何か。Perl はインタフェースを利用すれば多数の言語のフロントエンドとすることも可能だが、すべてができる必要はないだろう。「餅は餅屋」。Perl は Perl 自身で書かれているわけではないし Linux のカーネルでもない。最善のツールを使って書かれている。つまり C/C++ と アセンブラだ。説明の仕方はいろいろあるが最善の方法を使うというのは Perl の基本理念の一つだ。
筆者の以前のシェルスクリプトに関する記事を読んだ方はスクリプトが決まり文句で始まると説明したことを覚えているだろうか。
#! /bin/bash
シェルはこれを見つけるとサブシェルを起動してスクリプトを実行する。Perl も同様の手続きを取る。Perl スクリプトは次の文字列で始まる。#!/usr/bin/perl
これは "perl" のパスだ。次のことに注意しよう。1) 必ずスクリプトの最初の行に置くこと
2) 最初の文字はハッシュ (#) でスペースを開けずに ! を打つ
3) 必ず絶対パスを使用する
それでは最初の Perl スクリプトを書いてみよう。
#!/usr/bin/perl
# "goodbye" - a modern, high-angst replacement for "Hello World"
print "Goodbye, cruel world!\n";
unlink $0;
これは単に "goodbye" と表示するだけだ。やっていることは最初におまじないを書き、シェルスクリプトでも説明したがコメントを入れてからメッセージを表示する。文字列の後には "\n" を入れよう。perl は改行を黙って入れてくれたりはしない。それにステートメントの最後にコロンを ";" をつけることを忘れないようにしよう。最後のステートメントは使用したファイルを削除している。$0 は使用したファイル名を返している。
perl では タブやスペースは無視される。だからそれを利用してわかりやすいコードを書くこともできる。次の例ではそれがよく分かるだろう。
@boats = ("Aloa", "Cheoy Lee", "Pearson", "Mason", "Swan", "Westsail", "S2", "Petersen", "Hereshoff"); # List of sailboats
同じものを次のように書くと非常に読みやすくなる。
@array = ("Aloa", # French OSTAR/IOR
boat
"Cheoy Lee",
# Comfortable but expensive
"Pearson",
# Strong but rather heavy
"Mason",
# Well designed, but a bit of a pig
"Swan",
# Classy boat - if you've got the money
"Westsail",
# Wetsnails are OK, for double-enders
"S2",
# Nice bay boats - not for offshore use
"Petersen",
# Steel world cruiser, roomy but slow
"Hereshoff");
# Fast and gorgeous; cramped and expensive
perl の基本は使いやすいことだ。型にはまらないのもそのためだ。つまり変数の宣言をする必要がない。perl で使われる変数は scalars と arrays と hashes だ。
scalars は数字、文字列、参照などで最初に $ が付く。
"0.0421", "Joe's glove", memory location "0xA000"などがその例だ。
arrays は scalars の連続したリストだ。アレイの最初には @ が付く。
0 - "Sunday"
1 - "Monday"
2 - "Tuesday"
3 - "Wednesday"
...
hashes はスカラのキーに関連するリストだ。ハッシュの最初には % が付く。
resident - "Sherlock Holmes"
addr - "221B Baker Street"
code - "NW1"
city - "London"
country - "GB"
job - "sleuth"
...
アレイは順番に保存されるがハッシュはそうではない。ハッシュの要素はキーで参照される。保存されている場所は関係ない。また $a、@a、%a はそれぞれ関係がなく別々の名前空間に属している。筆者は見間違いやすい名前はなるべくプログラム中には使わないようにしている。
変数はそれぞれ違ったタイプのデータを持つのでそれぞれを操作する演算子も必要になる。
Operator
Num Str
--------------------------------------
Equal
== eq
Not equal
!= ne
Less than
< lt
Greater than
> gt
Less than or equal to
<= le
Greater than or equal to >=
ge
文字列の場合には文字を使うという具合に覚えればいいだろう。次のような違いだ。
#!/usr/bin/perl
# A political evaluation script
$a = "Al";
$b = "George";
if ( $a > $b) { print "$a would make a better President.\n";
}
if ( $a < $b) { print "$b would make a better President.\n";
}
if ( $a == $b) { print "$a or $b, there's no difference...\n";
}
これは違いがないと表示する。
#!/usr/bin/perl
# A political evaluation script
$a = "Al";
$b = "George";
if ( $a gt $b) { print "$a would make a better President.\n";
}
if ( $a lt $b) { print "$b would make a better President.\n";
}
if ( $a eq $b) { print "$a or $b, there's no difference...\n";
}
今度は比較がきちんとできている。perl ではどうやって比較をするのか。それは "true" と "false" を利用しているだけだ。"if"、"while"、"until" なども同じだ。これはしっかりと記憶しておいてほしい。
0 は偽だ。
値がアサインされていない変数はすべて偽だ。
すべての空の文字列、"" や '' は偽だ。
その他はすべて真だ。
それでは次の値が真か偽か考えてみよう。
"00" "-1" " "
"5 - 5"
答えは本稿の最後にある。
次に重要なものは変数の置換だ。つまり変数を展開するのかどうかを決定するメカニズムを理解しなければならない。
$name = 'Bessie';
print 'Our cow is named $name.';
この出力は次のようになる。
Our cow is named $name.
こういうときは次のようにすればいい。
$name = 'Bessie';変数名を表示する場合には次のようにする。
>$joe = "Joe";$joe = "Joe";
print "The variable \"\$joe\" contains the value
\"$joe.\"";
print ステートメント内で複数の値を使用するにはカンマで区切る。
また perl スクリプトを書く場合には "-w" をつけるのを忘れないようにしよう。
#! /usr/bin/perl -w
"-w" はスクリプト実行時に警告を表示してくれる。
今月は簡単にさわりを説明したが、次回はもう少し突っ込んだ説明をしよう。アレイやハッシュ、その他正規表現なども説明したい。大事なのは自分で試してみることだ。
先ほどの問題の答えはすべて真だ。"00" は "0" ではないので真。"-1" も同様。スペースは "" ではない。"5-5" は評価されるまでは "0" ではない。
NT ブートメニューの HOWTO は非常に詳しいが、必要なものすべてを網羅しているわけではない。本稿では HOWTO でカバーされていない部分を説明しようと思う。ある日 NT ブートマネージャと LILO を使ってブートしていることに疑問を持ち一つのブートマネージャで解決できないだろうかと思った。そこで NT ブートマネージャを使って OS をブートしてみることにした。NT ブートマネージャを選んだのは LILO からブートしても NT がブートメニューを表示するからだ。そこでドキュメントを探したらmini HOWTO HOWTO NT OS Loader + Linux mini-HOWTO がプロセスを解説していたが、理解が悪かったらしくうまくいかなかった。3日間システムの変更とリブートを繰り返してやっと解決できた。これはその顛末だ。
NT ブートローダーは boot.ini から OS のイメージをロードする。boot.ini は次のようなファイルだ。
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sosこのファイルは指定のパーティションから OS をブートするものだ。Linux をブートするには Linux パーティションの最初の512バイトの情報をまず取得して NT ブートマネージャに渡せばいい。そこで boot.ini ファイルを次のように修正した。
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos C:\boot.lnx="Redhat Linux 6.2"boot.lnx が必要な512バイトのファイルだ。512バイトのファイルを得るには HOWTO が役に立つ。512バイトのファイルを取得するにはダミーの lilo.conf ファイルを作りブートセクタを linux パーティションの最初にインストールし、最初の512バイトを取得する。次に LILO を MBR にインストールし WINNT をデフォルトの OS に設定すればいい。
少し解説しよう。Red Hat をインストールしたときに Red Hat をデフォルトのオプションにした。LILO は MBR にインストールされオプションの設定により OS を起動する。システムを再起動すると LILO は Linux と DOS の二つのオプションを表示する。DOS を選択すると NT ブートマネージャを起動する。ここで筆者がやりたいのは LILO にデフォルトで NT ブートマネージャを表示させ Linux を起動するオプションを表示させたいのだ。そこで lilo.dummy というファイルを作り次のように修正する。
# lilo.dummy file boot = /dev/hda3 # Linux resides in /dev/hda3 in my machine. # replace it with the partition in which you installed linux timeout=0 # Time out zero to avoid lilo waiting for us vga = normal read-only default=linux image = /boot/vmlinuz label = linux root = /dev/hda3修正が済んだら次のようにして LILO を実行しよう。
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos C:\boot.lnx="Redhat Linux 6.2"
最後に lilo.conf ファイルを修正して winNT をデフォルトの OS として起動するようにし MBR にインストールしよう。
boot = /dev/hda # Install it in MBR timeout=0 vga = normal read-only default=win # We need NT as default image = /boot/vmlinuz # We can remove this entry with out any #problems as we will not be booting Linux from LILO label = linux root = /dev/hda3 other = /dev/hda1 label = winLILO を実行して修正を反映させたら再起動する前にレスキューディスクを念のために作成しておこう。Red Hat のインストールディスクをレスキューディスクとして使用することもできる。ブートディスクを作るには次のように実行する。
これでもまだ不満だという人がいるかもしれない。 LILO を削除したいという人が。それには DOS のフロッピで起動し "fdisk /mbr" を実行すればいい。マスタブートレコードが書きかえられる。がこの効果は筆者は良く知らない。このオプションの動作を理解している人がいたら教えて欲しい。
最後に注意する点を抑えておこう。
カーネルの修正や lilo.conf を修正したら必ず同じ手順で boot.lnx を作成し c ドライブへコピーする
もし何らかの修正を施して Linux が起動しなくなったらレスキューディスクを使って LILO を次のようにインストールし直そう。
(Red Hat を使っているならインストール CD をレスキューディスクとして利用できる。インストールメニューが表示されたら rescue と入力すればいい)
boot = /dev/hda
timeout=500
prompt
vga = normal
read-only
default=linux
image = /boot/vmlinuz
label = linux
root = /dev/hda3
other = /dev/hda1
label = win
今回は継承、ポリモーフィズム、抽象クラス、コレクションオブジェクトについて解説しよう。過去の記事や記事全体を見たい方は MST ページ を参照して欲しい。Squeak に関する情報は ここに ある。
前回の記事では説明のために aPerson オブジェクトを使用した。今回は Smalltalk のコレクションオブジェクトを解説しよう。オブジェクト志向言語の継承という概念は自然の意味に近い。人々が両親からある性格を受け継ぐようにオブジェクトも親からその性格を継承する。オブジェクトが受け継ぐものはメソッドとインスタンス変数だ。説明のために Smalltalk で良く使われるオブジェクト anOrderedCollection を使おう。クラスは OrderedCollection だ。このクラスはその名の通りオーダーが重要なオブジェクトのコレクションだ。分かりやすいように使い方から説明しよう。次の例は OrderedCollection を作成し1を加え次に2を加え3を加える。最後に自分自身を返す。
(OrderedCollection new) add: 1; add: 2; add: 3; yourself.
通常は1行ではなく次のように書く。
(OrderedCollection new)
add: 1;
add: 2;
add: 3;
yourself.
まずクラス OrderedCollecton を作成し1を加える。次に2を加え、3を加えてから自分自身を返す。最後にメッセージは送る必要はない。デフォルトでオブジェクトそれ自身を返すからだ(メッセージのレシーバーという)が、add:は引数を返すので OrderedCollection を見るには自分自身を返すようにリクエストしなければならない。この例は明示的にオブジェクトを作成しているので分かりにくいかもしれない。次の2例も同じ結果を返す。この例では新しいオブジェクトの作成はしていないがメッセージにそれが含まれている。
[ex3]
OrderedCollection クラスに1、2、3 のバリューを持った新しい OrderedCollection オブジェクトを返すようリクエストする
OrderedCollection with: 1 with: 2 with: 3
[ex4]
OrderedCollection クラスは新しい OrderedCollection オブジェクトを返す。オブジェクトは 1、2、 3 すべてのバリューを持つ
OrderedCollection withAll: #(1 2 3)
[ex5]
上記コードで print it を選択するとアスキーでオブジェクトが表される。上記コードをインスペクトし self をクリックすると次のように表示される。
[ex6]
4個の Integer を持つオーダードコレクションを作成するにはいくつか方法がある。今3個の整数を持った OrderedCollection があり4個の整数を持った OrderedCollection を作りたい場合には上記コードに戻り再びタイプする必要はない。インスペクトしているオブジェクトに4個目の整数を加えるようにリクエストを出せばいい。
[ex7]
下のペインのコードをハイライト表示し do it を選ぶ。これでオブジェクト自身(self)に4を加えることになる。
ごらんの通りオブジェクトの表示、操作がリアルタイムにできる。コードを書いているときにうまく行かなければ問題のオブジェクトを取り出して調べてみればいい。特定の状況で試したいのならオブジェクトを直接変更できる。例えば整数の4が必要なのではなく "four" という文字列が必要だった場合、4番目の要素をクリックして4を削除し "four" を結び付けマウスの中ボタン→acceptを選べばいい。一度3番目の要素をクリックしてから4番目の要素をクリックすると今の変更が反映されているはずだ。
ここまでの操作がコンパイル、リンク実行といった処理をせずにできたことに気がついていただけただろうか。それでは次にコレクションの作り方を説明しよう。コレクションの中の整数を加えていくという処理を見てみよう。次のコードを実行すればいい。
[ex8]
| anOrderedCollection aSum |
aSum := 0.
anOrderedCollection := OrderedCollection withAll: #(1 2 3).
anOrderedCollection do: [:anElement | aSum := aSum +
anElement].
aSum inspect.
コードの意味は次の通りだ。
1) 一時変数を宣言する
2) sum を初期化する
3) オーダードコレクションを作成し一時変数をアサインする
4) オーダードコレクションのそれぞれの要素をそれ自身に加える
5) sum にインスペクタを開かせる
プログラムの経験者なら有効範囲やコレクションのサイズ、コレクションのインデックスのための変数の宣言などを全然していないことに気がついただろう。これらはコレクションが処理をしている。処理の内容はコレクションの要素にある処理をさせているだけだ。
OrderedCollection はその名の通り Collectionのタイプで Collection からメソッドとインスタンス変数を継承している。正確に言えば SequenceableCollection というクラスから継承しており、これは Collection から継承している。クラス同士の関係を UML やダイヤグラムのモデリングソフトウェアを使って説明することもできるがここでは定説通りに進めよう。継承関係をタブで表示すると上記の継承関係は次のように表示される。
Collection
SequenceableCollection
OrderedCollection
これで OrderedCollection は SequenceableCollection のタイプで SequenceableCollection は Collection のタイプであると理解できるだろう。先ほど使用した withAll というメソッドは Collection から継承している。クラスメソッドは次のように表示される。
Collection
>>withAll:
SequenceableCollection
OrderedCollection
Collection も SequenceableCollectionも抽象クラスと呼ばれる。抽象クラスはオブジェクトを作成することはない。クラスの論理的な基礎を提供するものだ。クラスの名称は何でもいいがすべてのクラスに withAll: に対応させたい。その場合はすべてのクラスが対応する一つのメソッドをインプルメントしてそれを再利用する。もし withAll: を修正する場合は一箇所を修正すれば済む。
もし例外の必要がある場合には、例えば Heap クラスに別に withAll:メソッドをインプルメントしたいときには Heap のメソッドをオーバーライドすることができる。Heap クラスを加えてみよう。抽象クラスはイタリック体で示す。
Collection
>>withAll:
SequenceableCollection
OrderedCollection
Heap
>>withAll:
withAll: メッセージを Heap と OrderedCollection へ送るとそれぞれの振る舞いは異なる。これはポリモーフィズムと呼ばれているものだ。通常のプログラミング言語ならチェックや分岐など多数のコードが必要だがポリモーフィズムを利用すれば withAll: メッセージを送ればそれぞれのコレクションが適切に対応してくれる。
それでは最後に SortedCollection と Bag を追加してみよう。
Collection
>>withAll:
Bag
SequenceableCollection
OrderedCollection
SortedCollection
Heap
>>withAll:
コードの再利用が容易にできるのが分かるだろう。一つのコードを多数のオブジェクトで再利用することは非常に効率的だ。もし修正する必要が出てきても一つのコードを修正すれば足りる。整合性を維持するためにコードを追いかける必要はない。だが、Smalltalk の入門者にはどのコードがどのように再利用できるのかという情報が不足しているだろう。Smalltalk には非常に多くのライブラリが用意されている。これを解決するために Smalltalk ブラウザと ScopeBrowser を用意しよう。ScopeBrower は学んでいるクラスとスコープを表示するものだ。今回は上記のコレクションオブジェクトといくつかのオブジェクトを使用する。このブラウザを開くにはMakingSmalltalk-Article3.st が必要だ。ブラウザを開いてコードを実行してみよう。
[ex9] [対応しているのは Squeak だけだ]
ScopedBrowser openBrowserForArticle3
Squeak を実行していない読者には withAll: メソッドをナビゲートしている場面を示そう。
withAll: を見つけるにはクラスをマウスの中ボタンでクリックし、Collections-Abstract>Collection>instanceCreation>withAll: と辿ればいい。このブラウザには5個のペインと3個のボタンがある。ペイン1はカテゴリをペイン2はクラスをペイン3はメソッドコレクションのカテゴリをペイン4はメソッドをペイン5は Smalltalk のコードを表示している。ボタン1はオブジェクトのインスタンスメソッド、ボタン2はクラスコメント、ボタン3はクラスメソッド表示の切り替えをする。
少し戻って Collections-Sequenceable>OrderedCollection をクリックすると次のように表示される。
コードペインは OrderedCollection からの継承とインスタンス変数を表示している。抽象クラスへ戻り SequenceableCollection をクリックすると Collection からの継承が表示される。
最後にもう一つのブラウザを紹介しよう。階層と継承を表示する階層ブラウザだ。オープンするには OrderedCollection をクリックしマウスの中ボタンで spawn hierarchy をクリックする。次のように表示されるはずだ。
[ex10]
このブラウザはすべての階層を表示する。Collection は Object オブジェクトを継承している。最上層のオブジェクトは ProtoObject で基本的なメソッドをインプルメントしている。ProtoObject の上にはオブジェクトはない。
次回は aPerson の作成だ。オブジェクトの作成のほかにも Smalltalk のコードに関しても解説しよう。
800ドルで手に入れたラップトップに Linux をインストールしたときの話をしよう。このラップトップには CD-ROM ドライブがない。だからほとんどのディストリビューションに添付されている ネットワークブートディスクを使う。
デスクトップの CD-ROM ドライブを利用するには NFS、FTP、HTTP などの方法がある。概して分かりやすくしかも実行するのも容易な方法を説明するつもりだが NFS は少し分かりづらいかもしれない。
使用するディストリビューションは Red Hat だが Mandrake、HisaLinux などの類似ディストリビューションではそのまま利用できると思う。しかし細部は若干異なるかもしれないがほとんどの Linux で利用できるはずだ。
最近のディストリビューションはほとんど CD から起動できるようになっているがフロッピのイメージも付属している。ISA や PCI のイーサネットカードを持ったデスクトップと PCMCIA カードのラップトップとでは違いがある。ラップトップの場合は pcmcia のサポートモジュールをイーサネットドライバの前にロードしなければならない。
RedHat 5.2 では boot.img が付属しているが PCMCIA 用の supp.img も必要だ。
Rehat 6.0 では boot.img(CD のみ)、bootnet.img(ネットワーク)、pcmcia.img が付属する
Mandrake 7.0 には cdrom.img、network.img、pcmcia.img が付属している。
それぞれのケースで必要になるものは次の通りだ。
|
distribution |
PCMCIA なし |
PCMCIA あり |
|---|---|---|
|
RedHat 5.2 |
boot.img |
boot.img + supp.img |
|
RedHat 6.0 |
p bootnet.img |
bootnet.img + pcmcia.img |
|
Mandrake 7.0 and CS |
network.img |
pcmcia.img |
もちろんこれらのイメージを dd コマンドで次のようにフロッピに書きこむことができる。
dd if=/mnt/cdrom/images/network.img of=/dev/fd0
ネットワークブートディスクは細かな手順は違うが皆ネットワークを立ち上げる。Mandrake 6.1 の手順は次のようになる。
NFS は Linux のディレクトリを共有する手段だ。ディレクトリがエクスポートされればこのディレクトリをマウントしてローカルディレクトと同様に使うことができる。サーバサイドでは CD-ROM をマウントして /mnt/cdrom をエクスポートする。手順は次の通りだ。
1. NFS サーバを起動する (nfsd)
2. CD-ROM をマウントする
3. サーバのエクスポートするディレクトリにこのディレクトリを追加する
/mnt/cdrom *(ro,no_root_squash)これは /mnt/cdrom をすべてのユーザにリードオンリーでエクスポートし、リモートのルートにルートでのアクセスを許可するという意味だ。
4. 次にエクスポートを有効にする
exportfs
次のようなメッセージが返るはずだ。
/mnt/cdrom localhost /mnt/cdrom *
同じネットワーク内で次のようにテストをすることができる。
mount 192.168.0.1:/mnt/cdrom /mnt
クライアントでは NFS サーバ名 (または IP アドレス) と RedHat ディレクトリを入力する
/mnt/cdrom
FTP でのインストールはサーバサイドで RedHat CD を ftp でエクスポートするだけなので比較的簡単だ。筆者の環境では wuftp が動作している。パッケージをインストールすると /home/ftp ディレクトリが作成されアノニマスでのアクセスが可能になる。もっとも手っ取り早いのは次のような手順だろう。
1) /home/ftp/cdrom のようなサブディレクトリを作成する
mkdir /home/ftp/cdrom
2) CD ディレクトリをここへマウントする
mount /dev/cdrom /home/ftp/cdrom
念のためにアノニマスでログインできることを確かめよう。
クライアントサイドでは FTP イメージを選び、ネットワーク経由でのインストールを実行すればいい。入力するものは次の通りだ。
-- FTP サイト名 (または IP アドレス)
-- RedHat ディレクトリ、この場合は cdromだ
HTTP 経由でのインストールは FTP に非常に良く似ている。
サーバでは標準の Apache を起動し DocumentRoot は /home/httpd/html に設定してある。手順は /home/httpd/cdrom というサブディレクトリを作成し CD-ROM ディレクトリをマウントすればいい。
mkdir /home/httpd/cdrom
mount /dev/cdrom /home/httpd/html/cdrom
作業が終了したら一応アクセスできるかどうかの確認をしておこう。サーバ上で "http://localhost/cdrom/" をリクエストしてみればいい。
クライアント側ではインストールプログラムにウェブサイト名(または IP アドレス)と RedHat のある場所を渡せばいい。本稿の例では cdrom だ。
筆者の経験から気がついたことを示そう。まず PCMCIA のイーサネットカードが認識されなかった。パッケージには NE2000 互換と書いてあるのだが。RedHat 6.0 で試したときは pcnet_cs モジュールを使って問題なく認識された。
次に X の解像度の問題だ。800x600 のラップトップのディスプレイはちゃんと機能するのだが 640x480 ではゆがみが出る。そこで /etc/X11/XF86Config ファイルを修正し HorizSync の値を 30-40 kHz にしたらかなりよくなった。
パッケージのインストールを忘れるとインストールのために再び NFS, FTP, HTTP でパッケージをダウンロードしなければならない。
それぞれの方法によるインストールでは速度にそれほど違いはなかった。違いはサーバにサービスがインストールされているかどうかによるだろう。ほとんどの場合、FTP か HTTP の方が簡単かもしれない。
最後にラップトップで Linux を使う理由は次のようなものだ。