我尝试升级Perl并将我的计算机弄得一团糟 我目前正在运行RHEL6.5,64位,这就是事情:
......混乱开始了!
我放弃了Padre,并删除了与它相关的文件,以及我家庭目录上安装的perl,但是我现在编写的一些perl脚本会抛出如下错误:
perl -cw "xmltest.pl" (in directory: /home/myid/scripts/xmltest.pl)
perl: symbol lookup error: /usr/lib64/perl5/auto/Data/Dumper/Dumper.so: undefined symbol: Perl_Istack_sp_ptr
Compilation failed.
...和Data :: Dumper不是唯一一个......每当我禁用其中一个模块时,另一个模块以相同或相似的方式挂起
从我读到的内容来看,似乎这个问题与最初为一个perl版本安装的模块有关,并且被另一个版本调用,但是,我已经强制我使用的模块直接从CPAN重新安装,他们仍然失败
问题:如何安全地从当前的perl安装中解脱出来,并执行新的干净安装,以便能够在没有这些版本冲突的情况下使用它?
我主要担心的是我拥有的依赖于Perl的众多应用程序,而我在卸载时没有破坏
任何帮助都会非常感激。
答案 0 :(得分:7)
你应该:
清理
~/.profile
,依此类推$HOME
清除任何新的perl安装(确保移至安全的地方)relog,(退出,登录)
修复你的系统perl。多数民众赞成,
获得的经验教训:永远不会覆盖您的系统perl
学习
perlbrew.pl
安装perlbrew
\wget -O - http://install.perlbrew.pl | bash
~/.profile
或其他......(您需要在末尾添加一行)~/perl5/perlbrew/bin
是否应包含prelbrew
和patchperl
重新记录
设置新的perl,运行
perlbrew init
#init environment perlbrew available
#show你可以安装什么perl perlbrew install 5.20.0
#将需要几分钟 - 取决于您的系统速度perlbrew install-cpanm
perlbrew list
#check perlbrew switch perl-5.20.0
#activate new installed perl 5.20 检查您的安装
~/perl5/perlbrew/bin
中您应该有3个脚本:prelbrew
,patchperl
,cpanm
perl -v
应返回5.20 type cpanm
- 应该返回~/perl5/perlbrew/bin/cpanm
你已经完成了。
您可以使用cpanm
安装新模块,例如:
检查~/perl5/perlbrew/perls/perl-5.20.0/bin/
是否有新命令
您需要更新您自己的 perl脚本的shebang行
#!/usr/bin/env perl
我希望不要忘记任何事情,也许其他更有经验的perl-gurus会添加/编辑/更正。
无论如何,在现实中,步骤5,6,7更容易听起来(通过阅读本文)并且可以在几分钟内完成。
答案 1 :(得分:4)
在基于rpm的Linux发行版上,你不应该手动安装系统软件,就像这样,尝试自己编译和构建它。 RHEL的包管理工具rpm执行一项重要功能,即跟踪包之间的依赖关系,并防止包冲突。
您显示的错误恰恰是系统Perl安装损坏的症状,并且rpm的存在恰恰是为了避免发生这种情况。手动构建和安装随机tarball完全绕过rpm提供的安全网。
从像perl这样的关键系统rpm的损坏的系统安装中恢复,没有一个千篇一律的秘诀,但总的来说:
1)运行" rpm -q" perl,这将显示rpm认为应安装的perl rpm软件包的确切版本。
2)转到RHEL安装媒体/目录,验证它是否包含相同的perl-.x86_64.rpm包。如果您以前安装过RHEL更新,则可能已经更新了perl,因此请查看rpm告诉您已安装在RHEL更新目录中的版本,并验证您是否具有正确的rpm包。
3)执行:
rpm -ivh --force perl-<version>.x86_64.rpm
这将重新安装以前安装的原始perl RPM软件包。您的问题不仅仅是您安装了额外版本的perl,而且您的某些自定义perl版本可能会破坏系统perl包,并且卸载它们不会有帮助,您必须重新安装系统perl。
4)在RHEL中,许多perl模块作为单独的软件包安装。应使用上述过程重新安装已安装的每个perl rpm软件包。执行:
rpm -q -a | grep '^perl'
这将为您提供已安装的所有Perl软件包的列表。您需要为每个Perl rpm包重复此过程。
这并非100%保证这将解决所有问题,也可能存在其他问题,但这是迈向恢复的良好开端。
答案 2 :(得分:0)
我做了什么:
来自@ Sam-Varshavchik回答:
在我的yum缓存中找到以前的perl rpm,并安装了......
rpm -ivh --force perl-<version>.x86_64.rpm
检查其他人&#34; perl *&#34;以前安装的软件包...已经有+260,因此将其保存在文件rpm -qa "perl*" > /tmp/perl.pkgs
要安装+260个软件包,我意识到手动操作需要花费太多时间,所以是时候将一些ksh技能付诸实践......
我检查了我的yum缓存,发现了大约130个+260个包,所以
CACHE="/var/cache/yum/x86_64"
for perlpkg in $(cat /tmp/perl.pkgs)
do
FILE=$(find $CACHE -name "${perlpkg}.rpm")
if [[ ${FILE} != "" ]] ; then
rpm -ivh --force ${FILE}
else
yum -y reinstall ${perlpkg}
fi
done
来自@ jm666:
安装了perlbrew(能够从我的auth repos获得它,所以使用yum获得它)并使用perlbrew,安装5.20.0 localy
再次感谢@ Sam-Varshavchik和@ jm666的支持指导