Online update killed Perl - again

So it happened again: an automatic online update of the perl package
on a SUSE 10.0 based mailserver rendered Perl non-functional. As a
consequence, MIMEDefang (a Perl based mail filter program) wouldn’t
start anymore and the mailflow was blocked. The “cpan” command didn’t
work anymore, either. All of them threw error messages like

IO object version 1.21 does not match bootstrap parameter 1.23 at /usr/lib/perl5/5.8.7/i586-linux-thread-multi/XSLoader.pm line 94.

The only way I found out of this was:

  • forcibly uninstall perl (rpm -e --nodeps perl)
  • manually download the new perl rpm from the update server
    (wget http://ftp.gwdg.de/pub/suse/update/10.0/rpm/i586/perl-5.8.7-5.6.i586.rpm)
  • install it manually (rpm -i perl-5.8.7-5.6.i586.rpm)
  • Now cpan would at least start again, but many CPAN modules were
    missing and installation attempts would fail with very mysterious
    messages which I didn’t write down in the heat of the moment.
  • As one recurring message seemed to indicate (from memory) module
    Text::Util being corrupted I finally reinstalled that with the
    cpan command “force install Text::Util”. (Without the “force”
    prefix, the install command would only say “already installed.”)
  • After that, I was able to run reinstall the remaining CPAN
    modules and the application would finally run again.

This seems to happen every time a Suse online update of Perl hits
an installation that has been updated via CPAN.

Questions:

  • Is there any way of avoiding this problem from the beginning?
  • After the procedure above, is everything ok again or are some
    corpses still lurking in dark corners of my Perl installation?
  • Can that procedure be abbreviated? For example, can I reinstall
    the perl RPM without uninstalling it first? Can I somehow
    repair the cpan command without reinstalling the entire perl
    RPM? Can I somehow check the modules installed via CPAN to find
    out which of them are corrupted, and selectively reinstall
    those?

In short: how do others handle that problem?

Thanks in advance for any insights,
Tilman

You can combine the remove and reinstall steps for the RPM with --force. Sorry don’t know about the other stuff.

/me wrote:
> - As one recurring message seemed to indicate (from memory) module
> Text::Util being corrupted I finally reinstalled that with the

It was List::Util, actually.

I just had another machine’s Perl die the same death, a CentOS
installation this time. So the problem isn’t limited to Suse.
I guess it probably occurs on all systems using RPM. Fortunately
now I know how to fix it when it hits.

Still no idea how to prevent it in the first place, though.


Tilman Schmidt
Phoenix Software GmbH
Bonn, Germany