メールサーバの移行

イメージ
 自前のメールサーバを停止 これまで、自ドメインのメールサーバは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のように実行環境がない場合はどうするかというと、

  1. Perlを動かせるようにインストールする(ActivePerlで簡単に入る)
  2. exeファイルにして、実行する。(ファイルが巨大になる)
  3. 諦める
と、これくらいしか選択肢がない。

今回は、作成したスクリプトを、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
'windres' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
dmake.exe:  Error code 129, while making 'ppresource.coff'
dmake.exe:  Error code 255, while making 'subdirs'
  RSCHUPP/PAR-Packer-1.026.tar.gz
  C:\Perl\site\bin\dmake.exe -- NOT OK


おや? 必要なコマンド類も入れてくれるはずなのに、windresが無いという。
面倒なので、PPM(perl package manager)で入れてみる。確かwindowsのはGUIになっていたはず。

環境準備2

PPMを起動し、PAR::Packerを入れると、すんなり終了。
初めからこうすればよかった。

作業ディレクトリで、サンプルを変換してみる。
hello.plを作成。(まぁ予想通りのプログラムですww)
pp -o hello.exe hello.pl
これでサクッと…。
いかない。ちゅうかエラー吐いているし。
Perl lib version (5.20.2) doesn't match executable 'perl.exe' version (5.20.1) at C:/Perl/lib/Config.pm line 62.
はぁ?
インストールしたPerlは、5.20.2なのに、実行用perlは5.20.1って…。
パッキング用は別に用意するんだけど、バージョンの不一致が起きているのか?
と解釈して、Config.pmを書き換えてみることに。

 62行目あたりのバージョンをチェックしている部分を 5.20.1に変更してみる。

すると、さっきとはエラーを吐くタイミングが少し変わったが、
Perl lib version (5.20.2) doesn't match executable 'perl.exe' version (5.20.2) at C:/Perl/lib/Config.pm line 62.
と、ますます訳の分からない表示に。

じゃ、古いActivePerlを入れれば動くんじゃね?と思って他のVersionを落としてくる。
5.22.0.2200
5.18.4.1805
が、提供されている。5.20.1は無いし…。試しに「5.18.4.1805」でやってみるが当然動作せず。
 ActivePerlを何度も入れなおす羽目に。

調べてみると、ActiveStatesのCommunity Forumに全く同じ書き込みがあった。
PAR::Packer could not pack script: version mismatch between perl lib (5.20.2) and perl.exe (5.20.1)
そこを読んでいくと、最後に

grahams
ActiveState Staff
 Mon, 2015-06-22 12:00
This appears to be an upstream bug in Par::Packer.
Modules should not need to be recompiled, and should be compatible with newer releases of the same major revision of Perl. It's not clear why Par::Packer complains here. The maintainer should have a better idea.
って書いてあるやん。
6月の段階で見つかっているのに、まだ治っていないのかよ…。
次のリリースにって言われても、今使いたいんだし。

別の方法を探ることにする。

環境準備3

Googleでしつこく探してみると、同じような状況の記録がありました。
Perlスクリプトの汎用化+GUI化+exe化=アプリ誕生!(3)
あぁ同じような手順を踏んでいます。

なんと、環境準備1の方法で無理やりクリアしたらしい。
といっても、ものすごく簡単な方法だった。
windresが、異なるフォルダにあるらしいので、これをコピーしてやれと。
探してみると C:\Perl\site\lib\auto\MinGW\bin に確かにwindres.exeがありました。

そこで、こいつをPATHの通っているC:\Perl\site\bin にコピーする。
最後に、再度cpan installをかけてみる。
Appending installation info to C:\Perl\lib/perllocal.pod
  RSCHUPP/PAR-Packer-1.026.tar.gz
  C:\Perl\site\bin\dmake.exe install  -- OK
やった!とりあえずエラー無しで導入まで完了した。

実際に動かしてみる

サンプル用のスクリプトを、exe化してみる。その時の結果が以下の通り。
18バイトだったスクリプトは、PERL本体とその他必要なライブラリ等を組み込んで約3MB程度になっています。

 まあ、今どきの環境であれば、たかだか「Hello」を表示するのに3MB程度使っても
問題はないよね?


一応、無事にexeにすることができるようになりました。

ふぅ、これで終わりじゃ無いんだよね。
実際のスクリプトを作成しないといけないわけで、やっとスタートですゎ。

コメント

このブログの人気の投稿

WPS Officeで日本語入力ができない

VirtualBoxでUSBから起動

Virtualboxとnvidiaドライバ