Pakete aktualisieren mit Portupgrade

Lixos

Well-Known Member
Ich habe nun den Schritt gewagt und mir das aktuelle Release von FreeBSD installiert. Um recht schnell ein nutzbares System zu bekommen, habe ich mich fuer Paketinstallationen entschieden.

Bisher habe ich Xorg, WMII, Opera und Portaudit installiert.
Wenn ich nun mit

portupgrade -PPai

meine Pakete upgraden moechte, bekomme ich nicht die aktuelle Version, wie sie im Ports-Tree enthalten ist (womit ja portupgrade abgleicht)

Waere es nun sinnvoll auf Ports umzusteigen und das System nochmal neu aufzusetzen ... oder sollte ich vielleicht einen anderen Server fuer das Update waehlen?

Falls ich auf Ports umsteige... worauf gilt es denn zu achten, wenn ich solche Abfragen fuer die Flags bekomme... und gibt es ne Moeglichkeit immer die Standardoptionen zu waehlen?

Danke fuer Eure Hilfe...
 
Ist dein Portstree denn auch aktuell? Für die halbautomatische Installation gibt's mehrere Ansätze ;)

Stichworte zur Suche: portsnap, portmaster.
 
Hallo Zuglufttier :) !

Ich habe mich schon ein wenig belesen.
Mein Ports-Tree ist aktuell. Diesen habe ich über Portsnap vorher aktualisiert.
Soweit ich mich richtig belesen habe, kann man entweder Portupgrade oder aber Portmaster verwenden.

Das Problem liegt hier darin, dass leider nicht alle Pakete auf meinem gewählten Update-Server vorhanden sind und sie somit nicht auf die gleiche Version wie im Ports-Tree aktualisiert werden können.

Hast du oder Jemand Erfahrung mit der Handhabung von Paketen... also spezieller Updateserver, wo die gängigsten Pakete drauf sind... ?
Dann wüßte ich auch gern wo ich den Update-Server für Pakete einstelle.
Greift dabei Portupgrade auch auf die Variable PACKAGESITE zu ?

Falls ich damit leben müsste, dass die Pakete nunmal nicht so supported und aktualisiert werden wie die Ports, würde ich auf Ports umsteigen...
 
/usr/local/etc/uma.conf
/usr/local/etc/uma.conf.sample
und dazu UMA(1)

/usr/local/etc/pkgtools.conf
vielleicht /usr/local/etc/pkgtools.conf.sample
und dazu PKGTOOLS.CONF(5)

vielleicht noch ENVIRON(7)

Du kannst also die Variablen in einer der zugehörigen .conf Dateien bestimmen und du kannst in der shell-conf Datei welche in deinem Environment bestimmen. Die kannst du dir mit printenv ansehen und du kannst sie auch direkt mit setenv setzen, doch dann gelten sie nur für die aktuelle Sitzung. Für die shell kannst du sie global setzen, (für die csh etwa in der /etc/csh.cshrc, für bash in der /etc/profile) und/oder du kannst sie in der jeweiligen Datei deines Homeverzeichnisses setzen, also pro User (zb: ~/.cshrc).
setenv PACKAGESITE ftp://ftp.freebsd.ch/pub/FreeBSD/....
etwa oder
setenv PKG_SITES ftp://ftp.freebsd.ch/pub/FreeBSD/....
Setzen solche Variablen. PKG_SITES lässt schon ahnen: da können mehrere Seiten stehen.
Ob es da einen Königsweg gibt, weiß ich nicht.

Alternativ, wenn du nur bei Paketen bleiben möchtest, kannst du mit pkg_add oder pkg_upgrade arbeiten.
pkg_add ist auf deinem System schon vorhanden, pkg_upgrade kommt mit sysutils/bsdadminscripts.
Bei pkg_add kannst du mit der Option -r entweder die gesetzten Variablen nutzen, oder direkt einen Pfad zu deinem Paket angeben.
pkg_upgrade finde ich sehr empfehlenswert, weil es auf viele Details achtet und ich habe damit schon ein komplettes System aufgesetzt, also (fast) alles außer dem Basis-System damit aus Paketen installiert, ohne jeglichen ports-tree auf dem System. Die man-page dazu ist auch gut und verständlich.
Bei beiden (pkg_add und pkg_upgrade) habe ich schon so gearbeitet, dass ich eine ganze Liste an gewünschten Paketen als Textfile übergeben habe (mittels xargs) und so einmal zum Beispiel ein Netbook vollkommen in einer Sitzung mit SW bestückt hatte (bis auf wenige Dinge, die ich da noch manuell erledigen musste). Ich fand das hilfreich, weil ich dann den Umfang an Paketen aus einem anderen System übertragen konnte und das Risiko, dass ich etwas vergesse, das ich dann unbedingt brauche, wenn gerade kein Internet in der Nähe ist, minimieren konnte. Naja, es hatte jedenfalls geklappt.

Ich sehe das mit portmaster vs portupgrade nicht so eng.
portupgrade pflegt eine Datenbank, doch die bedarf eh manchmal eines pflegenden Eingriffs. Natürlich, wenn ich vollkommen willkürlich hin und her mal portupgrade und dann wieder portmaster nutze, ist das sehr ungeschickt.
Allerdings, nutze ich beide.
portmaster -n -D --no-confirm -a lasse ich seit einiger Zeit einem portupgrade -ak voraus gehen.
Das bedeutet, ich nehme zwar portupgrade weiterhin (aus purer Gewohnheit), doch die Konfigurationen gehe ich zuvor mit portmaster durch. Der sammelt die nämlich und lässt die erst abarbeiten. portupgrade hingegen macht weiter, auch, wenn eine Installation fehl schlägt. Am Ende erhalte ich einen Report und kann mich der Fehler dann widmen, aber zunächst läuft der Hauptteil der Arbeit ohne weitere Eingriffe ab. Das ist mir lieb, denn mein Internet ist nicht so schnell und so ein Update kann schon mal Tage dauern.

Das geht mit Paketen halt sehr viel schneller.
Mit Paketen hast du nie die aktuellsten Versionen, die hinken immer hinterher. Das bedeutet, dein portstree stimmt nie mit den Versionen der Pakete überein. Es gibt meines Wissens nach auch keine Super-Paket-Sites, die besser wären oder vollständiger. Wenigstens die Haupt-Mirrors dürften sich da ziemlich gleich sein.
Für mich ist es nicht immer wichtig, die aktuellsten Versionen zu benutzen.
Bei den Installationen, wo ich das probierte, kam ich mit Paketen gut zu recht.
Wieder wäre es nicht sehr gut, viel zu mischen. Wofür man sich entscheidet, das sollte in der Hauptsache beibehalten werden.
 
Schau nochmal ins Handbuch und lies ein bisschen mehr zu den Unterschieden zwischen Packages und Ports.

Ganz knapp: Du brauchst keinen speziellen Update-Server, die Daten sind alle in den jeweiligen Ports hinterlegt. Mit portupgrade bzw. portmaster kannst du die Ports installieren und verwalten.

Deine ehemals installierten Packages werden durch die aktuellen Versionen aus den Ports im Normalfall ersetzt.

PS: Ich nehme eigentlich nur Ports, die dauern zwar ziemlich lange zum installieren aber die Versionen sind aktuell und ich kann auch noch so einiges bei Bedarf anpassen.
 
Vielen Dank für Eure Hilfe :) ...
Ich habe nun meinen Fehler gefunden. Er lag in der Pfadangabe der Variablen PACKAGESITE.
Es sind nun alle Pakete auf dem gleichen Stand wie im Ports-Tree.
Vorerst werde ich bei der Verwendung von Paketen bleiben. Falls ich dann mal Lust und viel Zeit habe, kann ich ja dann mal auf die Ports umsteigen... und mich dann mehr mit den Details beschäftigen :) ...


Mein Update-Vorgang bisher:

1. Systemupdate:

freebsd-update fetch
freebsd-update install


2. Paketupdate:

1. portaudit -Fda

2. portsnap -update

3. pkgdb -F

4. portupgrade -PPa
 
portsnap fetch update erneuert dir deinen Portstree.
Den brauchst du nicht, wenn du nur Pakete verwendest.
Wenn du genug Platz hast und diese Updaterei nicht zu viel ist, kannst du das natürlich so machen.
pkg_upgrade zum Beispiel kann aber auch auf den INDEX direkt auf deiner Quelle schauen (und lädt diesen dann bevor es loslegt (falls nötig) herunter).
 
Vielleicht steige ich ja auf das pkg_upgrade um. :) ...

Vielleicht täusche ich mich, aber portsnap brauche ich meiner Ansicht schon.
Ich verwende zwar Pakete, aber die Versionen gleicht portupgrade erstmal mit dem Port-Tree ab. Deshalb sollte dieser aktuell sein. Zumindest hat mir portupgrade beim update gemeckert, als der Port-Tree noch nicht heruntergeladen war.
 
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.
 
Nachdem ich mir gestern noch mein System durch meinen Versuch das Flashplugin für Opera bzw. Firefox zu instalieren zerschossen habe, bin ich grad dabei das System nochmal neu aufzusetzen.
Dabei verwende ich nun auch die Ports. Allerdings kompiliere ich mit den Standardwerten (BATCH=yes).

Für deine ausführlichen Antworten danke ich dir pit234a ! :)
 
Wenn es nur um Pakete geht immer pkg_upgrade benutzen, das funktioniert viel besser als portupgrade dafür.
 
Zurück
Oben