投稿

ラベル(CPAN)が付いた投稿を表示しています

メールサーバの移行

イメージ
 自前のメールサーバを停止 これまで、自ドメインのメールサーバはVPS上に構築していた。 ・Ubuntu Server ・Postfix ・Dovecot ・spamAssassinと、BlackListの利用 Spam対策を行ってきたし、サーバ上でメールをトリガーにして各種プログラムを動かしたりしてきた。 メールサーバのメンテナンスは結構面倒くさくて、  ・Disk容量のチェック  ・不正アクセスのチェック  ・各種セキュリティパッチの適用 など、手間がかかる。 そこで、外部のサーバを利用することに…。 結構安くて使い勝手の良さそうなのが、「さくらのメールボックス」 3年契約で、3070円とな…。  メールアドレスは自分のだけなので、20GBまで利用可能!  (Gmailより大きいねぇ) ということで、早速契約。 アカウント設定を行って、既存のDNSを書き換える。WHOISも書き換えて完了。 SMTPとIMAPが利用できればOK。 ちょうど、GoogleがSPF設定していないと受信しないし、DKIMおよびDMARCに対応していないメールを弾くようになったので、対応しているのを確認。 さくらサーバ自体は、これまでお客さんのサーバとして何件も利用しているので、利用方法も難しくはない。  Webメールにも対応しているので、いざという場合にもありがたい。 ということで、各メールソフトの設定を変更。  PC(常時使用する3台)とタブレット、スマートフォンと台数は多いがそれ程手間はかからない。 問題は、旧サーバで送受信したメールの履歴だけれど、これはThunderbrdを使ってローカルに保存することで回避。  本当は、サーバtoサーバでMailboxに残そうとも考えたんだけど、古いメールはそれ程必要ないし、ローカルにバックアップしてあれば凌げるので、良しとする。 移行時にDNSの反映で若干時間がかかったものの、問題なく送受信できるのを確認して、作業完了。  これでメンテナンスの手間が減るので、安いもんです。

Perl ScriptのEXE化で苦戦

イメージ
exeの生成が必要 以前(随分前だけど)やったことが、あったので楽勝と思ったら、意外なところで躓いたのでちゃんと記録しておく。 基本的にスクリプト言語であるPerlのコードはテキストファイル。 Perlの実行環境さえあれば、ほぼ動く。  LinuxやMacなら最初からperlが入っているので、何も考えることはない。 じゃ、windowsのように実行環境がない場合はどうするかというと、 Perlを動かせるようにインストールする(ActivePerlで簡単に入る) exeファイルにして、実行する。(ファイルが巨大になる) 諦める と、これくらいしか選択肢がない。 今回は、作成したスクリプトを、Perl実行環境のない端末で何台も動かすことになりそう。 でもって、それぞれの端末にPerlをインストールして、pmなどのライブラリを揃えてというのが、メンテナンス上大変になりそう。 となると、2.のexe化を検討するしかない。 環境準備1 まずは、新しいVMを用意して、ActivePerlのインストールから始める。 ActiveStateに行くと、 ActivePerl-5.20.2.2002-MSWin32-x86-64int-299195.msi が最新らしい。随分とバージョンが上がってるなぁ…。 早速インストール→数分で完了。 コマンドプロンプトから、 cpan install PAR::Packer で、exe化に必要なモジュールをインストール。 まっさらな状態からのインストールなので、若干時間がかかるけれど、無事終了…。 あれ?無事終了しない。Error吐いてる。 main.c: In function 'main': main.c:121:23: warning: assignment discards 'const' qualifier from pointer target type [enabled by default] windres -i winres/pp.rc -o ppresource.coff --input-format=rc --output-format=coff --target=pe-i386 '

久しぶりで、使い方を忘れてた…(Perl)

Perlでプログラムをガシガシと 昨年納品したプログラムの、追加機能の要求が上がったので、見直しを行っていた。 今回は、DBを使うほど件数が増えそうにもない。 履歴を見て登録されているユーザか、そうでないかを判別するだけなので、ハッシュをファイルに紐付けて、簡易のDBとして使うことにする。  昔なら、メモリがパンクするんじゃ?とかディスク遅いっすとか思ったりして躊躇するんだろうけど、今どきはドンドンメモリ使っちゃおう!ファイル使っちゃおう!なんて思ったりもする。 さて、前回利用したモジュールは Jcode; MIME::Parser; MIME::WordDecoder; File::Basename; File::Path; Fcntl; File::Temp; 書き出してみるとこんなにもあった。 でもって、今回新たに Storable; 当然、稼働しているプログラムなので、直接いじるわけにはいかない。 とりあえず、ローカルでテストをする。 ソースを取り出して、修正内容を細かく分割。 それぞれテストして、組み立て…。 と、最初のテストで躓いた。 ローカルの環境が、この春に14.04で準備したNewマシンなので、モジュールが入っていない! モジュールのインストール そもそも、最初のuse Jcode;でエラー吐いているし… ということで、インストールしようとしたが、コマンドを全く思い出せない。 あれれ? どうやら老化と共にやってくるアレか? # perl -MCPAN -e shell これが思い出せずに、仕方なくググりました。 いやぁ、外部記憶に入れておいて良かったゎ(泣) というか、内部記憶から消去されている模様。 忘れないように、自分を戒めるために記録しておく。 作業自体は、コマンド入力して完了するのに1分もかからないというのに、思い出そうとした時間の方が長いとは…。 root@X200:~# perl -MCPAN -e shell CPAN.pm requires configuration, but most of it can be done automaticall

Crypt::SSLeayが入らない

Perlでの作業中 ちょっとスクリプトからWebページをゲロってこようと思い、LWP::UserAgentなどを使って、取得していた。 ちょっとhttpsあたりも必要に迫られ、getしようとしたらエラーを吐いてくる。 ふむふむ。 ぐぐってみると、Crypt::SSLeayを入れろとな。 ちうことで、 $ sudo perl -MCPAN -e shell で、CPANから入れることに。 cpan[1]> install Crypt::SSLeay 通常は、これでOKなはずなのに…。エラー吐いてくれます。 でもなぁ、CPANから自動で入れているのにmakeで転けられても…。 でも、昔の出来事を思い出してテストして見ることに。 「接続を拒否されました」というメッセージが気になる。 Linuxの初期に良くあったのだけれど、これってLANG=Cでないと動かないんじゃ? ちゅうことで、再度やり直してみる。 英語モードで再度実行! 一旦、抜けてcpanの起動から。 $ LANG=C sudo perl -MCPAN -e shell 表示はもともと英語だし、何も問題ないはず。 同様に、Crypt::SSLeayを入れてみる。 全てのテストに合格して、無事インストール完了!! やはりな!って感じです。 はっ!! インストールが目的ではなかった…。 さて、SSLが使えるようになっているはずなので、テストする。 500 Can't verify SSL peers without knowning which Certificate Authorities to trust orz... SSL証明書と一致しないらしい…。 もうひと踏ん張り。 SSL 証明書のエラー時の対応  どうやら、良く発生するようで…。あちこちに対応策が書かれていた。 [Perl] LWP::UserAgent で SSL 証明書のエラーへの対応 の記述がわかり易かった。 ホスト名の検証をしない CAを明示する いやいや、1はまずいんでは?という思うので、2の方針で。 Mozilla::CAを入れれば良さそう。 さっそく、cpanでMozilla::CAをイン

PerlでMIME処理

イメージ
いろいろとCPANで遊んでいて PerlでMIMEの処理をさせようと、モジュールをインストールして試してみる。 今まで、自前処理で行うことが多かったので、勉強がてら検索&TRY。 メール解析には「MIME::Parser」が便利そう。 ということで、入れてみる。 $ sudo perl -MCPAN -e shell cpan[1]> install MIME::Parser たったこれだけで、入るんだから楽なもんだ。 my $parse=MIME::Parser->new(); my $message = $parse->parse(*STDIN); my $head = $message->head();  なんて処理を書いて、マルチパートなデータを食わせて、いろいろとテストしていたら、読み込んだメールデータをパースするたびに、ファイルを生成してくれる…。 txtとhtmlがわさわさと増えているじゃないか…。 つうことで、何かオプションが有るはずと思いつつ、探してみる。 「 MIME::Parser インスタンス設定 output_to_core 」なんて記録を見つけた。 1をセットすると、parseデータをメモリ上に保持する。デフォルトでは解析結果のうちbody部(本文やマルチパートの添付ファイル)は即時ディスクに書き出し。 (perldoc では、巨大ファイルが添付された場合などでちょっとriskyとさ) ということらしいので、セットしてテストしてみる。 $parse->output_to_core(1); $parse->tmp_to_core(1); $parse->tmp_recycling(1); $parse->use_inner_files(1); こんな感じで、書いておけば、オンメモリで作業してくれるらしい。 昔、メモリが少ない時の実装なんだろうな…なんて思いながら、現在の大量にメモリが使える時代に感謝!! で、output_to_core(1)をセットして、テストすると作業ファイル等全く作らなくなった。 まあ、どでかいメールを食わせる予定はないので、メモリで処理してくれた方がありがたい。ファイルがディスクを食いつぶ