ttt

getttyent

(QEMU)ApacheとWebDAVでファイル共有

2005-06-21 23:37:22 | デジタル・インターネット

今日は、QEMUの中のFreeBSDと、ホストOSであるWindowsとの間で、ファイルの受け渡しができるようにします。

そのために、FreeBSDに、Apache2をインストールします。WebDAVの機能は、Apache2には標準で備わっています。

■ Apache2のインストール

QEMUのFreeBSDを起動させ、前回やったように、PuTTYでログインして、SSHポートフォワーディングができるようにしておきます。

Apache2のバイナリ・パッケージは、このへんにあります。

  ftp://ftp2.jp.freebsd.org/pub/FreeBSD/ports/
  i386/packages-5-stable/www/apache-2.0.54.tbz

suでrootになったあと、pkg_addでインストールします。

freebsd# pkg_add ftp://ftp2.jp.freebsd.org/
pub/FreeBSD/ports/i386/
packages-5-stable/www/apache-2.0.54.tbz

Fetching ftp://ftp2.jp.freebsd.org/pub/FreeBSD/
ports/i386/packages-5-stable/www/apache-2.0.54.tbz...

例によって、ダウンロードしたファイルがぶっ壊れていることが多いようですが、根気よく、何度か繰り返せば、なんとかインストールできるでしょう。

fetchがおかしいんじゃないかとも思うのですが。

freebsd# fetch ftp://ftp2.jp.freebsd.org/pub/FreeBSD/ports/
i386/packages-5-stable/All/expat-1.95.8_1.tbz

expat-1.95.8_1.tbz                             95% of  133 kB  338 kBps
fetch: expat-1.95.8_1.tbz appears to be truncated: 130799/136517 bytes
くぅ~~~~なんでだよ・・・

■ Apache2の設定

/etc/rc.conf
に、以下の1行を追加。

apache2_enable="YES"

/usr/local/etc/apache2/httpd.conf を編集する。

ServerName freebsd.qemu.local:80

コメントアウトされている、以下の2行を有効にする。

LoadModule dav_module libexec/apache2/mod_dav.so
LoadModule dav_fs_module libexec/apache2/mod_dav_fs.so


おしまいのほうに、こんなかんじで追加。

DavLockDB /var/tmp/apache/DavLock
Alias /dav "/home/dav/"
<Directory /home/dav>
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    <Limit GET POST OPTIONS PROPFIND>
        Order allow,deny
        Allow from all
    </Limit>
</Directory>
<Location /dav>
DAV On
    Options FollowSymLinks Indexes
    AuthType Basic
    AuthName "WebDAV"
    AuthUserFile /usr/local/etc/apache2/webdav.passwd
  <Limit GET PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
    require valid-user
  </Limit>
</Location>


■DavLockデータベースファイル用のディレクトリの作成

freebsd# mkdir /var/tmp/apache
freebsd# chown www:www /var/tmp/apache

■WevDAVのファイル置き場を作成

freebsd# mkdir /home/dav
freebsd# chown www:www /home/dav

■/etc/hostsの編集
ここでは、以前、ホスト名を「freebsd.qemu.local」としていました。これを、/etc/hostsに登録しておきます。

10.0.2.15       freebsd.qemu.local

■認証で使うユーザーの登録

htpasswdコマンドで、パスワードファイルの新規作成と、ユーザー登録を行います。
パスワードファイルを新規作成するときだけ「-c」を指定し、既存ファイルに追加するときは「-c」はつけてはいけません。

パスワードファイルを新規作成し、ユーザーnhhを追加する例

freebsd# htpasswd -c /usr/local/etc/apache2/webdav.passwd nhh
New password:
Re-type new password:
Adding password for user nhh

■Apacheの起動

freebsd# /usr/local/etc/rc.d/apache2.sh start
Starting apache2.

httpdが起動しているのを、確認します。

freebsd# ps ax | grep ttp
1103  ??  Ss     0:00.29 /usr/local/sbin/httpd
1104  ??  S      0:00.04 /usr/local/sbin/httpd
1105  ??  S      0:00.04 /usr/local/sbin/httpd
1106  ??  S      0:00.04 /usr/local/sbin/httpd
1107  ??  S      0:00.04 /usr/local/sbin/httpd
1108  ??  S      0:00.04 /usr/local/sbin/httpd
1110  p0  R+     0:00.08 grep ttp

起動していない場合は、エラーログ/var/log/httpd-error.logを見て、問題点を修正します。

Proxyサーバの設定を修正します。localhostへは、proxyなしでアクセスするようにします。どうせなので~/.cshrcにも書いておきましょうか。

freebsd# setenv no_proxy localhost

動作確認をします。

freebsd# w3m http://localhost/

apache01

■ QEMUに-redirを追加する

ホストOSから、ゲストOS(FreeBD)内のApacheにアクセスできるようにするために、qemu-freebsd.batを書き換えて、-redir tcp:10080::80を追加します。

START qemu.exe -L . -m 128 -hda freebsd.img -enable-audio -localtime -redir tcp:10022::22 -redir tcp:10080::80

設定を反映させるために、一度、FreeBSDをshutdown -p nowして、QEMUを起動しなおします。

■ Windowsから動作確認

Windows側で、ブラウザで「http://localhost:10080/」にアクセスします。

apache02

うまくいかない場合のチェックポイント
    ・FreeBSD上で、httpdが起動しているか?
  ・/var/log/httpd-error.logを確認
  ・/etc/rc.confを確認
  ・dmesg -aでapache2が起動しているかを確認
    ・QEMUの-redirが指定されているかを確認

さらに、認証によるアクセス制限が機能しているかを確認するために、「http://localhost:10080/dav/」にブラウザでアクセスしてみます。パスワードを尋ねるダイアログボックスが表示されるはずです。
これには、さきほどhtpasswdコマンドで登録したユーザーの名前とパスワードを入力します。

apache03

認証がうまくいけば、空のフォルダが表示されます。
apache04

■ Windowsで「ネットワークプレースの追加」を実行

「マイネットワーク」の中にある「ネットワークプレースの追加」をダブルクリックします。ネットワークプレースの場所には、QEMUの中のFreeBSDで動いているWebDAVサービスをさす「http://127.0.0.1:10080/dav/」を入力します。

apache05

ユーザー名とパスワードをたずねてくるので、先ほどと同じものを入力します。うまくいかない場合は、
  Windows2000でWebDAVが使えない問題

を参照して、解決してください。WindowsXP(たぶんSP2以降)でも、別のことが原因で、うまくいかない場合があります。

うまくいけば、こういうダイアログが表示されます。

apache07

このあと、なぜか、もう一度、認証が要求されます。

空っぽのフォルダが表示されます。

apache09

このフォルダに対して、ファイルのコピーなどが普通に行えます。このフォルダを通じて、FreeBSDとWindowsとの間で、ファイルの受け渡しができるわけです。

■ファイル名の文字化け

ところが、このフォルダ内で、日本語のファイル名をつかったりすると、文字化けしてしまうことがあります。
たとえばフォルダを新規作成します。

apache10

一見うまくいってるかのように見えますが、F5キーを押して、最新の情報へ更新すると、見事に文字化けしています。実は、環境によっては、化けたり化けなかったりするので、とっても気持ち悪いのですが・・・

apache11

日本語のファイル名を使わなければ、とくに問題はないのですが、気持ち悪いので、
次回、この文字化け問題を解決します。


Windows2000でWebDAVが使えない問題

2005-06-21 00:29:33 | デジタル・インターネット

WindowsXPでWebDAVにアクセスできない問題なら、このまえ見つけて解決できたのですが、

[SPS] Windows XP クライアントから FQDN の URL を指定して Web フォルダを作成できない

パスワード認証をいくらやっても拒否されてしまいます。
これを修正するには、要するに、「管理ツール」の「サービス」の中の「WebClient」を停止してから、ネットワークプレースの追加を実行すればよい

今度は、Windows2000でWebDAVにアクセスできない問題をみつけてしまいました。なんで、Windowsって、こうも落とし穴が多いのでしょうか???

「ネットワークプレースの追加」で、「http://192.168.0.21/dav」とか指定した場合に、

● うまくいくWindows2000の場合のApache2のログ
192.168.0.26 - - [20/Jun/2005:23:58:38 +0900]
"OPTIONS /dav HTTP/1.1"  200 - "-" 
"Microsoft Data Access Internet Publishing Provider DAV 1.1"

● うまくいかないWindows2000の場合のApache2のログ
192.168.0.27 - - [21/Jun/2005:00:13:23 +0900]
"OPTIONS / HTTP/1.1" 200 - "-"
"Microsoft Data Access Internet Publishing Provider Cache Manager"

うまくいかないほうでは、なぜかパスが/davではなく/になっているのと、user-agentが違ってる。

googleすること29分。ようやく見つけました。残念ながら、オリジナル情報がでてこなかったので、googleキャッシュへのリンク

[webdav-jp:0566] (解決) Windows2000から WebDAVに接続できない

キャッシュがなくなっちゃうと困るので、肝心なところだけ引用しておきます。

【解決方法】
(1) c:\winnt\system32\webfldrs.msiを実行
(2) [Select reinstall mode]を押す
(3) 以下の項目にチェック
Repair all detected reinstall problems
Force all files to be reinstalled, regardless of checksum or version
Verify that required user registry entries are present
Verify that required local machine registry entries are oresent
(4) [OK]を押す
(5) [Reinstall]を押す

なんだかわかんないですが、ぶっこわれていた、ということらしいです。