Estoy compilando git en un sistema bastante mínimo (imagen de la ventana acoplable de Ubuntu 16.04) sin usar el administrador de paquetes (excepto para wget, xz-utils, make y {{X4} }). Por lo tanto, instalé los requisitos previos de la siguiente manera:

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

Sin embargo, make en la raíz de origen git falla debido a

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

Soy consciente de que hay muchas soluciones con respecto a Can't locate [module].pm in @INC para proyectos de perl, ¿Cómo le digo a CPAN que instale todas las dependencias?. Sin embargo, git usa herramientas automáticas de GNU y las opciones que podrían solucionar el problema probablemente se leen de variables de entorno que no pude entender hasta ahora.

Ubuntu 16.04 proporciona un comando perl, pero no cpan (por eso agregué la instalación de origen perl). Después de que se reconoce la instalación de origen perl, pero parece que no se usa:

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

Después de cpan obtengo

$ 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

La configuración se extrae de un script de arranque, por lo que usar el administrador de paquetes no es realmente una opción.

Puede utilizar docker run -i -t ubuntu:latest en caso de que le interese investigar el entorno.

Proporcioné una compilación reproducible en https://gitlab.com/krichter/git-docker-build y una salida de ejemplo del corredor de CI de GitLab se puede encontrar en https : //gitlab.com/krichter/git-docker-build/-/jobs/53888412.

2
Karl Richter 22 feb. 2018 a las 18:31

2 respuestas

La mejor respuesta

El uso de ./configure --with-perl=/usr/local/bin/perl para git funciona, sin embargo, no me queda claro por qué no se detecta /usr/local/bin/perl antes de /usr/bin/perl si PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin.

El cpan ExtUtils::MakeMaker no es necesario después de agregar --with-perl.

3
Karl Richter 22 feb. 2018 a las 18:23

En CentOS7, encuentro este problema, creo que debo instalar el perl-devel en primer lugar:

yum install perl-devel

Luego vuelva a intentarlo.

13
aircraft 9 may. 2018 a las 04:31