2005年6月22日水曜日

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

今日は、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



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




0 件のコメント:

コメントを投稿