3

我试图升级 Perl,把我的电脑弄得一团糟我目前正在运行 RHEL6.5,64 位,这就是事情:

  • 我安装了 perl-5.10.1,并且运行良好。这是安装的,我可以从 yum 看到它
  • 我想安装 Padre,一个 Perl IDE,但至少需要 v5.11 [我太接近了!:( ]
  • 在我可以访问的存储库中没有更新的 Perl 版本(并且我有一个限制,我无法添加新的存储库)
  • 我得到老板的批准从 www.perl.org 下载 perl-5.20 .0 并尝试安装它

......混乱开始了!

  • 首先,我用自己的 id 安装了新的 perl,然后将 perl 推到了我的主目录下的某个地方
  • 我用 'perl -v' 进行了测试,可以看到我的环境指向较新的安装,但是,yum 从未识别过它(不是真正的问题)
  • 当我尝试安装 Padre 时,它​​似乎以某种方式硬编码了原始 perl(来自 /usr/bin),并且仍然声称更新为 5.11。
  • 试图修复它,我确实再次安装了新的 perl,现在使用 root,使其将 perl 推送到 /usr 树下......它已安装,但将 perl 推送到 /usr/local/bin,而不是 /usr/bin
  • 再说一次,我又安装了一个 perl,但 Padre 仍在 /usr/bin 上寻找那个

我放弃了 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 的应用程序,而我在卸载时并没有崩溃

任何帮助将不胜感激。

4

3 回答 3

8

你应该:

  1. 清理

    • 从任何不需要的路径中清除(注释掉)你~/.profile的,等等
    • 清除您的任何新的 perl 安装$HOME(一定要移到安全的地方)
    • 简而言之,尝试将您的环境恢复到以前的工作状态
  2. 重新登录,(注销,登录)

  3. 修复你的系统perl。这意味着,

    • 阅读@Sam Varshavchik 的回答
    • 使用您的包管理器(5.10)从您的发行版重新安装它。
    • 这一步应该覆盖你造成的混乱。
    • 测试一下!
    • 在确保一切正常之前不要继续。

经验教训:永远不要覆盖你的系统 perl

  1. 学习

  2. 安装 perlbrew

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

  4. 设置新的perl,运行

    • perlbrew init #初始化环境
    • perlbrew available #显示你可以安装什么perl
    • perlbrew install 5.20.0 #将需要几分钟 - 取决于您的系统速度
    • perlbrew install-cpanm
    • perlbrew list #查看
    • perlbrew switch perl-5.20.0 #activate 新安装的 perl 5.20

检查您的安装

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

你完成了。

  1. CPAN 模块

您可以使用 安装新模块cpanm,例如:

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

您将需要更新您自己的perl 脚本的 shebang 行以

#!/usr/bin/env perl

我希望不要忘记任何事情,也许其他更有经验的 perl-guru 会添加/编辑/更正更多。

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

于 2014-09-13T06:41:00.087 回答
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,因此请在 RHEL 更新目录中查找 rpm 告诉您已安装的版本,并验证您是否拥有正确的 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% 保证这会解决所有问题,也可能存在其他问题,但这是迈向恢复的良好第一步。

于 2014-09-13T01:11:08.633 回答
0

我做了什么:

来自@Sam-Varshavchik 的回答:

  1. 在我的 yum 缓存中找到以前的 perl rpm,并安装... rpm -ivh --force perl-<version>.x86_64.rpm

  2. 检查其他“perl *”以前安装的包......有+260所以将它保存在一个文件中 rpm -qa "perl*" > /tmp/perl.pkgs

  3. 安装 +260 个软件包后,我意识到手动安装会花费太多时间,所以是时候将一些 ksh 技能付诸实践了……

    我检查了我的 yum 缓存,发现 +260 包中的大约 130 个,所以

    • 从列表中取出基本 perl 包(我已经安装了);
    • 对于缓存中的那些,我决定使用 rpm 安装,与基本包相同;
    • 对于那些我没有方便的人,我使用了 yum,它会下载并执行相同的 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:

  1. 安装了 perlbrew(能够从我的 auth repos 中得到它,所以使用 yum 得到它)并使用 perlbrew,安装 5.20.0 localy

    • TODO:没有任何额外的模块,Padre 也没有……需要了解更多关于 perlbrew 的工作方式并将已安装的版本与系统 perl 隔离开来

再次感谢@Sam-Varshavchik 和@jm666 的支持和指导

于 2014-09-14T18:39:54.377 回答