Alle alle installierten Ports einer Kategorie neu bauen

mousaka

getting older
Wie kann ich alle installierten Ports einer Kategorie (z.B. kld) neu bauen. Da ich -STABLE verfolge, würde ich jeweils gerne die installierten Module nach einem Update neu bauen.

Ich meine Mal so was gesehen zu haben, finde es aber weder im Forum noch bei Tante Google. :grumble:

mousaka
 
Ich habe in den ports portsearch gefunden, welches nach Kategorien suchen kann. Allerdings schlägt der Bau der Datenbank fehl, weil /usr/ports/audio/solfege leer ist (keine Makefile gefunden). Auch ein portsnap extract hat keine Dateien in audio/solfege erzeugt. Auf freshports findet man aber entsprechen Dateien.

Kann bitte mal jemand kontrollieren ob bei ihm audio/solfege auch ein leeres Verzeichnis ist?

mousaka
 
pit@syo ~:-> whereis solfege
solfege: /usr/ports/audio/solfege
pit@syo ~:-> ll /usr/ports/audio/solfege
total 136
-rw-r--r-- 1 root wheel 1634 26 Jul 19:29 Makefile
-rw-r--r-- 1 root wheel 200 26 Jul 19:29 distinfo
-rw-r--r-- 1 root wheel 702 10 Apr 2003 pkg-descr
-rw-r--r-- 1 root wheel 132695 26 Jul 19:29 pkg-plist
 
Das Problem dürfte darin liegen, diese Ports alle zu wissen, die da zu einer "Kategorie" gehören und sie dann auch noch mit dem zu vergleichen, was du auf deinem System installiert hast.
Teilweise ist nämlich gar nicht zu erkennen, dass es sich um eine "Kategorie" handelt, sondern das liest sich eher nach einer willkürlichen Zusammenstellung.
Am einfachsten könnte ich mir eine manuell erzeugte Liste mit entsprechenden Argumenten (ports) vorstellen, die du dann einfach abarbeitest, etwa über cat an xargs leitest und sie portupgraden lässt.
 
Also ein
Code:
pkg_info -ao | grep -B3 net
liefert alle installierten ports der Kategorie net. Soweit so gut. Allerdings bin ich wie erwähnt hauptsächlich an der Kategorie kld interessiert. Diese ist aber eine virtuelle Kategorie und lässt sich darum nicht über die Verzeichnisstruktur ermitteln (was wohl pkg_info macht) sondern muss aus dem Makefile gelesen werden.

geht so en Spaß wie portupgrade -fr cat/ \* vielleicht ?
Ich benutze seit längerem portmaster. Werde darum vorerst einen anderen Weg versuchen.

Mit portsearch komme ich soweit:
Code:
salamander# portsearch -c kld -o path
Path:    /usr/ports/audio/aureal-kmod

Path:    /usr/ports/audio/emu10kx

Path:    /usr/ports/audio/oss

Path:    /usr/ports/comms/bluez-firmware

Path:    /usr/ports/comms/hcfmdm

Path:    /usr/ports/comms/hso-kmod

Path:    /usr/ports/comms/ib-kmod

Path:    /usr/ports/comms/uhso-kmod

Path:    /usr/ports/comms/uticom

Path:    /usr/ports/devel/linux-js

Path:    /usr/ports/emulators/kqemu-kmod

Path:    /usr/ports/emulators/kqemu-kmod-devel

Path:    /usr/ports/emulators/open-vm-tools

Path:    /usr/ports/emulators/open-vm-tools-nox11

Path:    /usr/ports/emulators/parallels-tools

Path:    /usr/ports/emulators/rtc

Path:    /usr/ports/emulators/snespp

Path:    /usr/ports/emulators/virtualbox-ose-additions

Path:    /usr/ports/emulators/virtualbox-ose-kmod

Path:    /usr/ports/emulators/vmware-guestd4

Path:    /usr/ports/emulators/vmware-guestd5

Path:    /usr/ports/emulators/vmware-guestd6

Path:    /usr/ports/emulators/vmware-tools4

Path:    /usr/ports/emulators/vmware-tools5

Path:    /usr/ports/emulators/vmware-tools6

Path:    /usr/ports/emulators/vmware3

Path:    /usr/ports/graphics/kix-kmod

Path:    /usr/ports/graphics/plasma-kmod

Path:    /usr/ports/misc/dahdi

Path:    /usr/ports/misc/wanpipe

Path:    /usr/ports/misc/zaptel

Path:    /usr/ports/multimedia/cuse4bsd-kmod

Path:    /usr/ports/multimedia/cx88

Path:    /usr/ports/multimedia/linux-gspca-kmod

Path:    /usr/ports/multimedia/linux-ov511-kmod

Path:    /usr/ports/multimedia/pvr250

Path:    /usr/ports/multimedia/pvrxxx

Path:    /usr/ports/multimedia/pwcbsd

Path:    /usr/ports/multimedia/sms1xxx-kmod

Path:    /usr/ports/net/acx100

Path:    /usr/ports/net/bwi-firmware-kmod

Path:    /usr/ports/net/bwn-firmware-kmod

Path:    /usr/ports/net/ipvs

Path:    /usr/ports/net/ipw-firmware

Path:    /usr/ports/net/ipw-firmware-kmod

Path:    /usr/ports/net/iwi-firmware

Path:    /usr/ports/net/iwi-firmware-kmod

Path:    /usr/ports/net/ng_car

Path:    /usr/ports/net/ng_daphne

Path:    /usr/ports/net/skyfish

Path:    /usr/ports/net/skystar2

Path:    /usr/ports/net/ttbudget

Path:    /usr/ports/net-mgmt/ng_ipacct

Path:    /usr/ports/palm/uppc-kmod

Path:    /usr/ports/security/quantis-kmod

Path:    /usr/ports/sysutils/biosfont

Path:    /usr/ports/sysutils/devcpu

Path:    /usr/ports/sysutils/fusefs-kmod

Path:    /usr/ports/sysutils/mono-kmod

Path:    /usr/ports/sysutils/pmap

Path:    /usr/ports/sysutils/scprotect

Path:    /usr/ports/sysutils/vordog

Path:    /usr/ports/x11/nvidia-driver

Path:    /usr/ports/x11/nvidia-driver-173

Path:    /usr/ports/x11/nvidia-driver-71

Path:    /usr/ports/x11/nvidia-driver-96

Path:    /usr/ports/x11-drivers/input-wacom

67 ports
Von diesen müsste ich jetzt einfach noch die installierten rausfiltern. Habe im Moment kaum Zeit das ernsthaft weiterzuverfolgen. Vorschläge sind willkommen uns sonst werde ich mal meine bescheidenen Shell-Kenntnisse hervor kramen.

mousaka
 
Habe mit meinen bescheiden Skripting-Kenntnissen mal was gebastelt.

Code:
#!/bin/sh
PORTMASTER=/usr/local/sbin/portmaster
CURRENT_DIR=`pwd`
cd /usr/ports
KLD_PORTS="$(make quicksearch cat=kld | grep Port | cut -c 7-)" > /dev/null
touch /tmp/kld_ports
for KLD_PORT in $KLD_PORTS;
  { pkg_info -q -e $KLD_PORT && echo $KLD_PORT >> /tmp/kld_ports || > /dev/null }
xargs -o < /tmp/kld_ports $PORTMASTER -D --no-confirm --no-term-title
rm /tmp/kld_ports
cd $CURRENT_DIR

Feedback ist willkommen.

Danke an Kamikaze für den Tipp mit make quicksearch.

mousaka
 
Etwas generischer:

Code:
#!/bin/sh

PORTMASTER="/usr/local/sbin/portmaster"
PKG_INFO="/usr/sbin/pkg_info"
TMP_FILE="/tmp/portlist"
CATEGORY="kld"
PORT_LIST="$(make -C /usr/ports/ quicksearch cat=$CATEGORY | grep Port | cut -c 7-)"

[ -f $TMP_FILE ] && rm $TMP_FILE
for port in $PORT_LIST; do
         pkg_info -e $port && echo $port >> $TMP_FILE
done
xargs -o < $TMP_FILE $PORTMASTER -D --no-confirm --no-term-title
rm $TMP_FILE
 
Das ist doch immer wieder schön. Man gibt einen kleinen Denkanstoß und die Leute machen etwas draus.
 
Fein, fein! :)
Als portupgrade Benutzer habe ich mir das mal umgebogen und mit einer pompösen Port Namen Ausgabe versehen:
Code:
#!/bin/sh

CATEGORY="kld"

LOCALBASE="/usr/local"
PORTUPGRADE="$LOCALBASE/sbin/portupgrade"
PKG_INFO="/usr/sbin/pkg_info"
TMP_FILE="/tmp/portlist"
PORTSDIR="/usr/ports"
PORT_LIST="$(make -C $PORTSDIR quicksearch cat=$CATEGORY | grep Port | cut -c 7-)"

[ -f $TMP_FILE ] && rm $TMP_FILE
for port in $PORT_LIST; do
         pkg_info -e $port && echo $port >> $TMP_FILE
done

echo " "
echo "##########################################################################"
echo " "
echo "Work on Ports:"
echo " "
echo "`cat $TMP_FILE`"
echo " "                                                                                                                
echo "##########################################################################"                                       
echo " "                                                                                                                
                                                                                                                            
xargs -o < $TMP_FILE $PORTUPGRADE -f                                                                                      
rm $TMP_FILE                                                                                                                
exit
 
Zurück
Oben