実際、Windows(95なりNTなり)を使っていた時には、ほんと、役に立たねぇなぁ、と思いながら、もうほとんど試験環境としてのマシンの台数確保のためだけに、オフィスの片隅に置きっぱなしになってたのだ。
プロセッサの動作周波数のわりに、のたのたして遅いしさぁ。MSなDev Studioとか動かそうもんなら、ガラガラガラガラず〜っと言っててなかなか帰ってこないし、たまにほんとに帰ってこないし(笑)
これでプログラムを書こうなんて、露ほども思っていなかったのだが…
Linuxメインで使うようになって、目からウロコがぼろぼろ落ちたよ。こいつがメインマシンでもいいなぁ、ってくらいのお役立ちなんだもんな。実際に、ノートPCをメインに据えてるLinuxのパワーユーザな方ってたくさんいるけど、それが本当に成り立つんだと無知なオレにわからせてくれたわけだ。
だが、やはりノートPCたるもの、持ち運んでこそ価値があろう。となると、静的にIPアドレスを割り付けてしまうのはどうにも不便だ。
家には家庭内LANともいうようなネットワークがあり(といってもハブが1個あるだけだが)、会社でも当然ながら社内のネットワークに接続する、という状況は、昨今ポピュラーなんじゃないかと思うがどうだろうか? さらに、社内ネットワークでは、IPアドレスがDHCPによって動的に割り付けられるネットワークも多いことと思う。
となればとる道は一本しかない。家の赤帽デスクトップにDHCPサーバを入れ、COMPAQノートにDHCPクライアントを入れる。こうしておけば、家と会社を往復しても、単にネットワークにつなぐだけ。その都度アドレスが割り振られ、何もいじることはない。
というわけで、家の赤帽ペンギンにはサーバ側としてdhcp-2.0b1pl0-2.i386.rpmを入れ、COMPAQノートにはクライアントとしてdhcpcd-0.65-2.i386.rpmをインストールした。両方ともRedHat 5.1のCD-ROMに入っていたもので、今はもうちょっと新しいのがあるのかも知れないけど。
インストールそのものは、RedHatの場合はrpmなのでただ黙って入れるだけ。なにも考える必要はない。ま、Slackwareの時も実は使っていたんだが、結局のところ./configure して make一発だったので特に苦労することはない。
RedHatの場合は、dhcp-2.0b1p10-2.i386.rpmをインストールした時点で、/etc/rc.d/init.d/dhcpdというdhcpdの起動・終了スクリプトもインストールされ、DHCPサーバを起動すること自体はすぐにできるようになる。Slackwareなどの場合も、適当なrcファイルの中でdhcpdを起動してやっていた。ただ、単にdhcpdを引数なしで起動してやると、しっかりしたCopyrightを表示してくれるので、作者の方には申し訳ない気もするが、-q を付けて起動するようにすると、ブート時に起動されるその他のdaemonと同じく黙って起動してくれるようになる。
唯一、設定ファイルとして必要なのが、/etc/dhcpd.confで、これはman dhpd.confで詳細な解説が得られるのでそちらを参照するのは当然として、簡単にオレが使っているのをかいつまんで書くと、
server-identifier pinga.southpole.com; option domain-name "southpole.com"; option domain-name-servers 192.168.9.16; shared-network PINGA { option subnet-mask 255.255.255.0; default-lease-time 6000; max-lease-time 72000; subnet 192.168.9.0 netmask 255.255.255.0 { range 192.168.9.10 192.168.9.15; option broadcast-address 192.168.9.255; option routers 192.168.9.16; } }
と、これだけだったりする(笑) 設定ファイルにありがちな、キーワードとバリューを:や=で結ぶ、という書式じゃなくて、ずらずら並べて書いて末尾を;で締める、というちょっとCライクな書式だ。家のメインの赤帽は、pingaというホスト名で、ドメイン名はsouthpole.comを名乗っている。もちろんローカルドメインで、適当にでっち上げたものだ。アドレスもローカル・アドレス。ちなみにオレがローカル・アドレスを割り振る時は、マイ・フェイバリットなバイク、DUCATI 916にあやかって、192.168.9.16と必ず決まっている(笑)
残りの書式もお約束で、192.168.9.0なネットワークに、最下位が10〜15までの範囲で開いて空いているアドレスを割り付け、デフォルト・ルートを192.168.9.16に向けろよ、というだけだ。
Ethernet Cardが1枚な場合は、デフォルトでデバイスはeth0になるので問題はなにもないが、2枚以上のEthernet Cardを差していると、dhcpdの起動時に、どのCardをDHCPサーバの管理下に置くのか指定が必要だと思うが、今までそんな使い方をしたことがないので正確にはわからない。manを見る限りでは、interfaceのidを引数として起動時に渡せるようなので、eth1などと明示してやれば、2枚目のEthernet Cardに対してdhcpdがリッスンするようになるのだろう。
/etc/dhcpd.confを書き終えたら、touch /etc/dhcpd.leases などとして空のファイルを作っておく。これは、dhcpdが現在、どのデバイスに対してアドレスを割り付けているか、などの情報を保持する簡単なデータベースとして用いられるので、うっかり作るのを忘れると、dhcpdの起動時に文句をいわれてしまう。
さて、クライアント側の設定だが、実は記録を残してない(笑)
というか、インストールするときに、Networkの設定でDHCPを選べばサクッと入ってしまうので、何もしていないのだった。これは最近のLinuxのディストリビューションなら、RedHatに限らずサポートされていると思う。
実際には、COMPAQのノートPCには一度、全部インストールしなおしていて、2回目のインストールの際に、デスクトップの方にCD-ROMをマウントし、PCMCIAなEthernet経由で、NFSを使ってインストールしたのだが、こうするとPCMCIA関係のrcファイル類も、DHCPによるブート時のアドレスの取得も、すべてインストーラが面倒見てくれちゃったので何も記録に取っておくようなことがなかったのだ。
もちろん、COMPAQ自身のCD-ROMもFDも使えば使えるのだが、次のサブマシンとなるノートPCを買った時、そのマシンではどうかわからないので、練習も兼ねてPCMCIA & NFS経由で何もローカルなデバイスをあてにしないインストールってのをちょっと練習してみたかったんで、入れ直してみたのだ。
ただ、ひとつ注意する点をあげるとするなら、それは名前の逆引きについてだ。たとえば、192.168.9.10というアドレスをノートPCのLinuxに割り振ったとする。すると、割り振られたノートPC側からpingなどを打ってみると、ちゃんと届くことが確認できるだろう。だが、ここに落し穴があって、pingが通るからとtelnetしたりftpしたりしてみると、connectはするのだが、loginプロンプトが出るまで異様に時間が掛かったり、タイムアウトしてしまったりするはずだ。
これは、割り振ったアドレスのホスト名を誰も知らないので、接続を要求されたtelnetdやftpdなどがアドレスからホスト名を逆引きする際に、引けもしない名前を延々引こうとしてタイムアウトするまでリトライしてしまうからだ。ローカルにネームサーバなどを立てていないならば、仮に/etc/hostsに
192.168.9.10 dhcp00 dhcp00.southpole.com 192.168.9.11 dhcp01 dhcp01.southpole.com …
などのように、割り当て可能なアドレスの、どれが実際に使われても、そのホスト名が/etc/hostsにあらかじめ書いてあるという状態にしてしまえば、とりあえず解決できるだろう。これはローカルなネット内だけに必要な調整で、pppでinternetに出ていく際などには、どの道IPMasqueradeがアドレスを置き換えてしまうので意識する必要はない。
というわけで、COMPAQノートでLinuxを使うときでもDHCPでアドレスを動的に取ることができるようになった。会社でWindowsマシンとして使っていたときも、もともとDHCPだったので、これで家でも会社でも何も考えずにハブにつなぐだけでNetworkに接続できるようになったわけだ。
ただ、オレの場合、bindもsquidもなにも立てていないので、DNSを引くときには必ずISPにダイアルアップしなければならない。どちらにしろネームサーバの設定は必要なので、Linuxの方もWindowsの方も、どちらもwww.gte.netのネームサーバにお伺いを立てる設定にしてしまった。
このとき、rootになって直接/etc/resolv.confを書き換えても、リブートするたびに/etc/dhcpの下からresolv.confを持ってきて上書きされてしまうので、必ずそちらにもcpしておこう。
IP Masqueradeはすでにデスクトップの赤帽で動いているので、これでノートの方はLinuxでもWindowsでも、モジラなどを起動すればデスクトップの赤帽がダイアルアップしてくれてinternetに出て行けるようになった。便利便利。
さらに、Slackwareの時から便利に使っていたSambaを赤帽デスクトップでも使いたいので入れることにした。Sambaについては超有名なので、オレごときがもはや説明することなどないのだが、非常に簡単に書くと、LanManager、Windows 95/NT、OS/2などで使われるSMBプロトコルを喋るサーバをUnix上に実装したもの、とでも言えるだろう。詳しいことは本家Sambaのページやhttp://samba.bento.ad.jp/を見るべし。
Windowsをメインに使うとか、NT中心でネットワークが組んであるところにLinuxを紛れ込ませる(笑)とか、そういう場合にはおそらく日本語のファイル名をサポートしたい、などという要求が出てくるものと思うが、オレ的には日本語(のみならず、非英数字)を含むファイル名なんぞ使うほうがどうかしてると思うので、もともとRedHat 5.1に含まれていたsamba-1.9.18p5-1.i386.rpmをそのまま使っている。閉じた環境で、どうしても日本語のファイル名を使いたい場合や、Windows 98やらNT 4.0のSP3など、暗号化されたパスワードを使う場合など、実際にはいろいろこまかい調整があるのだろうが、Sambaについては実はあまりマジメに追いかけてないので、よく知らない(笑)
少なくとも、CD-ROMやJAZなどのドライブやプリンタなど、赤帽デスクトップにブラ下がったリソースが共有できればいいや、というレベルなので凝ったことはまったくしていないのだった。
さて、Sambaをインストールすると、/etc/smb.confという設定ファイルを調整して、Sambaの振る舞いを制御してやらなければならない。Sambaをインストールするとsmb.confのサンプルも一緒に入ってくるので、とりあえず動くようにするのはそれほど難しくはないと思う。オレの場合はこんな感じになっている。実はよくわかってない(笑)のでこっ恥ずかしいのだが…
[global] workgroup = southpole.com server string = Pinga RedHat Linux 5.1 kernel 2.0.34 hosts allow = 192.168.9. 注1 load printers = yes printcap name = /etc/printcap lpq command = /usr/bin/lpq -P%p printing = bsd log file = /var/log/samba/samba-log.%m max log size = 50 security = user password level = 8 socket options = TCP_NODELAY interfaces = 192.168.9.16/24 注2 local master = yes os level = 65 domain master = yes preferred master = yes wins support = yes dns proxy = no 注3 preserve case = yes short preserve case = yes default case = lower case sensitive = no mangle case = no mangled names = yes [printers] comment = All Printers path = /var/spool/samba browseable = no guest ok = no writable = no printable = yes [cdrom] comment = CD-ROM Drove path = /auto/cdrom public = yes read only = yes [jaz] comment = Jaz Drive path = /auto/jaz public = yes read only = no create mode = 0750 [zip] comment = Zip Drive path = /auto/zip public = yes read only = no create mode = 0750 [toru] comment = Toru's Home path = /home/toru public = no read only = no create mode = 0750
注1 はプリンタに関する設定なのだが、ほとんどサンプルのままだ。lpdを使わずLPRngなどを使う人は、もう少し違った設定になるかも知れないが、オレの場合はRedHat 5.1のデフォルト設定なので特になにもしていない。プリンタのフィルタなどもまだ手を付けてないので、Linuxから直接は英語しか印刷できないが、Samba経由でWindowsからならば日本語テキストも問題なく印刷できている。
特に、"lpq command = /usr/bin/lpq -P%p"の一行を入れておくと、Windowsからプリントキューの状態を見ることができるので重宝する。[global]セクションの他にも、独立した[printers]セクションがあり、そちらでもプリンタの設定が必要なのがちょっと不可解だが、試しに[printers]セクションをコメントにしてみたらやはり印刷はできなかった(あたりまえ?)
香織のお絵書きソフトなどからそのまま絵が印刷できているところを見ると、本当になにもせずにクライアントが整形したプリント・データを単にバイパスしているのだろう。そのかわり、各クライアントには、Samba経由でつながっているプリンタに対応したドライバを入れておく必要がある。
注2 はWindowsで言うところのドメインの設定だ。Windows NTベースでドメインを構成させると、プライマリだのセカンダリだのマスタだのとなんだかんだよくわからないサーバが出てくるが、オレの場合はNTなぞなく、LinuxだけがSMBのサーバなので、こんな設定になっている。NTと共存させる場合は、当然ながらNTをMasterにするべきだろうから、domain master=yesにはならぬだろうし、OS Levelももっと下げる必要があるだろう。NTと手を切れない人は自分で調べて試行錯誤してくれ。
また、ハマりがちな点として、SambaなLinuxと、他は全部Windows 95だけ、というような状況の場合は、Windows95の「Microsoft ネットワーク共有サービスのプロパティ」で「LMアナウンス」を「なし」に、「ブラウズマスター」を「無効」に明示的に変えてしまおう。そうしないと、Sambaは立ち上がっているのに、Windows95から見えない場合が出てくる。Windows95はデフォルトでは「ブラウズマスター」が「自動」になっているので、Windows NTの存在しないネットワークだと、早いもの勝ちでWindows95のどれかがブラウズマスターになってしまったりしてワケのわからない状態になるので注意が必要だ。
注3 はファイル名の扱いについての設定だ。Windowsでロング・ネームを使うと、Windows NTとWindows95でも振る舞いが違うのは知ってるよね。一見、大文字と小文字は入力したとおりに保持されているかのように見えるが、実際にはそんなこたなかったり、まったくWindowsのLong NameはWrong Nameに他ならない。なので、上記のような設定にすると、Windows側からファイルを書き込むと基本的には英小文字で作られるが、Unix側のロング・ネームも見た目通りに扱える。が、実は大文字小文字を区別していない、というなんだかワケワカな状態だ。こればっかりは元々のWindowsの命名法が腐っているので手の打ちようがない。というか、NTと95の間でさえ振る舞いが違うもんを、吸収しようと努力するなど不毛なので、適当に妥協した。
また、SambaではCODEPAGEを指定することもできるし、日本語のコードセットをEUCとして扱うかシフトJISか、などが設定できたはずだが、オレの場合はRedHat 5.1に含まれているものをそのまま使ってるし、日本語ファイル名など使わないしで、なにも指定していない。とりあえず不便はないのだが、WindowsのExplorerから新しいディレクトリを掘ると「新しいフォルダ」(実際には「フォルダ」は半角カナ)などという国際感覚のまるでない恥ずかしいディレクトリを作ってしまうので脱力する。
ちなみにSamba + Windows95なら、だまってリネームして英数字だけの名前にすればUnix側からも書き込めるが、日本語版のWindows NTをサーバにし、韓国語版や中国語版のWindows95から新しくディレクトリなど掘ろうものなら、ディレクトリができた瞬間に、もはやリネームはおろか、そのディレクトリを誰も消せないような4次元な名前に化けたりする。なぜ、どこの国向けのWindowsもローカルな文字コードに翻訳するのか理解に苦しむ。Windows95で長いファイル名が使えるようになったのが、Microsoftの連中にはよっぽど嬉しかったに違いない(苦笑)
おっと、脱線してしまったが、smb.confを微調整する場合も、RedHat 5.1などSystemV系なrcファイルを使う環境の場合は、/etc/rc.d/init.d/smb restartなどとすれば何度でも簡単に試行錯誤できるので、満足な設定ができるまでまで試そうね。
さて、ここまでで、IPアドレスの動的な割りあて、Windowsからのドライブやプリンタの共有はできるようになったのだが、LinuxなノートPCからデスクトップのファイルをアクセスするには以前としてftpしかない状況だ。これはかなり不便なので、nfsを立ち上げることにしよう。さらに、Unixの場合、メディアは明示的にマウントしてやらないと使えない。このあたりもなんとかしてズボラはできないか、ということでautofsを使うことにする。
autofsを使う場合は、kernelがautofsをサポートする設定でmakeされている必要がある。RedHat 5.1の場合はインストールした時点ですでにそういう設定でmakeされていた。新規にkernelの再構築をする場合には、CONFIG_EXPERIMENTAL=yにして、CONFIG_AUTOFS_FS=Yにする必要がある。
autofsの設定ファイルは、まず/etc/auto.masterを見よう。
/auto /etc/auto.removable --timeout 10
こんな風な、たったの1行だけだと思う。RedHat 5.1のデフォルトでは、auto.miscを使うようになっているけどね。--timeout 10 というのは、10秒間アクセスしないと、自動的にumountしてくれ、という意味だ。で、このauto.masterを有効にするには、上記の場合は、/auto というディレクトリを掘り、/etc/auto.removableというもう一つの設定ファイルを記述してやることになる。実際の/etc/auto.removableの中身はというと、
cdrom -fstype=iso9660,ro,unhide :/dev/scd0 cdrom2 -fstype=iso9660,ro,unhide :/dev/scd1 jaz -fstype=auto,rw :/dev/sdc1 zip -fstype=auto,rw :/dev/sdd1 fd -fstype=auto,noexec :/dev/fd0
という風になっている。mountの使い勝手のために/etc/fstabを書いたことがあるなら、ほとんどそのまま読めると思う。一応書いておくと、赤帽デスクトップにはSCSI接続のCD-ROMとCD-Rが接続されていて、それぞれ/dev/scd0、/dev/scd1というデバイス名なので、それが/auto/cdromと/auto/cdrom2にISO9660なファイルシステムでmountされる。音楽CDを聞きながら辞書CD-ROMをブラウズできたりして便利なのだ(笑)
さらに、JAZドライブ、パラレルポート接続のZIPドライブ、通常のフロッピーが、/dev/sdc1、/dev/sdd1、/dev/fd0として認識されていて、それぞれ/auto/jaz、/auto/zip、/auto/fdとしてmountされる、という意味だ。
JAZ、ZIP、FDのファイルシステムはauto、つまり自動認識を指定しているが、実際にはJAZとZIPは、買ってきたメディアをすぐにはmountできないので注意だ。それはなぜかというと、オレも理解に苦しむのだが、なぜかiomegaのJAZやZIPなどのメディアは、パーティション番号が4番決め打ちでvfatのパーティションが切られて出荷されているのだ。だから、例えばJAZドライブの場合は、/dev/sdc4だぞ、と指定してmountしてやらないと、/dev/sdc1をmountしようとして、パーティションをまず切らんかい!と怒られてしまうのだった。なにゆえ4番に?>iomega
てなわけで、上記の/etc/auto.master、/etc/auto.removableを用意し、mkdir /autoしたら、/etc/rc.d/init.d/autofs startを実行しよう。なにもエラーが出なければ、準備は完了だ。この時、変に気を利かせて/auto/cdromとか/auto/jazとか、実際にmountされるディレクトリまであらかじめ掘ってあるとエラーになるので注意だ。これはautofsがその都度面倒をみてくれるので作っておく必要はない。
CD-ROMドライブになにか読めるメディアをセットして、ls /auto/cdrom としてみよう。ディレクトリのリストが表示されたかな? されなかったら、/var/log/messagesなどにログが残っているので、ファイルシステムの指定は正しいか、デバイス名は正しいか、など間違い探しをしよう。正しく表示された人は、すべてのマウントポイントが正しく使えることを確認しよう。この辺の作業はrootで行って、うまくmountしてくれた場合は、mountした状態でchgrp users -R /auto/jaz などのようにアクセス権を調整してやらないと一般ユーザで読み書きできないかも知れないのでそのあたりも要チェックだ。
オレの場合はリムーバブル・メディアでもe2fsを使っていてvfatは使っていないのだが、実際にautofsでvfatを使う場合は、明示的にuidやgidを指定してやらないと、所有権の概念がないvfatは放っておくとroot,rootでmountされてしまう。ユーザ名toruでuidが100、usersグループでgidが500とすると、
jaz -fstype=vfat,rw,uid=100,gid=500 :/dev/sdc1
の様にすればよいだろう。
ここで先程出てきた/etc/smb.confに戻ると、例えば[jaz]セクションに path = /auto/jaz などと書いてある。こうしておくと、Windowsから\\pinga\auto\jazにアクセスすると、自動的にセットされているJAZドライブがmountされ、アクセスすることができるのだ。CD-ROMやZIPも同様だ。メディアをとっかえひっかえするときも、いちいちmount、umountしなくていいのですごく楽。ある種Windows的なズボラができるのだった。
autofsが使いものになるようになれば、これはさっそくNFSも仕込んで、ノートlinuxともファイルシステムをシームレスにしてしまいたくなるってもんだ。とはいえ、実はオレって、NFS、特にPC-NFSを使った時に、ど〜もいい思い出がないんだよね。ファイルをロストしたり… が、今回は暗い過去を振り切るためにもNFSを使うことにした。
RedHat 5.1の場合、インストール時にnfsサーバを入れておくと、nfs-server-2.2beta29-5.i386.rpmが入っている。設定するファイルは/etc/exports、/etc/hosts.allow、/etc/hosts.denyの3つだ。
/etc/hosts.denyには
portmap:ALL
と単に一行書いてあるだけ。/etc/hosts.allowには
in.ftpd: 192.168.9.0/255.255.255.0 in.telnetd: 192.168.9.0/255.255.255.0 portmap: 192.168.9.0/255.255.255.0
と書いた。要するに、192.168.9.0な、つまり家のローカル・ネットワークのマシンにしか接続を許さないという設定。特に気にする必要もないといえばないんだが、一応、形だけでも。で、/etc/exportsには
/auto/cdrom *.southpole.com /auto/jaz *.southpole.com (rw) /auto/zip *.southpole.com (rw) /home/toru *.southpole.com (rw) /usr/src/redhat *.southpole.com /usr/local/src/redhat *.southpole.com (rw)
こんな風に書いてある。リムーバブルなメディアとホーム・ディレクトリ、あとは赤帽ならではのパッケージ作成用のディレクトリをexportしてある。そしてCOMPAQノートのLinuxの方はnfsクライアントになれるよう設定してあるのは当然として、さらにautofsを設定しておき、/etc/auto.removableに
src -rw,rsize=1024,wsize=1024 pinga:/usr/src/redhat lsrc -rw,rsize=1024,wsize=1024 pinga:/usr/local/src/redhat toru -rw,rsize=1024,wsize=1024 pinga:/home/toru jaz -rw,rsize=1024,wsize=1024 pinga:/auto/jaz zip -rw,rsize=1024,wsize=1024 pinga:/auto/zip cdrom -rw,rsize=1024,wsize=1024 pinga:/auto/cdrom
などという設定にしてみた。rsize=1024,wsize=1024ってのはあってもなくてもいいような気もするが、一応呪文として。pingaというのは赤帽デスクトップのホスト名だ。
これで、COMPAQノートのlinuxで ls /auto/jaz などとすると、赤帽デスクトップ pinga のJAZドライブが瞬時にmountされ、nfsでアクセスできる。すごく便利で、もはやズボラの極みと言える。
今の時点では、COMPAQノートのハード的な不調を解決するメドが立たず、次のノートPCを買おうなどと考慮中なので、ローカルなMailBoxは赤帽デスクトップ側にあるが、ノートPCを買った暁にはMailBoxをノートPC側に移してしまうつもりだ。マシンのパワーに寄らずメールを読み書きするマシンこそが、なし崩し的にメインマシンになるのが実際のところだと思うので、ゴリゴリとコンパイル・デバッグなどをするマシンと、持ち運び簡便で、メールを読み書きし、たまにはmakeなどもする小さなノートPCという使い分けをするうえで、dhcp + nfs + autofs というのは非常によい解だと思う。
特にノートPCの場合、サスペンド・リジュームが自由自在なので、一度設定を整えてしまえば、パタッと蓋を閉めてサスペンドし、会社のハブにつないで蓋をあけ、必要に応じて/etc/sysconf/network-script/ifdown とか ifup とか実行して強制的にdhcpcdにアドレスを取得しなおすようにすれば、もうまったくといっていいほどshutdownすることがなかったりする。優雅だねぇ。
メール | 戻る |