2014年10月19日日曜日

imagemapでhrefのtarget='_blank'を何とかする

imagemapsterなんてのを使って調子に乗ってたのだが
外部サイトへのリンクを新しいウィンドウを開いてみせようと
<area shape="rect" coords="0,0,100,100" href="http://example.com" target="_blank" title="example" />
なんて記述しても、Firefox等では新しいウィンドウを開いてくれないよね。

仕方ないので
<area shape="rect" coords="0,0,100,100" href="javascript:window.open('http://example.com', '_blank');void(0);" title="example" />
なんてことをして、無理やり解決してみた。

2014年9月2日火曜日

MacOSX版Thunderbird 31でフォルダが消えたように見える時

MacOSX版Thunderbird 31で左側ペインに表示されるはずの
受信フォルダが全て見えなくなった。

しかし、アカウント設定も残っているし、受信ボタンを押すと
ステータスバーで受信されている様子が見える。

いろいろ、試行錯誤して
ファイルメニューから新規フォルダの作成を試した所
なぜか、今まで見えなかった既存フォルダが現れた。

これで、一件落着 と思ったのだが、
Thunderbirdを再起動すると再び見えなくなる。

恒常的に使うためには、32bitモードにして
利用するのが良いようだ。

詳細は下記より
http://forums.mozillazine.jp/viewtopic.php?f=3&t=14887

2014年8月13日水曜日

mod_pagespeed link後その2

portsのパッチファイルを起こす方は上手くいかないので
手パッチバージョンを動かす方向で考えて見てるが
opencvとaprのライブラリを解決した上で
モジュールをロードすると
Can't locate API module structure `pagespeed_module'
となってエラー。

nmでみると
% nm /usr/local/libexec/apache22/mod_pagespeed.so | grep pagespeed_module
00399674 d pagespeed_module

再度手詰まりで中段

2014年8月10日日曜日

mod_pagespeed linkまではできたものの

mod_pagespeed.soをapacheに読み込ませるとopencvのダイナミックライブラリーが解決出来ていない模様 (主にopencv_exception)

とりあえず、リンクまで出来たものを別ディレクトリーへコピーしておいて、patchをまとめて portsのクリーンな状態からmakeしようとしたら ap_log_errorが解決出来ない問題に再び直面。

どこかpatchに取り込み忘れてるのかなぁ

2014年8月8日金曜日

FreeBSD10 mod_pagespeed make 本体のlink

とりあえずap_log_error絡みリンクエラー等は
mod_pagespeed.target.mkに手パッチで

        -Ithird_party/httpd/src/include \
        -I/usr/local/include/apache22 \

のようにパッケージ内のインクルードファイルを優先する事で解消
mod_pagespeed本体のリンクは出来た
(システム側の/usr/local/include/apache22は要らないかもしれないが)
リンク出来ただけなので動作するのかはまだ見てないが・・・

サブユーティリティの
css_minify_main、html_minifier_main、js_minifyがlibthrなどを要求するので
どうするか

FreeBSD10とclangだけの対応になるし、*.gypから生成されたmakefileを
手パッチしているので、本質的にはgypファイルの中身を理解して修正しないと
意味ない。

portsはFreeBSD 9 / 10で共通だが、今の状態じゃマージ難しそうだ


2014年7月6日日曜日

全くの別件ですが

ここのところの内容と全く関係ないけど自分用のメモ
nginx ビルドオプション for 1.7.2
./configure --with-http_ssl_module --with-pcre-jit --with-zlib=./zlib-1.2.8 --with-http_spdy_module

2014年7月5日土曜日

ap_log_error等の所在

/usr/ports/apache22のmoduleでap_log_errorを呼び出してるものをサンプルとして確認すると#include "http_log.h"している様に思える

ではmod_pagespeedにないのかというと
./work/mod_pagespeed_source_1.2.24.2/mod_pagespeed/src/third_party/httpd24/src/include/http_log.h
./work/mod_pagespeed_source_1.2.24.2/mod_pagespeed/src/third_party/httpd/src/include/http_log.h
という感じに存在してるので、これincludeできてないのかなぁ?

ap_log_errorはどこよ

前回からの続き

nm /usr/local/lib/libapr*.a | grep ap_log_errorしても
なにも出てこない。

libapr関連じゃないのか?


2014年7月4日金曜日

FreeBSD10R mod_pagespeed未完のその4

前回の
'strtoul_is_not_a_portable_function_use_strtol_instead' in the global namespace
となる件は

third_party/httpd24/src/include/httpd.h
third_party/httpd/src/include/httpd.h
の2カ所に
 #define strtoul strtoul_is_not_a_portable_function_use_strtol_instead
となってる箇所があるので、強引に #if 0の手パッチ

これでいよいよlibmod_pagespeed.soのリンクまでいくのだが
undefined reference to `ap_log_error'
などがエラーとして出てくる

mod_pagespeed.target.mkのLIBSに -lapr-1 -laprutil-1を追加しても
状況変わらず。(もちろん-L/usr/local/lib 前提で)

さてどうするかな

2014年7月3日木曜日

FreeBSD 10Rのmod_pagespeed 未完の停滞編

前回のopencvのライブラリとリンク出来ない件は
pagespeed_automatic_test.target.mkや mod_pagespeed_test.mkなどに
LIBSの定義があるので
 -lopencv_imgproc -lopencv_highgui -lopencv_core -lopencv_regacy
を追加して mod_pagespeed_testなどのリンクは完了。

続くフェーズのmod_pagespeed/net/instaweb/apache/instaweb_handler.oの
make中に

マクロ展開しまくった挙句に
error: no member named
      'strtoul_is_not_a_portable_function_use_strtol_instead' in the global namespace
using ::strtoul;

なんていうエラーが出てきたのだが strtoulを使用している所が見つからない。

2014年7月2日水曜日

FreeBSD10のmod_pagespeed 未完の泥縄編

前回instaweb_data2cがコアダンプしてしまってmod_pagespeedのmakeがすすまない件

9.2Rまでの慣例にならってUSE_GCC=yesな環境でmakeしていたのだが、出来た中間処理プログラムがcoredumpするに至ってgdbなどで眺めていたのだが、そもそもmainまで飛んでこないので、gccのランタイムと相性悪そうという疑いを持ちはじめた

そこでFreeBSD10なんだからと
CC=             clang
CXX=            clang++
GYP_DEFINES+=   clang=1
としていくと、既知のコンパイルエラーは起きるが #undef major #undef minorを挿入したり、c++のtr1拡張由来の部分を削除したり、wcschrがambitiousといわれて直前に using ::wcschr;を入れたりと手パッチの応酬でなんとかmod_pagespeedtestのリンクフェーズまで来た。

しかし、opencvのライブラリを探しに行ってldが見つけられない模様
どっかの.gypiを修正すればいいんだろうけど、さてはて

あと
clang c++はgcc g++互換なので #ifdef defined(__GNUC__)にもマッチしてしまう
&& !defined(__clang__)を追加して回避

2014年6月21日土曜日

FreeBSD 10 portsのmod_pagespeed

FreeBSDのmod_pagespeedでmake通らなくなってる件
pagespeed_output.pbでコンパイルエラーとなる部分は
http://selfnotepage.blogspot.jp/2011/08/modpagespeed-freebsd.html
 を参考にして #undef major #undef minorする場所を

*** third_party/protobuf/src/google/protobuf/repeated_field.h.org       Tue Oct 29 02:45:15 2013
--- third_party/protobuf/src/google/protobuf/repeated_field.h   Sun Jun 22 00:22:21 2014
***************
*** 50,55 ****
--- 50,59 ----
  #include <iterator>
  #include <google/protobuf/stubs/common.h>
  #include <google/protobuf/message_lite.h>
+ #if defined(__FreeBSD__)
+ #undef major
+ #undef minor
+ #endif

  namespace google {

----
EOF
repeated_field.hの56行目辺りに移したらかなりすすんだけど

gen/data2c_out/instaweb/net/instaweb/rewriter/add_instrumentation_out.cc
の処理中にエラー 。
g++49がコアダンプしてるのかと思いきや
派生物のinstaweb_data2cというプロセッサーがコアダンプ

#undefする場所はここじゃないってことかなぁ

===>  Building for mod_pagespeed-1.2.24.2_2,1
gmake[1]: Entering directory `/usr/ports/www/mod_pagespeed/work/mod_pagespeed_source_1.2.24.2/mod_pagespeed/src'
  RULE instaweb_add_instrumentation_data2c_data2c_0 out/Release/obj/gen/data2c_out/instaweb/net/instaweb/rewriter/add_instrumentation_out.cc
gmake[1]: *** [out/Release/obj/gen/data2c_out/instaweb/net/instaweb/rewriter/add_instrumentation_out.cc] Segmentation fault (core dumped)
gmake[1]: Leaving directory `/usr/ports/www/mod_pagespeed/work/mod_pagespeed_source_1.2.24.2/mod_pagespeed/src'
*** Error code 1

Stop.

追記
というわけで、どこで落ちてるかgdbで見てやろうとmake -DWITH_DEBUG_PORTS=yesしてみたけれど、コンパイル時のDEBUG SWITCHたってないみたいだ。

追起その2
instaweb_data2cが argumentなしで起動してもcoredumpしてる。
/usr/ports/www/mod_pagespeed/Makefileに
BROKEN=                Does not link で言ってるリンクってどういう意味だろうか

そもそも

さて、どうするか

2014年6月15日日曜日

FreeBSD10のmunin 2.0

FreeBSDのportsからmunin-node-2.0.17とmunin-master-2.0.17を入れたのだけれどグラフが生成されないのでしばし悩んだ。

sudo -u munin /usr/local/bin/munin-cron --debugして眺めていると
どうやらmunin-nodeがグラフに出すべきノードを持ってないよという感じ
(list ホスト名した後の nographなんちゃらと出ていたはず)

/usr/local/etc/munin/munin-node.confを眺めると
host_name ホスト名がコメントアウトされているのが気になったので
#をとって定義してあげると

telnet localhost 4949
list ホスト名
で出力出来る項目が確認出来た。

ここまでくれば、sudo -u munin /usr/local/bin/munin-cron --debugで
html出力される様子が出るはず。

というわけで、munin-node.confのhost_name定義をちゃんとしましょうというお話。

2014年5月24日土曜日

FreeBSD10R /usr/ports/dns/unbound

FreeBSD10Rはデフォルトで /etc/rc.d/local_unboundを経由して
ローカルリゾルバとしてのunboundが起動する。

このunboundは--with-libevent付でconfigure;makeされていないため
unbound.confにnum-threadsを指定することが出来ない。

それでは、と/usr/ports/dns/unboundでmake install(もしくはpkg install unbound)すると
今度は、/usr/local/etc/rc.d/unbound startしたときに
fatal error: config file /usr/local/etc/unbound/unbound.conf is not inside chroot /var/unbound
として起動しない。

これは、ベースシステムインストール時に指定されたユーザーunboundの
homedirが/var/unboundとなっているためで chrootしたときの問題である。

ports/pkgngからインストールしたunboundが期待する/usr/local/etc/unboundを
homedirとしていないために発生する。

vipwでユーザーunboundのhomedirを/usr/local/etc/unboundに変更すれば
あっさり動く。
落ち着いて考えればわかることだが、意外と落とし穴になりそうだ

2014年3月28日金曜日

ajaxzip3 郵便番号の全角半角変換 2014/3/28のsvnへのpatch

たぶん本家にお送りしても拒絶されるかもしれないajaxzip3の全角半角変換パッチ
AS IS で自己責任でお願いします。(UTF-8以外でテストしてません)
svn 2014/3/28のhttp-source.jsへのパッチ
多分、行の長い所は折り返しで表示が崩れるかも知れませんが
ひとつよしなに
<pre>
*** ajaxzip3/ajaxzip3-source.js Fri Mar 28 16:28:21 2014
--- ajaxzip3-mod/ajaxzip3-source.js     Fri Mar 28 16:36:42 2014
***************
*** 67,74 ****

      // 郵便番号を数字のみ7桁取り出す
  //    var zipoptimize = function(AjaxZip3.fzip1, AjaxZip3.fzip2){
!         var vzip = AjaxZip3.fzip1.value;
!         if ( AjaxZip3.fzip2 && AjaxZip3.fzip2.value ) vzip += AjaxZip3.fzip2.v
alue;
          if ( ! vzip ) return;
          AjaxZip3.nzip = '';
          for( var i=0; i<vzip.length; i++ ) {
--- 67,74 ----

      // 郵便番号を数字のみ7桁取り出す
  //    var zipoptimize = function(AjaxZip3.fzip1, AjaxZip3.fzip2){
!       var vzip = AjaxZip3.z2h_ascii(AjaxZip3.fzip1.value);
!         if ( AjaxZip3.fzip2 && AjaxZip3.fzip2.value ) vzip += AjaxZip3.z2h_asc
ii(AjaxZip3.fzip2.value);
          if ( ! vzip ) return;
          AjaxZip3.nzip = '';
          for( var i=0; i<vzip.length; i++ ) {
***************
*** 212,217 ****
--- 212,242 ----
      document.getElementsByTagName("head").item(0).appendChild(scriptTag);
     };

+ // 全角半角変換
+ AjaxZip3.z2h_ascii = function(src) {
+     var str = new String;
+     var len = src.length;
+     for (var i = 0; i < len; i++) {
+         var c = src.charCodeAt(i);
+         if (c >= 65281 && c <= 65374 && c != 65340) {
+             str += String.fromCharCode(c - 65248);
+         } else if (c == 8217) {
+             str += String.fromCharCode(39);
+         } else if (c == 8221) {
+             str += String.fromCharCode(34);
+         } else if (c == 12288) {
+             str += String.fromCharCode(32);
+         } else if (c == 65507) {
+             str += String.fromCharCode(126);
+         } else if (c == 65509) {
+             str += String.fromCharCode(92);
+         } else {
+             str += src.charAt(i);
+         }
+     }
+     return str;
+ }
+
  function zipdata(data){
      AjaxZip3.callback(data);
  };
</pre>

2014年1月17日金曜日

BBルータのDHCP配下でFreeBSD10.0Rのunboundを設定する

DHCPでアドレス配布を受けるとunboundのforward.confがFreeBSD10Rのデフォルト設定では変更される。
そして、BBルータのDNS proxyを向いてしまうとルータによってはDNSSEC関連レコードを通さないケースがあるのでunboundが名前解決できなくなる。(このことはtwitterで東さん(@hdais)から示唆をいただいた)

こうした状況はBBルーター配下で簡易的にサーバー構築する際にけっこう起こりうるので解決法をブログに記しておく。

FreeBSD10.0Rでの手順
1,  /etc/resolv.confにISPのnameserverを書いて、drill hogeで 外部のドメインが引けることを確認しておく

2,  /etc/rc.confにlocal_unbound_enable=YESする
3, /etc/rc.d/local_unbound setupする
4, /etc/rc.d/local_unbound start後 drill hogeで外部ドメインがlocalの
 unbound経由で引けていることを確認。(;; SERVER: 127.0.0.1等と出てればOK)
5, /etc/resolvconf.confの unbound_conf="/var/unbound/forward.conf"を
  unbound_conf="/dev/null"とする。
6. shutdown -r nowして、再度ログインし drill hogeで外部ドメインが引けることを確認。

以上