我试着在一个基于阿尔卑斯的码头容器上安装MHA节点。容器有perl、make和通过apk的gcc。:
RUN apk add --update perl make gcc MHA节点的先决条件是DBD::mysql。该命令
perl -MCPAN -e 'install DBD::mysql'导致上述给定错误。谷歌对此一无所知。
然而,MHA管理器所需的以下命令运行正常:
perl -MCPAN -e "install Config::Tiny"
perl -MCPAN -e "install Log::Dispatch"
perl -MCPAN -e "install Parallel::ForkManager"问题显然与DBI有关:
Running Mkbootstrap for DBI ()
chmod 644 "DBI.bs"
"/usr/bin/perl" -p -e "s/~DRIVER~/Perl/g" ./Driver.xst > Perl.xsi
"/usr/bin/perl" "/usr/share/perl5/core_perl/ExtUtils/xsubpp" -typemap "/usr/share/perl5/core_perl/ExtUtils/typemap" -typemap "typemap" Perl.xs > Perl.xsc && mv Perl.xsc Perl.c
cc -c -D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os -fomit-frame-pointer -DVERSION=\"1.636\" -DXS_VERSION=\"1.636\" -fPIC "-I/usr/lib/perl5/core_perl/CORE" -W -Wall -Wpointer-arith -Wbad-function-cast -Wno-comment -Wno-sign-compare -Wno-cast-qual -Wmissing-noreturn -Wno-unused-parameter Perl.c
In file included from Perl.xs:7:0:
DBIXS.h:22:20: fatal error: EXTERN.h: No such file or directory
compilation terminated.
Makefile:625: recipe for target 'Perl.o' failed
make: *** [Perl.o] Error 1
TIMB/DBI-1.636.tar.gz
/usr/bin/make -- NOT OK我能做些什么来解决这个问题?
安装后与Ubuntu 14.04兼容,使gcc
发布于 2016-06-10 00:52:26
您需要libperl头文件才能构建某些模块,包括DBI。在阿尔卑斯山上,它们看起来是由perl-dev包提供的。
发布于 2016-06-10 05:34:24
来自http://www.perlmonks.org/bare/?node_id=486526
perl EXTERN.h是
C API的一部分,它是嵌入解释器和构建XS模块所必需的。官方的perl发行版包含所有这些文件,但许多linux发行版没有将其捆绑为基础perl包的一部分(有些甚至省略了许多核心模块)。您的发行版应该有一个或多个额外的包来提供C API文件。它们通常被称为"perl-dev“或类似的东西。(从googling上看,mandrage包是"perl-devel-5.*.rpm")
因此,解决方案看起来像是将perl-dev添加到apk add命令中,但这还不够:
In file included from DBIXS.h:23:0,
from Perl.xs:7:
/usr/lib/perl5/core_perl/CORE/perl.h:699:23: fatal error: sys/types.h: No such file or directory
compilation terminated.
Makefile:628: recipe for target 'Perl.o' failed好的,更多的谷歌搜索也得到了addin musl-dev。现在它起作用了:
FROM alpine
ENV MHA_NODE_VERSION=0.54 \
MHA_MANAGER_VERSION=0.55
COPY ./mha/* /tmp/
# mha4mysql-manager-0.55.tar.gz
# mha4mysql-node-0.54.tar.gz
RUN apk add --update perl perl-dev musl-dev make gcc \
&& perl -MCPAN -e 'install DBD::mysql' \
&& perl -MCPAN -e "install Config::Tiny" \
&& perl -MCPAN -e "install Log::Dispatch" \
&& perl -MCPAN -e "install Parallel::ForkManager" \
&& cd /tmp \
&& tar -zxf mha4mysql-node-${MHA_NODE_VERSION}.tar.gz \
&& cd mha4mysql-node-${MHA_NODE_VERSION}/ \
&& perl Makefile.PL \
&& make \
&& make install \
&& cd /tmp \
&& tar -zxf mha4mysql-manager-${MHA_MANAGER_VERSION}.tar.gz \
&& cd mha4mysql-manager-${MHA_MANAGER_VERSION}/ \
&& perl Makefile.PL \
&& make \
&& make install \
&& apk del make gcc musl-dev perl-dev \
&& rm -rf /var/cache/apk/*
ENTRYPOINT ["/usr/bin/perl", "-de0"]https://stackoverflow.com/questions/37654790
复制相似问题