FreeBSD Ports - Pakete registrieren jetzt deutlich schneller

Kamikaze

Warrior of Sunlight
Staff member
Durch die wachsende Zahl der Abhängigkeiten von Ports dauert die Registrierung von Paketen fast unerträglich lang (besonders bei Ports wie x11/xorg, wo die Registrierung auf meine Pentium-M 1300 ca. 15 Minuten gedauert hat). Deshalb habe ich auf freebsd-ports@freebsd.org eine Diskussion angestoßen nur noch direkte Abhängigkeiten zu registrieren.

Schnell hat sich jedoch herausgestellt, dass das eine massive Veränderung am Ports System wäre, stattdessen haben einige Teilnehmer versucht die Performance des vorhanden Systems zu optimieren.

Heute wurde ein von Stephen Montgomery-Smith geschriebener Patch an bsd.port.mk in die Ports commitet der massive Verbesserungen beim ermitteln von Abhängigkeiten bringt (bis zu Faktor 30 schneller).

Ein PR mit einem weiteren Patch von Stephen wartet noch auf den Commit. Ich setze den Patch schon seitdem er auf der Mailingliste erschien ein und er scheint problemlos zu funktionieren.

Mit beiden Patches dauert die Registrierung von x11/xorg bei mir nun unter 18 Sekunden.

Stephen ist jetzt offiziell mein Held. ;)

Update:
Ein Patch von Alexander Leidinger um make clean zu beschleunigen, wird momentan auch noch getestet. Auch hier könnte es also bald Verbesserungen geben.
 
Last edited:
Sehr geil. Du hast mir quasi aus der Seele gesprochen. Bei den "langsameren" Kisten ist es im Moment wirklich unerträglich langsam.
Dann bin ich ja mal gespannt wann die Verbeserung offiziell eingepflegt wird.
 
Ich kann nur empfehlen den weiteren Patch selbst einzupflegen.

Code:
# cd /usr/src
# fetch -o pkg_install-lib-deps.c.patch 'http://www.freebsd.org/cgi/query-pr.cgi?prp=112630-1-diff'
# patch < 'pkg_install-lib-deps.c.patch'
# cd usr.sbin/pkg_install
# make install clean

Es lohnt sich wirklich.
 
Evtl. vorher noch ein "make depend" in /usr/src/usr.sbin/pkg_install
sonst kann man ne Fehlermeldung bekommen, dass das Verzeichnis pkg_add fehlt.
 
Wenn man vorher ein "make clean" ausfuehrt, oder noch nie die Welt gebaut hat, ja.
 
Trotz "make depend" bekomme ich folgende Fehlermeldung:

Code:
# pwd
/usr/src
# fetch -o pkg_install-lib-deps.c.patch 'http://www.freebsd.org/cgi/query-pr.cgi?prp=112630-1-diff'
fetch: http://www.freebsd.org/cgi/query-pr.cgi?prp=112630-1-diff: size of remote file is not known
pkg_install-lib-deps.c.patch                          5586  B   22 kBps
# patch < 'pkg_install-lib-deps.c.patch'
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- /usr/src/usr.sbin/pkg_install/lib/deps.c   Wed Dec  6 20:14:13 2006
|+++ usr.sbin/pkg_install/lib/deps.c    Sat May 12 23:53:36 2007
--------------------------
Patching file usr.sbin/pkg_install/lib/deps.c using Plan A...
Reversed (or previously applied) patch detected!  Assume -R? [y]
Hunk #1 succeeded at 26.
Hmm...  Ignoring the trailing garbage.
done
# cd usr.sbin/pkg_install
# pwd
/usr/src/usr.sbin/pkg_install
# make depend
===> lib (depend)
rm -f .depend
mkdep -f .depend -a     file.c msg.c plist.c str.c exec.c global.c pen.c match.c deps.c version.c pkgwrap.c url.c
===> add (depend)
===> create (depend)
===> delete (depend)
===> info (depend)
===> sign (depend)
===> version (depend)
# make install clean
===> lib (install)
===> add (install)
install -s -o root -g wheel -m 555   pkg_add /usr/sbin
install: pkg_add: No such file or directory
*** Error code 71

Stop in /usr/src/usr.sbin/pkg_install/add.
*** Error code 1

Stop in /usr/src/usr.sbin/pkg_install.
#

Ich habe vorher "make install clean" ausfuehrt und die gleiche Fehlermeldung wie mit "make depend" bekommen. "make clean" allein, habe ich vorher nie ausgeführt.
Die Welt habe ich auch noch nie gebaut.

uname -a:
Code:
FreeBSD *** 6.2-RELEASE-p5 FreeBSD 6.2-RELEASE-p5 #0: Wed Jun  6 23:47:30 CEST 2007     root@***.:/usr/obj/usr/src/sys/MY_SMP_10  i386

mfg-morromett
 
Hast du nur die Kernle Sourcen oder die komplette Welt?

Die komplette Welt. Auszug aus der "src-supfile":

Code:
.............
*default host=cvsup.ch.FreeBSD.org
*default base=/var/db
*default prefix=/usr 
*default release=cvs tag=RELENG_6_2
*default delete use-rel-suffix
*default compress
src-all
............
 
Probier mal folgendes:

# cd /usr/src/usr.sbin
# make
# cd pkg_install
# make install
# cd ..
# make clean
 
Probier mal folgendes:

# cd /usr/src/usr.sbin
# make
# cd pkg_install
# make install
# cd ..
# make clean

Dann kommen nach " # cd /usr/src/usr.sbin # make " folgende Fehlermeldungen (Auszug, die letzten Zeilen):

Code:
.........................
cc -O2 -pipe  -DVERSION='"9.3.3"' -DHAVE_CONFIG_H -DWANT_IPV6 -DOPENSSL -DUSE_MD5 -DNS_LOCALSTATEDIR='"/var"' -DNS_SYSCONFDIR='"/etc/namedb"' -DNAMED_CONFFILE='"/etc/namedb/named.conf"' -DRNDC_CONFFILE='"/etc/namedb/rndc.conf"' -DRNDC_KEYFILE='"/etc/namedb/rndc.key"' -I/usr/src/usr.sbin/dnssec-keygen/../../lib/bind -I/usr/src/usr.sbin/dnssec-keygen/../../contrib/bind9/lib/bind9/include -I/usr/src/usr.sbin/dnssec-keygen/../../contrib/bind9/lib/dns/include/dst  -I/usr/src/usr.sbin/dnssec-keygen/../../contrib/bind9/lib/dns/include  -I/usr/src/usr.sbin/dnssec-keygen/../../lib/bind/dns -I/usr/src/usr.sbin/dnssec-keygen/../../contrib/bind9/lib/isccc/include -I/usr/src/usr.sbin/dnssec-keygen/../../contrib/bind9/lib/isccfg/include -I/usr/src/usr.sbin/dnssec-keygen/../../contrib/bind9/lib/isc/unix/include  -I/usr/src/usr.sbin/dnssec-keygen/../../contrib/bind9/lib/isc/nothreads/include  -I/usr/src/usr.sbin/dnssec-keygen/../../contrib/bind9/lib/isc/include  -I/usr/src/usr.sbin/dnssec-keygen/../../lib/bind/isc -I/usr/src/usr.sbin/dnssec-keygen/../../contrib/bind9/lib/lwres/unix/include  -I/usr/src/usr.sbin/dnssec-keygen/../../contrib/bind9/lib/lwres/include  -I/usr/src/usr.sbin/dnssec-keygen/../../lib/bind/lwres -I/usr/src/usr.sbin/dnssec-keygen/../../contrib/bind9/bin/dnssec/unix/include -I/usr/src/usr.sbin/dnssec-keygen/../../contrib/bind9/bin/dnssec/include   -o dnssec-keygen dnssec-keygen.o dnssectool.o ../../lib/bind/bind9/libbind9.a ../../lib/bind/dns/libdns.a ../../lib/bind/isccc/libisccc.a ../../lib/bind/isccfg/libisccfg.a  ../../lib/bind/isc/libisc.a ../../lib/bind/lwres/liblwres.a -lcrypto
cc: ../../lib/bind/bind9/libbind9.a: No such file or directory
cc: ../../lib/bind/dns/libdns.a: No such file or directory
cc: ../../lib/bind/isccc/libisccc.a: No such file or directory
cc: ../../lib/bind/isccfg/libisccfg.a: No such file or directory
cc: ../../lib/bind/isc/libisc.a: No such file or directory
cc: ../../lib/bind/lwres/liblwres.a: No such file or directory
*** Error code 1

Stop in /usr/src/usr.sbin/dnssec-keygen.
*** Error code 1

Stop in /usr/src/usr.sbin.
#
 
So langsam bin ich ratlos. Ich glaube ich würde dir raten /usr/src komplett zu leeren und mit csup neu zu ziehen. Oder du lässt es einfach bleiben. Wenn dein Rechner etwas schneller ist, ist das ja nicht so schlimm.
 
Ich habe den Fehler auch gehabt. Mit:

cd /usr/src/usr.sbin/pkg_install
make depend
make
make install
make clean

gings dann irgendwie. "make install clean" will er nicht machen...
 
Ich hab's doch noch mal probiert. Folgendes hat funktioniert:

cd /usr/src/usr.sbin/pkg_install
make clean
cd /usr/obj
chflags -R noschg *
rm -rf *
cd /usr/src/usr.sbin/pkg_install
make depend
make
make install
make clean
 
Back
Top