トップページ>>>「いろいろ」目次

Linux小咄(FAT32 mount、VMware、Samba動作確認)

初版作成:2002/09/11
二版作成:2002/10/20(構成変更)

目次

  1. 前書き
  2. 本題
  3. 後書き或いは感想

前書き

 ここ数日の間にLinux関連でfstabやらsmb.confやらを設定しなおす状態が続いていました。
 というか。1からインストールアンド設定し直し状態でした。
 んで。結局デスクトップ機にWin2k+SP3(ちょっと危ないかな?でもまーWinCDR6.0動いてるからいーや。)
を/dev/hdaに(よーするにプライマリマスタHDD)、TurboLinuxW8(プロモ版)を/dev/hdbに(よーするにプライマリセカンドHDD)につっこむことになりました。
 んで、さらにVMware上にWin2kを構築して、そこからSambaでホストLinuxにアクセス、マウントしてあるWin2k+SP3のFAT32パーティションにSamba越しにアクセスする、という。それどころかディスク容量節約のため実際問題VMwareの設定ファイルや仮想ディスクファイルは当のFAT32パーティションに配置するという。(つまりSamba越しに自分自身が見えてしまうし、やろうと思えば削除すらもできてしまうなんだか気持ち悪くて落ち着かない組み合わせ)
 まあ、いろいろメモで書き散らしましたんで、見苦しい点もあるかなと。
目次に戻る

本題

  1. Win2k+SP3アンドTLXW8のインストール
  2. FAT32の日本語文字化けしないマウント
  3. VMwareのワンポイント
  4. Samba動作確認最低限度の手順書

Win2k+SP3アンドTLXW8のインストール
「本題」に戻る
 Win2kの方のインストールはあまりにも簡単に終わりました。SP3も、インストールする順番が良かったのか 今のところ変な動きはしてません。今までずっとWin98SEだったのですが。Win2kも結構使いやすいですね。 インストールが簡単です。
 肝心のTLXW8のインストールも簡単に終わりました。もとより、直前までRHL7.2が動作していたハードウェア 構成でしたし、RAIDとかも入れてなかったので。LANカードもRTL8139で素直に認識してくれまして、すぐに インターネットができました。

FAT32の日本語文字化けしないマウント
「本題」に戻る
 さて。ここからが大変、というか。参考資料を探すのが骨の折れる分野です。
 すでにFATのあるHDDにインストールするたびに苦労するのが、「FAT32パーティションのマウント」です。
 サーバー用途ならいざ知らず、自宅のデスクトップマシンにワークステーション目的でLinuxをインストールした手合い の方々ならその苦労がわかるはず。
 というわけで。後の楽のため、ひっじょーに定型的でたった一行追加するだけなのに探すのに苦労していた FAT32の日本語解決版マウントをここに載せときます。
 あらかじめ。参考資料は日経Linux2001/06号です。
 まーよーするに、/etc/fstabに以下の行を付け足すだけでおしまいなんですわ。

/dev/hda1 /mnt/win2k vfat noauto,user,rw,codepage=932,iocharset=euc-jp 0 0

 ちこっと解説しときます。
 codepage=932,iocharset=euc-jpとゆーのがFAT32上のSJISファイル・フォルダ名を端末上で表示 するための指定です。んで。これを使うには/lib/module/[kernelとかバージョンとか。]/fs/nls/以下に 「nls_cp932.o」が入っている場合。あるいは、make menuconfigの設定で「Native Language Support」→ 「Codepage932」を有効にしていた場合のみ。NLSとゆーのは文字コード変換機能のことらしー。
 一応、Kernel 2.2.18以降あるいは2.4系ではだいたい有効になっているみたい。
 とゆーか。RedHatLinux7.x系列あるいはTLXW8では間違いなく有効になってます。

 おまけですが。VMware用には大容量のFAT32フォーマットのHDDを利用しています。
 で、以前躓いて判明したことですがVMwareっつーのは、設定ファイルか仮想ディスクファイルをchmodしておる らしーのですよ。これはログをみてみれば絶対にわかります。
 ところが、上記の設定のままではたぶん、/mnt/win2kはrootユーザーのものになっているはず。
 ファイルシステムの都合上、ファイルの属性をchmodできるのはファイルのオーナーだけです。
 ということはこの状態では/mnt/win2k上に保存してあるVMware(の設定)を一般ユーザーで実行しようと してもchmodできなくてエラーが発生してしまうのです。
 ということで、オーナーユーザーやオーナーグループを指定してマウントできるようにしときましょう。
 っつっても、こんなことサーバー上でやったら殺されますがな。あくまでも、利用者が一人だけという ワークステーション目的に限ってということで了承願います。

/dev/hda1 /mnt/win2k vfat auto,user,rw,uid=500,gid=500,umask=000,codepage=932,iocharset=euc-jp 0 0

 vfatのオプション、uid, gid, umaskがポイントです。uid,gidでオーナーを指定しています。 umask=000でよーするに777を指定しています。詳しくはman mountのvfatオプションの項でもみてください。
 まあとにかく。これによってls /mnt/win2kすると、全部一般ユーザID500, そのグループID500の所有となる わけです。これでVMwareも動きます。
 何でこんなことするかというと、単純にWin2k用のHDDの方が空き容量はLinux用の3倍は有るからです。
 autoオプションは・・・まあ、VMware動かしたときに忘れずにWin2kがマウントされているように、という ことです。
 あ、NTFSパーティションじゃたぶん無理ですよ。確か現時点ではNTFSは読みしかできないはず。(02/09/10)
 自信がなければmountでしばらく実験してからをお勧めします。まあ、書き込みさえしなければ滅多にふっとぶ ことは・・・ないんじゃない?

 あ、もう一つ言い忘れてた。Win2k+GRUBは大丈夫か、という話。
/dev/hda1→Win2k
/dev/hdb→TLXW8
 という形でインストールしたんだけど。結論から言ってGRUBを/dev/hdaのMBRにインストールして 一切支障は有りませんでした。今のところ。

VMwareのワンポイント
「本題」に戻る
 これも、毎回毎回本を引っ張ってしまう部分です。ので、とっととHPにアップしときます。
 ブリッジネットワークモードは[yes]でしょう。というか、eth一つだけなら訊かれません。
 NATネットワークモードに関しては、将来的に十分利用することは考えられなくもないような気がするような しないような感じもするので、一応。
Do you want this script to probe for an unused private subnet?
 と訊かれてきたらyesとしときます。
 次が問題。
Do you want this script to automatically configure your system to allow your Virtual Machines to access the host's filesystem?
 これ、よーするにVMware版Sambaを使いますか?と訊いてきてるわけ。
 自前でSamba立てるつもりなので、当然noを選んどきます。
 以上、注意する点終わり。

Samba動作確認最低限度の手順書
「本題」に戻る
 Sambaって、VMware使う際にも非常に便利なんだけど。設定が込み入っています。
 というわけで、日経Linux2001/06掲載のSamba動作確認の最低限度の手順書を元にして、マウントしたFAT32 をSambaで共有してみます。
 なんかすっげー回りくどい事してるよーな・・・。でも。WinLinデュアルブートにしたマシンがあって、 そこのディスクに、Winが動いていても、Linが動いていても。そして、万が一のバックアップや修復用に Winをメインに使うとなると、どうしてもこんな変な。まさにWin併用のワークステーション目的ならではの Sambaの使い方をせざるを得ない方も多いかと思われます。
 というわけで、始めましょう。
  1. 序盤戦 ネットワークの確認
  2. 中盤戦 必要最低限の設定での実行確認
  3. 終盤戦 実際にLinおよびWinからアクセス
  4. 延長戦 全角ユーザー名とプリンタ

序盤戦 ネットワークの確認

 まず、仮定するネットワーク環境を挙げます。
 ではいきますです。

1.Linux上で自マシンにIPアドレスでPING
 これが通らなかったらTCP/IP環境の設定段階でのエラーがある。
2.Linux上で自マシンにホスト名でPING
 Linuxマシンbigserverから自分に、ホスト名でping(ping bigserver)。
 自ホストのIPが127.0.0.1となる場合は/etc/hostsファイルの設定ミス。
(誤った/etc/hosts設定例)
127.0.0.1 bigserver localhost.localdomain localhost

(正しい/etc/hosts設定例)
127.0.0.1 localhost.localdomain localhost
10.1.0.10 bigserver bigserver.yourdomain

 FQDN(Fully Qualified Domain Name)を忘れないよーに。
 DHCPを使う場合はDNSと連携させてね。つっても、やったことないからわかりませんが。
3.LinuxマシンからWindowsマシンにIPアドレスでPING
 Linuxマシン上からping 10.1.0.20 でWindowsマシンにIPでPING。コレが通らなければTCP/IP ネットワークに異常有り。
4.LinuxマシンからWindowsマシンにホスト名でPING
 Linuxマシン上からWindowsクライアントACLIENTへPING(ping aclient)。
 通らないときはクライアントの名前解決が失敗している。/etc/hostsかDNSの設定を疑うこと。
 一応Sambaにアクセスできる場合もあるらしいが、SWATでのアクセスが異常に遅いときはこれが原因 の場合もある。

中盤戦 必要最低限の設定での実行確認

5.必要最低限の設定
 SWATを使って以下のように設定します。
[global]
	coding system = euc
	client code page = 932
	encrypt passwords = Yes
	map to guest = Bad User

[tmp]
	path = /tmp
 /etc/smb.confまたは/etc/samba/smb.confまたは/usr/local/samba/lib/smb.confに上記設定が 保存される。設定の確認にはtestparmコマンドを実行する。

6.Linux上でsmbclientを実行
 Linuxにログオンする。あらかじめsmbpasswdコマンドでログオンユーザーをSambaに登録しておくこと。 パスワードの注意点として、ユーザー名には大文字のアルファベットか含まれない方が良い。パスワードも同じ。
 結局ログオンした後、「smbclient -L bigserver」を実行する。
 使用できる共有サービス名の一覧が表示されるはず。
 ここで「Bad password」などが表示されたら、smb.confで不適切な「hosts allow」「hosts deny」 「valid users」設定のため、あるいはゲスト・アカウントが無効であるかのいずれか。というわけで、 testparmコマンドを使ってゲスト・アカウントの確認やhosts, valid userなどの設定をコメントアウト したりして実験してみる。
 「connection refused」ときたら、単純に接続に失敗している。smbdが起動していないか、inetd経由で 起動するようにしたはいいが設定に失敗しているか、など。
 とりあえず「netstat -a」コマンドでnetbios-ssnポートが「LISTEN」状態になっていることを確認。 この段階で「session request failed」とかきたらサーバーが接続拒否状態。「Your server software is being unfriendly」ときたらそもそもsmbdが実行時に無効なパラメータがつけられたか、起動時に致命的な ミスがあったかも。
 とにかくtestparmを実行してsmb.confの文法ミスがないか確認し、ログファイルの中身もしっかり確認 すること。ひょっとしたらTCP/IP設定、特にネットマスクとかがおかしくなってるかも。VMware版Sambaが 動いてるかどうかもチェック。ポート139を使った何かがすでに動いている場合はSambaはうまく動きません。
 代表的なセッション要求の拒否の原因としては。smb.confで以下の1つ以上を設定している場合NG。
hosts deny = ALL
hosts allow = xxx.xxx.xxx.xxx/yy
bind interfaces only = Yes
 これだと、127.0.0.1からつなげられない。
hosts allow = xxx.xxx.xxx.xxx/yy 127.
 という風に直す。あとSambaがローカルな資源にアクセスする場合。よーするにフツーに使う場合、「 binde interfaces only」パラメータは使用不可。

7.nmbdの動作確認
 Linuxマシン上で次のコマンドを実行。「nmblookup -B BIGSERVER __SAMBA__」
 LinuxマシンのIPを得られるはず。失敗したらnmbdが動いているか、ポート137/udpがLISTENになっているか。 そしてnmbdがinetd経由になっていないかどうか確認すること。
8.クライアントのNetBIOSによる名前解決
 Linuxマシン上で次のコマンドを実行。「nmblookup -B ACLIENT」
 このコマンドが動作しないなら、「nmblookup -B 10.1.255.255 ACLIENT」(ブロードキャストとNetBIOS 名でlookup)を実行。
 WindowsマシンのIPアドレスを得られるはず。失敗したらWindowsのTCP/IPのミスか、マシン名のミスか。 DNSを利用してのACLIENTの名前解決ができてないなら、ACLIENTのIPを使って上記のコマンドを実行してみる。
9.nmbdの確認その2
 Linuxマシン上で「nmblookup -d 2」を実行。よーするにデフォルトのブロードキャストアドレスに 対してブロードキャストの確認を行うわけ。WindowsマシンとLinuxマシンが同じサブネットの上に存在 しないときは-Bオプション付きで試してみる。
 これに失敗した場合は、smb.confに「interface」オプションを設定し、IPアドレス、ブロードキャスト アドレス、ネット・マスクを指定してみる。それでもだめならとにかくネットマスクやサブネットマスク の設定周りにミスがありそう。

終盤戦 実際にLinおよびWinからアクセス

10.Linuxマシン上での共有アクセス
 Linuxマシン上で次のコマンドを実行。「smbclient //BIGSERVER/TMP」
 パスワード入力プロンプトが表示されればsmbpasswdで設定したパスワードを叩く。そのほかのユーザー でテストするなら「-U username」をくっつける。あるいはパスワードも一緒に指定して。
 「smbclient //bigserver/tmp -U username%password」
 smb>プロンプトが表示されない場合はエラー。「invalid network name」なら[tmp]共有の設定ミス。 「bad password」というエラーなら、次のような原因が考えられる。
・smbpasswdコマンドにパスワードを設定していない。
・smb.confに「encrypt password = Yed」を設定していない。
・smb.confの「valid users」の設定がミス。
・大文字小文字混在パスワードを使用している。
・smb.confの「path=」が設定ミス。testparmで確認。
・smbpasswdと/etc/passwdでUIDが異なっている。
 これに該当しなければとにかくログを参照する。

 とにかく、接続できたなら「dir」「get」「put」などのコマンドが使えるはず。「help コマンド名」 でコマンドの用例が表示。「dir」コマンドを実行した場合、空き容量がちゃんとしているかチェック。
11.WindowsマシンからLinuxへIPでPING
 WindowsマシンACLIENTでLinuxマシンへIPでPINGする。コレが通らなきゃネットワークダウンかWindowsの TCP/IP設定ミス。
12.WindowsマシンからLinuxマシンへ名前でPING
 これが通らなきゃDNSかWINSの設定ミス。といっても、DNSを使っていないときはhostsファイルの設定し忘れ。
 一応Windowsにも/etc/hostsに相当するファイルがある。Windows9xでは%windir%\hosts、WindowsNT系列 なら%windir%\system32\drivers\etc\hostsにある。書式も同じ。ひょっとしたらWin9xではhosts.*で検索しないと 見つからないかも。
13.IPアドレスによるnbstat
 Windowsマシンから以下のコマンドを実行。「nbstat -A SambaサーバーのIPアドレス」
 これで応答がなけりゃ、Sambaが動いていないとゆーこと。
14.Linuxマシン名でnbstat
 Windowsマシンから以下のコマンドを実行。「nbstat -A Sambaサーバーのホスト名」
 今回の例なら「nbstat -A BIGSERVER」。ホスト名は大文字小文字区別無いので「nbstat -A bigserver」 でも大丈夫。
 これで応答がなければNetBIOSの名前解決失敗か、nmbdのミス(こっちの方が殆ど)。解決するには 以下のいずれか一つの方法を用いる。
・nmbd設定やり直し。
・BIGSERVERをWINSサーバにしてしまう。
・BIGSERVERとWindowsマシンで同一のWINSサーバーを使うようにする。
・TCP/IP設定のDNSで、DNSを利用してNetBIOS名前解決を可能にする。
・BIGSERVERのアドレスをWindowsマシンのlmhostsファイルに加える(hostsファイルと同様)。
15.Windowsマシンからnet viewコマンド
 Windowsマシンから以下のコマンドを実行。「net view \\BIGSERVER」
 成功すればSambaで利用できる共有サービスの一覧が表示される。
 「network name not fount」:NetBIOSの名前解決失敗かsmbが起動してない。
 「invalid network name」「bad password error」:前述の「smbclient -L」のテストと同じ解決策。
 WindowsはSambaに接続するときWindowsにログオンしたユーザー名を使用して接続を試みる。よーするに このときのアカウントがSamba側で有効であることが大事。
 「specified computer is not receiving requests」:LinuxマシンがTCPサービス経由で接続でき てない。TCP_Wrappersを使用していないことを確認して、必要で有ればクライアントのアドレス、あるいは サブネットマスクを/etc/hosts.allowに追加しとく。
16.Windowsマシンからnet useコマンドの実行
 Windowsマシンから以下のコマンドを実行。「net use x: \\BIGSERVER\TMP」
 パスワードを入力すると「command completed successfully」が表示されるはず。
 でなければ、今までの設定をもう一度確認してみる。
 smb.confに「security=share」と設定していた場合、使用しているユーザー名で接続できないことがある。 この場合はsmb.confの[tmp]セクションに「user = USERNAME」などとして、入力したパスワードに対応する ユーザー名を追加しておく。WindowsとLinuxとでユーザー名が異なる場合はユーザー名のマッピング・オプション (smb.confの「usernamemap」オプション)を用いる必要がある。
17.Linuxマシンからnmblookupコマンドを実行
 Linuxマシンから以下のコマンドを実行。「nmblookup -M TESTGROUP」
 対象ワークグループ(この例だとTESTGROUP)のマスター・ブラウザのIPが表示されるはず。
 表示されないときはマスター・ブラウザの選定過程で失敗。しばし待つ。
 それでもだめならsmb.confに「preferred master = yes」を指定すると起動時に優先的にマスター・ブラウザ になってくれる。
18.ブラウジング
 あとはネットワークコンピュータを参照すれば、だいたいアクセスできるはず。
 「invalid password」とかこの段階に至っても表示されてしまった場合は、おそらくWinNT系列でユーザー レベルのセキュリティ・モードを使用し、なおかつ暗号化されたパスワードを受け付けないサーバーのブラウズ を拒否しているのかも。
 そんなときはsmb.confに「security = server」と「password server = Windows_NT_Machine」と指定するか 、暗号化されたパスワードを使用できるようsmb.confに「encrypt passwords = yes」と設定する。


・・・お疲れさまでした。ここまでくれば、手順通りに進んでいればTMPに難なくアクセスできたと思います。
 しかし。私の場合さらにもう一仕事有りました。
 使用しているノーパソはWin98SEなのですが、実はユーザー名を「風晶」としてログインしているのです。
 これはまずい。
 全角文字じゃあ、smbpasswdに登録できない。usernamemapオプションも全角文字じゃあ不安。
 しかも、そもそもパスワードも使ってない。ESCか何も入力せずRETURNで起動してきた。
 これではSambaに接続できない。
 というわけで、延長戦です。

延長戦 全角ユーザー名とプリンタ
 まず、そもそもの最終目標は「Linux上でマウントしたFAT32パーティション(NLS対応済み)をSambaで 共有かける」です。
 何はともあれ、パスワードなしでも。変なユーザー名でもSambaに接続できるようにしなければなりません。
 というわけで、guest okを追加します。
[win_data]
	comment = Windows Partition
	path = /mnt/data
	read only = No
	guest ok = Yes
 /mnt/dataとゆーのがFAT32パーティション、すなわち/dev/hda1です。
 んで、さらに[global]で、良く分かりませんが「security = SHARE」にします。
 パスワードなしでもguestにマッピングしましょう(注意:ちゃんとした場所では絶対に やっちゃいけません)、「map to guest = Bad Password」!!
 念のため、「encrypt passwords = Yes」。
サンプル例です。
[global]
	coding system = EUC
	client code page = 932
	workgroup = HAGANE
	netbios name = SEISYUU
	server string = Samba Server %v at %h
	security = SHARE
	encrypt passwords = Yes
	map to guest = Bad Password
	log file = /var/log/samba/%m.log
	max log size = 0
	socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
	dns proxy = No
 これでようやく接続できました。
 ちなみに、もう解決してしまっているのですが、たとえFAT32でも、なぜかcoding system = EUC、 client code page = 932で正常に(全く正常に。つまり、Win2kの方で起動して確認をとって。)SJISで ファイルのやりとりができていました。


・・・ふう。長かったがようやく今までインストールするたびにあさっていた資料をまとめ上げてWebに 紹介できる。疲れた。
・・・え?プリンタの設定?うううんんん・・・。いや、やりましたよ。
 ポイントはプリンタについてくるWindows用のプリンタドライバを使いたければRaw queueとして フィルタを介さず生で出力するようにprintcapなりCUPSで設定しておくというところですか。
 あとはお定まりのユーザー名問題さえguest okにしちまえば、たぶん大丈夫かな、と。
 実際、自分も適当にやってたらプリンタに関しては問題なく動いてしまったので。
 一応[printers]周り、載せときます。
[printers]
	comment = All Printers
	path = /var/spool/samba
	printable = Yes
	browseable = No
[DeskJet840c]
	path = /var/spool/samba
	read only = No
	guest ok = Yes
	printable = Yes
	printer name = DeskJet840c
目次に戻る

後書き或いは感想

 なんだか、ちゃんとしたネットワークで運用するには禁じ手のような設定ばかり延長戦で行ったような気もしますが。
 まあ、自宅で細々とWinLinデュアルマシン+VMwareを使ったりする人には、そしてすでに全角ユーザー名 でログオンして使っているパソコンからもSambaにつなぎたいときは。
 まあ役に立つのではないかな、と。

今回はコレでおしまいです。お疲れさまでしたー。
目次に戻る

トップページ>>>「いろいろ」目次