新しいサーバ(Ubuntu16.04)でも、これまで使ってきたfmlをなんとかして使いたい。
しかしこれは太古のパッケージを現代のディストリビューションで使う、というやばい話なので、避けられる人は避けた方が良い。
まず、Debian 4くらいに入っていたdebパッケージを入手する(としか書かない)。
とりあえずインストール。
sudo dpkg -i fml_4.0.3.dfsg-2_all.deb
すると、エラーがでてインストールはできない。
Can’t use ‘defined(@array)’ (Maybe you should just omit the defined()?) at /var/lib/dpkg/info/fml.postinst line 229.
なので、-iはあきらめて、unpack&configureする。
sudo dpkg –unpack fml_4.0.3.dfsg-2_all.deb
以下は修正箇所と修正内容。基本的には配列とかhashのdefinedを消すだけ。
sudo vi +229 /var/lib/dpkg/info/fml.postinstで
- if (defined @entry) {+ if (@entry) {+238 で同様に- $key ne “$package” && $key ne “DB” && defined %entry+ $key ne “$package” && $key ne “DB” && %entry+243 で同様に- (defined %entry) &&+ (%entry) &&これでpostinstは修正完了、configureする。間違っていたら再度修正して繰り返し。
sudo dpkg –configure fml
それから、以下のパッチを当てる。
[debian-users:55112] Re: fmlのDebianパッケージ
にあるように、
— libkern.pl.old 2010-12-30 08:12:13.000000000 +0900+++ libkern.pl 2010-12-30 08:12:18.000000000 +0900@@ -616,8 +616,8 @@
### Header Fields Extraction $s = $Envelope{‘Header’}."\n";- $* = 0; # match one line- if ($s =~ /^From\s+(\S+)/i) {+ # $* = 0; # match one line+ if ($s =~ /^From\s+(\S+)/is) { # XXX NO REACH HERE (1999/10/27 by fukachan) # $Envelope{‘UnixFrom’} = $UnixFrom = $1; $s =~ s/^From\s+.*//i;をパッチとして当てたら良い(これは確かめてないけど、たぶん当てないと動かないんでしょう)。
その後、色々動作しなかったが、MLのユーザをlistグループに追加し忘れていたり(移行なら意外とはまる穴かも?)、
# sudo adduser mluser listmakefmlの文法エラーも出た。fmlのテスト機能というのがあるので、
$ makefml test mlnameとやってみると、色々とエラーが出る。要領はおんなじ。
Can’t use ‘defined(@array)’ (Maybe you should just omit the defined()?) at /usr/share/fml/makefml line 6246.
$ vi +6246 /usr/share/fml/makefml- if (defined @entry) {+ if (@entry) {次、
Can’t use ‘defined(%hash)’ (Maybe you should just omit the defined()?) at /usr/share/fml/makefml line 6257.
- $key ne “$package” && $key ne “DB” && defined %entry+ $key ne “$package” && $key ne “DB” && %entry次、
Can’t use ‘defined(%hash)’ (Maybe you should just omit the defined()?) at /usr/share/fml/makefml line 6260.
- (defined %entry) &&+ (%entry) &&すると、次は、
Unescaped left brace in regex is deprecated, passed through in regex; marked by <– HERE in m/$config{ <– HERE 'ML'}/ at /usr/share/fml/makefml line 7003.
Can’t locate getopts.pl in @INC (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /usr/share/fml/makefml line 139.
(正規表現のエラーが出てるがそれはおいといて)おお、getopts.plがないのか。初情報。少し調べて、以下のパッケージを入れると良いのかも。
sudo apt-get install libperl4-corelibs-perl
なんとこんな名前(perl4ってw)のパッケージが実在することに多少驚きながら、早速入れてみる。すると、fmlがようやく動いた!!
試行錯誤した内容をまとめていますので、不足等あるかもしれませんがご容赦下さい。
2017/6/1追記
上記設定だけでは流れないMLが発生した。
まず、fml.plにlibkern.plと同様の箇所があってエラーが出るので、同じような修正を行った。
— fml.pl.orig 2017-05-26 20:31:48.000576211 +0900+++ fml.pl 2017-05-26 20:33:04.256837661 +0900@@ -677,8 +677,8 @@ sub GetFieldsFromHeader
### Header Fields Extraction $s = $Envelope{‘Header’}."\n";- $* = 0; # match one line- if ($s =~ /^From\s+(\S+)/i) {+ # $* = 0; # match one line+ if ($s =~ /^From\s+(\S+)/is) { # XXX NO REACH HERE (1999/10/27 by fukachan) # $Envelope{‘UnixFrom’} = $UnixFrom = $1; $s =~ s/^From\s+.*//i;さらに/usr/share/perl5/jcode.plまでも修正してしまう。これはパッケージlibjcode-perl内のファイルなので、ubuntuに連絡をした方が良いかも。
— jcode.pl.orig 2017-06-01 17:30:16.708268955 +0900+++ jcode.pl 2017-06-01 17:30:54.168279228 +0900@@ -681,7 +681,7 @@ sub __z2h_jis {
sub z2h_euc {</d iv>&nbs p; local(*s, $n) = @;- &init_z2h_euc unless defined %z2h_euc;+ &init_z2h_euc unless %z2h_euc; $s =~ s/($re_euc_c|$re_euc_kana)/ $z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1 /geo;@@ -690,7 +690,7 @@ sub z2h_euc {
sub z2h_sjis { local(*s, $n) = @;- &init_z2h_sjis unless defined %z2h_sjis;+ &init_z2h_sjis unless %z2h_sjis; $s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo; $n; }ここまででMLは動作しました。まあこんな感じなので、fmlの機能を深く使っているほど、修正箇所が増える感じかもしれません。