make コマンドのエラー対処 (エラー無視と Perl のバージョン指定)

Docker 上で make コマンドを使用した際に遭遇した2つのエラーに対処しました。

make test エラー

一つ目は make test 時にエラーになってしまう現象。

# make test

# 略

Failed 3 tests out of 1152, 99.74% okay.
        ../lib/Time/Local.t
        comp/cpp.t
        run/switchPx.t
### Since not all tests were successful, you may want to run some of
### them individually and examine any diagnostic messages they produce.
### See the INSTALL document's section on "make test".
### You have a good chance to get more information by running
###   ./perl harness
### in the 't' directory since most (>=80%) of the tests succeeded.
### You may have to set your dynamic library search path,
### LD_LIBRARY_PATH, to point to the build directory:
###   setenv LD_LIBRARY_PATH `pwd`:$LD_LIBRARY_PATH; cd t; ./perl harness
###   LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd t; ./perl harness
###   export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH; cd t; ./perl harness
### for csh-style shells, like tcsh; or for traditional/modern
### Bourne-style shells, like bash, ksh, and zsh, respectively.
u=2.17  s=2.06  cu=114.19  cs=20.63  scripts=1152  tests=134801
make[2]: *** [_test_tty] Error 1
make[2]: Leaving directory `/var/perl58/perl-5.8.9'
make[1]: *** [_test] Error 2
make[1]: Leaving directory `/var/perl58/perl-5.8.9'
make: *** [test] Error 2

手動実行時はここでコントロールが戻されるのでそのまま次のコマンドを実行できましたが、 DockerfileRUN しているとここでエラーとなり止まってしまいます。

そこで対処。

RUN make -i test

make-iオプション を付けてエラー無視させるようにしました。これでこの部分については次に進めるようになりました。

Can’t locate ExtUtils/Embed.pm in @INC

次に引っかかったのは次のエラー。

=> ERROR [24/26] RUN perl Makefile.PL MP_APXS=/usr/bin/apxs MP_AP_CONFIGURE="prefix=/usr/local/mod_perl-2.0.11 -enable-  0.3s 
------
 > [24/26] RUN perl Makefile.PL MP_APXS=/usr/bin/apxs MP_AP_CONFIGURE="prefix=/usr/local/mod_perl-2.0.11 -enable-so -enable-rewrite":
#27 0.234 Can't locate ExtUtils/Embed.pm in @INC (@INC contains: lib Apache-Test/lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at lib/Apache2/Build.pm line 28.
#27 0.234 BEGIN failed--compilation aborted at lib/Apache2/Build.pm line 28.
#27 0.234 Compilation failed in require at Makefile.PL line 38.
#27 0.234 BEGIN failed--compilation aborted at Makefile.PL line 38.
------
failed to solve: rpc error: code = Unknown desc = executor failed running [/bin/sh -c perl Makefile.PL MP_APXS=/usr/bin/apxs MP_AP_CONFIGURE="prefix=/usr/local/mod_perl-2.0.11 -enable-so -enable-rewrite"]: exit code: 2

一見すると ExtUtils/Embed.pm が配置できない、ということで perl-ExtUtils-MakeMaker をインストールすれば良さそうに見えます。

しかし追加しても改善が見られなかったので別の対処を。

RUN perl Makefile.PL MP_APXS=/usr/bin/apxs MP_AP_CONFIGURE="prefix=/usr/local/mod_perl-2.0.11 -enable-so -enable-rewrite"

該当部分のコマンドは上述のようにしていましたが、 bash ログインすると perl --version5.16.3 を出力したので、どうやら 5.8.9 環境で実行できていなさそうな雰囲気でした。

ちなみに docker-compose build --no-cache してもダメでした。

RUN /usr/local/perl-5.8.9/bin/perl Makefile.PL MP_APXS=/usr/bin/apxs MP_AP_CONFIGURE="prefix=/usr/local/mod_perl-2.0.11 -enable-so -enable-rewrite"

そこで perl コマンドのパスをフルパス指定で 5.8.9 を明示することでエラーが解消できました。

もっというとシンボリックリンクの貼り方を間違えていたので

ln -s /usr/local/perl-5.8.9/bin/perl /usr/local/bin/perl

きちんとシンボリックリンクを貼って perl コマンドで 5.8.9 を参照できるようになれば

RUN perl Makefile.PL MP_APXS=/usr/bin/apxs MP_AP_CONFIGURE="prefix=/usr/local/mod_perl-2.0.11 -enable-so -enable-rewrite"

これだけでもできました。

参考

make -i, ignoreオプション

Can’t locate ExtUtils/Embed.pm in @INC

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。