Estou tentando instalar um programa que possui várias dependências perl. Uma das dependências perl (BerkeleyDB) falha durante a instalação. Eu sei muito pouco sobre perl. Existe uma maneira de eu (como usuário) resolver isso? Existe um comando SPAN para tentar versões anteriores?
cpan[49]> install BerkeleyDB
Running install for module 'BerkeleyDB'
Fetching with HTTP::Tiny:
https://cpan.org/authors/id/P/PM/PMQS/BerkeleyDB-0.65.tar.gz
Checksum for /root/.local/share/.cpan/sources/authors/id/P/PM/PMQS/BerkeleyDB-0.65.tar.gz ok
Configuring P/PM/PMQS/BerkeleyDB-0.65.tar.gz with Makefile.PL
Parsing config.in...
Looks Good.
Checking if your kit is complete...
Looks good
Warning (mostly harmless): No library found for -ldb
Generating a Unix-style Makefile
Writing Makefile for BerkeleyDB
Writing MYMETA.yml and MYMETA.json
PMQS/BerkeleyDB-0.65.tar.gz
/usr/bin/perl Makefile.PL -- OK
Running make for P/PM/PMQS/BerkeleyDB-0.65.tar.gz
cp BerkeleyDB/Hash.pm blib/lib/BerkeleyDB/Hash.pm
cp scan.pl blib/lib/scan.pl
cp BerkeleyDB.pod blib/lib/BerkeleyDB.pod
cp mkconsts.pl blib/lib/mkconsts.pl
cp BerkeleyDB/Btree.pm blib/lib/BerkeleyDB/Btree.pm
cp BerkeleyDB.pm blib/lib/BerkeleyDB.pm
Running Mkbootstrap for BerkeleyDB ()
chmod 644 "BerkeleyDB.bs"
"/usr/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- BerkeleyDB.bs blib/arch/auto/BerkeleyDB/BerkeleyDB.bs 644
"/usr/bin/perl" "/usr/share/perl5/vendor_perl/ExtUtils/xsubpp" -noprototypes -typemap '/usr/share/perl5/ExtUtils/typemap' -typemap '/root/.local/share/.cpan/build/BerkeleyDB-0.65-0/typemap' BerkeleyDB.xs > BerkeleyDB.xsc
Warning: Found a 'CODE' section which seems to be using 'RETVAL' but no 'OUTPUT' section. in BerkeleyDB.xs, line 5936
Warning: Found a 'CODE' section which seems to be using 'RETVAL' but no 'OUTPUT' section. in BerkeleyDB.xs, line 5964
mv BerkeleyDB.xsc BerkeleyDB.c
gcc -c -I/usr/local/BerkeleyDB/include -D_REENTRANT -D_GNU_SOURCE -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64-v2 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fwrapv -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -g -DVERSION=\"0.65\" -DXS_VERSION=\"0.65\" -fPIC "-I/usr/lib64/perl5/CORE" BerkeleyDB.c
BerkeleyDB.xs:76:10: fatal error: db.h: No such file or directory
76 | #include <db.h>
| ^~~~~~
compilation terminated.
make: *** [Makefile:349: BerkeleyDB.o] Error 1
PMQS/BerkeleyDB-0.65.tar.gz
/usr/bin/make -- NOT OK
Failed during this command:
PMQS/BerkeleyDB-0.65.tar.gz : make NO
Se você observar a saída, notará a linha:
A compilação porque está faltando esse cabeçalho de desenvolvimento e, provavelmente, o pacote que o fornece.
Você não declarou qual sistema operacional está usando, mas no Fedora, RHEL, Alma, Rocky, etc, você pode ver o que fornece o arquivo com os seguintes comandos:
Este é bastante direto, pois retornará,
libdb-devel-5.3.28-53.el9.x86_64 : C development files for the Berkeley DB library
o que é claramente o que você precisa.Debian, Ubuntu, etc são um pouco mais complicados.
Você pode usar
apt-file search db.h
o qual retornará todos os pacotes com essa string e, em seguida, grep através dela, mas você precisa saber o que está procurando. Uma opção melhor é acessar https://packages.ubuntu.com e procurar pacotes que contenham o arquivodb.h
. Você verá o nome do pacotelibdb5.3-dev
e usandoapt show libdb5.3-dev
retornará as seguintes linhas que o tornam bastante óbvio.O arquivo provavelmente também está localizado em,
/usr/include/db.h
então você também pode usarQue vai voltar
Depois, instale o pacote e a instalação via
cpan
funcionará.