新しいサーバ(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 list
makefmlの文法エラーも出た。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.
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;
さらに/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 {
&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
@@ -690,7 +690,7 @@ sub z2h_euc {
– &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;
ここまででMLは動作しました。まあこんな感じなので、fmlの機能を深く使っているほど、修正箇所が増える感じかもしれません。