2014-09-13 43 views
3

我试图升级Perl和把我的电脑变成一台完整的混乱 我目前运行的RHEL6.5,64位,这就是事情:不同的Perl一团糟安装

  • 我有着Perl 5.10 .1安装好了,工作很好。这来了安装, ,我可以看到它从百胜
  • 我想安装Padre,一个Perl IDE,但至少需要v5.11 [我是如此接近! :(]
  • 还有没有更新的版本的Perl在回购,我有机会(我有一个限制,我不能添加新的回购)
  • 我得到了我的老板批准下载perl-5.20 0.0从www.perl.org,并试图安装它

...和混乱开始了!

  • 首先,我安装了我自己的ID的新的Perl,并推perl的某处在我的家目录下
  • 我用'perl -v'进行了测试,可以看到我的环境指向较新的安装,但是,yum从来没有认出它(不是真的是一个问题)
  • 当我试图安装Padre,似乎它有硬编码的原始perl(从/ usr /斌),仍然声称5.11更新。
  • 试图修复它,我再次安装了新的perl,现在使用root,使它在/ usr树下推送perl ...它安装了,但是将perl推送到/ usr/local/bin而不是/ usr/bin中
  • 所以,再一次,我有一个更perl的安装,但神父仍在寻找放在/ usr/bin中

我放弃了约神父的一个,并删除与之相关的文件,以及该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,我不是我再破上卸载

任何帮助将非常感激。

+2

(5.odd是dev版本。 ) – ikegami 2014-09-13 00:33:00

+0

'perl -V'(大写字母“V”)告诉你'perl'在哪里搜索模块,所以你知道该怎么开始删除...至于安全吗?那么,就我所知,你的软件包管理器可能需要Perl,所以谁知道! – ikegami 2014-09-13 00:35:56

+0

tkx @ikegami ...移动到另一个版本,如5.19或类似的东西不会是一个限制...但首先,我需要摆脱这个混乱! :-( – Renato 2014-09-13 00:37:05

回答

7

您应该:

  1. 清理

    • 干净(注释掉)您~/.profile从任何不需要的路径,所以从您的$HOME(移动到
    • 干净的任何新的Perl安装安全的地方肯定)
    • 总之,试试把你的环境改成prev白条工作状态
  2. 重新记录,(注销,登录)

  3. 修复系统的Perl。那意思是说,

    • 阅读@Sam Varshavchik的回答
    • 从发行重新安装,使用您的包管理器(5.10)。
    • 这一步应该覆盖你造成的混乱。
    • 测试一下吧!
    • 不会继续,直到你确保,一切正常工作。

教训:从来没有覆盖系统的perl

  • 学习读通perlbrew.pl

  • 重复前面的步骤,一旦

  • 安装perlbrew

    • 运行安装命令\wget -O - http://install.perlbrew.pl | bash
    • 应该完成没有错误
    • 按照说明如何修改您的启动文件例如~/.profile或这样的......(你需要添加一行到年底)
    • 检查~/perl5/perlbrew/bin应该包含prelbrewpatchperl
  • 重新记录

  • 建立新的Perl,运行

    • perlbrew init #init environment
    • perlbrew available #show wh在Perl中,您可以安装
    • perlbrew install 5.20.0 #will需要几分钟的时间 - 取决于你的系统运行速度
    • perlbrew install-cpanm
    • perlbrew list#检查
    • perlbrew switch perl-5.20.0 #activate新安装的perl的5.20
  • 检查您的安装

    • ~/perl5/perlbrew/bin你应该有3个脚本:prelbrewpatchperlcpanm
    • perl -v应该返回5.20
    • type cpanm - 应该返回~/perl5/perlbrew/bin/cpanm

    大功告成。

  • CPAN模块
  • 可以与cpanm安装新的模块,例如:

    检查~/perl5/perlbrew/perls/perl-5.20.0/bin/新命令

    您将需要更新自己 perl脚本的家当线

    #!/usr/bin/env perl 
    

    我希望不要忘记任何事,也许其他更有经验的Perl的大师们将添加/编辑/正确的更多。

    无论如何,在现实中5,6,7步骤听起来要容易得多(通过阅读),并且可以在几分钟内完成。

    +0

    在基于rpm的发行版上,我不会推荐cpanm作为安装Perl软件包的一种手段。转速是唯一的出路。即使我可以简单地构建一个新版本的Perl或任何包,并且自己安装它(我过去也这样做),而无需破坏系统Perl,我仍在说明这一点。即使我做了破坏,我也可以修复它。我不是吹牛,我是在说一个观点。如果我想要大幅度提高转速,那么rpm就是为了挽救我的屁股。无论有人会怎么样,每个人都会犯错误,而且rpm会让我免于浪费整个周末的时间来解决一个大问题。 – 2014-09-13 15:21:59

    +2

    @SamVarshavchik请,了解perlbrew。 'cpanm'是perlbrew的本地代码,整个'perlbrew'完全与系统perl分离(运行在自己分离的环境中,在它自己的目录树中),加上,你不需要是'root'安装它。如果你不是root,那么不能写perl系统,也不能意外。当某人使用'cpanm'作为系统范围的perl(作为root或'--sudo')时,你的评论是可以的 - 但这不是'perlbrew'的情况。所以,_youre正确地哭泣,但在错误的坟墓......_;) – jm666 2014-09-13 16:00:40

    4

    在基于rpm的Linux发行版上,您绝对不应该手动安装系统软件,例如尝试自己编译和构建它。 RHEL的软件包管理工具rpm执行一项重要功能,即跟踪软件包之间的依赖关系,并防止软件包冲突。

    您显示的错误恰恰是系统Perl安装损坏的症状,并且rpm正好存在以避免发生此类事情。手动构建和安装随机压缩包完全绕过了rpm提供的安全网。

    有没有从损坏的系统恢复安装一个关键的系统转如Perl的千篇一律的配方,但一般:

    1)运行“转-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%的保证,这会解决所有问题,也可能有其他问题,但这是迈向恢复的良好开端。

    +0

    tkx为您的答复@ Sam-Varshavchik ...似乎我会有一个长周末!...当然会尝试这种做法并在完成后发布结果 只是一个问题,在rpm/yum有没有办法列出所有依赖于perl的软件包?...我可以看到perl依赖于什么,但是找不到一种方法来确定谁依赖于它 关心。 – Renato 2014-09-13 01:26:40

    +0

    “rpm -e --test perl” - 这将会是一个长长的列表。 – 2014-09-13 02:04:24

    0

    我做了什么:

    从@萨姆 - Varshavchik答案:

    1. 发现在我的百胜缓存以前的perl的转速,并安装... rpm -ivh --force perl-<version>.x86_64.rpm

    2. 经过为其他人“perl *”以前安装的软件包...有+260所以将其保存在文件中rpm -qa "perl*" > /tmp/perl.pkgs

    3. 随着+260包的安装,我意识到手动做会花费太多时间,所以现在是时候在实践中加入一些ksh技能了......

      我在百胜缓存检查,发现+260包〜130,所以

      • 从列表中拿出Perl基本包(我已经安装);
      • 对于那些在缓存中,我决定用rpm安装,然后用和基础包一样的方法;
      • 对于那些我没有派上用场,我用百胜,这会下载并执行转速相同 ,所以...

      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回购得到它,所以用yum得到它),并使用perlbrew,localy

    安装5.20.
    • TODO:没有任何额外的模块既不帕德里尚未...需要了解更多的方式perlbrew作品,并从系统的perl
  • 一旦隔离安装的版本远再一次,谢谢@ Sam-Varshavchik和@ jm666对你的支持ang指导

    +0

    我对'yum'安装的perlbrew一无所知。 我的答案中的方法安装'perlbrew' _到您的主目录_。默认是'$ HOME/perl5/perlbrew'。之后,'perlbrew'会将新的perl(可以有_multiple_)安装到目录“$ HOME/perl5/perlbrew/perls/perl5.20.0”中(按版本)。在5.)中,通过添加一行'source〜/ perl5/perlbrew/etc/bashrc'来修改'.profile',并且这一行允许您使用新安装的perl。 **你不需要是root用户,用perlbrew **来安装perl。例如你不能覆盖你的系统Perl。 – jm666 2014-09-14 19:05:27