04 June 2018

Raspberry PiでPerlのNet::SMTPSモジュールのインストールエラーを回避

Raspberry PiでPerlのNet::SMTPSモジュールをインストールしようとしたところ、次のエラーが出て終了してしまう。

t/mitm.t ................... ok
t/nonblock.t ............... Failed 2/27 subtests 
t/npn.t .................... ok

これは、依存関係から自動インストールされるIO::Socket::SSLのコンパイルエラー。

ネットを検索すると、『 [SOLVED] Building package "perl-IO-Socket-SSL" from SBo fails on RasPi 』 が全く同じ現象を解決した記事になっている。

まず、meta cpanのIO::Socket::SSLから、モジュールのソースコードをダウンロードして展開する。

展開したディレクトリでシェルに入り

sed -e '0,/^use/s//print "1..0 # Skipped: no support for nonblocking sockets\\n";\nexit;\nuse/' -i t/nonblock.t

この処理で、ファイルが1個書き換わる。赤字の部分が追記された部分。

t/nonblock.t
#!perl
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl t/nonblock.t'
 
print "1..0 # Skipped: no support for nonblocking sockets\n";
exit;
 
use strict;
use warnings;
use Net::SSLeay;
use Socket;
use IO::Socket::SSL;
use IO::Select;
use Errno qw( EWOULDBLOCK EAGAIN EINPROGRESS EPIPE ECONNRESET );
do './testlib.pl' || do './t/testlib.pl' || die "no testlib";
 
if ( ! eval "use 5.006; use IO::Select; return 1" ) {
    print "1..0 # Skipped: no support for nonblocking sockets\n";
    exit;
}

そして、モジュールを手動でコンパイルしてインストールする

perl Makefile.PL INSTALLDIRS=perl
make
make test
sudo make install