Namazu-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mknmz-squid 実行時にメディアタイプの取得に失敗し停止



うまく行きました。ありがとうございました。
結局のところ2つの問題が重なっていました。

● 原因と解決 ●
処理のながれ
MMagic -> SQUID -> filter() -> DATA(text/html,image/gif, etc) -> decide_type()

1、MMagicでSQUIDの認識失敗
	解決法:add_magic()を書き換える
2、squid-cacheで認識されたヘッダを取り除かれたDATAをフィルタに戻して再評価する形式際のメディアタイプ取得に失敗。
	解決法:filter()を書き換える。

● ファイル ●
変更したファイルは以下の場所に置いておきます。
http://tat6.ice.ous.ac.jp/akita/filez/squidcache.pl
add_magic の都合によりとりこぼしあり。大体うまくいく。


● 詳細 ●
> <200102061150.UAA23642@xxxxxxxxxxxxx>の記事において
> 私は書きました。
> 
> http://tat6.ice.ous.ac.jp/akita/filez/0000123A
>   を参考に書いてみました。
> 
> $magic->addSpecials("application/x-squid-cache",
>                         "^Server:",
>                         "^Last-Modified:",
>                         "^Connection:",
>                         "^Accept-Ranges:",
>                         "^ETag:");
> 
> 
>   これを add_magic() に、addFileExts() の代わりとして入れてみるとどう
> でしょうか。
>
試してみたところ。前と同じ 0000123A で止まってしまいました。
結論からいえば、add_magic() の設定は上の変更でうまくいきました。

変更されたadd_magic()>>
sub add_magic ($) {
  my ($magic) = @_;
  #$magic->addMagicEntry('0 string HTTP/1 application/x-squid-cache; x-type=squid-cache'); 
  $magic->addSpecials("application/x-squid-cache", "^Server:", "^Last-Modified:", "^Connection:", "^Accept-Ranges:", "^ETag:"); # この行で正しく認識される。そのかわり、とりこぼしがあると思われる。
  $magic->addFileExts('^[0-9A-Z]{8}$' => 'application/x-squid-cache; x-type=squid-cache'); # これで正しそうだが、無視されている気がする。
  # 対象ファイルはこんな感じ:/var/spool/squid/00/07/000007E2
  return;
}

ログ>>
@@ モジュール: squidcache.pl
@@ /var/spool/squid/00/12/0000123A
@@ Processing squid cache file ... (*1)
// decide_type: name: application/octet-stream, cont: text/plain
// 検出されたタイプ: text/plain
// pre_codeconv
ログ終

(*1)の行がない: addFileExtsのみ
この場合は x-squid-cache だと認識されず、この後すぐに終了してしまう。

(*1)の行がある時: addSpecialの設定を追加、filter() を書き換えて成功
このログでのポイントはメディアタイプが Squid cache であるということを
認識できていて squidcache.pl が起動されていることです。
そして、filterでヘッダを取り除かれたデータのメディアタイプ取得に失敗するのです。
これについて、squidcache.pl の filter() でテキストファイル以外はデータの大きさを
ゼロにすることで解決しました。
      if ($content_type !~ /^text/) {
	util::vprint("Processing squid cache file is not text ($content_type, $url)...\n");
        $$contref = '';    #←ここで出力ファイルのサイズを0にする。
	$$orig_cfile = ''; #←ここで出力ファイルのサイズを0にする。
      }


--
Kazuki Akita