物好き者

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

スポンサーサイト

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

PageTop

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

smtp認証機能が無い機器からのメール送信に挑戦2 で、smtpproxを使うことでstmp認証がない機器からsmtp認証が必要なメールサーバーに対して、メールを送信できるようになりました。
smtpproxをDD-WRTで動かせるようにしていきます。

smtpproxはperlで書かれていますので、DD-WRTにperlをインストールする必要があります。perlのパッケージを探すと、OpenWRTのパッケージに、microperlがありましたので、これをインストールしてみました。
インストールしたのは、RD-X6を接続しているイーサネットコンバーターのWLI-TX4-G54HPです。

root@WLI-TX4-G54HP:/tmp# wget microperl_5.8.6-1_mipsel.ipk
Connecting to downloads.openwrt.org [195.56.146.238:80]
microperl_5.8.6-1_mi 100% |*****************************| 376 KB 00:00:00 ETA
root@WLI-TX4-G54HP:/tmp# ipkg install microperl_5.8.6-1_mipsel.ipk
Unpacking microperl...tar: write error: No space left on device
ipkg_install_file: ERROR unpacking data.tar.gz from microperl_5.8.6-1_mipsel.ipk
root@WLI-TX4-G54HP:/jffs# df -k
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/root 2240 2240 0 100% /
/dev/mtdblock/4 960 472 488 49% /jffs

/jffsの容量が足りなくてインストールできませんでした。
このため、LaFoneraのDD-WRTにインストールしてみることにしました。

LaFonera用のmicroperlもありましたので、これをインストールしました。ただ、wgetで直接ダウンロードできなかったので、PCにダウンロードしたものをscpで転送しました。
LaFonera用microperl_5.8.6-1_mips.ipk


/tmp # ipkg install microperl_5.8.6-1_mips.ipk
ERROR: File not found: //usr/local/lib/ipkg/lists/whiterussian
You probably want to run `ipkg update'
ERROR: File not found: //usr/local/lib/ipkg/lists/non-free
You probably want to run `ipkg update'
ERROR: File not found: //usr/local/lib/ipkg/lists/backports
You probably want to run `ipkg update'
/bin/ipkg: /bin/ipkg: 1184: sort: not found
Unpacking microperl...Done.
Configuring microperl...Done.

smtprox-1.2.tra.gzとsmtp認証パッチを当てたsmtpproxを、LaFoneraに転送・解凍・配置をしました。

/jffs # ls
smtpprox tmp
smtpprox-1.2.tar.gz usr
/jffs # tar -zxf smtpprox-1.2.tar.gz
/jffs # cp smtpprox ./smtpprox-1.2

実行したところ、エラーとなってしまいました。
/jffs/smtpprox-1.2 # ./smtpprox DD-WRTのIP:25 メールサーバーのDNS名:587
-sh: ./smtpprox: not found

smtpproxの1行目は、perlのパスとファイルが書かれていますので、これをDD-WRTにあわせたパスをmicroperlに書き換えます。

/jffs/usr/local/lib/ipkg/info # cat microperl.list
/
/usr/
/usr/bin/
/usr/bin/microperl

変更前
#!/usr/bin/perl -w
変更後
#!/jffs/usr/bin/microperl -w

再度実行しましたが、エラーとなってしまいました。
/jffs/smtpprox-1.2 # ./smtpprox DD-WRTのIP:25 メールサーバーのDNS名:587
(@INC contains: /usr/local/lib/perl5/5.9 .) at ./smtpprox line 15.
BEGIN failed--compilation aborted at ./smtpprox line 15.

wakaponさんの超☆Perl備忘帳: microperl コンパイル を参考に、microperlが動作するか調べたところ、問題なく動作しました。
/jffs/smtpprox-1.2 # microperl -le 'print q/hello world!!/'
hello world!!

wakaponさんの超☆Perl備忘帳: microperl strictモジュール によると、perlファイルの中に use strict; と書かれている場合、strict.pm ファイルが必要になるということです。

このため、LinuxPCからstrict.pmをコピーして再度実行しましたが、変わりません。
wakaponさんの超☆Perl備忘帳: newlib stat関数 実装 を参考に、smtproxの中にパスを記述しましたが、変わりません。
#define PRIVLIB "/jffs/usr/bin/" /**/
#define PRIVLIB_EXP "/jffs/usr/bin/" /**/

@INCにライブラリパスを追加する - SE = Slowlife Expecter によると、perl -I でライブラリパスを指定できるとあります。
これを参考に実行したとこr、別のライブラリが必要と出ました。
/jffs/smtpprox-1.2 # /jffs/usr/bin/microperl -I '/jffs/usr/bin/' ./smtpprox DD-WRTのIP:25 メールサーバーのDNS名:587
Can't locate Getopt/Long.pm in @INC (@INC contains: /jffs/usr/bin/ /usr/local/lib/perl5/5.9 .) at ./smtpprox line 20.
BEGIN failed--compilation aborted at ./smtpprox line 20.

smtpproxを確認すると、次のように設定されています。
use strict;
use Getopt::Long;
use IO::File;
use lib '.';
use MSDW::SMTP::Server;
use MSDW::SMTP::Client;

MSDWはsmtprox-1.2の中のディレクトリなので、smtpprox-1.2の中にライブラリを置くことで、パスを指定しなくても動作しました。
ライブラリをLinuxPCからコピー・実行を繰り返したところ、次のエラーでとまってしまいました。
/jffs/smtpprox-1.2 # ./smtpprox DD-WRTのIP:25 メールサーバーのDNS名:587
Undefined subroutine &DynaLoader::bootstrap called at XSLoader.pm line 111.
Compilation failed in require at Config.pm line 11.
BEGIN failed--compilation aborted at Config.pm line 11.
Compilation failed in require at DynaLoader.pm line 25.
BEGIN failed--compilation aborted at DynaLoader.pm line 25.
Compilation failed in require at XSLoader.pm line 110.
Compilation failed in require at IO/File.pm line 5.
BEGIN failed--compilation aborted at IO/File.pm line 5.
Compilation failed in require at ./smtpprox line 21.
BEGIN failed--compilation aborted at ./smtpprox line 21.

コピーしたライブラリは、smtpproxの動作テストをしたx86-64版Linuxのものでした。
エラーは、Undefined subroutine &DynaLoader::bootstrap called at XSLoader.pm line 111. ということなので、使用したライブラリがあっていないことが考えられます。
このため、適したライブラリを探すことにします。

スポンサーサイト

PageTop

コメント


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

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