Perl update Tipps 5.8 → 5.10

Kamikaze

Warrior of Sunlight
Teammitglied
/usr/ports/UPDATING sagte alle Abhängigkeiten neu bauen. Bei mir wären das über 250 Pakete gewesen. Die meisten davon haben nur irgendwelche indirekten Abhängigkeiten über 12 Ecken auf Perl. Das heißt es gibt gar keinen Grund die neu zu bauen.

Hier ist mein Alternativansatz.

Vorsicht, ich habe noch keine Regressionstests gemacht. Kann sein, dass man das ein oder andere nachher doch noch neu bauen muss. Ich halte das aber für unwahrscheinlich.

Code:
# portmaster -Do lang/perl5.10 lang/perl5.8
# find /usr/local/lib/perl5/5.8.9 /usr/local/lib/perl5/site_perl/5.8.9/ -type f -exec pkg_info -qW \{} \; | sort -u > ~/perlupdate
# xargs -o < ~/perlupdate portmaster -D

Das find dauert eine ganze Weile. Insgesamt habe ich so lediglich 26 Pakete (statt 250) neu gebaut.

Dann noch nachsehen was so an Müll geblieben ist:
Code:
# find /usr/local/lib/perl5/5.8.9 /usr/local/lib/perl5/site_perl/5.8.9

Bei mir waren das bis auf eine whatis Datei lediglich leere Verzeichnisse. Also weg mit dem Schrott:
Code:
# rm -rf /usr/local/lib/perl5/5.8.9 /usr/local/lib/perl5/site_perl/5.8.9
 
Kleines Update

pkg_libchk hat mir noch 1 Programm geliefert, dass seine libperl.so vermisst.
 
Irgendwie mag mich perl nicht. Sowohl portupgrade als auch portmaster zicken hier (quasi mit der gleichen Fehlermeldung; edit: auf verschiedenen Rechnern). Nachfolgend die bei portmaster:
portmaster -o lang/perl5.10 lang/perl5.8

===>>> Currently installed version: perl-5.8.9_3
===>>> Port directory: /usr/ports/lang/perl5.10

===>>> Gathering distinfo list for installed ports

===>>> Launching 'make checksum' for lang/perl5.10 in background
===>>> Gathering dependency list for lang/perl5.10 from ports
===>>> No dependencies for lang/perl5.10

===>>> Starting build for lang/perl5.10 <<<===

===>>> All dependencies are up to date

===> Cleaning for perl-5.10.1


===> perl-5.10.1 conflicts with installed package(s):
perl-5.8.9_3

They install files into the same place.
Please remove them first with pkg_delete(1).
*** Error code 1

Stop in /usr/ports/lang/perl5.10.
*** Error code 1

Stop in /usr/ports/lang/perl5.10.

===>>> make failed for lang/perl5.10
===>>> Aborting update

Ich kann mir nicht vorstellen, dass es an -D liegt, da es ja nur die distfiles nicht löscht. Warum erhalte ich das auf jedem Rechner? Sollte /usr/ports/UPDATING nicht die "Anleitung" liefern, mit der ich aktualisieren kann?!
 
Zuletzt bearbeitet:
Oh, glaub' mir. Das liegt nicht an portupgrade und portmaster, das ist eine Änderung in den Ports. Folgende Gründe:

- Mit dem alten verhalten hat das System Sourcen gezogen und gebaut die dann gar nicht installiert werden konnten.
- Einige Ports bauen nicht wenn ihre alten Versionen noch installiert sind (kde3, qt33, fltk z.B.).

In meinen Augen ist das alles Pferdemist. Grund 1 ist mir schlicht egal, Bandbreite und CPU-Zeit sind billiger als meine Brain-Time.
Punkt 2 heißt für mich die Ports sind kaputt.
Wie auch immer miwi arbeitet anscheinend an einer Lösung die alle zufrieden stellt.

Bis dahin kommentiere ich die CONFLICTS Zeilen im Makefile aus.

Diskussion auf questions@:
http://docs.freebsd.org/cgi/mid.cgi?4B509B51.3060809
Diskussion auf ports@:
http://docs.freebsd.org/cgi/mid.cgi?4B6D382B.7080405
Der PR der alles angestoßen hat:
http://www.freebsd.org/cgi/query-pr.cgi?pr=137855
 
Oh, glaub' mir. Das liegt nicht an portupgrade und portmaster, das ist eine Änderung in den Ports. Folgende Gründe:

- Mit dem alten verhalten hat das System Sourcen gezogen und gebaut die dann gar nicht installiert werden konnten.
- Einige Ports bauen nicht wenn ihre alten Versionen noch installiert sind (kde3, qt33, fltk z.B.).

In meinen Augen ist das alles Pferdemist. Grund 1 ist mir schlicht egal, Bandbreite und CPU-Zeit sind billiger als meine Brain-Time.
Punkt 2 heißt für mich die Ports sind kaputt.
Wie auch immer miwi arbeitet anscheinend an einer Lösung die alle zufrieden stellt.

Bis dahin kommentiere ich die CONFLICTS Zeilen im Makefile aus.

Diskussion auf questions@:
http://docs.freebsd.org/cgi/mid.cgi?4B509B51.3060809
Diskussion auf ports@:
http://docs.freebsd.org/cgi/mid.cgi?4B6D382B.7080405
Der PR der alles angestoßen hat:
http://www.freebsd.org/cgi/query-pr.cgi?pr=137855

ich finde du sollte langsam aber sich mal aufhoeren staendig schlechte luft zu machen. im ernst, von der logik ist der CONFLICT check vollkommen an der richtigen stelle. es ist schon etwas nervig wenn man nen grosses portupgrade
hat und mitten bei der install phase eine conflict meldung bekommt. abgesehen davon habe ich dir bereits erklaert warum der check dort ist, es ist kein frage dort besteht defintiv nachbesserungs bedarf welche auch defintiv nach 7.3 kommen wird...
 
Also jetzt hab ich grad'n großes ? überm Kopf.
Hab das upgraden von Perl wegen der Neubau-Orgie bis jetzt rausgezögert, aber weil ich was installieren willl, was angeblich Perl braucht, hab ich mich jetzt doch mal drangemacht.
Nunja, die Vorgehensweise wie in UPDATING beschrieben ging nich. Da kam gleich die Meldung von wegen ' install files in the same places' oder so und ich soll erst pkg_delete ausführen. Also hab ich nich lang rumprobiert und die 5.8 vernichtet. Danach Perl 5.10 installiert, was ohne Probleme, ging und dann pkgdb -F ausgeführt. Das hat ne Weile gedauert und es wurden dabei sämtliche Perl-bezogenen Abhängigkeiten deletet.
Tja und nun kommts: nach nem Neustart ging alles einwandfrei und meines Gefühls nach
starten alle Progs jetzt auch noch schneller, aber ein pkg_info -R perl-5.10.1 liefert ne leere Liste. Auch wenn ich pkg_info -r auf verschiedene Progs loslass, die angeblich Perl brauchen
taucht in der Ausgabe kein Perl mehr auf. Warum soll ich alles neubauen, obwohl die Maschine jetzt (subjektiv) schneller läuft? Wozu überhaupt Perl?
Verzeiht mein Unverständniss, ich bin kein Programmierer :o
Gruß...
 
Wenn du die Abhängigkeiten wiederhaben möchtest, mach doch mal n
Code:
pkgdb -L

Aber vorher Kaffee kochen, kann ne Weile dauern :)
 
Danke starbreaker, aber meine Frage war ja grad wozu ich dieses Perlgebamsel überhaupt brauche. Ich mein, wenn Perl nur zum kompilieren der Ports benötigt wird kann man sich das Neubauen aller ehemals von Perl abhängigen Ports doch auch sparen, oder ? Und wer brauch schon überflüssige Abhängigkeiten.
 
Danke starbreaker, aber meine Frage war ja grad wozu ich dieses Perlgebamsel überhaupt brauche. Ich mein, wenn Perl nur zum kompilieren der Ports benötigt wird kann man sich das Neubauen aller ehemals von Perl abhängigen Ports doch auch sparen, oder ? Und wer brauch schon überflüssige Abhängigkeiten.

Starte mal dein System neu und sag mir ob noch alles tut :)
 
Tut alles :rolleyes:
Ich habs mittlerweile schon mehrmals neu gestartet (zwischendurch auch mal geschlafen) und noch was über Ports installiert aber wie schon erwähnt:
Tja und nun kommts: nach nem Neustart ging alles einwandfrei
Also jedenfalls hab ich bisher noch nix negatives festgestellt.
Gruß ... ich ...
 
Ich habe das Updaten auf perl 5.10 genau so gemacht und erlebt wie Gulp. Bei mir geht auch Alles, auch nach einem reboot. (FreeBSD 7.2 i386 mit KDE3)
 
Perl update Tipps 5.10 → 5.12

So, jetzt da für das Threading-Problem im 5.12er Port eine Lösung in Aussicht ist (http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/148648), kann man das Update auf 5.12 nach dem gleichen Schema machen.

Code:
# portmaster -Do lang/perl5.12 lang/perl5.10
# find /usr/local/lib/perl5/5.10.1 /usr/local/lib/perl5/site_perl/5.10.1/ -type f -exec pkg_info -qW \{} \; | sort -u > ~/perlupdate
# xargs -o < ~/perlupdate portmaster -D

Naja, der Drill ist ja inzwischen bekannt, nochmal alles mit pkg_libchk prüfen und danach die Reste wegräumen.
 
Der "normale" Bau von perl5.12 funktioniert. (Getestet)
Buggy war wohl nur der Bau von perl-threaded.
pr148648 löst aber , zumindest hier bei perl-threaded (WITH_THREADS=yes, i386, FBSD 7 Stable) , das Problem nicht. Siehe:
Code:
LD_LIBRARY_PATH=/misc/ports/lang/perl5.12/work/perl-5.12.1  ./miniperl -w -Ilib -MExporter -e '<?>' || make minitest
Segmentation fault (core dumped)
LD_LIBRARY_PATH=/misc/ports/lang/perl5.12/work/perl-5.12.1  ./miniperl -Ilib make_patchnum.pl
Segmentation fault (core dumped)
*** Error code 139
1 error
You may see some irrelevant test failures if you have been unable
to build lib/Config.pm, or the Unicode data files.
cd t && (rm -f perl; /bin/ln -s ../miniperl perl)  && LD_LIBRARY_PATH=/misc/ports/lang/perl5.12/work/perl-5.12.1  ./perl TEST -minitest base/*.t comp/*.t cmd/*.t run/*.t io/*.t re/*.t op/*.t uni/*.t </dev/tty
Segmentation fault (core dumped)
LD_LIBRARY_PATH=/misc/ports/lang/perl5.12/work/perl-5.12.1  ./miniperl -Ilib make_patchnum.pl
LD_LIBRARY_PATH=/misc/ports/lang/perl5.12/work/perl-5.12.1  ./miniperl -Ilib autodoc.pl
Segmentation fault (core dumped)
*** Error code 139
Segmentation fault (core dumped)
*** Error code 139
2 errors
*** Error code 1

Stop in /misc/ports/lang/perl5.12.
*** Error code 1

Baut denn noch einer perl mit -pthreads? Und funktioniert es bei euch ? Wenn ja, ist der Fehler wohl ca 80 cm vor dem Monitor ....
 
Zuletzt bearbeitet:
Bei mir hat der Patch in dem PR funktioniert. Wahrscheinlich hast du vergessen make clean abzufeuern.
 
Ulkig. Ging nicht, trotz make clean.
Allerdings hat der Patch in der PR hier nicht richtig funktioniert, sei es wegen was weiss ich.
Letztendlich sollte ja files/patch-freebsd.sh entsprechend korrigiert werden.
Diese wiederum soll, aber nur wenn perl-threaded compiliert wird, hints/freebsd.sh in den Zeilen :
Code:
 134             ldflags=" -Wl,-E "
 142        ldflags=" -Wl,-E "

zu

 134             ldflags="-pthread -Wl,-E "
 142        ldflags="-pthread -Wl,-E "
ändern.
Zeile 134 blieb aber unverändert.

Bitte teste dochmal ob die folgende patch-freebsd.sh die SO bei mir jetzt funktioiert, bei dir auch läuft.
Bin gespannt.
Sollte eigentlich egal sein ob das System i386 oder amd64 ist, oder FBSD 7-. Stable oder 8 - irgendwas !?

Code:
--- ./hints/freebsd.sh.orig     2010-05-07 15:34:10.000000000 +0200
+++ ./hints/freebsd.sh  2010-07-20 12:52:02.000000000 +0200
@@ -88,6 +88,8 @@
        esac
        libswanted=`echo $libswanted | sed 's/ malloc / /'`
        libswanted=`echo $libswanted | sed 's/ bind / /'`
+       libswanted=`echo $libswanted | sed 's/ dl / /'`
+       libswanted=`echo $libswanted | sed 's/ c / /'`
        # iconv gone in Perl 5.8.1, but if someone compiles 5.8.0 or earlier.
        libswanted=`echo $libswanted | sed 's/ iconv / /'`
        d_setregid='define'
@@ -102,6 +104,10 @@
                ;;
        esac
        libswanted=`echo $libswanted | sed 's/ malloc / /'`
+       libswanted=`echo $libswanted | sed 's/ bind / /'`
+       libswanted=`echo $libswanted | sed 's/ dl / /'`
+       libswanted=`echo $libswanted | sed 's/ iconv / /'`
+       libswanted=`echo $libswanted | sed 's/ c / /'`
        ;;
 esac
 
@@ -125,7 +131,7 @@
         else
             libpth="/usr/lib /usr/local/lib"
             glibpth="/usr/lib /usr/local/lib"
-            ldflags="-Wl,-E "
+            ldflags="%%PTHREAD_LIBS%% -Wl,-E "
             lddlflags="-shared "
         fi
         cccdlflags='-DPIC -fPIC'
@@ -133,7 +139,7 @@
 *)
        libpth="/usr/lib /usr/local/lib"
        glibpth="/usr/lib /usr/local/lib"
-       ldflags="-Wl,-E "
+       ldflags="%%PTHREAD_LIBS%% -Wl,-E "
         lddlflags="-shared "
         cccdlflags='-DPIC -fPIC'
        ;;
@@ -143,7 +149,7 @@
 0*|1*|2*|3*) ;;
 
 *)
-       ccflags="${ccflags} -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H"
+       ccflags="${ccflags}  -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H"
        if /usr/bin/file -L /usr/lib/libc.so | /usr/bin/grep -vq "not stripped" ; then
            usenm=false
        fi
@@ -190,7 +196,9 @@
 
 # This script UU/usethreads.cbu will get 'called-back' by Configure 
 # after it has prompted the user for whether to use threads.
-cat > UU/usethreads.cbu <<'EOCBU'
+## not quite - modern FreeBSD perl port is supposed to take care of that
+## we just add extra libraries and cflags nowadays
+cat > /dev/null <<'EOCBU'
 case "$usethreads" in
 $define|true|[yY]*)
         lc_r=`/sbin/ldconfig -r|grep ':-lc_r'|awk '{print $NF}'|sed -n '$p'`

Natürlich gibts auch noch einen Patch gegen den Patch( patch-freebsd.sh), wenns sein muss :) .
Aber bis dahin einfach als obiges als patch-freensd.sh in */ports/lang/perl5.12/files/ legen und make aufrufen.

Es scheint übrigens, als ob perl5.12 nur dann perl-threaded-5.12.1 kompiliert, wenn das in /var/db/ports/options auch mittels WITH_THREADS=true angegeben ist. In einer shell 'make DWITH_THREADS=true ' oder ähnliches aufzurufen hatte hier keinen Effekt.
 
Zuletzt bearbeitet:
Wie gesagt, bei mir hat der Patch funktioniert, sonst hätte ich den Post gar nicht geschrieben.

Vielleicht hast du einen Fehler beim herauskopieren des Patches gemacht. Du musst den halt aus dem RAW-PR kopieren und dann von jeder Zeile das erste (nur das erste!) Leerzeichen entfernen.
 
Ich glaube dir selbstverständlich, dass du den Post nach erfolgreichen Testen des Patches geschrieben hast.
Aber da wird dann der Hund in der Pfanne verrückt, wenn dennoch die korrekt geänderte ( s/^ //g ) rawprdiff nicht das tut was sie tun soll .

Weiter kompiliert perl dann trotz fehlerhaft gepatcher files/patch-freebsd.sh zu perl-threaded-5.12.1.

Ich habe dann meinen eigene diff für diese Datei eingespielt (der übrigens fast, aber halt nur fast, identisch mit der PRdiff ist). Diese eigene diff geht dann ohne Meckern, und perl kompiliert auch, rat mal wozu --> perl-threaded-5.12.1 !?! :confused:
Weiss der Henker, oder Herr Wall.

Even there's more than one way to do it, I need not necessarily to understand all of them :cool:

Fallls denn doch noch jemand ähnliche Probleme erfahren sollte, hier die bei mir fehlerfrei funktionierende patch-freebsd.sh.diff
Code:
--- patch-freebsd.sh    2010-07-19 17:38:28.000000000 +0200
+++ patch-freebsd.sh    2010-07-20 13:22:06.000000000 +0200
@@ -1,5 +1,5 @@
---- ./hints/freebsd.sh.orig 2010-05-07 14:34:10.000000000 +0100
-+++ ./hints/freebsd.sh 2010-07-16 21:43:38.000000000 +0100
+--- ./hints/freebsd.sh.orig    2010-05-07 15:34:10.000000000 +0200
++++ ./hints/freebsd.sh 2010-07-20 12:52:02.000000000 +0200
 @@ -88,6 +88,8 @@
        esac
        libswanted=`echo $libswanted | sed 's/ malloc / /'`
@@ -29,16 +29,25 @@
              lddlflags="-shared "
          fi
          cccdlflags='-DPIC -fPIC'
-@@ -136,7 +142,7 @@
+@@ -133,7 +139,7 @@
+ *)
+        libpth="/usr/lib /usr/local/lib"
+        glibpth="/usr/lib /usr/local/lib"
+-       ldflags="-Wl,-E "
++       ldflags="%%PTHREAD_LIBS%% -Wl,-E "
+         lddlflags="-shared "
+         cccdlflags='-DPIC -fPIC'
+        ;;
+@@ -143,7 +149,7 @@                                                                     
  0*|1*|2*|3*) ;;                                                                        
                                                                                            
  *)                                                                                         
 -      ccflags="${ccflags} -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H"                           
-+      ccflags="${ccflags} %%PTHREAD_CFLAGS%% -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H"        
++      ccflags="${ccflags}  -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H"                          
        if /usr/bin/file -L /usr/lib/libc.so | /usr/bin/grep -vq "not stripped" ; then       
            usenm=false                                                                      
        fi                                                                                   
-@@ -183,7 +189,9 @@                                                                         
+@@ -190,7 +196,9 @@                                                                     
                                                                                         
  # This script UU/usethreads.cbu will get 'called-back' by Configure
  # after it has prompted the user for whether to use threads.

Ohne erstes Leerzeichen entfernen zu müssen.

Wie dem auch sei, es geht und damit gut ;)

@kamikaze
nur interressehalber : kompiliert denn bei dir perl mit der patch-freebsd.sh von oben, post von 15:02 , korrekt zu perl-threaded ?
 
Zurück
Oben