HowTo: Ports nach dem Update auf RELENG_7 neu bauen

Kamikaze

Warrior of Sunlight
Staff member
Da die Frage immer wieder auftaucht, mache ich hier mal ein kurzes HowTo, wie man die Ports sauber neu baut ohne dabei unnötig viel neu zu bauen.

Vorausgesetzt werden die Installation von ports-mgmt/portupgrade oder ports-mgmt/portmaster und sysutils/bsdadminscripts.

Als erstes muss compat6x installiert werden:
Portupgrade Nutzer:
Code:
# portinstall misc/compat6x
Portmaster Nutzer:
Code:
# portmaster misc/compat6x

Nun muss das System von alten Libraries bereinigt werden. Dank der Installation von compat6x sollte alles trotzdem weiterfunktionieren. Egal ob mit freebsd-update oder per selbst bauen aktualisiert wurde, dafür werden die Sourcen in /usr/src benötigt. Für freebsd-update haben die richtigen Sourcen das RELENG_7_0 Tag. Im Wiki gibt es ein csup-HowTo, das erklärt wie die Sourcen beschafft werden.

Code:
# cd /usr/src
# yes | make -B delete-old
# yes | make -B delete-old-libs

Nun geht es ans eigentliche Updaten. Dazu werden mit pkg_libchk alle Pakete ermittelt, die direkt mit Compat-Libraries verlinkt oder sonst wie nicht in Ordnung sind. OpenOffice und JDKs müssen hier ausgespart werden, da sie immer gegen nicht existierende Libraries linken. Sie sollten am Schluss manuell einmal aktualisiert werden.

Für portupgrade Nutzer:
Code:
# pkg_libchk -qo | grep -vE 'jdk|openoffice' | xargs -o portupgrade -fu

Für portmaster Nutzer:
Code:
# pkg_libchk -qo | grep -vE 'jdk|openoffice' | xargs -o portmaster -D

Sollte das Bauen eines Ports scheitern gilt es das Problem zu beheben und den Befehl noch einmal aufzurufen.

Der pkg_libchk Durchlauf dauert leider seine Zeit, aber er spart eben auch in der Regel das Neubauen einiger 100 Ports.

Natürlich kann der portupgrade-Befehl um den Parameter -P erweitert werden um, wenn möglich, fertige Pakete zu verwenden.
 
Last edited:
Ich frage mich gerade, ob etwas dagegen spricht das System in einer chroot-Umgebung zu aktualisieren...
 
Hast du dann nicht bloß eine chroot-Umgebung aktualisiert?

Ja.
Ich hab auf allen Maschinen zwei Systempartitionen. Falls ein Update was zerschiessen sollte, wird einfach die andere gebootet. Ist alles in Ordnung, werden sie mit dump | restore abgeglichen. Es ist also auch möglich die zweite, gerade nicht gebootete Partition irgendwo hin zu mounten, devfs und procfs da reinzumounten und per chroot da rein zu gehen, um Arbeiten vorzunehmen. Danach muss nur die Partition gebootet werden, um die Änderungen zu haben.

Die Strategie wende ich schon seit einigen Jahren an und sie hat mir schon eine Menge Ärger erspart. Sachen wie das xorg-Update lassen sich so recht entspannt durchführen.

[Edit] Ein Systemupgrade auf eine neue Version hab ich so noch nie versucht. Eben wegen der Systemcalls....
 
Last edited:
Ich denke das sollte gehen. Du kannst mit DESTDIR das installkerenl und installworld auf ein gemountetes System umbiegen. Mergemaster kannst du mit dem -D Parameter dazu bewegen mitzuspielen.

Ob es dann auch hinhaut die Ports in dieser Umgebung neu zu bauen, kann ich aber nicht sagen. Das stelle ich mir problematisch vor. Mit Paketen, zum Beispiel aus einer auf einem RELENG_7 laufenden Tinderbox, sollte das ganze machbar sein.
 
Ich denke das sollte gehen. Du kannst mit DESTDIR das installkerenl und installworld auf ein gemountetes System umbiegen. Mergemaster kannst du mit dem -D Parameter dazu bewegen mitzuspielen.
Jo, bis dahin ist klar. Auf die Art und Weise aktualisiere ich hier alle Jails und Kisten, die sonst noch hier rumlungern.
Ob es dann auch hinhaut die Ports in dieser Umgebung neu zu bauen, kann ich aber nicht sagen. Das stelle ich mir problematisch vor. Mit Paketen, zum Beispiel aus einer auf einem RELENG_7 laufenden Tinderbox, sollte das ganze machbar sein.

Auch das ist klar. Die Frage ist was passiert, wenn der gebootete Kern ein 6er ist...
Ob ein Versuch den Aufwand wert ist, ist allerdings die Frage. Wenns von 6->7 klappt, heisst das noch lange nicht, dass es beim nächsten Mal von 7->8 klappt...
 
Ich denke wenn der gebootete Kern ein 6er ist, wird es Ärger mit der 7er Umgebung geben.
 
Back
Top