perl-Upgrade unter FreeBSD

Ganz egal ob es sich um ein major upgrade handelt, also von perl-5.8 auf 5.10 oder 5.12 oder ein minor update, wie zum Beispiel 5.12.1 auf 5.12.2, eine solche Aktualisierung ist je nach Umfang der Installation immer mit Vorsicht vorzunehmen. Aber im Gegensatz zu den ganzen binary package weenies, kann man ueberhaupt nach Belieben updaten, wann und auf welche (major) Version man will.

Es gibt zwar ein Script namens perl-after-upgrade, aber das behandelt nur einen Teil der moeglichen Abhaengigkeiten.

In /usr/ports/UPDATING wird auch immer wieder vorgeschlagen, man moege einfach stur alles rebuilden, zum Beispiel mit portmaster perl-. Ich halte davon ueberhaupt nichts, denn erstens rebuildet es perl selbst noch ein mal (ja, das kann man umgehen), zweitens rebuildet es ports, die perl-after-upgrade bereits ordentlich behandelt hat, man verliert also Zeit und drittens "merkt" sich der Prozess nicht, was bereits erledigt wurde, um im Falle eines Abbruchs und Wiederaufnahme der Prozedur nicht von vorne anfangen zu muessen, was schon wieder enorm Zeit kosten kann.

Darum behelfe ich mir mit folgendem simplen Script, das ich direkt nach dem portupgrade von perl ausfuehre (ports-mgmt/portupgrade muss installiert sein, wegen pkg_which):

#!/bin/sh

perl-after-upgrade

OLDVERSION=5.12.1

find /usr/local/lib/perl5/${OLDVERSION} /usr/local/lib/perl5/site_perl/${OLDVERSION} | xargs pkg_which | sort -u | fgrep -v \? > /root/perl-${OLDVERSION}.ports

Das Ergebnis kann man dann direkt einem portupgrade -f oder portmaster zum Frass vorwerfen, also zum Beispiel: portmaster `cat /root/perl-5.12.1.ports`

Wenn man das Script danach noch einmal ausfuehrt, sollte die Ausgabedatei leer sein. Jetzt sollte man unbedingt in den alten perl-Verzeichnissen nach Files suchen, die man haendisch installiert hat, bei mir ist das zum Beispiel /usr/local/lib/perl5/site_perl/5.12.2/Mail/SpamAssassin/Plugin/ocrtext.pm, diese Datei muss man dann eben von Hand umkopieren. Wenn man sich sicher ist, alles erledigt zu haben, sollte man sich der Verzeichnisse der alten Version mit rm -rf entledigen, so sieht man auch gleich, dass hier ein "sauberes" Upgrade gemacht wurde.

Ein Problem erkennt obiges Script nicht: Binaries, die gegen libperl.so gelinkt sind und keine Files in /usr/local/lib/perl5 hinterlassen, werden nicht aktualisiert. Solche Probleme erkenne ich mit Hilfe von libchk. irc/epic5 ist zum Beispiel so ein Kandidat. Wer aber den Output von perl-after-upgrade genau liest, wird ebenfalls auf dieses Problem hingewiesen.



Trackbacks

    Keine Trackbacks

Kommentare

Ansicht der Kommentare: (Linear | Verschachtelt)

  1. Markus Stumpf schreibt:

    Danke sehr hilfreich!

    Noch ein Hinweis: man sollte auf binary packages verzichten. Habe eben einen Upgrade von 5.8.9 auf 5.14.1 versucht und hatte zwischendrin eine ganze Latte von 5.8.9 Paketen, die er versucht hat von lokalen packages zu reinstallieren und eine Latte von 5.10.1, die er sich von FreeBSD Server gezogen hat.

  2. knarf schreibt:

    Richtig, auf Binary Packages sollte man verzichten, ich verwende sie nur, um direkt nach der Installation ein lauffaehiges System zu haben, dazu gehoeren aber nur screen und portupgrade.


Kommentar schreiben


Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA