このブログ、サーバーはConoHaをレンタルしているのですが、普通に動いていたCGIが(私は何も変えてないのに)エラーになっていることに気づきました。
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.
少なくとも2026/6/19まではちゃんと動いていたのに、どうしたことでしょう。
しかもFTPで属性確認しようと思ったら、FTPすらつながらないではありませんか。
ConoHaと言えばこの1ヶ月いろいろあったようで、そう言えばたくさんメールが来てましたね。
横着して詳細をあまり読んでいなかったので、ブラウザでConoHaにログインしお知らせ一覧を改めて見てみました。
6/19以降の主なニュースはこんな感じ。
| 2026-06-23 | 【お知らせ】脆弱性(CVE-2026-49975)に伴うWebサーバー通信設定の復旧について |
| 2026-06-30 | 【メンテナンス】[ConoHa]ハードウェア交換(収容ホスト:一部収容ホスト) |
| 2026-07-08 | 【お知らせ】脆弱性(CVE-2026-49975)に伴うSSH接続機能の一時停止について |
| 2026-07-09 | 【メンテナンス】[ConoHa]DBサーバーリプレース(収容ホスト:一部収容ホスト) |
| 2026-07-15 | 【お知らせ】[WING]ディスク容量の増量を実施 |
| 2026-07-15 | 【お知らせ】[WING]メールセキュリティ仕様変更のお知らせ |
| 2026-07-17 | 【メンテナンス】[ConoHa]サーバーメンテナンス |
| 2026-07-17 | 【お知らせ:続報】脆弱性(CVE-2026-49975)に伴うSSH接続機能の一時停止について |
ディスク容量が200GB増えたこととかありがたい限りなのは置いといて。
6/30の ”ハードウェア交換” が気になるので、内容を読んでみました。
平素よりConoHaをご利用いただき、誠にありがとうございます。
下記日時におきまして、一部サーバーのメンテナンス作業を実施させていただきます。
ご利用のお客様にはご不便をおかけ致しますが、何とぞご理解ご協力のほど
お願い申し上げます。
開始日時 : 2026年07月06日(月) 00時00分
終了日時 : 2026年07月06日(月) 23時59分
対象 : 収容ホスト:一部収容ホスト
作業内容 : 収容ホストの移行を伴う機器メンテナンス
影響 : 収容ホストの移行におきましてWeb表示が
できないような影響は発生致しませんが、
以下サーバー名が変更となりますので、お客様にて
ご用意されたプログラムやSSH接続、FTPソフトの
ご利用がある場合は設定の修正をお願い致します。
※変更される項目
・Webサーバー名
・FTPサーバー名
※メンテナンス終了後、収容ホストが変更となりますため、
下記の方法にてご確認をお願い致します。
※メールに関する情報については変更はございませんので
引き続きご利用が可能です。
※外部DNSをご利用の場合はIPアドレスが変更となりますので
ご確認の上修正をお願い致します。
※今回のメンテナンスにてPerlのバージョンが5.32へ変更となります。
(以下略)
えええ!めっちゃ重要なこと書いてありますやん!
聞いてないよ!(メール読めよ自分)
ということで、まずはFTPサーバー名を確認。
FTPサーバー名は、ConoHaにログインして [サイト管理]>[FTP] にあります。
ハイ、変わってました。

新しいサーバー名を設定して、まずはFTP接続できるようになりました。
けれど、FTPで確認してもCGIの属性は全部755で問題なし。
ということで真面目にエラーログを見てみました。
エラーログは [サイト管理]>[アクセス解析]>[ログ] にあります。

するとこんなエラーが。
Can’t locate jacode.pl in @INC (@INC contains: /usr/local/lib64/perl5/5.32 /usr/local/share/perl5/5.32 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at *******.cgi line 15., referer: https://sweetcocoro.com/*******/
コードのline 15になにがあるかというと”jacode.pl”を読み込んでいるだけなのですが。
require 'jacode.pl';
もしかしてPerlバージョンのアップグレードに対してjacodeのバージョンが古いのかな?
と思い念のため http://search.cpan.org/~ina/jacode/ から最新のjacodeをダウンロードして入れ替えてみました。
が、エラーは変わりません。
そこで色々ググっていたら、こちらのサイトが大変役に立ちました!
Perl 5.26 から変わったことが色々あるんだそうな。
今回のエラーの件で、原因となったのはここ⇩⇩
@INCからカレントディレクトリが削除
Perlはバージョン3の時代である1990年から、ファイルやモジュールの呼び出し元を指定する特殊変数@INCの末尾に、カレントディレクトリを表す.を保持していました。20世紀末のCGIスクリプトでは歌代和正氏が作成したjcode.というライブラリがよく利用されましたが、次のようなコードを書いて、CGIスクリプトの置かれているディレクトリにjcode.というファイルを設置するだけで期待したとおりに動作したのは、@INCの末尾にカレントディレクトリが含まれていたからです。
# ほかの場所にインストールされていなければ
# CGIスクリプトと同じディレクトリにある
# jcode.plを読み込む
require "jcode.pl";
Perl 5.26では、セキュリティ上の理由でデフォルトの@INCから.が削除されました。上のコードはそのままではもう期待どおりの動作はしません。
引用:Perl 5.26で変わること(1) ー gihyo.jp(技術評論社)
(; ・`д・´)ナン…ダッテ!?
てかPerl 5.26がリリースされたのは2017年5月30日ですから、最近のみなさんは普通にちゃんとコード書いてたのかもしれないんですけど。
何しろワタクシがPerlを独学で習得したのは2000年頃なので、そんなの知らなかったし!
ConoHaがずっとPerl 5.16だったのがいけないんだ!プンプン。
で、どうすればいいかというと
use lib ".";
require "jcode.pl";
この一行を追加するだけで、めでたくCGIが動作しました👏👏👏
いやぁ、なにごとも日々アップデートしていかないといけませんなぁ。
おわり。


コメント