尝试在 Centos-7 上安装 DBD-Pg-2.19.3 时找不到 version.pm

can't find version.pm while trying to install DBD-Pg-2.19.3 on Centos-7

在 Centos 7 上。

oracle DBD 安装得很好我的 Postgresql 版本有问题。

这是我的剧本运行:

set -x -e
sudo yum -y install perl-devel
sudo yum -y install perl-DBI

cp ./DBD* /tmp
pushd /tmp
tar xvf DBD-Oracle-1.52.tar
tar xvf DBD-Pg-2.19.3.tar
pushd DBD-Oracle-1.52
perl Makefile.PL
sudo make
sudo make install
popd
pushd DBD-Pg-2.19.3
perl Makefile.PL
sudo make
sudo make install

postgresql DBD perl Makefile.PL returns

++ perl Makefile.PL
Configuring DBD::Pg 2.19.3
PostgreSQL version: 90224 (default port: 5432)
POSTGRES_HOME: (not set)
POSTGRES_INCLUDE: /usr/include
POSTGRES_LIB: /usr/lib64
OS: linux
Warning: prerequisite Test::More 0.61 not found.
Warning: prerequisite version 0 not found.
Could not eval '
                package ExtUtils::MakeMaker::_version;
                no strict;
                BEGIN { eval {
                    # Ensure any version() routine which might have leaked
                    # into this package has been deleted.  Interferes with
                    # version->import()
                    undef *version;
                    require version;
                    "version"->import;
                } }

                local $VERSION;
                $VERSION=undef;
                do {
                        use version; our $VERSION = qv('2.19.3');
                };
                $VERSION;
            ' in Pg.pm: Can't locate version.pm in @INC (@INC contains: t/lib /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 (eval 9) line 16, <$fh> line 19.
BEGIN failed--compilation aborted at (eval 9) line 16, <$fh> line 19.
WARNING: Setting VERSION via file 'Pg.pm' failed
 at /usr/share/perl5/vendor_perl/ExtUtils/MakeMaker.pm line 619.
Using DBI 1.627 (for perl 5.016003 on x86_64-linux-thread-multi) installed in /usr/lib64/perl5/vendor_perl/auto/DBI/
Writing Makefile for DBD::Pg
++ sudo make
Skip blib/lib/DBD/testme.tmp.pl (unchanged)
Skip blib/lib/Bundle/DBD/Pg.pm (unchanged)
Skip blib/lib/DBD/Pg.pm (unchanged)
gcc -c  -I/usr/include -I/usr/lib64/perl5/vendor_perl/auto/DBI -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DPGLIBVERSION=90224 -DPGDEFPORT=5432 -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic  -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc -DVERSION=\"undef\" -DXS_VERSION=\"undef\" -fPIC "-I/usr/lib64/perl5/CORE"   Pg.c
In file included from Pg.xs:13:0:
Pg.h:36:22: fatal error: libpq-fe.h: No such file or directory
 #include "libpq-fe.h"
                      ^
compilation terminated.
make: *** [Pg.o] Error 1

然而定位显示:

/common/oracle/tfa/austin/tfa_home/perl/lib/5.22.0/version.pm
/common/oracle/tfa/austin/tfa_home/perl/lib/5.22.0/ExtUtils/MakeMaker/version.pm
/common/orainst/perl/lib/5.22.0/version.pm
/common/orainst/perl/lib/5.22.0/ExtUtils/MakeMaker/version.pm
/opt/oracle/product/18c/dbhomeXE/perl/lib/5.22.0/version.pm
/opt/oracle/product/18c/dbhomeXE/perl/lib/5.22.0/ExtUtils/MakeMaker/version.pm

这是(当前)问题 prerequisite Test::More 0.61 not found
这是解决方案 https://superuser.com/a/1111321/156111

yum install make cpan

然后使用 CPAN 配置您的 perl。只需在命令提示符中输入 cpan 并对所有交互式问题回答是。

然后更新您的 cpan 管理器:

#cpan install Bundle::CPAN
#cpan reload cpan

现在安装您感兴趣的软件包:

#cpan install Test::More

您需要安装完整的 Perl 核心。在 CentOS 7 中这个包被称为 perl-core,而 perl 只是解释器,如果你真的想自己使用它就不合适了。在最新版本的 Fedora 中,完整的 Perl 已重命名为 perl(并且解释器已重命名为 perl-interpreter)。

yum install perl-core

更好的是build your own Perl, so that you can install things into it as you need without messing with the system Perl that may be used by other things and not expect these updates. If you stick to using the system Perl, it's recommended to isolate any modules you install without the package manager using a local::lib or Carton

看起来你已经有一个单独的 Perl 版本,因为那些包含 5.22.0 的路径不是来自 CentOS 7 中的系统 perl。这个 Perl 安装将不会被管理或与你安装的任何东西相关使用 yum 除非它来自 Oracle 存储库。安装可以处理该模块依赖关系的模块的正确方法是使用 cpan client, or other clients like cpanm。只需确保 运行 要安装模块并使用的 Perl 的可执行文件。

如果您喜欢使用系统 Perl 及其关联的 Perl 库(就像您看起来的那样 运行 yum install perl-DBI),那么您可以使用预打包的版本DBD::Pg.

 sudo yum install perl-DBD-Pg

这将自动引入任何其他所需的 RPM。

DBD::Oracle 更难。预构建包不可用(大概是因为 Oracle 不是开源的),但您可以按照 the method I described a few years ago 构建自己的 RPM。您需要确保已安装 Oracle 客户端库(及其关联的头文件)。

set -x -e
sudo yum -y install perl-devel
sudo yum -y install perl-DBI
sudo yum -y install perl-version perl-Data-Dumper
sudo yum -y install postgresql-devel
cp ./DBD* /tmp
pushd /tmp
tar xvf DBD-Oracle-1.52.tar
tar xvf DBD-Pg-2.19.3.tar
pushd DBD-Oracle-1.52
perl Makefile.PL
sudo make
sudo make install
popd
pushd DBD-Pg-2.19.3
perl Makefile.PL
sudo make
sudo make install
cd ~/ora2pg
perl Make.PL
sudo make
sudo make install