【问题标题】:"Can't locate ExtUtils/MakeMaker.pm in @INC" during git build“在 git 构建期间无法在 @INC 中找到 ExtUtils/MakeMaker.pm”
【发布时间】:2018-02-22 15:31:57
【问题描述】:

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

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 ..

但是,git 源根目录中的make 失败,原因是

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

我知道对于 perl 项目 How do I tell CPAN to install all dependencies? 有很多关于 Can't locate [module].pm in @INC 的解决方案。但是,git 使用 GNU 自动工具,并且可以解决问题的选项可能是从我目前无法弄清楚的环境变量中读取的。

Ubuntu 16.04 提供了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

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

如果您想调查环境,可以使用docker run -i -t ubuntu:latest

我在https://gitlab.com/krichter/git-docker-build 提供了一个可重现的构建,GitLab CI 运行器的示例输出可以在https://gitlab.com/krichter/git-docker-build/-/jobs/53888412 找到。

【问题讨论】:

  • MakeMaker.pm 在哪里?它的目录在perl E 'say for @INC' 中吗?您是否尝试过先单独运行cpan ExtUtils::MakeMaker
  • 您的 Git 安装似乎正在使用 perl-5.22(预安装在 16.04)上运行,而您安装的是 perl-5.26。我不确定您的cpan 命令属于哪个安装。
  • @Borodin 我添加了perl -E 'say for @INC' 的输出。用cpan ExtUtils::MakeMaker 替换cpan install ExtUtils::MakeMaker 没有帮助(我想这就是你的意思)。
  • @amon 我在问题中添加了有关初始 perl 和 cpan 命令的更多信息(有一个perl,但没有提供cpan 命令,即cpan 必须属于perl源安装)。尽管如此,自动工具正在使用/usr/bin/perl 而不是/usr/local/bin/perl
  • @Borodin 我找到了解决方案(请参阅下面的答案)。感谢您的支持。您可以使用我提供的 SSCCE 进行进一步调查。

标签: git perl docker build autotools


【解决方案1】:

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

yum install perl-devel

然后重试。

【讨论】:

    【解决方案2】:

    ./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

    添加--with-perl 后,cpan ExtUtils::MakeMaker 就不需要了。

    【讨论】:

    • 啊!我正要建议删除 perl 的原始安装或将其位置移出PATH。干得好。
    • 如果你的常规程序是/usr/local/bin/perl/usr/local/bin/cpan,但git使用的是/usr/bin/perl,那么git构建中缺少的模块可能可以用/usr/bin/cpan安装。
    • @mob /usr/bin/cpan 属于 /usr/bin/perl) 不存在(见问题)。还是您的意思是将所有内容都安装到前缀/usr而不是/usr/local并有效地覆盖系统提供的perl?这不是一个好主意,对吧?
    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多