サーバー,  日記

Apache2.4 CGI動かない(原因はJcode.plだった)

サーバーをApache2.4に更新したところエラーが頻発するようになりました。
エラーログを見てみるとヘッダーのようで、ググると原因はJcode.plのようなのでいろいろやって解決しました。
ハイフォンをつけるとかおまじないがいろいろありましたが、Jcodeが古いのが原因でした。
以下に処理方法を書きます。
Linuxにおけるdebian/Ubuntu系にて動作確認しておりますが、RedHat系も同じだと思います。

jcode.plエラーが出てますので直しました。
ルート権限で処理しました
下記ファイルをダウンロードします。
これはCPANモジュールとしてインストール処理されます。

jacode-2.13.4.18.tar.gz

CPANからtarボールをダウンロードして解凍します。
解凍したらcdコマンドでディレクトリー移動、メイクしてインストールします。

root@debian:/home/hirano/ダウンロード/jacode-2.13.4.18/jacode-2.13.4.18# perl Makefile.PL; make; make install
Checking if your kit is complete…
Looks good
Generating a Unix-style Makefile
Writing Makefile for jacode
Writing MYMETA.yml and MYMETA.json
cp lib/jacode.pl blib/lib/jacode.pl
Manifying 1 pod document
Manifying 1 pod document
Installing /usr/local/share/perl/5.24.1/jacode.pl
Installing /usr/local/man/man3/jacode.3pm
Appending installation info to /usr/local/lib/x86_64-linux-gnu/perl/5.24.1/perllocal.pod
root@debian:/home/hirano/ダウンロード/jacode-2.13.4.18/jacode-2.13.4.18#

下記コードは必要ですが、ファイルとしてtarボールから解凍したとこからファイルとしてjacode.plを抜き出して
ソースファイルの一つにする必要はありません。
無しで、モジュールとして動きます。

↓jcode.plをjacode.plに書き換えます
=== 初期読み込み処理=============================================

require ‘jacode.pl’;

↓ソースコードはそのままでいいです。(変更なし)
=== CGIコード抜粋=============================================

&jcode'convert(*value,'sjis');


$FORM{$name} = $value;

↓モジュールと同様のインストール傾向を辿ってます。参考までに!
===cpanモジュールJCODE.PMインストール状況=============================================

cpan[1]> install Jcode
Reading ‘/root/.cpan/Metadata’
Database was generated on Thu, 28 May 2020 12:29:03 GMT
Running install for module ‘Jcode’
Fetching with LWP:
http://www.cpan.org/authors/id/D/DA/DANKOGAI/Jcode-2.07.tar.gz
Fetching with LWP:
http://www.cpan.org/authors/id/D/DA/DANKOGAI/CHECKSUMS
Checksum for /root/.cpan/sources/authors/id/D/DA/DANKOGAI/Jcode-2.07.tar.gz ok
Scanning cache /root/.cpan/build for sizes
DONE
‘YAML’ not installed, will not store persistent state
Argument “1.4417_001” isn’t numeric in numeric ge (>=) at /usr/share/perl/5.24/CPAN/Distribution.pm line 672.
Configuring D/DA/DANKOGAI/Jcode-2.07.tar.gz with Makefile.PL
Checking if your kit is complete…
Looks good
Generating a Unix-style Makefile
Writing Makefile for Jcode
Writing MYMETA.yml and MYMETA.json
DANKOGAI/Jcode-2.07.tar.gz
/usr/bin/perl Makefile.PL INSTALLDIRS=site — OK
Running make for D/DA/DANKOGAI/Jcode-2.07.tar.gz
cp Jcode.pm blib/lib/Jcode.pm
cp Jcode/Nihongo.pod blib/lib/Jcode/Nihongo.pod
Manifying 2 pod documents
DANKOGAI/Jcode-2.07.tar.gz
/usr/bin/make — OK
Running make test
PERL_DL_NONLAZY=1 PERL_USE_UNSAFE_INC=1 “/usr/bin/perl” “-MExtUtils::Command::MM” “-MTest::Harness” “-e” “undef Test::Harness::Switches; test_harness(0, ‘blib/lib’, ‘blib/arch’)” t/.t
t/append.t … ok
t/convert.t .. ok
t/getcode.t .. ok
t/h2z.t …… ok
t/jfold.t …. ok
t/length.t … ok
t/mime.t ….. ok
t/new.t …… ok
t/perl581.t .. ok
t/regex.t …. ok
t/tr.t ……. ok
All tests successful.
Files=11, Tests=244, 1 wallclock secs ( 0.08 usr 0.00 sys + 0.73 cusr 0.02 csys = 0.83 CPU)
Result: PASS
DANKOGAI/Jcode-2.07.tar.gz
/usr/bin/make test — OK
Running make install
Manifying 2 pod documents
Installing /usr/local/share/perl/5.24.1/Jcode.pm
Installing /usr/local/share/perl/5.24.1/Jcode/Nihongo.pod
Installing /usr/local/man/man3/Jcode::Nihongo.3pm
Installing /usr/local/man/man3/Jcode.3pm
Appending installation info to /usr/local/lib/x86_64-linux-gnu/perl/5.24.1/perllocal.pod
DANKOGAI/Jcode-2.07.tar.gz
/usr/bin/make install — OK

jacodeのシナプス載せておきます。
コード変更必要なしの意味がおわかりかと思います。
===jacodeのシナプス=============================================

NAME

jacode.pl - Perl library for Japanese character code conversion

SYNOPSIS

require 'jacode.pl';

# note: You can use either of the package of 'jcode' and 'jacode'

jacode::convert(\$line, $OUTPUT_encoding [, $INPUT_encoding [, $option]])
jacode::xxx2yyy(\$line [, $option])
jacode::to($OUTPUT_encoding, $line [, $INPUT_encoding [, $option]])
jacode::jis($line [, $INPUT_encoding [, $option]])
jacode::euc($line [, $INPUT_encoding [, $option]])
jacode::sjis($line [, $INPUT_encoding [, $option]])
jacode::utf8($line [, $INPUT_encoding [, $option]])
jacode::jis_inout($JIS_Kanji_IN, $ASCII_IN)
jacode::get_inout($string)
jacode::cache()
jacode::nocache()
jacode::flushcache()
jacode::flush()
jacode::h2z_xxx(\$line)
jacode::z2h_xxx(\$line)
jacode::getcode(\$line)
jacode::tr(\$line, $from, $to [, $option])
jacode::trans($line, $from, $to [, $option])
jacode::init()
$jacode::convf{'xxx', 'yyy'}
$jacode::z2hf{'xxx'}
$jacode::h2zf{'xxx'}

&jcode'convert(*line, $OUTPUT_encoding [, $INPUT_encoding [, $option]])
&jcode'xxx2yyy(*line [, $option])
&jcode'to($OUTPUT_encoding, $line [, $INPUT_encoding [, $option]])
&jcode'jis($line [, $INPUT_encoding [, $option]])
&jcode'euc($line [, $INPUT_encoding [, $option]])
&jcode'sjis($line [, $INPUT_encoding [, $option]])
&jcode'utf8($line [, $INPUT_encoding [, $option]])
&jcode'jis_inout($JIS_Kanji_IN, $ASCII_IN)
&jcode'get_inout($string)
&jcode'cache()
&jcode'nocache()
&jcode'flushcache()
&jcode'flush()
&jcode'h2z_xxx(*line)
&jcode'z2h_xxx(*line)
&jcode'getcode(*line)
&jcode'tr(*line, $from, $to [, $option])
&jcode'trans($line, $from, $to [, $option])
&jcode'init()
$jcode'convf{'xxx', 'yyy'}
$jcode'z2hf{'xxx'}
$jcode'h2zf{'xxx'}

ABSTRACT

This software has upper compatibility to jcode.pl and multiple inheritance
both stable jcode.pl library and active Encode module.

* jcode.pl upper compatible
* pkf command upper compatible
* Perl4 script also Perl5 script
* Powered by Encode::from_to (Yes, not only Japanese!)
* future-proof software
* Support HALFWIDTH KATAKANA
* Support UTF-8 by cp932 to Unicode table
    http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT
    http://support.microsoft.com/kb/170559/ja
    (JIS X 0221:2007 BASIC JAPANESE and COMMON JAPANESE)
* Hidden UTF8 flag
* No Object oriented
* Maintain the traditional programming

INSTALLATION

To test this software, type the following:

make test

To install this software, copy ‘jacode.pl’ to any directory of @INC.

DEPENDENCIES

This software requires perl 4.036 or later.

AUTHOR

Copyright (c) 1992,1993,1994 Kazumasa Utashiro
Copyright (c) 1995-2000 Kazumasa Utashiro
Copyright (c) 2002 Kazumasa Utashiro
Copyright (c) 2010, 2011, 2014, 2015, 2016, 2017, 2018 INABA Hitoshi

LICENSE AND COPYRIGHT

This software is free software;

Use and redistribution for ANY PURPOSE are granted as long as all
copyright notices are retained.  Redistribution with modification
is allowed provided that you make your modified version obviously
distinguishable from the original one.  THIS SOFTWARE IS PROVIDED
BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES ARE
DISCLAIMED.

This software is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

SEE ALSO

perl, jcode.pl, jacode4e.pl, Sjis.pm, pkf, Modern::Open