読者です 読者をやめる 読者になる 読者になる

お試しメモ

ocaml ocsigen

手順をメモ。

  • まず、FreeBSDPorts Collectionに入っているOcsigenはIgnoreになっているので、GODIからいれることにするが、GODI自体入っていない(何故!?)ので、tar ballを落としてきてGODI入れる。
  • godi_consoleからapp-ocsigenをbuildさせる。
  • godi-sqlite3でエラーになってしまう。libsqlite3は既に/usr/local/libにあるので、configureで「GODI_SQLITE3_PREFIX = /usr/local」とすると先に進んだ。
  • godi-gdbmが無いよエラーが出たので、portsでdatabase/gdbmをインストール。
  • 再再度の挑戦でbuild成功。
  • 気がつけばGODI便利。/usr/local/godiの下にOCaml系のものが詰まっていて、portsで入れたものが不要になったので、一気に消す。
$ pkg_info | perl -lane 'print $F[0] if /ocaml/' | xargs sudo pkg_delete
  • /usr/local/godi/etc/ocsigen/ocsigen.confを編集。とりあえず動かしたいので以下だけ。
<ocsigen>
  <port>8880</port>
  <user>mitsu</user>
  <group>wheel</group>
</ocsigen>
  • sudo ocsigenで起動後、ブラウザからのアクセスを試みるも接続を確立できないらしいエラー。
  • TCPのLISTEN具合を眺めて見るとIPv6しか開いていないようだ。telnet -6だと接続できるが、telnet -4だと駄目だったし。
$ netstat -ant | grep 8880
tcp6       0      0  *.8880                 *.*                    LISTEN
  • Ocsigenのコードを見てみるとこんな感じ。IPv6のbindが成功したらv4は開けてない。
        try
          let socket = Lwt_unix.socket Unix.PF_INET6 Unix.SOCK_STREAM 0 in
          Lwt_unix.set_close_on_exec socket;
          Lwt_unix.setsockopt socket Unix.SO_REUSEADDR true;
          Lwt_unix.bind socket (local_addr6 addr port);
          socket
        with e ->
(*VVV CATCH only the IPv6 exception.
Is it:
| ENOPROTOOPT  (*  Protocol not available  *) ?
| EPROTONOSUPPORT  (*  Protocol not supported  *)???
| ...
*)
          Ocsigen_messages.warning
            ("Exception while creating IPv6 socket: "^Ocsigen_lib.string_of_exn e);
          let socket = Lwt_unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in
          Lwt_unix.set_close_on_exec socket;
          Lwt_unix.setsockopt socket Unix.SO_REUSEADDR true;
          Lwt_unix.bind socket (local_addr addr port);
          socket
      in
  • 我が家のFreeBSDはifconfig的にIPv6が上手く扱えないようになっていたので動くように設定(lo0のみIPv6が有効になっていたのでIPv6でlistenできたが、NIC側はIPv6が無効だったので外からのアクセスが効かなかった、ということ?)。
  • でもブラウザでアクセスできん。クライアントであるWindowsでは、ipv6 install実行済み、ipv6 ifも正常なのだけど、The KAME projectを見ても亀は踊らんかった…


あれ…?

IPv6なめるな!ってこと?
まずIPv6で接続しにいって駄目だったらIPv4で…という巷で溢れている情報を鵜呑みにしていたのだけども… これ(<=IPv6)は本腰入れて基礎から理解しないといかんなぁ。DNSのAAAAっていうのも今回初めて知ったし…


それにしても、Ocsigenの「IPv6で開けたらIPv4は開かない挙動」っていうのは現状を踏まえるとどうかと思うなぁ。


思いっきり脱線したけれど、そろそろ寝るのでここまで。