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 respuestas
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
.
En CentOS7, encuentro este problema, creo que debo instalar el perl-devel
en primer lugar:
yum install perl-devel
Luego vuelva a intentarlo.
Nuevas preguntas
git
Git es un sistema de control de versiones distribuido de código abierto (DVCS). Utilice esta etiqueta para preguntas relacionadas con el uso y los flujos de trabajo de Git. NO USE la etiqueta [github] para problemas relacionados con Git simplemente porque un repositorio está alojado en GitHub. Además, no use esta etiqueta para preguntas generales de programación que involucren un repositorio de Git.