X の環境が充実しつつあると言っても Windows から入って Windows に慣れ親しんだ身としては、 まだまだメインとして Linux を使うことはできません。 しかし WebPage 作成(といっても CGI テストのためですが)には Linux 端末をファイルサーバとして使うと何かと便利です。 それにウチの Linux 端末には FDD も CD-ROM もつけられないのでコレは必須。
samba-2.0.7-ja-2.2.tar.bz2 をいままで通りインストール。
samba-2.0.7-ja-2.1.tar.bz2 を展開してインストール。 configure オプションの --with-swat-langfile は自動で認識してくれるようなので必要ないみたいです。
# tar xIf samba-2.0.7-ja-2.1.tar.bz2 # cd samba-2.0.7-ja-2.1/source # ./configure --with-i18n-swat --with-smbmount # make; make install
これをインストールしたら、メイン環境である Windows 2000 への smbmount が利用できるようになりました。 いままでは何度コンパイルし直してもエラーが返ってきてどうしようもなかったのに。とにかく万歳。 これで我が Linux BOX の欠点でもある CD-ROM がサポートされた?
samba-2.0.7-ja-1.2.tar.gz を展開してインストール。 configure オプションの意味は 私的 Q & A を参照。
# tar xzf samba-2.0.7-ja-1.2.tar.gz # cd samba-2.0.7-ja-1.2/source # ./configure --with-i18n-swat --with-swat-langfile=ja --with-smbmount # make; make install
ソースからのビルドなので /usr/local/samba/ 以下に Samba を構成するファイルが作成されます。 smb.conf は lib/, smbpasswd は private/ などです。
Windows 98 からだときちんとネットワークコンピュータから samba-2.0.5a-0.5.2vl1 上のホームディレクトリが表示されてきちんとアクセスできるが、 Windows 2000 からだと「リモートプロシージャコールに失敗し、実行されませんでした。」となってしまう。 しかしネットワークプレースの追加で直接共有名を入力する(\\netvine\public)とアクセスできるようになる。 どこかでこのようなことを見かけたけど、何だったかなぁ。
その後 fj.os.ms-windows.win2000 を見ていたら Windows 2000 から samba-2.0.5 以前の環境へアクセスできないとの記事あり。 NT なんたら support を指定すれば 2000 からでも参照できるようになるが、こうすると 9x からアクセスできなくなるらしい。 2.0.6 ではこの問題が解決されているとのことを聞きつけ、さっそく samba-2.0.6.tar.gz を拾ってきた。
今まで rpm でしかインストールしたことがないので、ソースからインストールしたのは初。 適当なディレクトリにソースを展開して、そこで configure → make → make install で終わり。 でもこのままでは起動時に既存の /usr/sbin/smbd, nmbd が起動してしまうので /etc/rc.d/init.d/smb の daemon smbd -D, daemon nmbd -D をそれぞれ daemon /usr/local/samba/bin/smbd -D, daemon /usr/local/samba/bin/nmbd -D と修正。 設定ファイル /etc/smb.conf も /usr/local/samba/lib/smb.conf へ移動。
先日再起動したら smbd nmbd が起動していない。よくよく /etc/rc.d/init.d/smb を見ると smb.conf の存在チェックのところが旧パス(/etc/smb.conf)のままだったのでここでスクリプトが終了してしまっていたようだ。 ここを /usr/local/samba/lib/smb.conf に修正。う〜ん、間抜け...
Vine 1.1(samba-1.9.18p10-5vl3.i386.rpm)付属の物より新しい samba-2.0.5a-0.5.2vl1.i386.rpm があったのでそれを拾ってきてインストール。 何が違うかよく分かっていない。
以下は私の環境で利用している smb.conf の一部です。詳しい設定は SWAT 上でマニュアルを見ると便利です。
[global] hosts allow = 192.168.1.0/255.255.255.0 # アクセスを許可する IP の範囲。カンマかスペースで区切る。 workgroup = GAINGROUND # Windows で使用するワークグループ名。大文字小文字は関係ありません。 server string = Samba%v@%h # Explorer に表示されるサーバのコメント。 coding system = cap # 何も考えずデフォルトの CAP を指定しています。 mangle case = no # Windows 9x で作成したファイルを表示するために必要? case sensitive = no # 大文字小文字を区別しない。 default case = upper # 全て大文字に変換。 preserve case = yes # Windows から入力されたファイル名をそのまま利用する。 short preserve case = yes # 〃 8+3 形式のファイル名をそのまま使用するか os level = 32 encrypt passwords = yes # 9x NT がクライアントなので暗号化パスワードを使用する。 smb passwd file = /usr/local/samba/private/smbpasswd update encrypted = yes null passwords = yes guest account = nobody share modes = yes lock directory = /var/lock/samba log file = /var/log/samba/log.%m [homes] # 各ユーザーのホームディレクトリ comment = %U's Home Directory browseable = no # Yes にすると homes がディレクトリとして見えてしまう。 guest ok = no create mode = 0644 directory mode = 0755 read only = no [src] comment = Source Directory path = /usr/local/src/ browseable = yes create mode = 0755 directory mode = 0755 writable = yes read only = no
コメントに 2 バイト文字を利用する場合は、smb.conf を Shift_JIS で記述しないとエクスプローラで文字化けします。
ここでのパスワードとは Linux のパスワードとも Windows のパスワードとも無関係で、 Samba にアクセスするためのユーザー登録を行います。 新規に Samba のユーザーを作成する場合と、Linux に登録されているユーザー全てを移行し、個別にパスワードを設定する場合の 2 通りがあると思いますが、 まずは新規ユーザー登録を行います。
# smbpasswd -a hogehoge New SMB password: Retype new SMB password:
ここではユーザー hogehoge を例にしていますが、hogehoge が Linux ユーザーとして登録されていないとエラーになります。 map ファイルを使ってユーザのエイリアスを作成すれば Linux 登録ユーザーでなくても OK なようですが、詳細は調べていません。
次は既存の Linux ユーザー全てを smbpasswd ファイルに設定する方法です。 移行するにはシェルスクリプト mksmbpasswd.sh を使用します。 このスクリプトが無い場合は 私的 Q&A を参照。
# mksmbpasswd.sh < /etc/passwd > /usr/local/samba/private/smbpasswd
続いてユーザーごとにパスワードを設定。
# smbpasswd hogehoge New SMB password: Retype new SMB password: Password changed
Samba には SWAT(Samba Web Administration Tool) という各種設定をブラウザ上で行うことの出来るツールがあります。 これを利用すれば smb.conf や共有ディレクトリなどの設定が手軽に行えます。 利用するには、ブラウザの URL に Linux 端末のアドレス、ポート番号に 901 を指定します。 私の環境では、http://192.168.1.1:901/ とします。 すると HTTP 基本認証ダイアログが出ますので、ユーザー名に root、パスワードに root のパスワードを入力すると SWAT の初期画面が表示されます。
Samba サーバーの 901 ポートにアクセスできないのですが...
Linux 端末の 901 のポートが開かれていない可能性があります。
まず SWAT 用のポート 901 を /etc/services に登録します。
swat 901/tcp swat 901/udp
SWAT を inetd 経由で起動するため、次に /etc/inetd.conf に SWAT 用の設定を追加します。
swat stream tcp nowait root /usr/sbin/tcpd /usr/local/samba/bin/swat
inetd.conf を書き換えたら inetd を再起動します。
# kill -HUP `cat /var/run/inetd.pid`
configure オプションに --with-i18n-swat オプションを付けてコンパイルしましょう。 langfile の詳細はインストールディレクトリの lib/swat-i18n.txt を参照。
smbmount が無いのですが...
configure オプションに --with-smbmount を付けてコンパイルしましょう。
Text file busy って何?
Windows でホームディレクトリを共有して CGI のコーディングなどを行っていると、たまに CGI が起動できなくなることがあります。 コンソールで実行してみるとこのエラーが表示されてしまいます。 原因はよく分かりませんが、smb.conf に oplocks = no を書き加えると良いそうです。
RPM インストールのみの特権?なのかソースから build するとこのスクリプトが無くて毎回困っています。
中身は単なる awk スクリプトのようですのでココに書き留めておきます。
# 必ずしもこれが使えるとは限りません
#!/bin/sh awk 'BEGIN {FS=":" printf("#\n# SMB password file.\n#\n") } { printf( "%s:%s:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000: %s\n", $1, $3, $5) } '
Windows 端末の共有ディレクトリをマウントしたいのですが...
samba には smbmount というコマンドがありますのでこれでマウントします。アンマウントするには smbumount を利用します。
# smbmount //< Windows 端末名>/<共有名> <マウントポイント> [ -o username=<ユーザー名>,password=<パスワード> ]
host01 という端末の D という共有(ユーザー名: scot, パスワード tiger)を /mnt/win/d へマウントしたい場合は以下のようにします。
# smbmount //host01/D /mnt/win/d -o username=scot,passwd=tiger
セグメントを超えた接続。lmhosts で通る case と通らない case があるし...
/usr/local/samba/lib/lmhosts ってファイルなのかなぁ...