qimessaging.jsの代わりになるcgi実行ファイル

埋め込みサイトで、apache2も正常に機能し、先に作成したファイルアップロード受け口用のC++で書いたcgiファイルも正常に実行されることが確認できたが、肝心のqimessaging.jsがうまく機能しない。呼び出し中に、ソケットIDがらみのエラーが出る。そのとのサーバーからの呼び出しでは問題なく機能していたのだが。
色々やれば、解決できるのかもしれないが、ふと、そこまでqimessaging.jsに位存在なければならないの??という疑問がふつふつと湧いてきた。ロボットのローカルでサーバーが動いている、C++で書いたcgiの実行ファイルも正常に動く。ロボット内部のライブラリ(システムのも、こちらで作成したもの)も問題ない。だったら、C++で書いたcgiの実行ファイルから、直接、ライブラリのメソッドを呼び出せばいいのではないか??
ふと、それをpythonで書こうかと思ったが、いやいや、それは面倒だ。直接C++で書けば良い。brokerを使えば、コンパクトで汎用性のあるものが作れるのではないかという気がしてきた。

ロボットnaoにapache2ウェッブサーバーをインストール

前に書いた理由で、新たにnaoにapache2をインストールすることにした。手順をメモがわりに書いておく。
(1)apache2の最新版をダウンロードする。ここでは、apache2-2.4.25を使った。
(2)opennaoバーチャルロボットにpsftpなどで転送し、解凍する
(3)解凍したフォルダで、./configure --prefix=ロボット上のインストールしたいフォルダの指定する。私は、rootじゃなく、naoで実行したいので、/home/nao 以下のフォルダを指定した。
(4)普通にmakeとmake installを実行する。エラーは出ない。
(5)インストールしたフォルダごとアーカイブし、naoの実機に転送する。
(6)httpd.confを編集する。私の場合は、portを80から8080に変更。変更しないと、通常のrobotページとバッティングするので。cgiを動かす設定、ドメイン名がコメントアウトされているのをそのまま外す。関係のないドメイン名になっているが、コメントアウトするとスタート時に警告が出るを避けるだけの目的。
(7)ただ、これだけでは、apachectl startとやるとライブラリがらみのエラーが出て、実行できない。そこで以下の操作をやる。
opennaoの/usr/libディレクトリから、次の二つのファイルを取ってくる。
libaprutil-1.so.0
libapr-1.so.0
これをapache2のあるフォルダ以下libフォルダを作成してその下に入れておく。今そのフォルダを、
/home/nao/hoge/lib
だったとしよう。/etc/ld.so.conf.d/にnanoを使って、apache.confファイルを作り、そこに、上記フォルダのパスを書いて保存する。
ロボットのrootになって、ldconfigを実行する。その後、
ldconfig -p | grep libapr
をrootで実行すると、
libaprutil-1.so.0 (libc6) => /home/nao/ibot/www/lib/libaprutil-1.so.0
libapr-1.so.0 (libc6) => /home/nao/ibot/www/lib/libapr-1.so.0
となり、これでOKである。
あとは、ポートを8080にしている限り、rootにならなくても、naoユーザーのままで、apachectl
./bin/apachectl start
を起動すれば、サーバーが立ち上がり、ロボットのipとポートを指定すると、
と、無事立ち上がった。