Nachdem ich mir mein System wieder mal zerlegt habe und ein revdep-rebuild unumgänglich war, ging es eben genau an diesen Vorgang und ich ins Bett. Am Morgen waren aber leider nicht alle Pakete gebaut, da der Vorgang bei Samba mit folgendem Fehler abgebrochen war.
Compiling smbd/oplock_irix.c
Compiling smbd/oplock_linux.c
smbd/oplock_linux.c:38: error: conflicting types for ‘capget’
/usr/include/sys/capability.h:111: error: previous declaration of ‘capget’
was here
smbd/oplock_linux.c:40: error: conflicting types for ‘capset’
/usr/include/sys/capability.h:110: error: previous declaration of ‘capset’
was here
The following command failed:
gcc -I/var/tmp/portage/net-fs/samba-3.0.28/work/samba-3.0.28/source -march=native
-O2 -fomit-frame-pointer -pipe -D_SAMBA_BUILD_=3
-I/var/tmp/portage/net-fs/samba-3.0.28/work/samba-3.0.28/source/iniparser/src
-Iinclude -I./include -I. -I. -I./lib/replace -I./lib/talloc -I./tdb/include
-I./libaddns -I./librpc -DHAVE_CONFIG_H -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
-I/var/tmp/portage/net-fs/samba-3.0.28/work/samba-3.0.28/source/lib
-D_SAMBA_BUILD_=3 -fPIC -c smbd/oplock_linux.c -o smbd/oplock_linux.o
make: *** [smbd/oplock_linux.o] Error 1
Da das Paket aber schon mal baubar war, musste ein Update eine Abhängigkeit zerschossen haben. Die Fehlermeldung deutet auf die libcap hin. Laut dem Emerge-Log wurde diese die Tage mal upgedated.
Frech wie immer, sehe ich mir den Sourcecode von Samba an der entsprechenden Abbruchstelle an, welche ich in der Datei smbd/oplock_linux.c vermute. Wenn ich nun die Fehlermeldung „previous declaration of ‘capset’“ richtig interpretiere, dann liegt der Hund in einer doppelten Deklaration von ‚capset‘.
Editor auf, Datei geladen und siehe da, es zeigt sich eine Passage, die sich wie folgt ließt:
struct cap_user_data {...}
extern int capget(struct cap_user_header * hdrp,
struct cap_user_data * datap);
extern int capset(struct cap_user_header * hdrp,
const struct cap_user_data * datap);static SIG_ATOMIC_T signals_received
Frech wie ich bin, entferne ich die Deklaration von capget und capset, da mir mein Bauchgefühl nebst Hunger noch mitteilt, dass dies gleich der nächste Haken werden könnte. Dann wird wieder compiled. Und siehe da, das Problem ist Geschichte…