Renato Renato - 27 days ago 10
Linux Question

A mess with different Perl installs

I tried to upgrade Perl and put my computer into a complete mess
I am currently running RHEL6.5, 64bits, and this is the thing:


  • I had perl-5.10.1 installed, and working nice. this came installed,
    and I could see it from yum

  • I wanted to install Padre, an Perl IDE, but that required at least v5.11 [I was so close! :( ]

  • There were no newer version for Perl in the repos that I have access to (and I have a limitation that I can't add new repos)

  • I got approval from my boss to download perl-5.20 .0 from www.perl.org and tried to install it



... and the mess begins!


  • First I installed the new perl with my own id, and that pushed perl to somewhere under my home dir

  • I tested with 'perl -v' and could see that my env was pointing to the newer install, however, yum never recognized it (not really a problem)

  • When I tried to install Padre, seems somehow it had the hardcoded the original perl (from /usr/bin) and still claiming for something as newer as 5.11.

  • Trying to fix it, I did installed the new perl again, now using root, to make it push perl under /usr tree ... it installed, but pushed perl to /usr/local/bin, instead of /usr/bin

  • So again, I had one more perl install but Padre still looking for the one on /usr/bin



I give up about Padre, and deleted the files related to it, as well as the perl installed on my home dir, however a couple of perl scripts that I had already coded now are throwing errors like:

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.


... and Data::Dumper in not the only one ... every time I disable one of the modules, another one hangs in the same, or similar way

From what I read about this, seems that this issue is related to modules that were originally installed for one perl version, and are being called by another, however, I already forced the modules that I use to be reinstalled directly from CPAN, and they still failing

Question: How can I, safely, get free from this current perl installs, and perform a new clean install be able to use it w/o these versions conflicts?

My major concern are about the numerous apps that I have that depends on Perl, and I my not broke then on a uninstall

Any help will be much appreciate.

Answer

You should:

  1. cleanup

    • clean (comment out) your ~/.profile from any unwanted paths, and so on
    • clean any new perl installation from your $HOME (move to safe place for sure)
    • in short, try return your environment into previous working state
  2. relog, (logout, login)

  3. repair your system perl. Thats mean,

    • read @Sam Varshavchik's answer
    • reinstall it from your distribution, using your package manager (5.10).
    • this step should overwrite the mess you caused.
    • test it !
    • don't continue until youre ensured, everything working right as before.

Lesson learned: never overwrite your system perl

  1. learning

  2. installing perlbrew

    • run the installation command \wget -O - http://install.perlbrew.pl | bash
    • should finished without errors
    • follow the instructions how to modify your startup file e.g. ~/.profile or such... (you need to add one line to the end)
    • check your ~/perl5/perlbrew/bin should contain prelbrew and patchperl
  3. relog

  4. setup new perl, run

    • perlbrew init #init environment
    • perlbrew available #show what perl you can install
    • perlbrew install 5.20.0 #will take few minutes - depends on your system speed
    • perlbrew install-cpanm
    • perlbrew list #check
    • perlbrew switch perl-5.20.0 #activate newly installed perl 5.20

Check your installation

  • in the ~/perl5/perlbrew/bin you should have 3 scripts: prelbrew , patchperl , cpanm
  • perl -v should return 5.20
  • type cpanm - should return ~/perl5/perlbrew/bin/cpanm

You're done.

  1. CPAN modules

You can install new modules with cpanm, like:

Check the ~/perl5/perlbrew/perls/perl-5.20.0/bin/ for new commands

You will need update your own perl script's shebang line to

#!/usr/bin/env perl

I hope don't forget anything, maybe other more experienced perl-gurus will add/edit/correct more.

Anyway, in the reality the steps 5,6,7 are much easier as sounds (by reading this) and could be done in few minutes.