UNIXやLinux: 2012年2月アーカイブ

せっかく横浜でのテスト用の環境をセットアップしたので、こっちに帰って来てからもテストサーバとして FreeBSD 8.1-RELEASE on EeePC 4G-X を使っているんだけど、UDP サーバ機能の実装がほぼ終わったので、いよいよ Web 側の開発しようと思ったら Apache が起動してなかったことに気づいた。
そう言えば、自動起動するようにしてなかったなあ・・・と思って手動で起動してみると、

# /usr/local/apache2/bin/apachectl start
httpd: Syntax error on line 56 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: Undefined symbol "lo_import_with_oid"

と、libphp5.so のロードエラーが・・・

ま、こういう場合、共有ライブラリの場所として /usr/local/pgsql/lib へのパスが通ってないケースが多い。
実際、別のシェルを開いて、

# setenv LD_LIBRARY_PATH /usr/local/pgsql/lib
# /usr/local/apache2/bin/apachectl start

ってやれば起動するしね。

と思って、/etc/ld.so.conf にパスを追加して ldconfig 実行してみたんだけど駄目みたい。
俺の FreeBSD 知識は 5.4 辺りで止まってるので、今はやり方違うんかな?
今回はあんまりその辺調べてる暇もないので、取りあえず、/etc/rc.conf に、

ldconfig_paths="/usr/lib/compat /usr/local/lib /usr/local/lib/compat/pkg /usr/local/pgsql/lib"

を追加してみたんだけど・・・これも駄目だった。うむむ・・・

仕方無いので、今回は /usr/local/etc/rc.d/apache.sh を、

#!/bin/sh

export LD_LIBRARY_PATH=/usr/local/pgsql/lib
/usr/local/apache2/bin/apachectl start

こういう内容で作成した。

まあ、取りあえずこれで自動起動するし、問題なくWeb の閲覧も出来るので(php も勿論使える)良しとしておこう。

ldconfig の関係は、この案件が終わったらゆっくり調べてみようてえ。
UDP プロトコルでデータ受信するプログラムを xinetd 経由で実行しようと思ってたんだけど、どうもうまくいかんなあ。

以下の環境でテストを実施。

・OS 及び xinetd

CentOS 6.2
xinetd 2.3.14
Perl 5.10.1

・/etc/services にサービス追加

hogehoge        50001/udp

・/etc/xinetd.d/hogehoge を作成

service hogehoge
{
        disable         = no
        user            = root
        wait            = no
        server          = /usr/local/bin/hogehoge.pl
        socket_type     = dgram

}

・テスト用サーバ(/usr/local/bin/hogehoge.pl)

#!/usr/bin/perl

$d = <STDIN>;
exit();

・テスト用クライアント(./udp_client.pl)

#!/usr/bin/perl

use IO::Socket::INET;

$c = IO::Socket::INET->new(
  PeerAddr => "localhost",
  PeerPort => 50001,
  Proto    => "udp"
) or die $!;

$c->send("hello");
$c->close;

これで、クライアントを実行すると、一応 xinetd 経由で hogehoge.pl は起動するのだが、いつまで経っても終了せず。

/var/log/messages に、

Feb  8 00:08:47 server1 xinetd[8188]: 1 descriptors still set
Feb  8 00:08:47 server1 xinetd[8188]: No active service for file descriptor 0

というメッセージが延々出続ける。

file descriptor 0 ってことは、標準入力(STDIN)がアクティブになってないってこと?どういうこと?
xinetd は自分が受信したデータを標準入力でプログラムに渡すのだが、No active service for file descriptor 0 だからそれがうまく渡せないということだよね?

なんでそうなるかがわからん。

以前(もう数年前のことだが)、tcp でデータを受け取るプログラムを xinetd 経由で動かしたことあるけど、こんなエラーが出たことはないでぇ~
む~ん・・・

自前でサーバ書くと、スポーンした子プロセスがゾンビ化したり、親プロセスが原因不明で固まったりって時の処理(監視も含めてね)考えたり、そのプログラム書くのが面倒だなあと xinetd 使おうと思ったんだけど・・・む~ん・・・

「馬鹿め!○○設定をせんかい!」みたいな識者からのお叱りをお待ちしてます。

このアーカイブについて

このページには、2012年2月以降に書かれたブログ記事のうちUNIXやLinuxカテゴリに属しているものが含まれています。

前のアーカイブはUNIXやLinux: 2011年11月です。

次のアーカイブはUNIXやLinux: 2012年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら