I have experience with setting up multiple Perl program with mac before, but come to a strange situation today.
I delete one of my existing Perl folder and download it from GitHub, when I try to run again, it shows this error: [an error occurred while processing this directive].
So, what I do to debug is:
1) I create test.shtml (some problem displaying the arrow sign in here)
#exec cgi="/Users/lion/htdocs/app/cgi-bin/test.pl"-->
2) I create test.pl
#!/usr/bin/perl
print "content-type: text/html \n\n";
print "test";
3) I create a new htaccess
AddType text/html .shtml
AddHandler server-parsed .shtml
4) I set the test.pl permission to 777
5) I tested with http://app.local/test.shtml
-> come out error [an error occurred while processing this directive].
6) If I manually run from console, it is working fine.
Here's my apache config as well.
<VirtualHost *:80>
DocumentRoot "/Users/lion/htdocs/app"
ServerName app.local
ScriptAlias /cgi-bin/ "/Users/lion/htdocs/app/cgi-bin/"
</VirtualHost>
My apache error log show this:
[Wed Nov 09 16:45:25 2011] [error] [client 127.0.0.1] invalid CGI ref "/Users/lion/htdocs/app/cgi-bin/test.pl" in /Users/lion/htdocs/app/test.shtml
Not sure what I missed out, my other Perl program is running just fine. Run out of ideas what cause the problem.
exec cgi expects a URL-path, not a file system path as an argument.
Try
#exec cgi="/cgi-bin/test.pl"
or just
#exec cgi="test.pl"
Well, after spending sometime for debugging, found out the cause is a .htaccess with authentication in cgi-bin, it blocks the redirection.
Related
I am attempting to run perl CGI script on RHEL 7, i've used yum installer and it's successfully installed 5.26, i can run perl programs from terminal without problem, but when i run a simple CGI script it writes error to httpd/error.log. I've posted the exact error below.
enabled software collection
$scl enable rh-perl526 bash
perl -v
This is perl 5, version 26, subversion 3 (v5.26.3) built for x86_64-linux-thread-multi
(with 27 registered patches, see perl -V for more detail)
$which perl
/opt/rh/rh-perl526/root/usr/bin/perl
$perl -e 'print "Hello Perl\n"'
Hello Perl
When i run a simple CGI script from browser or curl -XGET, i got 500 internal server for
http://serverip/cgi-bin/test-cgi.pl
apache error
[Wed Mar 24 21:24:38.308033 2021] [cgi:error] [pid 9437] [client x.x.x.x:35220] AH01215: /opt/rh/rh-perl526/root/usr/bin/perl: error while loading shared libraries: libperl.so.rh-perl526-5.26: cannot open shared object file: No such file or directory
[Wed Mar 24 21:24:38.308245 2021] [cgi:error] [pid 9437] [client x.x.x.x:35220] End of script output before headers: test.cgi.pl
I've added libperl.so path to LD_LIBRARY_PATH variable in .bashrc and i've rh-perl526-perl-libs.x86_64 package installed.
While installing rh-perl526, i noticed it also installed default perl on system as well due to YUM dependency
any idea how to fix this issue ?
LD_LIBRARY_PATH needs to set in apache http.conf file
i have added below line in httpd.conf and it worked
SetEnv LD_LIBRARY_PATH /path/to/libperl
I also removed perl 5.16 from system using yum.
I am running Perl 5.10 on a shared Red Hat Linux 6.2 server. I have asked the root user of the machine to install the Perl DateTime module for me, using the following commands:
perl -MCPAN -e shell
cpan> install DateTime
We were able to successfully install other Perl modules such as Text::CSV before.
But the following error occurred while installing DateTime. Here is the last bits of error log:
Question: It looks like the error might be complaining about not being able to fetch the CHECKSUM file from ftp://ftp.perl.org/pub/CPAN/authors/id/R/RJ/RJBS. However, I have no problem browsing to this exact file from my Internet Explorer. Can someone suggest ways to workaround this? Thanks.
Trying with "/usr/bin/wget -O /root/.cpan/sources/authors/id/R/RJ/RJBS/CHECKSUMS.tmp12173" to get
"ftp://ftp.perl.org/pub/CPAN/authors/id/R/RJ/RJBS/CHECKSUMS.gz"
--2013-06-20 09:30:06-- ftp://ftp.perl.org/pub/CPAN/authors/id/R/RJ/RJBS/CHECKSUMS.gz
=> b/root/.cpan/sources/authors/id/R/RJ/RJBS/CHECKSUMS.tmp12173b
Resolving ftp.perl.org... 203.178.137.175, 163.143.1.21 Connecting to ftp.perl.org|203.178.137.175|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /pub/CPAN/authors/id/R/RJ/RJBS ... done.
==> SIZE CHECKSUMS.gz ... done.
==> PASV ... done. ==> RETR CHECKSUMS.gz ...
No such file bCHECKSUMS.gzb.
Warning: no success downloading '/root/.cpan/sources/authors/id/R/RJ/RJBS/CHECKSUMS.tmp12173'. Giving up on it. at /usr/share/perl5/CPAN/Distribution.pm line
1311
As a last resort we now switch to the external ftp command '/usr/kerberos/bin/ftp'
to get '/root/.cpan/sources/authors/id/R/RJ/RJBS/CHECKSUMS.tmp12173'.
Doing so often leads to problems that are hard to diagnose.
If you're the victim of such problems, please consider unsetting the ftp config variable with
o conf ftp ""
o conf commit
Issuing "/usr/kerberos/bin/ftp -n"
Trying with external ftp to get
ftp://ftp.perl.org/pub/CPAN/authors/id/R/RJ/RJBS/CHECKSUMS
Going to send the dialog
open ftp.perl.org
user anonymous Red Hat, Inc.#localhost.localdomain
lcd /root/.cpan/sources/authors/id/R/RJ/RJBS
cd /
cd pub
cd CPAN
cd authors
cd id
cd R
cd RJ
cd RJBS
bin
get CHECKSUMS CHECKSUMS.tmp12173
quit
Not connected.
Local directory now /root/.cpan/sources/authors/id/R/RJ/RJBS
Not connected.
Not connected.
Not connected.
Not connected.
Not connected.
Not connected.
Not connected.
Not connected.
Not connected.
Not connected.
Bad luck... Still failed!
Can't access URL ftp://ftp.perl.org/pub/CPAN/authors/id/R/RJ/RJBS/CHECKSUMS.
Your urllist is empty! The urllist can be edited. E.g. with 'o conf urllist push ftp://myurl/'
Could not fetch authors/id/R/RJ/RJBS/CHECKSUMS
UPDATE1:
We also tried the o conf ftp "" and o conf commit commands, but we still had an error.
Trying with "/usr/bin/wget -O /root/.cpan/sources/authors/id/R/RJ/RJBS/CHECKSUMS.tmp16529" to get
"http://www.perl.org/CPAN/authors/id/R/RJ/RJBS/CHECKSUMS.gz"
--2013-06-20 13:52:07-- http://www.perl.org/CPAN/authors/id/R/RJ/RJBS/CHECKSUMS.gz
Resolving www.perl.org... 207.171.7.41, 207.171.7.51 Connecting to www.perl.org|207.171.7.41|:80... failed: Connection refused.
Connecting to www.perl.org|207.171.7.51|:80... failed: Connection refused.
Warning: no success downloading '/root/.cpan/sources/authors/id/R/RJ/RJBS/CHECKSUMS.tmp16529'. Giving up on it. at /usr/share/perl5/CPAN/Distribution.pm line
1311
Fetching with LWP:
ftp://ftp.perl.org/pub/CPAN/authors/id/R/RJ/RJBS/CHECKSUMS
Checksum for /root/.cpan/sources/authors/id/R/RJ/RJBS/Test-Fatal-0.010.tar.gz ok Test-Fatal-0.010 Test-Fatal-0.010/README Test-Fatal-0.010/Changes Test-Fatal-0.010/LICENSE Test-Fatal-0.010/dist.ini Test-Fatal-0.010/META.yml Test-Fatal-0.010/MANIFEST Test-Fatal-0.010/t Test-Fatal-0.010/t/basic.t Test-Fatal-0.010/META.json Test-Fatal-0.010/Makefile.PL Test-Fatal-0.010/lib/Test Test-Fatal-0.010/lib/Test/Fatal.pm
Test-Fatal-0.010/t/like-exception.t
Test-Fatal-0.010/t/release-pod-syntax.t
CPAN.pm: Going to build R/RJ/RJBS/Test-Fatal-0.010.tar.gz
Checking if your kit is complete...
Looks good
Warning: prerequisite Try::Tiny 0.07 not found.
Writing Makefile for Test::Fatal
Could not read '/root/.cpan/build/Test-Fatal-0.010-GNYnPy/META.yml'. Falling back to other methods to determine prerequisites
---- Unsatisfied dependencies detected during ----
---- RJBS/Test-Fatal-0.010.tar.gz ----
Try::Tiny [requires]
Shall I follow them and prepend them to the queue of modules we are processing right now? [yes] Running make test
Delayed until after prerequisites
Running make install
Delayed until after prerequisites
Running install for module 'Try::Tiny'
'YAML' not installed, falling back to Data::Dumper and Storable to read prefs '/root/.cpan/prefs'
Running make for D/DO/DOY/Try-Tiny-0.12.tar.gz Fetching with LWP:
http://www.perl.org/CPAN/authors/id/D/DO/DOY/Try-Tiny-0.12.tar.gz
LWP failed with code[500] message[Can't connect to www.perl.org:80 (connect: Connection refused)] Fetching with LWP:
ftp://ftp.perl.org/pub/CPAN/authors/id/D/DO/DOY/Try-Tiny-0.12.tar.gz
LWP failed with code[500] message[]
Fetching with Net::FTP:
ftp://ftp.perl.org/pub/CPAN/authors/id/D/DO/DOY/Try-Tiny-0.12.tar.gz
Catching error: "Timeout at /usr/share/perl5/Net/FTP.pm line 491\cJ" at /usr/share/perl5/CPAN.pm line 391
CPAN::shell() called at -e line 1
did you do what it suggested?
If you're the victim of such problems, please consider unsetting the ftp config variable with
o conf ftp ""
o conf commit
Alternatively, you can download the module as a gz file from the cpan site
uncompress it cd to the directory
do
perl Build.PL
./Build install
or
perl Makefile.PL
make install
accordingly.
This is all that cpan will be doing so you will see if you're missing any packages or modules
incidentally, you don't need to be root if you are happy to install your modules somewhere else. There are plenty of examples to achieve this
I have problem in execution of perl scripts. I am using Alias for the directory of the server like that:
Alias /epbin3/ /opt/v-hosts/user/epbin/
<Location /epbin3>
AddHandler cgi-script .cgi .pl
# SetHandler cgi-script
# SetHandler perl-script
# PerlResponseHandler ModPerl::PerlRun
Options All
AllowOverride None
</Location>
When I'm trying to execute any perl file the browser return error 500.the error shown below:
[Sun Jun 09 15:50:19 2013] [error] [client ipClient] Premature end of script headers: searchHotelsTh4.pl
[Sun Jun 09 15:50:22 2013] [error] [client ipClient] (2)No such file or directory: exec of '/opt/v-hosts/epilgrim/epbin/searchHotelsTh4.pl' failed
Please anyone can tell me what's the problem and how I can solve this issue?
If I guess correctly than you have no Directory directive which allows the file access to the file system:
<Directory /opt/v-hosts/user/epbin/>
AddHandler cgi-script .cgi .pl
Options All
AllowOverride None
</Directory>
A properly formed HTTP reply contains a blank line between the headers and the body. It is likely that searchHotelsTh4.pl is lacking such a blank line, either because it does not output headers at all or the blank line is missing, i.e. you might have this:
Content-type: text/plain
Hello, world!
when you need this:
Content-type: text/plain
Hello, world!
It seems I have a configuration problem when installing Perl modules through CPAN and I don't know how to correct it:
[root#ip JESSE]# pwd
/root/.cpan/sources/authors/id/J/JE/JESSE
[root#ip JESSE]# ls -l
total 240
-rw-r--r-- 1 root root 105464 Feb 20 11:39 CHECKSUMS
-rw-r--r-- 1 root root 9223 Apr 12 2011 Locale-Maketext-Simple-0.21.tar.gz
-rw-r--r-- 1 root root 125483 Feb 20 11:39 WWW-Mechanize-1.72.tar.gz
[root#ip JESSE]# cpan -i WWW::Mechanize
CPAN: Storable loaded ok (v2.20)
Reading '/root/.cpan/Metadata'
Database was generated on Mon, 20 Feb 2012 11:10:26 GMT
Running install for module 'WWW::Mechanize'
Running make for J/JE/JESSE/WWW-Mechanize-1.72.tar.gz
CPAN: Digest::SHA loaded ok (v5.61)
CPAN: Compress::Zlib loaded ok (v2.033)
Checksum for /root/.cpan/sources/authors/id/J/JE/JESSE/WWW-Mechanize-1.72.tar.gz ok
CPAN: Archive::Tar loaded ok (v1.82)
Uncompressed /root/.cpan/sources/authors/id/J/JE/JESSE/WWW-Mechanize-1.72.tar.gz successfully
Using Tar:/bin/tar xvf "WWW-Mechanize-1.72.tar":
Couldn't untar WWW-Mechanize-1.72.tar
CPAN: File::Temp loaded ok (v0.22)
CPAN: CPAN::Meta loaded ok (v2.112150)
Package seems to come without Makefile.PL.
(The test -f "/root/.cpan/build/JESSE-n72IRU/Makefile.PL" returned false.)
Writing one on our own (setting NAME to WWWMechanize)
Had problems unarchiving. Please build manually
Running make test
Make had some problems, won't test
Running make install
Make had some problems, won't install
[root#ip JESSE]# ls -l
total 240
-rw-r--r-- 1 root root 105464 Feb 20 11:39 CHECKSUMS
-rw-r--r-- 1 root root 9223 Apr 12 2011 Locale-Maketext-Simple-0.21.tar.gz
-rw-r--r-- 1 root root 125483 Feb 20 11:39 WWW-Mechanize-1.72.tar.gz
[root#ip JESSE]# which tar
/bin/tar
[root#ip JESSE]# which gzip
/bin/gzip
The problem seems to be here:
Uncompressed /root/.cpan/sources/authors/id/J/JE/JESSE/WWW-Mechanize-1.72.tar.gz successfully
Using Tar:/bin/tar xvf "WWW-Mechanize-1.72.tar":
Couldn't untar WWW-Mechanize-1.72.tar
The tar.gz file is indeed uncompressed and can be found here in a new directory:
/root/.cpan/build/JESSE-KjCEMS/WWW-Mechanize-1.72.tar
If I run the same command from inside the shell, I get some more info:
cpan[1]> install WWW::Mechanize
CPAN: Storable loaded ok (v2.20)
Reading '/root/.cpan/Metadata'
Database was generated on Mon, 20 Feb 2012 11:10:26 GMT
Running install for module 'WWW::Mechanize'
Running make for J/JE/JESSE/WWW-Mechanize-1.72.tar.gz
CPAN: Digest::SHA loaded ok (v5.61)
CPAN: Compress::Zlib loaded ok (v2.033)
Checksum for /root/.cpan/sources/authors/id/J/JE/JESSE/WWW-Mechanize-1.72.tar.gz ok
Scanning cache /root/.cpan/build for sizes
Use of uninitialized value $newdir in substitution (s///) at /usr/lib64/perl5/Cwd.pm line 502.
Use of uninitialized value $newdir in chdir at /usr/lib64/perl5/Cwd.pm line 510.
Use of chdir('') or chdir(undef) as chdir() is deprecated at /usr/lib64/perl5/Cwd.pm line 510.
Use of uninitialized value $newdir in pattern match (m//) at /usr/lib64/perl5/Cwd.pm line 525.
Use of uninitialized value $newdir in split at /usr/lib64/perl5/Cwd.pm line 531.
..........................................................................--DONE
DEL(1/10): /root/.cpan/build/CPAN-1.9600-jGTV10
DEL(2/10): /root/.cpan/build/File-Which-1.09-yoVWZC
DEL(3/10): /root/.cpan/build/Test-Script-1.07-aJWrXb
DEL(4/10): /root/.cpan/build/Probe-Perl-0.01-gzZ2eR
DEL(5/10): /root/.cpan/build/IPC-Run3-0.044-AP6EMp
DEL(6/10): /root/.cpan/build/Time-HiRes-1.9721-xxseE6
DEL(7/10): /root/.cpan/build/CPAN-Meta-YAML-0.003-wGtH0a
DEL(8/10): /root/.cpan/build/JSON-PP-2.27105-fvkwNa
DEL(9/10): /root/.cpan/build/Package-Constants-0.02-7Ms_OL
DEL(10/10): /root/.cpan/build/Module-Metadata-1.000004-tXKIBB
CPAN: Archive::Tar loaded ok (v1.82)
Uncompressed /root/.cpan/sources/authors/id/J/JE/JESSE/WWW-Mechanize-1.72.tar.gz successfully
Using Tar:/bin/tar xvf "WWW-Mechanize-1.72.tar":
Couldn't untar WWW-Mechanize-1.72.tar
CPAN: File::Temp loaded ok (v0.22)
CPAN: CPAN::Meta loaded ok (v2.112150)
Package seems to come without Makefile.PL.
(The test -f "/root/.cpan/build/JESSE-DGrTh_/Makefile.PL" returned false.)
Writing one on our own (setting NAME to WWWMechanize)
Had problems unarchiving. Please build manually
Running make test
Make had some problems, won't test
Running make install
Make had some problems, won't install
Failed during this command:
JESSE/WWW-Mechanize-1.72.tar.gz : unwrapped NO -- untar failed
It seems to me that $newdir is not being updated with the dynamically generated /root/.cpan/build/JESSE-DGrTh_/ or /root/.cpan/build/JESSE-KjCEMS/ or whatever the system generates or at least that information is not getting to the tar command
Does anyone know how I can fix the mechanism without having to resort to a manual install ?
Edit:
I ran into this problem again. All I needed to do was free some memory like Keith Broughton suggested.
I ran into the same problem and tried to find the root cause for this problem. I'm listing my findings here so other Googlers don't have to spend a couple of hours before giving up...
What solved it for me was simply rebooting the system.
Things I tried:
Upgrading CPAN. This would also fail with the "Couldn't untar" error message. I doesn't matter if you try it using the cpan shell, "cpan -i CPAN" or "perl -MCPAN -e 'install CPAN'". I didn't think any of these would solve the problem, but when you start googling all these are suggested as possible solutions.
Replacing tar with a script that logs its input to check if one of the parameters or cwd is incorrect when it is called. The script is never called it seems. The "Couldn't untar" message is still the same, even after temporarily renaming /bin/tar.
Checking CPAN/Tarzip.pm and adding print lines near the code that writes the "Couldn't untar" message. It seems that the system() call fails and tar (or ls in my debug code) is never called.
Then I decided to reboot, which was an option because this is not a live system. After that the problem was gone and Perl modules installed on first try.
Other observations:
The system seems to work just fine for the rest. You can still connect to the system, you can edit files, modifications are still there after the reboot. I would expect any of these to fail long before a Perl system() call starts to fail.
A quick scan through the logfiles doesn't show any red flags.
Sometimes this can happen simply due to a lack of available memory. Try turning off some services that are running and try again.
Worked for me :-)
To resolve the following error:
Couldn't untar WWW-Mechanize-1.72.tar
Try install Archive::Tar
On centos 6.X:
yum install perl-Archive-Tar.x86_64
Found the same issue on DigitalOcean droplet with 512MB RAM running Ubuntu (with about 200MB free).
I was able to solve it by rebooting the machine, I tried updating my CPAN using 'install Bundle::CPAN'. It worked for the first few modules, and then the 'Couldn't untar' message appeared again.
Rebooting allowed me to progress in the installation. These repeated reboots are of course a less than optimal solution.
Given that the system has free memory, and the issue re-appears after using the machine for a little while, it seems to be this could be related to an issue with shared libraries.
Shot in the blue: partition is full. Delete some files.
I am getting following error while starting apache.
Can't locate /usr/sbin/webmux.pl in #INC (#INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 . /etc/httpd) at (eval 2) line 1.\n
Can't load Perl file: /usr/sbin/webmux.pl for server 127.0.0.1:0, exiting...
Can anyone please suggest me what i am missing ?
mod_perl-2.0.4
So, it looks like webmux.pl needs the mysql daemon started first. I found the error message in /var/log/httpd/error_log. Start mysqld first and then the web server will start
Search your Apache config files for webmux.pl. Something must be trying to load it. Either remove the reference to it, or install it.
Found this in RT configs. After comment it, things are working now.
Error:
[root#localhost conf]# service httpd restart
Deteniendo httpd: [FALLĂ“]
Iniciando httpd: [FALLĂ“]
[root#localhost conf]#
Log:
[error] Can't load Perl file: /usr/sbin/webmux.pl for server localhost.localdomain:0, exiting...
DBI connect('dbname=rt3;host=localhost','rt_user',...) failed: Access denied for user 'rt_user'#'localhost' (using password: YES) at /usr/share/perl5/DBIx/SearchBuilder/Handle.pm line 106
Solution:
[root#localhost conf]# mkdir /root/backup/httpd/ -p
[root#localhost conf]# mv /etc/httpd/conf.d/rt3.conf /root/backup/httpd/
[root#localhost conf]# service httpd restart
Deteniendo httpd: [ OK ]
Iniciando httpd: [ OK ]
[root#localhost conf]#
here is what i found on http://wiki.bestpractical.com/view/Troubleshooting
Can't locate Apache/Response.pm in #INC ...
Can't load Perl file: bin/webmux.pl for server localhost:0, exiting...
Found this issue in Aurora SPARC Linux 2.0 (Fedora Core 3 for SPARC)
when trying to install...
turns out that after installing all the modules for rt,
I still had an ancient verion of CGI.pm,
which was not intended to correctly detect the mod_perl2 modules vs.
regular mod_perl. Upgrading CGI via CPAN quickly resolved this problem after an
embarrassing number of hours troubleshooting.
If Apache refuses to start after you add PerlRequire bin/webmux.pl to your
config and you're sure you've got a valid mod_perl2 installation,
try upgrading CGI to the latest version.
maybe you can try first to update your CGI.pm module.
Did you find your call to webmux.pl in your apache conf ?
old previous useless response :
well, can you post the code from the script that tries to launch webmux.pl ?
but i would suggest a simple solution, if you don't have administrative rights or don't want
to go further in your perl conf :
add at top of your code (but below use strict...never forget this one)
in your script the code :
use lib "/usr/sbin/"
so you script will be able to use libraries located in /usr/sbin/