“在git构建期间无法在@INC中找到ExtUtils / MakeMaker.pm”

时间:2018-02-22 15:31:57

标签: git perl docker build autotools

我在一个非常小的系统(Ubuntu 16.04 docker image)上构建git而不使用包管理器(wgetxz-utilsmake和{除外} {1}})。因此,我按如下方式安装了先决条件:

gcc

但是,apt-get update && apt-get install --yes wget xz-utils make gcc wget http://www.cpan.org/src/5.0/perl-5.26.1.tar.gz && tar xf perl-5.26.1.tar.gz && cd perl-5.26.1 && ./configure.gnu && make -j16 && make install && cd .. wget https://ftp.gnu.org/pub/gnu/gettext/gettext-0.19.8.1.tar.xz && tar xf gettext-0.19.8.1.tar.xz && cd gettext-0.19.8.1 && ./configure && make -j16 && make install && cd .. wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xf zlib-1.2.11.tar.gz && cd zlib-1.2.11 && ./configure && make -j16 && make install && cd .. cpan install ExtUtils::MakeMaker wget https://www.kernel.org/pub/software/scm/git/git-2.13.3.tar.gz && tar xf git-2.13.3.tar.gz && cd git-2.13.3 && ./configure && make -j16 && make install && cd .. 源根目录中的make

而失败
git

我知道有很多关于perl项目Can't locate ExtUtils/MakeMaker.pm in @INC (you may need to install the ExtUtils::MakeMaker module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at Makefile.PL line 3. BEGIN failed--compilation aborted at Makefile.PL line 3. make[1]: *** [perl.mak] Error 2 Makefile:83: recipe for target 'perl.mak' failed make: *** [perl/perl.mak] Error 2 make: *** Waiting for unfinished jobs.... Makefile:1870: recipe for target 'perl/perl.mak' failed 的解决方案,How do I tell CPAN to install all dependencies?。但是,Can't locate [module].pm in @INC使用GNU自动工具和可以解决问题的选项可能是从环境变量中读取的,到目前为止我无法弄清楚。

Ubuntu 16.04提供git但没有perl命令(这就是我添加cpan源安装的原因)。识别出perl源安装后,但似乎没有使用:

perl

$ which -a perl /usr/local/bin/perl /usr/bin/perl $ which -a cpan /usr/local/bin/cpan 后我

cpan

设置是从引导脚本中抽象出来的,因此使用包管理器实际上是没有选择的。

如果您需要调查环境,可以使用$ find / -name MakeMaker.pm /builds/project-0/perl-5.26.1/lib/ExtUtils/MakeMaker.pm /builds/project-0/perl-5.26.1/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm /root/.cpan/build/ExtUtils-MakeMaker-7.32-0/lib/ExtUtils/MakeMaker.pm /root/.cpan/build/ExtUtils-MakeMaker-7.32-0/blib/lib/ExtUtils/MakeMaker.pm /usr/local/lib/perl5/5.26.1/ExtUtils/MakeMaker.pm /usr/local/lib/perl5/site_perl/5.26.1/ExtUtils/MakeMaker.pm $ perl -E 'say for @INC' /usr/local/lib/perl5/site_perl/5.26.1/x86_64-linux /usr/local/lib/perl5/site_perl/5.26.1 /usr/local/lib/perl5/5.26.1/x86_64-linux /usr/local/lib/perl5/5.26.1

我在https://gitlab.com/krichter/git-docker-build提供了可重现的版本,可以在https://gitlab.com/krichter/git-docker-build/-/jobs/53888412找到GitLab CI版本的示例输出。

2 个答案:

答案 0 :(得分:6)

在CentOS7中,我遇到了这个问题,我发现我应该首先安装perl-devel

yum install perl-devel

然后重试。

答案 1 :(得分:3)

使用./configure --with-perl=/usr/local/bin/perl git作品,但我不清楚为什么在/usr/local/bin/perl /usr/bin/perl PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin之前没有选择cpan ExtUtils::MakeMaker

添加--with-perl后无需function getOrganization(){ return new URLSearchParams(location.search).get('organization') }