Update Verständnisfrage

Hallo,
ich beschäftige mich gerade mit dem Update-Mechmismus von FreeBSD. Ich komme selber von Gentoo, von daher gibt es noch ein paar Dinge, die mir noch nicht ganz klar sind oder ich einen Denkfehler hab.

Das Updaten funktioniert mittlerweile schon sehr gut (d.h., cvsup und dann portupdate -a). Wenn ich das richtig verstanden hab entspricht cvsup, portdb -Uu, portupdate -a so ungefähr den emerge sync, emerge -uD world von Gentoo.
Auf dem BSD-Rechner hab ich die meisten Programme über pkg_add -r installiert, wenn ich allerdings portupdate -a ausführe, läd er wieder Sourcen runter und kompiliert diese, gibt es eine Möglichkeit ein Update auszuführen, ohne das alle Sourcen neu kompiliert werden müssen, sondern einfach nur die schon kompilierten pkg-versionen aktualisiert werden (also bereits als Package runterladen und dann nur die alten Versionen installieren?)

Aber das kompilieren bin ich ja von Gentoo gewohnt ;-), es wäre aber trotzdem schön, wenn es auch anders gehen würde...

Jetzt kommt mein eigentliches Verständnisproblem!
Nachdem man bei Gentoo emerge -uD world aufgeführt hat kommt normalerweise
emerge depclean
revdep-rebuild
dispatch-conf
d.h. (für alle nicht Gentooler), alle nicht mehr benötigten Abhängigkeiten werden gelöscht, evtl falsch verlinkte Programme werden nur kompiliert und am Ende werden die geänderten Config-Dateien aktualisiert.
Dazu konnte ich leider noch nichts finden, wie das bei FreeBSD gehanabt wird, was passiert nach einem portupdate -a mit den nicht mehr benötigten Abhängigkeiten und wie kann man sicher stellen, dass die verlinkten Bibliotheken immer noch funktionieren?
Und was mich natürlich am aller meisten instessiert ist, was mit den Config-Dateien passiert. Ich geh mal nicht davon aus, dass sie überschrieben werden, ich vermute jetzt aber mal auch nicht, dass sie automatisch irgendwie gemergt werden, oder? Ich meine, woher weis ich, dass sich von der einen Version auf der anderen was in der Config-Datei geändert hat?

Ich wäre euch wirklich sehr dankbar, wenn ihr etwas Licht in mein Dunkel werden könntet! ;-)

cu
Christian
 
Ersteinmal kannst du natürlich auch Packete für das Upgrade herunterladen. Dies geht mit dem Switch -P. Also zieht dir ein
Code:
portupgrade -Pa
ein Packete. Nur wenn es keins gibt, baut er den Port selbst.

Jetzt aber zu dem eigentlichen Problem!
Ein portupgrade -a aktualisiert alle Packete, zu den es neue Versionen gibt. Dabei werden allerdings Dependencies nicht nicht beachtet. Besser ist ein portupgrade -ra. In diesem Fall baut er - wenn nötig - eventuelle Dependencies ebenfalls neu.
Wenn das Dependency-System innerhalb der Packetdatabase inkonsistent ist, erkennt portupgrade dies und sagt dir, dass du pkgdb -F ausführen musst. Nun kannst du alte Dependencies löschen, bzw. manuell neue angeben.
Es bietet sich auch der port sysutils/pkg_cutleaves an. Dieser findet Packete, die keine Dependencies zu anderen darstellen und fragt dich, ob er sie löschen soll. So kann man nicht mehr benötigte Programme finden und elemenieren.
Die Configs werden normalerweise NICHT geupdated. Sollten Probleme auftreten, musst du halt die entsprechenden Dotiles im Homeverzeichnis manuell löschen!
 
OOZE schrieb:
Ersteinmal kannst du natürlich auch Packete für das Upgrade herunterladen. Dies geht mit dem Switch -P.
Nur wenn es keins gibt, baut er den Port selbst.
Dafuer gibts ja -PP.
Ein portupgrade -a aktualisiert alle Packete, zu den es neue Versionen gibt. Dabei werden allerdings Dependencies nicht nicht beachtet.
Falsch. -a steht nunmal fuer all, impliziert also -rR
Die Configs werden normalerweise NICHT geupdated. Sollten Probleme auftreten, musst du halt die entsprechenden Dotiles im Homeverzeichnis manuell löschen!
In $HOME wird sowieso nichts veraendert. Die Config-Files werden ueberlicherweise als foo.cfg.dist aktualisiert. Dann kann man mit einem diff gegen das "veraltete" foo.cfg vergleichen, ob sich gross was geaendert hat.
 
kleinrechner schrieb:
Aber das kompilieren bin ich ja von Gentoo gewohnt ;-), es wäre aber trotzdem schön, wenn es auch anders gehen würde...
SCNR, aber vielleicht bist du ja von Gentoo auch gewohnt, dass es keine Manpages gibt. Portupgrade ist jedenfalls in portupgrade(1) ausreichend dokumentiert.
Dazu konnte ich leider noch nichts finden, wie das bei FreeBSD gehanabt wird, was passiert nach einem portupdate -a mit den nicht mehr benötigten Abhängigkeiten und wie kann man sicher stellen, dass die verlinkten Bibliotheken immer noch funktionieren?
Woher soll portupgrade riechen, dass du eine gewisse Anwendung nur als Abhaengigkeit installiert hast, und dass sie geloescht werden kann, wenn keine andere Anwendung sie mehr braucht? Mich wuerde echt interessieren, wie das bei Gentoo klappt.

Bei den Bibliotheken verhaelt es sich so, dass effektiv nur 'portupgrade -rf foo' supported wird. Alles andere ist purer Zufall. Es hat sich aber eingebuergert, bei groesseren shlib-bumps die Portrevisionen der davon betroffenen Ports ebenfalls zu erhoehen. Sie werden also doch neu gebaut/installiert.
Und was mich natürlich am aller meisten instessiert ist, was mit den Config-Dateien passiert. Ich geh mal nicht davon aus, dass sie überschrieben werden, ich vermute jetzt aber mal auch nicht, dass sie automatisch irgendwie gemergt werden, oder? Ich meine, woher weis ich, dass sich von der einen Version auf der anderen was in der Config-Datei geändert hat?
Siehe andere Antwort. Ueblicherweise installiert einr Port seine Config als /usr/local/etc/foo.conf.dist. Wenn du ihn in Betrieb nehmen willst, muss du das also nach foo.conf kopieren. Das foo.conf.dist wird normal ueberschrieben, danach leistet diff(1) den Rest.

hth
 
Zurück
Oben