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
手動実行時はここでコントロールが戻されるのでそのまま次のコマンドを実行できましたが、 Dockerfile
で RUN
しているとここでエラーとなり止まってしまいます。
そこで対処。
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
- Can’t locate ExtUtils/MakeMaker.pm ? katz+
- centos 6.2 x64 install mod_perl error | DirectAdmin Forums
一見すると 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 --version
で 5.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"
これだけでもできました。