2021/07/21(水) [n年前の日記]
#1 [debian][linux][prog] 自宅サーバ内の一部のCGIが動かなくなった
自宅サーバがハードウェア的に壊れて、代替機に変えたことで、OSも変わり、Apache2 のバージョンも上がり、Perlのバージョンも上がったわけだけど。そのせいで自宅サーバ内のCGIの一部が動かなくなっているようで、妹から「CGIが動いてない」と報告が…。
念のために、今現在の自宅サーバの環境をメモ。
調べてみたところ、動かない原因は、大抵2つが絡んでる模様。
念のために、今現在の自宅サーバの環境をメモ。
- OS : Debian Linux 10 buster 32bit版。
- Apache2 : 2.4.38-3+deb10u5
- Perl : 5.28.1
調べてみたところ、動かない原因は、大抵2つが絡んでる模様。
◎ jcode.plが古過ぎる。 :
まず、あちこちのCGIで使っている jcode.pl が古過ぎてエラーを出す。
昨今の Perl は defined() を使わないような記述を要求されるけど、jcode.pl は昔の Perl で動くように書かれているから defined() も使っていて…。
これは、以下のように修正しないといけない。
ググった感じだとPerl界隈では、
「jcode.pl なんて使ってんじゃねえ。古過ぎる」
「Jcode.pmも既に古い。それも使うな」
「今時の Perl は標準で Encode.pm が入ってるんだからソレを使うように書き直せ」
という風潮になってるようで。
ただ、WebからCGIスクリプトをDLして設置して動かしてるだけの人に、ソースを丸々書き直せと要求するのも…。いやまあ、今時、サーバにCGIを設置する人なんて開発者の類しか居ないだろうからアレではあるのだけど。CGIどころかhtmlを書いてアップロードする機会すらほぼ皆無だろうから、そりゃまあ「CGIを使いたい? するとお前はそういうスキルを持った人種だな。ソースを書き直せ」とか言い出すわな…。
さておき。せめて最新の jcode.pl を設置してみようと思っても、入手場所がよく分からず…。
ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/ というURLを見かけたけど、今時のブラウザは ftp:// を開けないじゃんよ…。
_jcode.pl - Wikipedia
昨今の Perl は defined() を使わないような記述を要求されるけど、jcode.pl は昔の Perl で動くように書かれているから defined() も使っていて…。
... &init_z2h_euc unless defined %z2h_euc; ... &init_z2h_sjis unless defined %z2h_sjis; ...
これは、以下のように修正しないといけない。
... &init_z2h_euc unless %z2h_euc; ... &init_z2h_sjis unless %z2h_sjis; ...
ググった感じだとPerl界隈では、
「jcode.pl なんて使ってんじゃねえ。古過ぎる」
「Jcode.pmも既に古い。それも使うな」
「今時の Perl は標準で Encode.pm が入ってるんだからソレを使うように書き直せ」
という風潮になってるようで。
ただ、WebからCGIスクリプトをDLして設置して動かしてるだけの人に、ソースを丸々書き直せと要求するのも…。いやまあ、今時、サーバにCGIを設置する人なんて開発者の類しか居ないだろうからアレではあるのだけど。CGIどころかhtmlを書いてアップロードする機会すらほぼ皆無だろうから、そりゃまあ「CGIを使いたい? するとお前はそういうスキルを持った人種だな。ソースを書き直せ」とか言い出すわな…。
さておき。せめて最新の jcode.pl を設置してみようと思っても、入手場所がよく分からず…。
ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/ というURLを見かけたけど、今時のブラウザは ftp:// を開けないじゃんよ…。
_jcode.pl - Wikipedia
◎ require が動かない。 :
昔の Perl は、require "hoge.pl" と書けば、同じ階層に存在する hoge.pl を読み込んでくれたけど、今時の Perl は同階層を検索してくれない状態になっていて。場当たり的な解決策として、require "./hoge.pl" と書けば、一応読み込んでくれるけど…。
◎ 余談。シバン行が合ってない。 :
動かなかったCGIの最新版をDLして動作確認しようとしたらそれでも動いてくれなくて結構悩んでしまったのだけど。1行目のシバン行が合ってなかっただけだった。あるあるだ…。当時は当たり前だったアレコレを、もうすっかり忘れてる…。トホホ。
_シバン (Unix) - Wikipedia
「#!/usr/local/bin/perl」と書けば動く環境と、「#!/usr/bin/perl」と書けば動く環境があって、配布されてるCGIは前者だったけど、ウチの自宅サーバは後者だった…。
よく分かんない時は「#!/usr/bin/env perl」と書いとけば、ひとまず最低限動いたはず…。ただ、コレも、悪習だの何だの言われてた記憶があるけど…。動かないよりはマシじゃんよ、と言いたい気持ちも…。
_#!/usr/bin/env - どさにっき
_卜部昌平のあまりreblogしないtumblr - #!/usr/bin/env ...
_シバン (Unix) - Wikipedia
「#!/usr/local/bin/perl」と書けば動く環境と、「#!/usr/bin/perl」と書けば動く環境があって、配布されてるCGIは前者だったけど、ウチの自宅サーバは後者だった…。
よく分かんない時は「#!/usr/bin/env perl」と書いとけば、ひとまず最低限動いたはず…。ただ、コレも、悪習だの何だの言われてた記憶があるけど…。動かないよりはマシじゃんよ、と言いたい気持ちも…。
_#!/usr/bin/env - どさにっき
_卜部昌平のあまりreblogしないtumblr - #!/usr/bin/env ...
[ ツッコむ ]
以上です。