Wow - 9 antworten, fast alle meckern am Poster rum, aber kennen die lösung nicht OO
Das ist voellig normal, hier sogar mehr als auf den Mailinglisten. Und Du kennst Die
korrekte Antwort offenbar auch nicht ;-)
(Und ob mein Antwort wirklich korrekt ist, wird sich zeigen)
Und vor allem hat niemand mal einen Blick auf die passenden Manpages geworfen (zugegeben: da ist auch nicht alles zu finden, siehe SUBDIRLIST weiter unten).
Also, sofern du vorhast auf dem einen PC die gleichen pakete zu installieren wie auf dem anderen, und du "Nur" die installierten pakete einfach ein 2. mal einsetzen möchtest, musst du vorm installiern mit pkg_add einfach die Variable " PKG_CACHE" setzen und den Pfad dort angeben wo die Pakete gespeichert werden müssen - mach ich z.B. so um nicht für mehrere Maschinen die gleichen Pakete mehrmals runterladen zu müssen.
Das will der OP aber so nicht, wenn ich ihn richtig verstanden habe. Ausserdem funktioniert das natuerlich nur, wenn auf dem PC mit der flotten Leitung noch nichts installiert ist; Packages, die schon aktuell installiert sind, werden natuerlich nicht noch einmal heruntergeladen und landen daher auch nicht in $PKG_CACHE. Und ausserdem kann es ja sein, dass man auf dem PC einen Port im Flavor foo, auf dem Laptop aber im Flavor bar haben moechte, was dann auch zu beliebiig unterschiedlichen Dependencies fuehren kann.
Die bittere Wahrheit steht in bsd.port.mk(5) und (zur Angabe der gewuenschten Flavors und Subpackages) packages-specs(7), und ein entscheidender Teil ist offenbar gar nicht in den Manpages dokumentiert.
Als erstes braucht man den zum installierten System passenenden Portstree (bitte nicht -current und -release miteinander verwursten). Dann braucht man eine Liste der passenden Ports. Letztere schreibt man Zeilenweise in eine Datei, und zwar in der in packages-specs(7) unter DEPENDENCIES angegeben Form (directory,[-multi],[flavor...]). Wenn man also z.B. unbedingt ghostscript im a4-Flavor und von gpsd die Subpackages -motif und -php haben moechte, schreibt man folgendes z.B. nach /var/tmp/my-favorite-shit:
Code:
misc/gpsd,-motif
misc/gpsd,-php
print/ghostscript/gnu,a4
Weiter im DruidenwissenL bsd.port.mk(5). Dort werden die Targets full-{build,run,all}-depends beschrieben. Fuer das, was der OP moechte, braucht man full-run-depends (er will's ja nicht bauen, sondern nur installieren). Dieses Target kann man probeweise auch mal in einzelnen Ports anwerfen (gerne auch mit FLAVOR und SUBPACKAGE gesetzt). Beispiele:
Code:
$ cd /usr/ports/print/ghostscript/gnu && make full-run-depends
jpeg-6bp4
libiconv-1.12
ghostscript-fonts-8.11p0
ijs-0.35
png-1.2.33
Code:
$ cd /usr/ports/print/ghostscript/gnu && FLAVOR=gtk make full-run-depends
hicolor-icon-theme-0.10p4
jpeg-6bp4
tiff-3.8.2p2
glitz-0.5.6p1
jasper-1.900.1p0
libiconv-1.12
gettext-0.17p0
ghostscript-fonts-8.11p0
pcre-7.8
glib2-2.18.4p0
atk-1.24.0
ijs-0.35
png-1.2.33
cairo-1.8.6p1
pango-1.22.3
gtk+2-2.14.7
Jetzt kommt noch der dritte Teil des Druidenwissens, der in keiner Manpage zu finden ist: SUBDIRLIST. Vage HInweise dazu gibt's in diversen Files unter /usr/ports/infrastructure.
Wenn man diverse Targets des Ports Master Makefiles (/usr/ports/Makefile) anwirft, dann roemern die normalerweise ueber
alle Ports, die per SUBDIR verdrahtet sind. Ist ganz nett, dauert furchtbar lange, will man nicht. Man kann aber auch die Variable SUBDIRLIST auf eine Datei setzen, die eine Liste von Unterverzeichnissen nebst Angabe von Subpackages und Flavors innerhalb des Portstress enthaelt. Das waere z.B. die Datei /var/tmp/my-favorite-shit im Beispiel oben. Die angegebenen Targets werden dann nur auf den angegebenen Ports ausgefuehrt.
Zusammen kann man jetzt also
Code:
$ cd /usr/ports && SUBDIRLIST=/var/tmp/my-favorite-shit make full-run-depends
aufrufen und bekommt eine Liste aller benoetigten Packagenamen:
Code:
===> misc/gpsd,-motif
libiconv-1.12
openmotif-2.3.0p0
gpsd-2.38p0
===> misc/gpsd,-php
jpeg-6bp4
t1lib-5.1.0p1
libiconv-1.12
gettext-0.17p0
libxml-2.6.32p2
php5-core-5.2.8p0
png-1.2.33
php5-gd-5.2.8
===> print/ghostscript/gnu,a4
jpeg-6bp4
libiconv-1.12
ghostscript-fonts-8.11p0
ijs-0.35
png-1.2.33
Da geht man jetzt noch mit sed(1) und sort(1) drueber, um Duplikate und das "===>?" Geschwafel zu entsorgen und ".tgz" hinten anzuhaengen, und fertig ist die Wurst.