Ubuntu 18.04でfml

Perl のバージョンの関係で,そのままではFML が使えなかったので,いろいろと苦労したメモ.

ちなみに,fml は,こちらから手に入れる方法と,github/fmlorg/fml4から手に入れる方法があります.

まず,今のPerl のバージョンに対応させる方法,メールサーバーの構築 fmlのインストールUbuntu12.04LTSにfmlを入れる
にも書かれていますが,$* = 0;の部分と,(defined %entry)のところを変更していけば,なんとかなる雰囲気.
$* と $# は致命的エラーになりましたの辺りが,バージョンアップによる影響です.

–    $* = 0;			# match one line
–    if ($s =~ /^From\s+(\S+)/i) {
+    # $* = 0;			# match one line
+    if ($s =~ /^From\s+(\S+)/is) {
...
–                (defined %entry) &&
+                (%entry) &&

ところが,それ以外にも,/usr/local/fml/fml.plの中の修正も必要で,一応変更したものの,未だメールが飛んでくれない状態….
エラーメッセージ等がないので,どこで止まっているかわからず、お手上げです ∩(・∀・)∩.

参考までに,perl のデバッグは,Perlデバッガの手引きを参考に,1ステップずつ動作確認しました.



仕方が無いので,古いPerl も入れて,共存させる方針に変更してみます.

ubuntu 18.04.1 LTS がでたので16.04LTS →18.04LTSにアップグレードしてみたでは,Perl5.8.9 を使っているみたい.
Fmlの構築では,Perl 5.8.9を共存させてfml4 を利用されている模様.
この辺りを参考に,作業してみましょうか.

あと,pp.o: In function `Perl_pp_pow’: pp.c:(.text+0x2e7b): undefined reference to `pow’のエラーには,perlbrew を使って Ubuntu 12.04 に perl 環境を構築するを参考にしました.

makedepend の呼び出しが,sh でエラーが出ていたので,bash に変えてみました.
あと,make depend も必要な模様.

cd ~/Downloads
wget https://www.cpan.org/src/5.0/perl-5.8.9.tar.gz
tar xzf perl-5.8.9.tar.gz
./Configure -de -Accflags='-fPIC' -Dprefix=/usr/local/perl-5.8 -Dplibpth=/usr/lib/x86_64-linux-gnu
## Please replace bash from sh at Makefile
make
# make test
# make install


上記,やっぱり無理そうなので,元の方針に戻して,今のPerl へ対応させる方向で頑張ってみます.

エラーを確認するために,手動実行

fml@liva:/usr/local/fml$  ./fml.pl /var/spool/ml/test
Can't locate libloadconfig.pl in @INC (@INC contains: /var/spool/ml/test . /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base /var/spool/ml/test) at ./fml.pl line 333.

どうやら,fml.pl の333行目の require ‘libloadconfig.pl’; &__LoadConfiguration(‘__KERN__’);で,libloadconfig.pl が見つからない模様.
@INC の中のディレクトリには,確かに,/usr/local/fml がありません.
447 行目辺りの,InitConfig にてLoadConfig を呼び出したところでエラーになっているので,その辺りに以下を追加.

sub InitConfig
{
    push(@INC, "/usr/local/fml");
    &SetDefaults;

この辺りは,第46回 Perl 5.26で変わること(1)に「@INCからカレントディレクトリが削除」と書かれていました.
今回はfmlのディレクトリを直接指定する形にしてみます.

それでも,まだ送信してくれなかったので,いろいろな箇所にログの出力を挟み込んでチェックしたら,
どうやらIPv6 でメール送信しようとしていたみたいです.
まだ,家のサーバはIPv4ですので,それではつながりませんね.

と言うわけで,あとは,config.ph に,$USE_INET6 = 0;を追加して,完了.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*