make update mit portsnap

Kamikaze

Warrior of Sunlight
Teammitglied
Ich habe mir angewöhnt mit

# cd /usr/src
# make update

sowohl den Source Tree, wie auch die Ports in einem Rutsch aktuell zu halten, bzw von /usr/ports aus mit make update die ports zu aktualisieren. Bisher lief das ganze mit cvsup, das ich natürlich immer noch für den Source Tree verwende, aber die Ports update ich inzwischen mit

# portsnap fetch update

das geht nach einem einmaligen

# portsnap fetch extract

deutlich schneller als mit cvsup. Außerdem erspart man sich damit ein make fetchindex.

Da ich auf mein make update trotzdem nicht verzichten will habe ich natürlich auch dafür einen weg gefunden.

Die auch im wiki propagierten Zeilen in der /etc/make.conf :
Code:
SUP_UPDATE=		yes
DOC_LANG=		en_US.ISO8859-1
SUP=			/usr/local/bin/cvsup
SUPFLAGS=		-E -g -L 2 -z
SUPHOST=		cvsup4.de.freebsd.org
SUPFILE=		/usr/local/etc/cvsup/sources
PORTSSUPFILE=		/usr/local/etc/cvsup/ports
#DOCSUPFILE=		/usr/local/etc/cvsup/doc
kann man so verändern das make update für die Ports portsnap verwendet :
Code:
SUP_UPDATE=		yes
SUP=			eval
SUPFLAGS=
SUPFILE=		"/usr/local/bin/cvsup -h cvsup4.de.freebsd.org /usr/local/etc/cvsup/sources"
PORTSSUPFILE=		"/usr/sbin/portsnap fetch update"
#DOCSUPFILE=		"/usr/local/bin/cvsup -h cvsup4.de.freebsd.org /usr/local/etc/cvsup/doc"

Der Aufruf make update in /usr/src ruft einfach folgendes auf:
$SUP -h $SUPHOST $SUPFLAGS $SUPFILE
$SUP -h $SUPHOST $SUPFLAGS $PORTSUPFILE

Der Trick ist nun mit
SUP= eval
die Festlegung auf ein einzelnes Programm zu umgehen. Eval ist ein Shell-Builtin das eine Zeichenkette als Befehl auswertet, so als würde man sie per hand in der shell eintippen unt Enter drücken.

Da eval mit dem Parameter -h nichts anfangen kann darf SUPHOST nicht gesetzt sein. SUPFLAGS enthält standardmäßig "-g -L 2 -P -" womit eval natürlich auch nichts anfangen kann. Deshalb muss man die Variable zwar definieren, aber vollkommen leer lassen. Als SUPFILE braucht man dann nur noch den aufruf von cvsup und portsnap einzutragen.
 
Wow, coole Idee. Danke!

Fein wäre es, wenn du diesen Tipp auch ins wiki eintragen könntest. Vielleicht kennst du dich ja sogar soweit mit Makefiles aus, dass du nen Patch schreiben kannst, mit dem portsnap richtig integriert wird...
 
Nein bitte nicht. Trage bitte einfach
PORTSNAP_UPDATE=yes
in /etc/make.conf ein. Der entsprechende Code existiert bereits in /usr/ports/Makefile. Damit "brichst" du auch nicht das 'make update' in /usr/src.
 
Ich hätte sowas in /usr/ports/UPDATING erwartet. So würde man vermeiden das Menschen wie ich Lösungen zu gelösten Problemen suchen. :belehren:

Jedenfalls, danke für den Hinweis.
 
Zurück
Oben