Issues to install Perl Modules on CentOS 7 - perl

I’ve been trying to install some Perl modules on CentOS 7 and facing issues with a bunch of them. I tried with yum, cpan and cpanm (from scratch whenever I tried a different method), and they seem to be built correctly as per installation logs, but when I run my script with “use Module_Name;” it returns issues with dependencies having outdated versions. One of the modules is Date::Locale. Another one is URI::Encode. Is there a correct way to install Perl modules on CentOS 7, without tweaks or manual intervention?
Output requested by ikegami on comments below:
/usr/bin/perl
/root/perl5/lib/perl5/5.16.3/x86_64-linux-thread-multi
/root/perl5/lib/perl5/5.16.3
/root/perl5/lib/perl5/x86_64-linux-thread-multi
/root/perl5/lib/perl5
/usr/local/lib64/perl5
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib64/perl5
/usr/share/perl5
PERL5LIB: /root/perl5/lib/perl5
PERL_LOCAL_LIB_ROOT: /root/perl5
PERL_MB_OPT: --install_base "/root/perl5"
PERL_MM_OPT: INSTALL_BASE=/root/perl5
cpan is /root/perl5/bin/cpan
#!/usr/bin/perl
make [/usr/bin/make]
make_arg []
make_install_arg []
make_install_make_command [/usr/bin/make]
makepl_arg []
mbuild_arg []
mbuild_install_arg []
mbuild_install_build_command [./Build]
mbuildpl_arg []
Loading internal logger. Log::Log4perl recommended for better logging
Reading '/root/.cpan/Metadata'
Database was generated on Fri, 12 Apr 2019 17:29:03 GMT
Fetching with LWP:
http://CPAN.mirror.rafal.ca/authors/01mailrc.txt.gz
Reading '/root/.cpan/sources/authors/01mailrc.txt.gz'
............................................................................DONE
Fetching with LWP:
http://CPAN.mirror.rafal.ca/modules/02packages.details.txt.gz
Reading '/root/.cpan/sources/modules/02packages.details.txt.gz'
Database was generated on Tue, 16 Apr 2019 03:17:02 GMT
............................................................................DONE
Fetching with LWP:
http://CPAN.mirror.rafal.ca/modules/03modlist.data.gz
Reading '/root/.cpan/sources/modules/03modlist.data.gz'
DONE
Writing /root/.cpan/Metadata
URI::Encode is up to date (1.1.1).

When installing modules through CPAN on Centos7, the modules' path is usually set to use lib '/root/perl5/lib/perl5' by CPAN's autoconfigure.
Look for one of the modules you've installed via CPAN (find / -name module_name) and look at its path. If it's outside of the default dir, you can add this path in your script.

Related

How to install libdata-validate-ip-perl in centos

I'm trying to use IP in my perl script and i got module not found error. When i tried to install it with dnf im getting no match found for the package.
use Data::Validate::IP;
Can't locate Data/Validate/IP.pm in #INC (you may need to install the
Data::Validate::IP module) (#INC contains: ../utils
/usr/local/lib64/perl5 /usr/local/share/perl5
/usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl
/usr/lib64/perl5 /usr/share/perl5) at ../utils/VM.pm line 5. BEGIN
failed--compilation aborted at ../utils/VM.pm line 5. Compilation
failed in require at ./myscript.pl line 37.
#dnf install libdata-validate-ip-perl
Extra Packages for Enterprise Linux 8 - Epel (Intel mirror) 5.6 kB/s | 4.7 kB 00:00
Last metadata expiration check: -1596 days, 2:25:26 ago on Wed 09 Nov 2022 09:59:43 AM IST.
No match for argument: libdata-validate-ip-perl
Error: Unable to find a match: libdata-validate-ip-perl
Looking for suggestions to install perl missing modules
"libdata-validate-ip-perl" would be the name of the package on Debian-based distributions, such as Ubuntu.
Redhat-based distributions use a different naming convention for their packages. Try "perl-Data-Validate-IP".
I would use
sudo cpan Data::Validate::IP
See here https://perldoc.perl.org/cpan

FreeBSD Can't locate loadable object for module DBD::mysql

I installed DBD::mysql, but Perl does not recognize it:
root#bsd:~ # freebsd-version
13.0-RELEASE
root#bsd:~ # perl -v
This is perl 5, version 34, subversion 0 (v5.34.0) built for amd64-freebsd
Copyright 1987-2021, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
root#bsd:~ # perl -MDBD::mysql -el
Can't locate loadable object for module DBD::mysql in #INC (#INC contains: /usr/lib/perl5/site_perl/5.34.0/amd64-freebsd /usr/lib/perl5/site_perl/5.34.0 /usr/lib/perl5/5.34.0/amd64-freebsd /usr/lib/perl5/5.34.0) at -e line 0.
Compilation failed in require.
BEGIN failed--compilation aborted.
root#bsd:~ # cpan CGI
Reading '/root/.cpan/Metadata'
Database was generated on Thu, 26 Aug 2021 13:56:05 GMT
CPAN: Module::CoreList loaded ok (v5.20210520)
CGI is up to date (4.53).
root#bsd:~ # cpan DBD::mysql
Reading '/root/.cpan/Metadata'
Database was generated on Thu, 26 Aug 2021 13:56:05 GMT
CPAN: Module::CoreList loaded ok (v5.20210520)
DBD::mysql is up to date (4.050).
I suggest you to install it from the ports tree - https://www.freshports.org/databases/p5-DBD-mysql/

Perl 5.26 on RHEL 7 error - cgi-error - libperl.so.rh-perl526-5.26: cannot open shared object file

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.

DBD::Sybase error

First of all, let me thank you for your time and knowledge sharing, I'm kind of an ignorant in trems of perl modules
I have a 64bit ubuntu Server 12.04, with Perl version 14, subversion 2 (v5.14.2) built for x86_64-linux-gnu-thread-multi and CPAN exploration and modules installation (v2.10).
I'm trying to use a perl script accessing a Microsoft SQL Server and I'm having a really hard time upon the DBD::Sybase module
When I try to install DBD::Sybase CPAN tells me it's already installed:
cpan[1]> install DBD::Sybase
Reading '/root/.cpan/Metadata'
Database was generated on Wed, 29 Apr 2015 14:53:21 GMT
DBD::Sybase is up to date (1.15).
I also find multiple Sybase.pm files on my filesystem, some of them are under Perl path
root#server:# find /* -name Sybase.pm
/home/usriten/download/DBD-Sybase-1.15/Sybase.pm
/root/.cpan/build/DBD-Sybase-1.15-TtUI0T/Sybase.pm
/root/.cpan/build/DBD-Sybase-1.15-kNqdf7/Sybase.pm
/root/.cpan/build/DBD-Sybase-1.15-rZgcTa/Sybase.pm
/usr/local/lib/perl/5.14.2/Sybase.pm
/usr/local/lib/perl/5.14.2/DBD/Sybase.pm
/usr/local/lib/perl/5.14.2/DBI/Sybase.pm
But when I try to run my script it returns an error on a line that calls 'if ($self->{handle} = DBI->connect('
# ./check_mssql_health --hostname <MSSQL_Server_IP> --username <SQL_User> --password <Pass> --mode connection-time
mode connection-time
CRITICAL - cannot connect to <MSSQL_Server_IP>. install_driver(Sybase) failed: Can't locate loadable object for module DBD::Sybase in #INC (#INC contains: . /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl) at (eval 10) line 3
Compilation failed in require at (eval 10) line 3.
Perhaps a module that DBD::Sybase requires hasn't been fully installed
at ./check_mssql_health line 3192
I've already spent a lot of time scavenging posts but I did not find a solution or at least one I could understand and Implement.
Best regards, Sebastião
When I try to install DBD::Sybase CPAN tells me it's already installed:
That simply means it found a DBD/Sybase.pm. No tests are performed; the module isn't even loaded.
In an act of desperation I've copied the Sybase.pm to the DBD/
That's the cause of the error you're asking about. Perl is finding the .pm you copied over, but not the other files created as part of the installation process.
Delete the files you created[1], then install the module properly (e.g. using your system's package manager if it has one, or cpan DBD::Sybase if it doesn't).
You appear to have created at least the following files:
/usr/local/lib/perl/5.14.2/Sybase.pm
/usr/local/lib/perl/5.14.2/DBD/Sybase.pm
/usr/local/lib/perl/5.14.2/DBI/Sybase.pm
I got it working with a different setup.
Don't use DBD::Sybase, but install freetds, unixodbc, and then DBD::ODBC. In the freetds.conf file set the appropriate parameters. Mine looks like this
[myMSSL]
host = 111.22.33.44
port = 1433
tds version = 7.2
client charset = UTF-8
and /etc/odbc.ini
[mySQSL_mydb]
APP = unixodbc
Description = Database mydb on myMSSQL
Driver = TDSdriver
Server = myhost
Database = mydb
Port = 1433
#Trace = No
I think these are the packages that you need.
libdbd-freetds - Freetds database server driver for libdbi
tdsodbc -ODBC driver for connecting to MS SQL and Sybase SQL servers
freetds-bin - FreeTDS command-line utiliti
ALternatively, see also this post:
Using Ubuntu, how do I install DBD::Sybase from CPAN?
(and some others, e.g this one: Access SQL Server from Solaris)
I would try and install it via apt
sudo apt-get install libdbd-sybase-perl -y
I've found CPAN to sometimes miss dependencies.

CPAN Perl modules installer not finding tar file

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.