portupgrade eine Abhängigkeit beibringen

fraenki

Active Member
Hallo zusammen,

ich habe mir die (spärlichen) Dokus zu portupgrade schon durchgelesen, aber bin auf noch keine Lösung gestossen. Vielleicht hatte hier schon jemand ein ähnliches Problem oder bemerkt einen Fehler, den ich selbst noch nicht bemerkt habe :)

PROBLEM
================
Auf meinem FreeBSD 7.0 System habe ich Apache 2.2 und PHP5 aus den Ports installiert. Zusätzlich eine Vielzahl von PHP-Modulen, unter anderem auch den eAccelerator (www/eaccelerator). Die Ports aktualisiere ich mit portupgrade. Nun habe ich beobachtet, dass bei jedem(?) Update von PHP auf eine neue Minor-Version (z.B. 5.2.4-->5.2.5) der eAccelerator nicht neugebaut wird.

AUSWIRKUNG
================
Das o.g. bewirkt jetzt, dass eAccelerator für eine falsche PHP-Version kompiliert wurde, wodurch der Apache seinen Dienst verweigert (oder zumindest das eAccelerator-Modul nicht lädt):

Code:
PHP Warning:  [eAccelerator] This build of "eAccelerator" was compiled for PHP version 5.2.4. Rebuild it for your PHP version (5.2.5) or download precompiled binaries.\n in Unknown on line 0
PHP Fatal error:  Unable to start eAccelerator module in Unknown on line 0

LÖSUNG
================
Die beste Lösung, die mir bisher eingefallen ist, bereitet mir Bauchschmerzen. Und zwar würde ich in die pkgtools.conf in etwa sowas eintragen:

Code:
  AFTERINSTALL = {
  'lang/php5-extensions'         =>        sprintf('portupgrade -f www/eaccelerator'),
  }

Abgesehen davon, dass ich gerade nicht weiss, ob zwei Instanzen von portupgrade parallel laufen können/dürfen, ist das doch sehr unschön. Kaputt geht dabei wahrscheinlich nichts, weil der erste portupgrade ja auf den AFTERINSTALL-Prozess wartet, während der zweite läuft, aber das ist doch Frickelei ;-)

Hat jemand eine Meinung dazu? ;-)


Ciao
- fraenki
 
aus man portupgrade
-r
--recursive
Act on all those packages depending on the given packages as well.
-R
--upward-recursive
Act on all those packages required by the given packages as well. (When specified with

Ich würds mal mit portupgrade -r php5 probieren.

mousaka
 
Das Problem ist, dass portupgrade nur die nicht aktuellen Ports neu baut, d.h. wenn der eAccelerator nicht mit php5 eine neue Version erhält, dann macht portupgrade nichts. Auch wenn es eine Abhängigkeit von php5 sein sollte.
Mit dem Schalter -r schaut portupgrade auch nur nach alten Ports. Außerdem bringt ein -r nur etwas, wenn man -a nicht angibt (bei -a werden ja eh schon alle alten Ports neu gebaut, also auch die, die mit -r zusätzlich erfasst werden).

Was anderes als deine Lösung fällt mir im Moment auch nicht ein und 2 Portupgrade Prozesse habe ich bei mir auch hin und wieder (sogar parallel) am laufen und es is bis jetzt zumindest noch nie was passiert.
 
Mit dem Schalter -r schaut portupgrade auch nur nach alten Ports.
Habe das bis jetzt immer anders verstanden. :eek:

Ein portupgrade -rf php5 müsste aber nach meinem Verständnis jeder abhängige Port neu bauen, auch wenn bereits die aktuelle Version installiert ist.

mousaka
 
Eine Möglichkeit wäre noch, mit dem zusätzlichen Schalter -f das Bauen der Ports durch portupgrade zu erzwingen. Bei ein paar installierten Ports geht es ja noch, aber wenn es viele sind, artet das dann in einer Compile-Orgie aus.

Gruß c.
 
Habe das bis jetzt immer anders verstanden. :eek:

Offensichtlich hast du das in der Tat falsch verstanden ;)

Ein portupgrade -rf php5 müsste aber nach meinem Verständnis jeder abhängige Port neu bauen, auch wenn bereits die aktuelle Version installiert ist.

Das ist absolut korrekt. Allerdings wird dann wirklich ALLES neu gebaut, was php5 als Abhängigkeit hat. Dies sollte aber so schlimm nicht sein, denn somit werden eben alle Ports entsprechend angepasst. Eine etwas unelegante Lösung wäre noch, dass man nachdem php5 aktualisiert wurde, man schlicht

Code:
# portupgrade -f eaccelerator

ausführt. Das sollte kein so großer Aufwand sein und führt definitiv zum Erfolg.
 
Zurück
Oben