1. ホーム
  2. git

[解決済み] 「git ビルド中に「@INC に ExtUtils/MakeMaker.pm の場所が見つかりません。

2022-02-17 16:58:16

質問

私は、以下のものを作っています。 git を除いて)パッケージマネージャーを使わずに、かなり最小限のシステム(Ubuntu 16.04 の docker イメージ)上で動作します。 wget , xz-utils , makegcc ). そこで、以下のようにprerequisistesをインストールしました。

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 のため、ソースルートに失敗します。

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

については、いろいろな解決策があることは承知しています。 Can't locate [module].pm in @INC perlのプロジェクトでは CPANにすべての依存関係をインストールするように指示するにはどうしたらいいですか? . しかし git はGNU autotoolsを使用しており、この問題を解決できるオプションは、おそらく環境変数から読み込まれると思われますが、今のところ把握できていません。

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 .

解決方法は?

使用方法 ./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 .