Ubuntu 20へアップデートしたために、Perlのスクリプトが動作しなくなった
前は18.04 LTSだったので、2023年4月(通常)、2028年4月(ESM)という長期に利用できるバージョンでしたが、CentOS6の失敗(上位にアップデートに不安要素が多い)の経験から、情報が多くあるうちに、今回早々にアップグレードを実施しました。
Ubuntu 18から20へはスムーズに完了できていました。アップグレードコマンドを実施し、再起動1回で済みました。
基本的な動作は問題ないし、基本社内においているAsteriskサーバーだったので、その動作確認も済ませていました。
AsteriskでのSMS転送の不具合発見
このAsteriskサーバーでは、USBドングルをつないでいて、SMSや通話などの発着を補っています。通話は他のIP電話アプリへ。SMSはEmailへ転送しています。
今回、問題が発覚したのはSMSの転送です。普段SMSの使用頻度は少なく、キャリアの請求メールや二段階認証のコードなどを受けてるくらいでした。Emailへの転送ができていませんでした。
Perlのバージョンアップ
まず、大きな原因としては、Ubuntu18から20へアップグレードした際に、Perlのバージョンもアップしていたこと。
それに伴い、Perlモジュールもバージョンアップの必要があった。通常、Perl単体でバージョンアップすると、古いバージョンも残したままにできる。Perlスクリプトで明示的に古いPerlのバージョンを指定することも可能でPerlモジュールも同様。しかし、OSのバージョンアップに伴う、Perlのバージョンアップでは、古いPerlのバージョンが見つけられない。Ubuntu20へのアップグレード最中に古いバージョンを残す質問があったかもしれないが、数十回という設問にデフォルトで答え続けたかもしれない。
まぁ、使用しているPerlモジュールを再インストールすればいい話。
だと思っていた・・・・。
Perlモジュールがインストールできない
perl -c marumaru.pl などと実行すると、エラーチェックができるから、そのエラー内容をもとに、一つずつcpanでモジュールをインストールしていく。
今回、必要なPerlスクリプトは一つだけ。届いたSMSをEmailに転送する単機能。Linuxならメールサーバーを立ち上げることもできますが、Emailに転送するだけなら、Perlだけでやったほうがシンプル。「普通のパソコンでGmailにアクセスして、メールを送信する機能」を、Perlスクリプトに実装していただけ。
近年のEmailはSSLでの認証が必要なので、その部分のPerlモジュールがインストールができない状況となっていた。
ググった
Perlモジュールにも流行りというか、開発が終了しているのもある。
私が使っていたモジュールは、Email::Sender::Transport::SMTP::TLS である。これのインストールを行うと、Cpanが止まってしまう。原因はわからない。
しかし、こちらの方の記事を見ると、
すでに非推奨の
Net::SMTP::TLS
を修正したNet::SMTP::TLS::ButMaintained
もやはり非推奨で、さらにそのラッパーであるEmail::Sender::Transport::SMTP::TLS
も、当然非推奨になっている。かわりに推奨されているのが
Email::Sender::Transport::SMTPS
であり、より低レベルなAPIのNet::SMTPS
http://nozawashinichi.sakura.ne.jp/usingmt/2014/04/net-smtps-smtp-auth-sakura.html
である。
とのことで、Email::Sender::Transport::SMTPSへ切り替えた。
時代によって使うモジュールも変わっているんだな。
この記事2014年というのは気になるけど、とりあえずここを参考にしたら、無事復活。2箇所くらいの変更で復帰した。
2020年のSMTP TLSを使用するモジュールは?
Email::Sender::Transport::SMTPS の最終更新日は、APR 05, 2017
Net::SMTPS の更新日はAPR 11, 2020
ラッパーのEmail::Sender::Transport::SMTPSは少し不安だが、ベースのNet::SMTPSが更新が進んでいるから、当面はこの組み合わせでも問題ないのでしょう。
ただ、更新がされていないからダメというものでもなく、完全に安定していて更新する必要がないものもあるから、この更新日はあまりアテにしないほうがいいかもしれない。
ただ、SSLに関わる部分は常にセキュリティーの問題が見つかったりと、その対応が必要になるのかもしれないから、更新日が近いのは安心感がある。
ここまで書いてて、なんですけど。
基本的に、モジュールはcpanで入れているのですが、今回始めて、aptでインストールしたものがある。
どうしてもcpanでssl関係で止まっているようだったから、試行錯誤。
apt install libcrypt-ssleay-perl
apt install libnet-ssleay-perl
とか。ググっている最中に、そういう話が少しあったので。