物好き者

物好き者が行ったことを載せています。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

smtp認証機能が無い機器からのメール送信に挑戦16

smtp認証機能が無い機器からのメール送信に挑戦15 まででperlのsmtpproxを動作させることができませんでした。
perlの動作チェックができないかを考えたのですが、デバッガでチェックする方法があることがわかりました。

Perlのデバッガ(コマンドのまとめ)

VirtualServer上のLinuxで perl -d smtpprox LocalIP:25 RemoteIP:587 を実行したところ、途中で複数の画面が起動しましたが、デバッガが動作することがわかりました。
Xwindowのターミナルで起動していたので、子プロセスのデバッガが起動したためでした。

LaFoneraにインストールしたOpenWRTで実行したところ、次のエラーが発生しました。
root@OpenWrt:/jffs/smtpprox-1.2# perl -d ./smtpprox LocalIP:25 RemoteIP:587
Can't locate perl5db.pl in @INC (@INC contains: /usr/lib/perl5/5.8 .).
BEGIN failed--compilation aborted.

perlのデバッガパッケージが無いために発生しているエラーのようなので、Index of /~colberg/openwrt/bin/kamikaze/7.09/atheros-2.6 からデバッガパッケージをダウンロードしてインストールしましたが、エラーとなってしまいました。
root@OpenWrt:/jffs# wget http://www.cip.ifi.lmu.de/~colberg/openwrt/bin/kamikaze/7.09/atheros-2.6/perlbase-perl5db_5.8.8-3_mips.ipk
Connecting to www.cip.ifi.lmu.de [141.84.214.32:80]
perlbase-perl5db_5.8 100% |*****************************| 58708 00:00:00 ETA
root@OpenWrt:/jffs# ipkg install perlbase-perl5db_5.8.8-3_mips.ipk
Installing perlbase-perl5db (5.8.8-3) to root...
ipkg: fork failed: Cannot allocate memory


メモリが不足しているようなので再起動後に再度インストールしたところ、問題なくインストールできました。
root@OpenWrt:/jffs# ipkg install perlbase-perl5db_5.8.8-3_mips.ipk
Installing perlbase-perl5db (5.8.8-3) to root...
Configuring perlbase-perl5db
Done.


デバッガでsmtpproxを起動したところ、エラーが発生しました。
root@OpenWrt:/jffs/smtpprox-1.2# perl -d ./smtpprox LocalIP:25 RemoteIP:587

Loading DB routines from perl5db.pl version 1.28
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(./smtpprox:89): my $syntax = "syntax: $0 [--children=2] [--minperchild=100] ".
main::(./smtpprox:90): "[--maxperchild=200] [--debugtrace=undef] ".
main::(./smtpprox:91): "listen.addr:port talk.addr:port\n";
Can't locate Term/ReadLine.pm in @INC (@INC contains: . /usr/lib/perl5/5.8) at /usr/lib/perl5/5.8/perl5db.pl line 3742.
at /usr/lib/perl5/5.8/perl5db.pl line 3742
DB::setterm called at /usr/lib/perl5/5.8/perl5db.pl line 892
DB::DB called at ./smtpprox line 89
Can't locate Term/ReadLine.pm in @INC (@INC contains: . /usr/lib/perl5/5.8) at /usr/lib/perl5/5.8/perl5db.pl line 3742.
END failed--call queue aborted at ./smtpprox line 3742.
at ./smtpprox line 3742
Config::DESTROY(/usr/lib/perl5/5.8/Config.pm:56):
56: sub DESTROY { }


エラーの中の下記の行から考えると、perlのパッケージが不足しているようです。
Can't locate Term/ReadLine.pm in @INC (@INC contains: . /usr/lib/perl5/5.8) at /usr/lib/perl5/5.8/perl5db.pl line 3742.

Index of /~colberg/openwrt/bin/kamikaze/7.09/atheros-2.6 に perlbase-term_5.8.8-3_mips.ipk があったので、インストールしてみました。
root@OpenWrt:/jffs# wget http://www.cip.ifi.lmu.de/~colberg/openwrt/bin/kamikaze/7.09/atheros-2.6/perlbase-term_5.8.8-3_mips.ipk
Connecting to www.cip.ifi.lmu.de [141.84.214.32:80]
perlbase-term_5.8.8- 100% |*****************************| 8230 00:00:00 ETA
root@OpenWrt:/jffs# ipkg install perlbase-term_5.8.8-3_mips.ipk
Installing perlbase-term (5.8.8-3) to root...
Configuring perlbase-term
Done.


デバッガでsmtpproxを起動したところ、問題なく実行できました。
sコマンドでステップ実行していきました。
root@OpenWrt:/jffs/smtpprox-1.2# perl -d ./smtpprox LocalIP:25 RemoteIP:587

Loading DB routines from perl5db.pl version 1.28
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(./smtpprox:89): my $syntax = "syntax: $0 [--children=2] [--minperchild=100] ".
main::(./smtpprox:90): "[--maxperchild=200] [--debugtrace=undef] ".
main::(./smtpprox:91): "listen.addr:port talk.addr:port\n";
DB<1> s
main::(./smtpprox:93): my $children = 2;
DB<1>
main::(./smtpprox:94): my $minperchild = 100;
DB<1>
main::(./smtpprox:95): my $maxperchild = 200;
DB<1>
main::(./smtpprox:96): my $debugtrace = undef;


ステップ実行を続けたところ、エラーが発生しました。子プロセスが起動するので、デバッガもその分を起動させようとしたのですが、シリアルコンソールで接続しているのでコンソールを起動できないためデバッガも起動できなくてエラーが発生しているようです。
mait or./smtpprox:135): die "$0: fork failed: $!\n" unless defined $pid;
######### Forked, but do not know how to create a new TTY. #########
Since two debuggers fight for the same TTY, input is severely entangled.

I know how to switch the output to a different window in xterms
and OS/2 consoles only. For a manual switch, put the name of the created TTY
in $DB::fork_TTY, or define a function DB::get_fork_TTY() returning this.

On UNIX-like systems one can get the name of a TTY for the given window
by typing tty, and disconnect the shell from TTY by sleep 1000000.

main::(./smtpprox:135): die "$0: fork failed: $!\n" unless defined $pid;

DB<1> main::(./smtpprox:136): last PARENT if $pid == 0;

rDB<1> main::(./smtpprox:137): $children{$pid} = 1;
DB<1> main::(./smtpprox:138): select(undef, undef, undef, 0.1);
DB<1> {pid=505} DB<1>

main::(./smtpprox:136): last PARENT if $pid == 0;
{pid=505} DB<1>
main::(./smtpprox:147): my $lives = $minperchild + (rand($maxperchild - $minperchild));
{pid=505} DB<1>
main::(./smtpprox:139): if ($please_die) { kill 15, keys %children; exit 0; }
DB<1>
main::(./smtpprox:129): while (scalar(keys %children) >= $children) {
DB<1> main::(./smtpprox:148): my %opts;
.pid=505} DB<1>
main::(./smtpprox:134): my $pid = fork;
DB<1>
main::(./smtpprox:135): die "$0: fork failed: $!\n" unless defined $pid;
DB<1>
main::(./smtpprox:149): if (defined $debugtrace) {
{pid=505} DB<1>
./smtpprox: fork failed: Cannot allocate memory
at ./smtpprox line 135

I. :Handle::DESTROY(/usr/lib/perl5/5.8/IO/Handle.pm:67):
67: sub DESTROY {}
DB<1> main::(./smtpprox:154): while (1) {
{pid=505} DB<1>
main::(./smtpprox:155): $server->accept(%opts);
{pid=505} DB<1>
IO::Handle::DESTROY(/usr/lib/perl5/5.8/IO/Handle.pm:67):
67: sub DESTROY {}
DB<1> e `q' toSMTP::Server::accept(MSDW/SMTP/Server.pm:171):
171: my ($self, @opts) = @_;
{pid=505} DB<1>
Debugged program terminated. Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.
DB<1>
MSDW::SMTP::Server::accept(MSDW/SMTP/Server.pm:172):
172: %$self = (%$self, @opts);
{pid=505} DB<1>
Use `q' to quit or `R' to restart. `h q' for details.
DB<1>


smtpproxのプロセス数を下記のように減らしたのですが、それでも子プロセスがひとつは起動するので子プロセスのデバッガが起動できないままです。
my $syntax = "syntax: $0 [--children=1] [--minperchild=1] ".
"[--maxperchild=1] [--debugtrace=undef] ".
"listen.addr:port talk.addr:port\n";

my $children = 1;
my $minperchild = 1;
my $maxperchild = 1;


perlデバッガでチェックすることができることがわかったのですが、子プロセス用のttyを確保できないとsmtpproxのチェックをすることができないようです。
OpenWRTで複数ttyを起動させる方法を調べることにしました。

スポンサーサイト

PageTop

コメント


管理者にだけ表示を許可する
 

承認待ちコメント

このコメントは管理者の承認待ちです

| | 2012年02月09日(Thu)14:28 [EDIT]


承認待ちコメント

このコメントは管理者の承認待ちです

| | 2012年03月02日(Fri)14:27 [EDIT]


承認待ちコメント

このコメントは管理者の承認待ちです

| | 2012年03月07日(Wed)09:34 [EDIT]


承認待ちコメント

このコメントは管理者の承認待ちです

| | 2014年08月26日(Tue)10:58 [EDIT]


承認待ちコメント

このコメントは管理者の承認待ちです

| | 2014年09月01日(Mon)03:02 [EDIT]


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。