在我们的产品中用到了LWP::UserAgent,用于在perl代码中进行http请求,测试发现在纯V6环境下会返回下面的错误:
Can't connect to [2001:db8:0:1:10:208:135:232]:8002 (Bad hostname '[2001:db8:0:1:10:208:135:232]')
调查了以后发现一些perl应用依赖于IO::Socket::INET,由于这个模块本身不支持IPV6,所以在纯V6环境下可能需要做一些工作才能work。搜索CPAN,模块Net::INET6Glue::INET_is_INET6提供了对这个问题的解决方案,在应用代码中只需要引用一下就可以。
- useNet::INET6Glue::INET_is_INET6;
如果有网络环境,比如在开发机上,最简单的办法就是从CPAN直接安装,shell中命令如下:
- cpanApp::cpanminus
- cpanmNet::INET6Glue::INET_is_INET6
第二个命令执行后,会显示出同时安装的依赖模块:
- Fetchinghttp://www.cpan.org/authors/id/S/SU/SULLR/Net-INET6Glue-0.603.tar.gz...OK
- ConfiguringNet-INET6Glue-0.603...OK
- ==>Founddependencies:IO::Socket::IP
- -->WorkingonIO::Socket::IP
- Fetchinghttp://www.cpan.org/authors/id/P/PE/PEVANS/IO-Socket-IP-0.37.tar.gz...OK
- ConfiguringIO-Socket-IP-0.37...OK
- ==>Founddependencies:Socket
- -->WorkingonSocket
- Fetchinghttp://www.cpan.org/authors/id/P/PE/PEVANS/Socket-2.018.tar.gz...OK
- ==>Founddependencies:ExtUtils::Constant
- -->WorkingonExtUtils::Constant
- Fetchinghttp://www.cpan.org/authors/id/N/NW/NWCLARK/ExtUtils-Constant-0.23.tar.gz...OK
- ConfiguringExtUtils-Constant-0.16...OK
- BuildingandtestingExtUtils-Constant-0.23...OK
- SuccessfullyinstalledExtUtils-Constant-0.23(upgradedfrom0.17)
- ConfiguringSocket-2.018...OK
- BuildingandtestingSocket-2.018...OK
- SuccessfullyinstalledSocket-2.018(upgradedfrom1.78)
- BuildingandtestingIO-Socket-IP-0.37...OK
- SuccessfullyinstalledIO-Socket-IP-0.37
- BuildingandtestingNet-INET6Glue-0.603...OK
- SuccessfullyinstalledNet-INET6Glue-0.603
- 4distributionsinstalled
在产品中,需要将perl模块做成rpm来安装,搜索了一下找到一个比较方便的工具:cpan2rpm,在CPAN中可以下载。
下来的是tgz包,通过make安装,命令会报这样一个错:Can't locate object method "interpolate" via package "Pod::Text" at ./cpan2rpm line 519.
原因是Pod::Text中interpolate这个方法已经迁移到Pod::Parser模块中,需要将代码中的Pod::Text替换为Pod::Parser,然后make、make install就OK了。
cpan2rpm安装好以后,就可以将Net::INET6Glue::INET_is_INET6模块以及它的依赖做成rpm了,步骤如下:
1.下载tgz(包括依赖),从上面通过CPAN安装的过程可以看出共有3个依赖,分别是:ExtUtils-Constant、Socket和IO-Socket-IP。以ExtUtils-Constant举例:
- wgethttp://www.cpan.org/authors/id/N/NW/NWCLARK/ExtUtils-Constant-0.23.tar.gz
- cpan2rpm--no-sign./ExtUtils-Constant-0.23.tar.gz
- --cpan2rpm-Ver:2.028--
- Upgradecheck
- Fetch:HTTP
- --module:./ExtUtils-Constant-0.23.tar.gz--
- Metadataretrieval
- ...
- ...
- +umask022
- +cd/usr/src/redhat/BUILD
- +rm-rfExtUtils-Constant-0.23
- +exit0
- RPM:/usr/src/redhat/RPMS/noarch/perl-ExtUtils-Constant-0.23-1.noarch.rpm
- SRPM:/usr/src/redhat/SRPMS/perl-ExtUtils-Constant-0.23-1.src.rpm
- --Done--
可以看到生成出所需要的rpm和source rpm。
Done!
其实使用cpan2rpm不必先下载tgz包,只要将上面的文件名替换为模块名就可以。
另外,估计cpan2rpm可能已经很久没人维护了,在编译不同rpm时还遇到过下面的问题,一并将补丁发出来。
错误1:
- get_meta():Notadirectoryat/usr/bin/cpan2rpmline396.
- diff-rucpan2rpm-2.028/cpan2rpmcpan2rpm-new/cpan2rpm
- ---cpan2rpm-2.028/cpan2rpm2005-06-1722:06:54.000000000-0700
- +++cpan2rpm-new/cpan2rpm2005-06-3009:35:49.000000000-0700
- @@-26,6+26,7@@
- usestrict;
- usewarnings;
- +useFile::Basename;
- useGetopt::Long;
- useSys::Hostname;
- usePod::Text;
- @@-387,6+388,9@@
- $info->{buildarch}="noarch"if$xs==0;
- }
- +if(not-d$info->{evaldir}){
- +$info->{evaldir}=dirname($info->{evaldir});
- +}
- chdir$info->{evaldir}||die"get_meta():$!";
- $_="$info->{evaldir}/Build.PL";
错误2:
- /usr/lib/rpm/brp-compress:line8:cd:/var/tmp/perl-Crypt-Random-Source-0.10-root:Nosuchfileordirectory
801行在destdir前面加上“--”
- $info->{"make-install"}="--destdir=%{buildroot}"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。