ja, das glaube ich schon.
Schließlich heißt der Befehl auch
portupgrade
weißt du, nachdem ich die Einzelheiten dazu immer wieder gelesen hatte, habe ich mir dazu gewisse Verfahren angeeignet und weil erfolgreich, einfach beibehalten. ich könnte dir nun nicht sagen, wie portupgrade genau läuft, obwohl ich es mir nicht nur im Handbuch, im Wiki und sogar im Script angesehen habe und obwohl ich es dauernd benutze (weil ich aus den Ports bauen lasse und aktualisiere).
Also, die genauen Funktionen und Abläufe kann ich nicht hersagen.
Auf deinem lokalen Portstree stehen quasi die Bauanleitungen dafür, wie aus den Quellen der jeweilige Port gebaut werden kann. Dazu gibt es Listen mit Dateien und Prüfsummen dazu und die beinhalten natürlich auch die Versionen.
Die Programm-Versionen stehen zunächst mal in den jeweiligen Makefiles. Sie könnten also von dort geholt werden. Die Versions-Information aus dem Makefile zu einem fast beliebig gewählten Programm:
Code:
PORTNAME= treewm
PORTVERSION= 0.4.5
PORTREVISION= 5
Daneben gibt es dann die INDEX Files. In /usr/ports/INDEX-8, werden ebenfalls die Versionen und Abhängigkeiten der einzelnen Programme gelistet. Eine nicht zu lange Zeile aus diesem INDEX zeige ich mal, damit man sieht, was da alles drin steht. Wieviele Zeilen es da gibt?
Code:
pit@syo ~:-> wc -l /usr/ports/INDEX-8
22778 /usr/ports/INDEX-8
Nicht verwunderlich. Hier also die Zeile, die zu dem Makefile Auszug von eben passt:
Code:
treewm-0.4.5_5|/usr/ports/x11-wm/treewm|/usr/local|Window Manager that arranges the windows in a tree|/usr/ports/x11-wm/treewm/pkg-descr|ports@FreeBSD.org|x11-wm|gccmakedep-1.0.2 gettext-0.18.1.1 gmake-3.82 imake-1.0.4,1 kbproto-1.0.5 libICE-1.0.7,1 libSM-1.1.1_3,1 libX11-1.3.6,1 libXau-1.0.6 libXdmcp-1.0.3 libXext-1.1.2,1 libXmu-1.1.0,1 libXpm-3.5.7 libXt-1.0.9 libXxf86vm-1.1.0 libiconv-1.13.1_1 libpthread-stubs-0.3_3 libxcb-1.7 makedepend-1.0.3,1 perl-5.10.1_3 pkg-config-0.25_1 xextproto-7.1.1 xf86vidmodeproto-2.3 xorg-cf-files-1.0.3 xproto-7.0.16|kbproto-1.0.5 libICE-1.0.7,1 libSM-1.1.1_3,1 libX11-1.3.6,1 libXau-1.0.6 libXdmcp-1.0.3 libXext-1.1.2,1 libXmu-1.1.0,1 libXpm-3.5.7 libXt-1.0.9 libXxf86vm-1.1.0 libpthread-stubs-0.3_3 libxcb-1.7 pkg-config-0.25_1 xextproto-7.1.1 xf86vidmodeproto-2.3 xproto-7.0.16|http://treewm.sourceforge.net/|||
Am Ort der Pakete im Internet, etwa auf
ftp://ftp.freebsd.ch/pub/FreeBSD/ports/amd64/packages-stable, findet sich auch ein INDEX. Dieser "matched" (im günstigsten Fall) immer die Versionen und Abhängigkeiten der dort veröffentlichten Pakete.
pkg_upgrade kann nun genau nach diesem INDEX sehen, ihn sich abholen, Versionen und Abhängigkeiten herauslesen. Deshalb braucht es keinen eigentlichen Portstree. Es lädt einfach (falls nötig) den INDEX neu und arbeitet damit.
Wie das im einzelnen bei den anderen Anwendungen nun passiert, da bin ich überfragt. Ich weiß, dass manche erst in die Makefiles sehen und wenn sie dort nicht richtig informiert werden, dann in den INDEX-8 in /usr/ports. Ob das alle so machen, weiß ich aber nicht. Bei pkg_version etwa ist es so in der man page beschrieben, bei anderen wird dazu nichts gesagt. Bei portupgrade kann man ins Script schauen, aber ich weiß es im Augenblick nicht, wie es das macht, ebenfalls nicht bei portmaster.
Es kann also gut sein, dass du bei manchen dieser Tools die Makefiles brauchst und also einen komplett aktuellen Portstree, selbst dann, wenn du nur Pakete nutzen willst. Alles weitere aber, also die genaueren Bauanleitungen und Patches und so, was sich auch im Portstree findet, wird dabei dann nicht genommen und ausgewertet und natürlich auch keine eigenen Optionen für die jeweiligen Programme ausgewertet.
Es kann aber Programme geben, die nur den INDEX durchsuchen und nicht die Makefiles und bei pkg_upgrade weiß ich, dass es sich selbst den aktuellen INDEX besorgt und benutzt.
portupgrade benutzt diese Datenbank, die /var/db/pkg/pkgdb.db und um die ein wenig zu pflegen, gibt es pkgdb.
Die anderen Tools scheinen diese Datenbank meist nicht zu nutzen. Weder pkg_upgrade, noch pkg_add oder portmaster. Leider wird das nicht im Detail ausgeführt, es wird aber auch nicht eigens erwähnt, was vielleicht erwartet werden dürfte, wenn es denn so wäre, dass sie die pkgdb beeinflussen.
Nehmen wir an, dass dem so sei und nur portupgrade diese Datenbank beschreibt und nutzt (und hoffen, dass die Leute mit Ahnung uns aufklären).
Dann ist klar, dass jedes Tool, das die Datenbank nicht nutzt, sie vor allem nicht pflegt, portupgrade "hintergeht". portupgrade weiß beim nächsten mal nicht den aktuellen Stand der installierten Programme, weil es sich auf die pkgdb verlässt. Das bedeutet wiederum, dass jemand, der gelgentlich mal zeitweise das eine oder andere Tool nutzen möchte, besondere Sorgfalt darauf verwenden muss, manuell seine pkgdb auf dem Laufenden zu halten. Thats ist. Mehr nicht. Aber, das ist manchmal ein abendfüllendes Programm.
Warum sich nicht alle auf diese Datenbank stützen und ob das eher Vor- oder eher Nachteile hat, weiß ich nicht.
Es ist durchaus verwirrend und weil fast immer nur die Funktionen und Optionen der einzelnen Kommandos erklärt werden, aber fast nie die Zusammenhänge dargestellt sind, ist das alles für Laien wie mich nur schwer zu erfassen.
Solche Beiträge helfen dann ungemein, das, was ich für Wissen halte, auf die Probe zu stellen. Ich erkläre es mal so, wie ich es mir selbst erkläre und dann warten wir mal ab, wo was falsch ist.