Perl module broke my windows xampp installation - perl

PROBLEM: In the process of trying to install gitstat on a Windows7 machine I broke my xampp Apache installation. Now I can't get gitstat or apache to work.
APACHE ERROR:
[error] Can't load Perl file: C:/xampp/apache/conf/extra/startup.pl for server localhost:80, exiting...`
Other people have reported this issue being caused by the PERL5LIB environment variable, but that variable does not exist on my machine.
WHAT I DID / GITSTAT ERROR:
I needed the SOAP::Lite module installed so I followed the windows guide here: http://soaplite.com/install.html
As far as I could tell I installed the module successfully, console output below
cpan[1]> install SOAP::Lite
CPAN: Storable loaded ok (v2.21)
Going to read '\xampp\perl\bin\.cpan\Metadata'
Database was generated on Wed, 27 Jun 2012 02:47:03 GMT
SOAP::Lite is up to date (0.714).
I saw a SOAP directory in perl/site/lib which (to me) means that the module should be available. When I look in my perllocal.pod file SOAP:Lite is in there.
Part of the gitstat installation instructions say to copy the Lite.pm file from perl/site/lib/SOAP into gitstat\gstat_pl\lib
However, when I try to perform step nine of gitstat installation (perl gitstat.pl HEAD) I get the following:
C:\xampp\htdocs\gitstat\gstat_pl>perl gitstat.pl HEAD
Supported versions:
BEGIN failed--compilation aborted at C:/xampp/perl/site/lib/SOAP/Lite.pm line 34
86.
Compilation failed in require at C:/xampp/perl/site/lib/SOAP/Constants.pm line 1
3.
BEGIN failed--compilation aborted at C:/xampp/perl/site/lib/SOAP/Constants.pm li
ne 13.
Compilation failed in require at lib/Lite.pm line 3444.
BEGIN failed--compilation aborted at lib/Lite.pm line 3444.
Compilation failed in require at gitstat.pl line 30.
If I don't copy the file from perl/site/lib/SOAP then I get
C:\xampp\htdocs\gitstat\gstat_pl>perl gitstat.pl HEAD
Can't locate lib/Lite.pm in #INC (#INC contains: C:/xampp/perl/lib C:/xampp/perl
/site/lib .) at gitstat.pl line 30.
I don't understand why CPAN didn't install the Lite.pm module in the #INC path or why the compilation might fail when the module is available, or most importantly why my Apache install is broken. Also I'm very new to Perl and CPAN and my understanding of Apache is primitive so simpler explanations would be greatly appreciated.

Related

Getting error while executing makeinfo on cygwin

While executing makeinfo on cygwin I am getting the following errors. I am using the perl version 5.32.1
23:16 Harshal:~> makeinfo
Can't locate if.pm in #INC (you may need to install the if module) (#INC contains: /usr/lib/texinfo /usr/share/texinfo/lib/Text-Unidecode/lib /usr/share/texinfo/lib/Unicode-EastAsianWidth/lib /usr/share/texinfo/lib/libintl-perl/lib /usr/share/texinfo /usr/share/texinfo /usr/local/lib/perl5/site_perl/5.32/x86_64-cygwin-threads /usr/local/share/perl5/site_perl/5.32 /usr/lib/perl5/vendor_perl/5.32/x86_64-cygwin-threads /usr/share/perl5/vendor_perl/5.32 /usr/lib/perl5/5.32/x86_64-cygwin-threads /usr/share/perl5/5.32) at /usr/share/texinfo/Texinfo/Structuring.pm line 27.
BEGIN failed--compilation aborted at /usr/share/texinfo/Texinfo/Structuring.pm line 27.
Compilation failed in require at /usr/share/texinfo/Texinfo/Convert/Converter.pm line 32.
BEGIN failed--compilation aborted at /usr/share/texinfo/Texinfo/Convert/Converter.pm line 32.
Compilation failed in require at /usr/bin/makeinfo line 99.
BEGIN failed--compilation aborted at /usr/bin/makeinfo line 99.
If someone can provide some pointer on how to resolve this issue would be helpful
I tried updating the perl version. I tried commetting out the code on line num 27 in structuring.pm didn;t workout. I am not from software background but i need the above thing for some RISCV based toolchain update.
Any help woudl be really appreciated .
Something's wrong with your system. This is a file included in the perl-5.32.1-2 package. It should be found at
/usr/share/perl5/5.32/if.pm
Try reinstalling the perl package. If the file isn't missing, something's wrong with the permissions.

Perl Error: Can't load GD.xs.dll for module GD

I've installed Strawberry Perl on my Windows Server 2019 machine and my Apache server keeps giving me the following errors when I try to run perl scripts:
Can't load 'C:/usr/site/lib/auto/GD/GD.xs.dll' for module GD: load_file:The specified module could not be found at C:/usr/lib/DynaLoader.pm line 193.: D:/www/update/cgi-bin/FILENAME.pl, referer: http://update/cgi-bin/FILENAME.pl
: D:/www/update/cgi-bin/FILENAME.pl, referer: http://update/cgi-bin/FILENAME.pl
Compilation failed in require at C:/usr/site/lib/GD/Simple.pm line 160.: D:/www/update/cgi-bin/FILENAME.pl, referer: http://update/cgi-bin/FILENAME.pl
BEGIN failed--compilation aborted at C:/usr/site/lib/GD/Simple.pm line 160.: D:/www/update/cgi-bin/FILENAME.pl, referer: http://update/cgi-bin/FILENAME.pl
Compilation failed in require at D:/www/update/cgi-bin/FILENAME.pl line 8.: D:/www/update/cgi-bin/FILENAME.pl, referer: http://update/cgi-bin/FILENAME.pl
BEGIN failed--compilation aborted at D:/www/update/cgi-bin/FILENAME.pl line 8.: D:/www/update/cgi-bin/FILENAME.pl, referer: http://update/cgi-bin/FILENAME.pl
When I open the location C:\usr\site\lib\auto\GD\ the GD.xs.dll is sitting right there, so it's not missing.
These scripts worked before when I was using ActivePerl. I've tried to reinstall GD (in cpan: force install GD) and upgraded all modules (in cpan: upgrade) but that doesn't seem to do anything. Am I maybe missing some dependencies? Or is because I'm running a x64 machine and the dll file is incompatible with a 64bit system?
If anyone can help it would be greatly appreciated because this is starting to drive me mad.
Answering my own question: apparently Windows needs to load the dll file on startup or something because after restarting my machine it seems to work...

Why a Perlbrew PSGI application with uwsgi_psgi causes "wrong" Perl include paths?

I want to deploy a PSGI based web application by using an uWSGI gateway interface.
To accomplish this I installed Perlbrew locally on my Debian server where no root access is available.
perlbrew init
# close shell and reopen new shell
perlbrew self-install
# close shell and reopen new shell
perlbrew self-upgrade
# close shell and reopen new shell
perlbrew install-patchperl
perlbrew install-cpanm
# close shell and reopen new shell
perlbrew install -j 10 perl-5.26.1
perlbrew lib create perl-5.26.1#main
perlbrew switch perl-5.26.1#main
# close shell and reopen new shell
Then I checked using cpanm -V the Perl environment:
cpanm (App::cpanminus) version 1.7043 (/home/soeren/perl5/perlbrew/bin/cpanm)
perl version 5.026001 (/home/soeren/perl5/perlbrew/perls/perl-5.26.1/bin/perl)
%Config:
archname=x86_64-linux
installsitelib=/home/soeren/perl5/perlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1
installsitebin=/home/soeren/perl5/perlbrew/perls/perl-5.26.1/bin
installman1dir=/home/soeren/perl5/perlbrew/perls/perl-5.26.1/man/man1
installman3dir=/home/soeren/perl5/perlbrew/perls/perl-5.26.1/man/man3
sitearchexp=/home/soeren/perl5/perlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1/x86_64-linux
sitelibexp=/home/soeren/perl5/perlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1
archlibexp=/home/soeren/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/x86_64-linux
privlibexp=/home/soeren/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1
%ENV:
PERL5LIB=/home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5
PERLBREW_HOME=/home/soeren/.perlbrew
PERLBREW_LIB=main
PERLBREW_MANPATH=/home/soeren/.perlbrew/libs/perl-5.26.1#main/man:/home/soeren/perl5/perlbrew/perls/perl-5.26.1/man
PERLBREW_PATH=/home/soeren/.perlbrew/libs/perl-5.26.1#main/bin:/home/soeren/perl5/perlbrew/bin:/home/soeren/perl5/perlbrew/perls/perl-5.26.1/bin
PERLBREW_PERL=perl-5.26.1
PERLBREW_ROOT=/home/soeren/perl5/perlbrew
PERLBREW_SHELLRC_VERSION=0.82
PERLBREW_VERSION=0.82
PERL_LOCAL_LIB_ROOT=/home/soeren/.perlbrew/libs/perl-5.26.1#main
PERL_MB_OPT=--install_base /home/soeren/.perlbrew/libs/perl-5.26.1#main
PERL_MM_OPT=INSTALL_BASE=/home/soeren/.perlbrew/libs/perl-5.26.1#main
#INC:
FatPacked::93953009226544=HASH(0x557323bd9330)
/home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/x86_64-linux
/home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5
/home/soeren/perl5/perlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1/x86_64-linux
/home/soeren/perl5/perlbrew/perls/perl-5.26.1/lib/site_perl/5.26.1
/home/soeren/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/x86_64-linux
/home/soeren/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1
Everything looks good so I installed Dancer2 as the web framework of choice and successfully launched a skeleton test application:
dancer2 gen --application DemoApp
cd ./DemoApp
plackup ./bin/app.psgi
The Plack-internal HTTP web server has started and was ready to serve the application.
Again, so far so good. But I wanted to go with uWSGI instead of having yet another fully fledged web server in the service chain.
So I installed uwsgi-plugin-psgi which automatically comes with uwsgi-core:
apt install uwsgi-plugin-psgi
Now I wanted to start the uWSGI gateway interface...:
uwsgi_psgi --uwsgi-socket 127.0.0.1:5999 --psgi /home/soeren/DemoApp/bin/app.psgi
...and the application has crashed:
[uwsgi] implicit plugin requested psgi
*** Starting uWSGI 2.0.14-debian (64bit) on [Fri Feb 9 10:41:20 2018] ***
compiled with version: 6.2.1 20161124 on 07 December 2016 16:14:59
os: Linux-4.9.0-5-amd64 #1 SMP Debian 4.9.65-3+deb9u2 (2018-01-04)
nodename: skde-deu-02.sklink.de
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 8
current working directory: /home/soeren/DemoApp
detected binary path: /usr/bin/uwsgi-core
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 256817
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address 127.0.0.1:5999 fd 3
initialized Perl 5.24.1 main interpreter at 0x557337c6fd40
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 72768 bytes (71 KB) for 1 cores
*** Operational MODE: single process ***
Error while loading /home/soeren/DemoApp/bin/app.psgi: Can't locate WWW/Form/UrlEncoded.pm in #INC (you may need to install the WWW::Form::UrlEncoded module) (#INC contains: /home/soeren/DemoApp/bin/../lib /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/5.24.1/x86_64-linux-gnu-thread-multi /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/5.24.1 /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/x86_64-linux-gnu-thread-multi /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5 /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.24.1 /usr/local/share/perl/5.24.1 /usr/lib/x86_64-linux-gnu/perl5/5.24 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.24 /usr/share/perl/5.24 /usr/local/lib/site_perl) at /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/HTTP/Entity/Parser/UrlEncoded.pm line 5.
BEGIN failed--compilation aborted at /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/HTTP/Entity/Parser/UrlEncoded.pm line 5.
Compilation failed in require at /usr/share/perl/5.24/Module/Load.pm line 77.
Can't locate HTTP/Entity/Parser/UrlEncoded in #INC (#INC contains: /home/soeren/DemoApp/bin/../lib /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/5.24.1/x86_64-linux-gnu-thread-multi /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/5.24.1 /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/x86_64-linux-gnu-thread-multi /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5 /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.24.1 /usr/local/share/perl/5.24.1 /usr/lib/x86_64-linux-gnu/perl5/5.24 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.24 /usr/share/perl/5.24 /usr/local/lib/site_perl) at /usr/share/perl/5.24/Module/Load.pm line 77.
Compilation failed in require at /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/Plack/Request.pm line 17.
BEGIN failed--compilation aborted at /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/Plack/Request.pm line 17.
Compilation failed in require at /usr/share/perl/5.24/parent.pm line 16.
BEGIN failed--compilation aborted at /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/Dancer2/Core/Request.pm line 6.
Compilation failed in require at /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/Dancer2/Core/App.pm line 29.
BEGIN failed--compilation aborted at /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/Dancer2/Core/App.pm line 29.
Compilation failed in require at /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/Dancer2.pm line 11.
BEGIN failed--compilation aborted at /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/Dancer2.pm line 11.
Compilation failed in require at /home/soeren/DemoApp/bin/../lib/DemoApp.pm line 2.
BEGIN failed--compilation aborted at /home/soeren/DemoApp/bin/../lib/DemoApp.pm line 2.
Compilation failed in require at /home/soeren/DemoApp/bin/app.psgi line 10.
BEGIN failed--compilation aborted at /home/soeren/DemoApp/bin/app.psgi line 10.
unable to find PSGI function entry point.
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (and the only) (pid: 9769, cores: 1)
The fist thing that I see was the architecture. While the other (cpnam and plackup) programs using "x86_64-linux" architecture, only uWSGI is using "x86_64-linux-gnu-thread-multi" instead.
Well Perl's architecture folder for "x86_64-linux-gnu-thread-multi" is available but does not contain any modules. Most modules are installed in the "root library path" and "x86_64-linux" architecture folder.
/home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5
/home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/x86_64-linux
I tried to work around this by using the uwsgi_psgi command line switch --perl-local-lib but had no luck:
uwsgi_psgi --uwsgi-socket 127.0.0.1:5999 --psgi /home/soeren/DemoApp/bin/app.psgi --perl-local-lib /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5
uwsgi_psgi --uwsgi-socket 127.0.0.1:5999 --psgi /home/soeren/DemoApp/bin/app.psgi --perl-local-lib /home/soeren/.perlbrew/libs/perl-5.26.1#main/lib/perl5/x86_64-linux
I also have messed around with different uWSGI operation modes (single process, prefork, threaded), but also no luck.
Why is uWSGI modifying the include path and how do I either start uWSGI so it works like with the other programs or install the modules for that architecture in addition?
I found a solution, thanks to #simbabque.
My issue was that I was using the system native uwsgi_psgi, which was compiled with the system Perl installation and was not compatible with my local Perlbrew installation.
This mailing list thread suggest to recompile uwsgi within the Perlbrew scope to be able to work (only) with the local Perlbrew installation.
So by doing the following compile I get managed to start the Perl application:
curl http://uwsgi.it/install | bash -s psgi /home/soeren/perl5/perlbrew/bin/uwsgi
However the above shown command is not the best way since it lacks all further important compile switches (e.g. pcre, jit).
I will improve this answer over time with the further compile switches.

Error when trying to use XML::Parser under modperl2 - Could not load module

I've run into a problem when using XML::Parser under our modperl setup in production (on AIX 5.3). It works fine in development but fails on production with the following error:
[Tue Apr 03 08:44:03 2012] [error] Can't load '/wload/es1p/app/perl/lib/site_perl/5.10.1/aix/auto/XML/Parser/Expat/Expat.so' for mo
ule XML::Parser::Expat: Could not load module /wload/es1p/app/perl/lib/site_perl/5.10.1/aix/auto/XML/Parser/Expat/Expat.so.\n\tDepe
dent module /wload/es1p/app/usr/local/apache2/lib/libexpat.a(libexpat.so.1) could not be loaded.\n\tMember libexpat.so.1 is not fou
d in archive \nCould not load module /wload/es1p/app/perl/lib/site_perl/5.10.1/aix/auto/XML/Parser/Expat/Expat.so.\n\tDependent mod
le /wload/es1p/app/perl/lib/site_perl/5.10.1/aix/auto/XML/Parser/Expat/Expat.so could not be loaded. at /wload/es1p/app/perl/lib/5.
0.1/aix/DynaLoader.pm line 200.\n at /wload/es1p/app/perl/lib/site_perl/5.10.1/aix/XML/Parser.pm line 18\nCompilation failed in req
ire at /wload/es1p/app/perl/lib/site_perl/5.10.1/aix/XML/Parser.pm line 18.\nBEGIN failed--compilation aborted at /wload/es1p/app/p
rl/lib/site_perl/5.10.1/aix/XML/Parser.pm line 22.\nCompilation failed in require at /wload/es1p/app/perl/lib/site_perl/5.10.1/XML/
Path/XMLParser.pm line 7.\nBEGIN failed--compilation aborted at /wload/es1p/app/perl/lib/site_perl/5.10.1/XML/XPath/XMLParser.pm li
e 7.\nCompilation failed in require at /wload/es1p/app/perl/lib/site_perl/5.10.1/XML/XPath.pm line 13.\nBEGIN failed--compilation a
orted at /wload/es1p/app/perl/lib/site_perl/5.10.1/XML/XPath.pm line 13.\nCompilation failed in require at /wload/es1p/app/perl/lib
site_perl/5.10.1/Net/SAML2/IdP.pm line 23.\nBEGIN failed--compilation aborted at /wload/es1p/app/perl/lib/site_perl/5.10.1/Net/SAML
/IdP.pm line 23.\nCompilation failed in require at /wload/es1p/app/perl/lib/site_perl/5.10.1/Net/SAML2.pm line 69.\nBEGIN failed--c
mpilation aborted at /wload/es1p/app/perl/lib/site_perl/5.10.1/Net/SAML2.pm line 69.\nCompilation failed in require at /wload/es1p/
pp/usr/local/apache2/perl-bin/sso.pl line 4.\nBEGIN failed--compilation aborted at /wload/es1p/app/usr/local/apache2/perl-bin/sso.pl
The expat/expat-devel libraries were installed into /opt/freeware/lib using a package (the same one on dev and live) and both show the same output from ldd Expat.so:
Expat.so needs:
/usr/lib/libc.a(shr.o)
/opt/freeware/lib/libexpat.a(libexpat.so.1)
/unix
/usr/lib/libcrypt.a(shr.o)
I've tried setting up LIBPATH both in our dotfiles and in our mod_env configuration but with no luck. I'm not expecting someone to know the exact answer but I've run out of ideas as to what I can try so I'm hoping for some suggestions to try out.
EDIT: I should also point out that the same script using XML::Parser works perfectly as a normal cgi-bin script on our live server.
One thought: Maybe there are two different XML::Parser installed on your prod server. Your CGI pick one and your script pick the another?
Print out the #INC from script (on prod and dev) and from your working CGI and compare the result.
regards,

Perl XS included from a “use lib” directory can’t be found by ISAPI

I have a Perl web application that runs on both Apache and IIS6 on Windows Server 2003. On Apache this script works just fine. In IIS using ISAPI, I am getting the following error message:
Software error:
Can't load
'lib/auto/Sub/Name/Name.dll' for
module Sub::Name: load_file:The
specified module could not be found at
C:/Perl/lib/DynaLoader.pm line 230.
at lib/DBIx/Class/Schema.pm line 10
Compilation failed in require at
lib/DBIx/Class/Schema.pm line 10.
BEGIN failed--compilation aborted at
lib/DBIx/Class/Schema.pm line 10.
Compilation failed in require at (eval
39) line 3. ...propagated at
C:/Perl/lib/CGI/Carp.pm line 314.
BEGIN failed--compilation aborted at
My/Schema.pm line 2. Compilation
failed in require at...
When NOT using ISAPI in IIS it runs fine. We would prefer to continue using ISAPI in our IIS environments. Why can't it find this module, even though it does when running normal Perl?
EDIT:
We were calling it with relative paths.
use lib qw{My lib}; # line in question
use My::Schema; # explodes
Mobrule, your comment enlightened us. The relative path was different between using the vanilla Perl interpreter and ISAPI.
use lib qw{My /Inetpub/wwwroot/cgi/lib}; # a little more specific...
use My::Schema; # not nearly as much dying now.
Thanks for the help!