Score:1

How to install Crypt::SSLeay from cpan?

kr flag

I'm trying to install perl module Crypt::SSLeay from cpan running in Debian-based environment (in order to rule out dependency issues, I'm running this in official perl Docker container), but I getting error while cpan installer doing tests:

$ docker run --rm -it perl:stable bash

Docker# cpanm Crypt::SSLeay
...
Building and testing Crypt-SSLeay-0.72 ... FAIL
! Installing Crypt::SSLeay failed. See /root/.cpanm/work/1234567890/build.log for details. Retry with --force to force install it.
33 distributions installed

Docker# tail /root/.cpanm/work/1234567890/build.log
...
Result: FAIL
Failed 3/6 test programs. 7/22 subtests failed.
make: *** [Makefile:1092: test_dynamic] Error 255
-> FAIL Installing Crypt::SSLeay failed. See /root/.cpanm/work/1234567890/build.log for details. Retry with --force to force install it.
Expiring 1 work directories.
33 distributions installed

Docker# perl -v | head -n2
This is perl 5, version 36, subversion 1 (v5.36.1) built for x86_64-linux-gnu

I've tried this with different perl versions (docker run perl:5.36, perl:5.30, perl:5.20, perl:5.16, perl:5.14) with no effect.

What's the way to fix that?

Added: full module installation log is shown below:

Docker# cpanm Crypt::SSLeay
--> Working on Crypt::SSLeay
Fetching http://www.cpan.org/authors/id/N/NA/NANIS/Crypt-SSLeay-0.72.tar.gz ... OK
Configuring Crypt-SSLeay-0.72 ... OK
Building and testing Crypt-SSLeay-0.72 ... FAIL
! Installing Crypt::SSLeay failed. See /root/.cpanm/work/1688298158.5768/build.log for details. Retry with --force to force install it.

Docker# cat ~/.cpanm/work/1688298158.5768/build.log
cpanm (App::cpanminus) 1.7046 on perl 5.036001 built for x86_64-linux-gnu
Work directory is /root/.cpanm/work/1688298158.5768
You have make /usr/bin/make
You have LWP 6.71
You have /bin/tar: tar (GNU tar) 1.34
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.
You have /usr/bin/unzip
Searching Crypt::SSLeay () on cpanmetadb ...
--> Working on Crypt::SSLeay
Fetching http://www.cpan.org/authors/id/N/NA/NANIS/Crypt-SSLeay-0.72.tar.gz
-> OK
Unpacking Crypt-SSLeay-0.72.tar.gz
Entering Crypt-SSLeay-0.72
Checking configure dependencies from META.json
Checking if you have Path::Class 0.26 ... Yes (0.37)
Checking if you have ExtUtils::CBuilder 0.280205 ... Yes (0.280236)
Checking if you have Getopt::Long 0 ... Yes (2.52)
Checking if you have Try::Tiny 0.19 ... Yes (0.31)
Configuring Crypt-SSLeay-0.72
Running Makefile.PL

    *** THIS IS NOT AN ERROR, JUST A MESSAGE FOR YOUR INFORMATION ***

    Do you really need Crypt::SSLeay?

    Starting with version 6.02 of LWP, https support was unbundled into
    LWP::Protocol::https. This module specifies as one of its prerequisites
    IO::Socket::SSL which is automatically used by LWP::UserAgent unless
    this preference is overridden separately. IO::Socket::SSL is a more
    complete implementation, and, crucially, it allows hostname
    verification. Crypt::SSLeay does not support this. At this point,
    Crypt::SSLeay is maintained to support existing software that already
    depends on it.

    However, it is possible that your software does not really depend on
    Crypt::SSLeay, only on the ability of LWP::UserAgent class to
    communicate with sites over SSL/TLS.

    If are using version LWP 6.02 or later, and therefore have installed
    LWP::Protocol::https and its dependencies, and do not explicitly use
    Net::SSL before loading LWP::UserAgent, or override the default socket
    class, you are probably using IO::Socket::SSL and do not really need
    Crypt::SSLeay.

    Before installing Crypt::SSLeay, you may want to try specifying a
    dependency on LWP::Protocol::https.

================================================================================
Output from '/root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/openssl-version':
OpenSSL 1.1.1n  15 Mar 2022
101010ef
================================================================================
Checking if your kit is complete...
Looks good
Warning (mostly harmless): No library found for -lssl32
Warning (mostly harmless): No library found for -lssleay32
Warning (mostly harmless): No library found for -leay32
Warning (mostly harmless): No library found for -llibeay32
Generating a Unix-style Makefile
Writing Makefile for Crypt::SSLeay
Writing MYMETA.yml and MYMETA.json
-> OK
Checking dependencies from MYMETA.json ...
Checking if you have Try::Tiny 0.19 ... Yes (0.31)
Checking if you have LWP::Protocol::https 6.02 ... Yes (6.10)
Checking if you have ExtUtils::MakeMaker 0 ... Yes (7.64)
Checking if you have MIME::Base64 0 ... Yes (3.16)
Checking if you have Test::More 0.19 ... Yes (1.302190)
Building and testing Crypt-SSLeay-0.72
cp SSLeay.pm blib/lib/Crypt/SSLeay.pm
cp lib/Crypt/SSLeay/MainContext.pm blib/lib/Crypt/SSLeay/MainContext.pm
cp lib/Crypt/SSLeay/Version.pm blib/lib/Crypt/SSLeay/Version.pm
cp lib/Crypt/SSLeay/CTX.pm blib/lib/Crypt/SSLeay/CTX.pm
cp lib/Crypt/SSLeay/X509.pm blib/lib/Crypt/SSLeay/X509.pm
cp lib/Crypt/SSLeay/Conn.pm blib/lib/Crypt/SSLeay/Conn.pm
cp lib/Net/SSL.pm blib/lib/Net/SSL.pm
cp lib/Crypt/SSLeay/Err.pm blib/lib/Crypt/SSLeay/Err.pm
Running Mkbootstrap for SSLeay ()
chmod 644 "SSLeay.bs"
"/usr/local/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- SSLeay.bs blib/arch/auto/Crypt/SSLeay/SSLeay.bs 644
"/usr/local/bin/perl" "/usr/local/lib/perl5/5.36.1/ExtUtils/xsubpp"  -typemap '/usr/local/lib/perl5/5.36.1/ExtUtils/typemap' -typemap '/root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/typemap'  SSLeay.xs > SSLeay.xsc
mv SSLeay.xsc SSLeay.c
cc -c   -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -O2   -DVERSION=\"0.72\" -DXS_VERSION=\"0.72\" -fPIC "-I/usr/local/lib/perl5/5.36.1/x86_64-linux-gnu/CORE"   SSLeay.c
SSLeay.xs: In function 'XS_Crypt__SSLeay__CTX_new':
SSLeay.xs:152:31: warning: implicit declaration of function 'SSLv3_client_method'; did you mean 'SSLv23_client_method'? [-Wimplicit-function-declaration]
  152 |             ctx = SSL_CTX_new(SSLv3_client_method());
      |                               ^~~~~~~~~~~~~~~~~~~
      |                               SSLv23_client_method
SSLeay.xs:152:31: warning: passing argument 1 of 'SSL_CTX_new' makes pointer from integer without a cast [-Wint-conversion]
  152 |             ctx = SSL_CTX_new(SSLv3_client_method());
      |                               ^~~~~~~~~~~~~~~~~~~~~
      |                               |
      |                               int
In file included from SSLeay.xs:35:
/usr/include/openssl/ssl.h:1503:47: note: expected 'const SSL_METHOD *' {aka 'const struct ssl_method_st *'} but argument is of type 'int'
 1503 | __owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth);
      |                             ~~~~~~~~~~~~~~~~~~^~~~
SSLeay.xs:157:31: warning: implicit declaration of function 'SSLv2_client_method'; did you mean 'SSLv23_client_method'? [-Wimplicit-function-declaration]
  157 |             ctx = SSL_CTX_new(SSLv2_client_method());
      |                               ^~~~~~~~~~~~~~~~~~~
      |                               SSLv23_client_method
SSLeay.xs:157:31: warning: passing argument 1 of 'SSL_CTX_new' makes pointer from integer without a cast [-Wint-conversion]
  157 |             ctx = SSL_CTX_new(SSLv2_client_method());
      |                               ^~~~~~~~~~~~~~~~~~~~~
      |                               |
      |                               int
In file included from SSLeay.xs:35:
/usr/include/openssl/ssl.h:1503:47: note: expected 'const SSL_METHOD *' {aka 'const struct ssl_method_st *'} but argument is of type 'int'
 1503 | __owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth);
      |                             ~~~~~~~~~~~~~~~~~~^~~~
rm -f blib/arch/auto/Crypt/SSLeay/SSLeay.so
LD_RUN_PATH="/usr/lib/x86_64-linux-gnu" cc  -shared -O2 -L/usr/local/lib -fstack-protector-strong  SSLeay.o  -o blib/arch/auto/Crypt/SSLeay/SSLeay.so  \
   -lssl -lcrypto -lz   \

chmod 755 blib/arch/auto/Crypt/SSLeay/SSLeay.so
"/usr/local/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- SSLeay.bs blib/arch/auto/Crypt/SSLeay/SSLeay.bs 644
PERL_DL_NONLAZY=1 "/usr/local/bin/perl" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t

#   Failed test 'use Crypt::SSLeay;'
#   at t/00-basic.t line 6.
#     Tried to use 'Crypt::SSLeay'.
#     Error:  Can't load '/root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/arch/auto/Crypt/SSLeay/SSLeay.so' for module Crypt::SSLeay: /root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/arch/auto/Crypt/SSLeay/SSLeay.so: undefined symbol: SSLv2_client_method at /usr/local/lib/perl5/5.36.1/x86_64-linux-gnu/DynaLoader.pm line 206.
#  at t/00-basic.t line 6.
# Compilation failed in require at t/00-basic.t line 6.
# BEGIN failed--compilation aborted at t/00-basic.t line 6.

#   Failed test 'use Crypt::SSLeay::CTX;'
#   at t/00-basic.t line 7.
#     Tried to use 'Crypt::SSLeay::CTX'.
#     Error:  Attempt to reload Crypt/SSLeay.pm aborted.
# Compilation failed in require at /root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/lib/Crypt/SSLeay/CTX.pm line 2.
# Compilation failed in require at t/00-basic.t line 7.
# BEGIN failed--compilation aborted at t/00-basic.t line 7.

#   Failed test 'use Crypt::SSLeay::Conn;'
#   at t/00-basic.t line 8.
#     Tried to use 'Crypt::SSLeay::Conn'.
#     Error:  Attempt to reload Crypt/SSLeay.pm aborted.
# Compilation failed in require at /root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/lib/Crypt/SSLeay/Conn.pm line 2.
# Compilation failed in require at t/00-basic.t line 8.
# BEGIN failed--compilation aborted at t/00-basic.t line 8.

#   Failed test 'use Crypt::SSLeay::Err;'
#   at t/00-basic.t line 9.
#     Tried to use 'Crypt::SSLeay::Err'.
#     Error:  Attempt to reload Crypt/SSLeay.pm aborted.
# Compilation failed in require at /root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/lib/Crypt/SSLeay/Err.pm line 2.
# Compilation failed in require at t/00-basic.t line 9.
# BEGIN failed--compilation aborted at t/00-basic.t line 9.

#   Failed test 'use Crypt::SSLeay::MainContext;'
#   at t/00-basic.t line 10.
#     Tried to use 'Crypt::SSLeay::MainContext'.
#     Error:  Attempt to reload Crypt/SSLeay/CTX.pm aborted.
# Compilation failed in require at /root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/lib/Crypt/SSLeay/MainContext.pm line 8.
# Compilation failed in require at t/00-basic.t line 10.
# BEGIN failed--compilation aborted at t/00-basic.t line 10.

#   Failed test 'use Crypt::SSLeay::Version;'
#   at t/00-basic.t line 12.
#     Tried to use 'Crypt::SSLeay::Version'.
#     Error:  Attempt to reload Crypt/SSLeay.pm aborted.
# Compilation failed in require at /root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/lib/Crypt/SSLeay/Version.pm line 2.
# Compilation failed in require at t/00-basic.t line 12.
# BEGIN failed--compilation aborted at t/00-basic.t line 12.

#   Failed test 'use Net::SSL;'
#   at t/00-basic.t line 23.
#     Tried to use 'Net::SSL'.
#     Error:  Attempt to reload Crypt/SSLeay.pm aborted.
# Compilation failed in require at /root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/lib/Net/SSL.pm line 20.
# Compilation failed in require at t/00-basic.t line 23.
# BEGIN failed--compilation aborted at t/00-basic.t line 23.
Undefined subroutine &main::main_ctx called at t/00-basic.t line 49.
# Tests were run but no plan was declared and done_testing() was not seen.
# Looks like your test exited with 2 just after 13.
t/00-basic.t .....
Dubious, test returned 2 (wstat 512, 0x200)
Failed 7/13 subtests
        (less 5 skipped subtests: 1 okay)
Can't load '/root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/arch/auto/Crypt/SSLeay/SSLeay.so' for module Crypt::SSLeay: /root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/arch/auto/Crypt/SSLeay/SSLeay.so: undefined symbol: SSLv2_client_method at /usr/local/lib/perl5/5.36.1/x86_64-linux-gnu/DynaLoader.pm line 206.
 at /root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/lib/Net/SSL.pm line 20.
Compilation failed in require at /root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/lib/Net/SSL.pm line 20.
Compilation failed in require at t/01-connect.t line 6.
BEGIN failed--compilation aborted at t/01-connect.t line 6.
# Looks like your test exited with 2 before it could output anything.
t/01-connect.t ...
Dubious, test returned 2 (wstat 512, 0x200)
Failed 8/8 subtests
# Reading configuration from 'test.config' on linux
# network_tests : 0
t/02-live.t ...... skipped: Network tests disabled
Can't load '/root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/arch/auto/Crypt/SSLeay/SSLeay.so' for module Crypt::SSLeay: /root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/arch/auto/Crypt/SSLeay/SSLeay.so: undefined symbol: SSLv2_client_method at /usr/local/lib/perl5/5.36.1/x86_64-linux-gnu/DynaLoader.pm line 206.
 at /root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/lib/Crypt/SSLeay/Version.pm line 2.
Compilation failed in require at /root/.cpanm/work/1688298158.5768/Crypt-SSLeay-0.72/blib/lib/Crypt/SSLeay/Version.pm line 2.
Compilation failed in require at t/03-version.t line 14.
BEGIN failed--compilation aborted at t/03-version.t line 14.
t/03-version.t ...
Dubious, test returned 2 (wstat 512, 0x200)
No subtests run
t/boilerplate.t .. ok
t/manifest.t ..... skipped: Author tests not required for installation

Test Summary Report
-------------------
t/00-basic.t   (Wstat: 512 (exited 2) Tests: 13 Failed: 7)
  Failed tests:  1-5, 7-8
  Non-zero exit status: 2
  Parse errors: No plan found in TAP output
t/01-connect.t (Wstat: 512 (exited 2) Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 8 tests but ran 0.
t/03-version.t (Wstat: 512 (exited 2) Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: No plan found in TAP output
Files=6, Tests=22,  0 wallclock secs ( 0.03 usr  0.01 sys +  0.50 cusr  0.12 csys =  0.66 CPU)
Result: FAIL
Failed 3/6 test programs. 7/22 subtests failed.
make: *** [Makefile:1092: test_dynamic] Error 255
-> FAIL Installing Crypt::SSLeay failed. See /root/.cpanm/work/1688298158.5768/build.log for details. Retry with --force to force install it.

Docker#
Steffen Ullrich avatar
se flag
Crypt::SSLeay is old, very old. Last updated 2014. The author itself documents that you probable don't need this but other modules - read https://metacpan.org/release/NANIS/Crypt-SSLeay-0.72/source/README.md: *"At this point, Crypt::SSLeay is maintained to support existing software that already depends on it. However, it is possible that your software does not really depend on Crypt::SSLeay, only on the ability of LWP::UserAgent to communicate with sites over SSL/TLS.2"*
Steffen Ullrich avatar
se flag
Apart from you should provide the full build log, not just the parts where the tests are failing. Failing tests might just be inherited errors of an earlier problem during build which you don't show.
AntonioK avatar
kr flag
@SteffenUllrich Full logs added. I know that it's very old stuff, I'm trying to rescue 3rd-party perl application from outdated FreeBSD server to modern Linux environment, likely with docker. 2014 is okay, application was deployed by me around 2005 and somehow worked since than, without updates and migrations. The worst thing is that I don't know perl at all. `Crypt::SSLeay` is the dependency for that application.
Steffen Ullrich avatar
se flag
Based on the errors it looks like Crypt::SSLeay expects SSLv3 and maybe even SSLv2 support to be available in the OpenSSL build - which shows how old it is. I suggest that you use a version of Crypt::SSLeay from the repository https://github.com/nanis/Crypt-SSLeay/tree/master, which can hopefully deal with your more modern OpenSSL which neither support SSLv2 nor SSLv3 anymore.
Score:1
ru flag

Instead of installing via CPAN, you could use apt-get. Like this..

FROM perl:stable

RUN apt-get update -y && \
    apt-get install -y libcrypt-ssleay-perl
AntonioK avatar
kr flag
That definitely works and can be considered as quick-and-easy solution. Thank you for your answer! However, there is a reason why I don't want to install perl modules from apt-get. In such a scenario, it is impossible to control versions: perl modules would be installed onto system-wide perl and you can't switch from system-wide perl version (currently `perl 5.36.0` in Debian, who knows which one tomorrow?) to another one (newer or older).
I sit in a Tesla and translated this thread with Ai:

mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.