Fink

F.A.Q. - 6. Probleme beim Übersetzen - Allgemein

F.6.1: Ein configure-Skript beklagt sich, dass es keinen "acceptable cc" findet. Was bedeutet das?

A.: Lesen sie bitte das nächste Mal die Dokumentation. Sie müssen die Apple Developer Tools installieren, um Pakete aus den Quellen zu übersetzen, denn sie enthalten auch den C Compiler, cc.

F.6.2: Nach dem Kommando "fink selfupdate-cvs" erhalte ich die Nachricht: "cvs: Command not found."

A.: Sie müssen die Apple Developer Tools installieren.

F.6.3: Ich erhalte Fehlermeldungen mit make

A.: Die Fehlermeldung

make: command not found

oder

Can't exec "make":
No such file or directory at /sw/lib/perl5/Fink/Services.pm line 190.

bedeuten, dass sie die Apple Developer Tools installieren müssen.

Lautet die Fehlermeldung

make: illegal option -- C

, dann haben sie die GNU-Version von make aus den Developer Tools durch die BSD-Version ersetzt. Viele Pakete benötigen aber spezielle Optionen der GNU-Version. Überprüfen sie, dass /usr/bin/make ein Symlink auf gnumake, und nicht auf bsdmake ist. Außerdem sollte /usr/local/bin/ nicht auch noch eine Version von make enthalten.

F.6.4: Das Kommando head erzeugt seltsame Fehlermeldungen. Was ist kaputt?

A.: Sieht die Meldung so aus:

Unknown option: 1 Usage: head [-options] <url>...

gefolgt von einer Liste mit Optionsbeschreibungen, dann ist das Programm head zerschossen. Das passiert, wenn sie die Perl libww Bibliothek auf einer HFS+ Systempartition installieren. Dabei wird versucht, ein neues Kommando /usr/bin/HEAD zu erzeugen, wodurch das existierende Kommando head überschrieben wird, weil das File-System Groß- und Kleinschreibung nicht unterscheidet. Das Kommando head ist ein Standard, der in vielen Shell-Skripten und Makefiles verwendet wird. Für die Benutzung von Fink benötigen sie das originale head.

Das Boot-Skript überprüft das, aber der Fehler kann auch dann auftreten, wenn sie die binäre Distribution für die erstmalige Installation verwenden oder libwww nach Fink installieren.

Es wurde auch schon berichtet, dass das Problem bei der Installation von /sw/bin/HEAD (Nicht durch ein Fink-Paket) auftritt. Das kann leicht durch Umbenennen behoben werden.

F.6.5: Wenn ich versuche, ein Paket zu installieren, erhalte ich eine Fehlermeldung, dass versucht wird, eine Datei zu überschreiben, die zu einem anderen Paket gehört.

A.: Dies passiert manchmal bei Splitoff-Paketen (also die mit den Endungen -dev, -shlibs, usw.), wenn eine Datei aus einem Splitoff in ein anderes verschoben wird (z. B. von foo nach foo-shlibs). Da die beiden Dateien letztlich dieselbe ist, können sie die Datei mit folgendem Kommado überschreiben:

sudo dpkg -i --force-overwrite filename

wobei filename die .deb-Datei ist, die das Paket enthält, das sie installieren wollen.

F.6.6: Was bedeutet "execution of mv failed, exit code 1", wenn ich versuche, ein Paket zu installiere?

A.: Wenn sie StuffIt Pro installiert haben, könnte es sein, dass sie den Modus "Archive Via Real Name" eingeschaltet haben. Überprüfen sie die Einstellungen von StuffIt und schalten sie "ArchiveViaRealName" ab. Der Modus enthält eine fehlerhafte Reimplementierung einiger wichtiger Systemaufrufe, die merkwürdige und transiente Fehler wie diesen zur Folge haben.

Andernfalls bedeutet ein Fehler mit mv meistens dass schon vorher ein Fehler aufgetreten ist, der Prozess aber nicht abgebrochen wurde. Suchen sie im Protokoll nach den Dateien, die zum Fehler führen, z. B. so etwas:

mv /sw/src/root-foo-0.1.2-3/sw/lib/libbar*.dylib \
/sw/src/root-foo-shlibs-0.1.2-3/sw/lib/ 
mv: cannot stat `/sw/src/root-foo-0.1.2-3/sw/lib/libbar*.dylib': 
No such file or directory 
### execution of mv failed, exit code 1 
Failed: installing foo-0.1.2-3 failed

In diesen Fällen, suchen sie nach der Datei libbar weiter zurück im Protokoll des Build-Prozesses.

F.6.7: Ich kann ein Paket nicht installieren oder aktualisieren, weil ich die Fehlermeldung erhalte, dass ein "node" bereits existiert.

A.: Diese Fehlermeldungen sehen so aus:

Failed: Internal error: node for system-xfree86 already exists

Das Problem ist, dass der Abhängigkeits-Motor verwirrt ist, weil es Änderungen in der Paket-Info-Datei gibt. Beheben sie den Fehler so:

  • Erzwingen sie das Löschen des Paket. Mit dem Beispiel von oben, wäre das:

    sudo dpkg -r --force-all system-xfree86
  • Versuchen sie noch einmal das Paket zu installieren oder aktualisieren. Irgendwann kommt ein Prompt "virtual dependency" mit dem Paket, das sie gerade gelöscht haben. Wählen sie es aus und es wird erneut installiert.

F.6.8: Ich habe gehört, dass Bibliotheken und Header-Dateien, die in /usr/local installiert sind, manchmal Probleme machen. Stimmt das?

A.: Dies ist ein sehr häufiges Probelm, weil die configure-Skripte der Pakete Header-Dateien und Bibliotheken in /usr/local finden und sie denen aus dem Fink-Baum vorziehen. Häufig zeigen sich diese Fehler erst, wenn das Erstellen des Pakets diagnostiziert wird, z. B.:

Looking for incorrect headers in 44 dependency files...
	 ./objs/.libs/ftgzip.d uses /usr/local/include/zconf.h
	 ./objs/.libs/ftgzip.d uses /usr/local/include/zlib.h
Please fix build process to get consistent use of fink's headers.

Treten Probleme auf, die in keinem FAQ-Eintrag erwähnt werden, dann sollten sie nachschauen, ob Bibliotheken in /usr/local/lib oder Header-Dateien in /usr/local/include sind.

Sind Header-Dateien und/oder Bibliotheken in /usr/local, dann benennen sie /usr/local in etwas anderes um, also:

sudo mv /usr/local /usr/local.moved

Erzeugen sie ihr Paket, dann können die Umbenennung von /usr/local wieder rückgängig machen:

sudo mv /usr/local.moved /usr/local

F.6.9: Wenn ich versuche, ein Paket zu erzeugen, bekomme ich die Fehlermeldung, "table of contents" ist veraltet. Was muss ich tun?

A.: Das Protokoll gibt Hinweise darauf, was zu tun ist, z. B.:

ld: table of contents for archive:
/sw/lib/libintl.a is out of date; 
rerun ranlib(1) (can't load from it)

Sie müssen also (als root) ranlib mit der Bibliothek ausführen, die Probleme macht. Im obigen Beispiel wäre das:

sudo ranlib /sw/lib/libintl.a

F.6.10: Fink Commander bleibt hängen, wenn ich versuche das Paket atlas zu installieren.

A.: Das kommt daher, dass in einem der Schritte bei Bau von atlas ein Prompt ausgegeben wird, der von Fink Commander nicht angezeigt wird. Sie müssen statt dessen das Kommando fink install atlas ausführen.

F.6.11: Ich erhalte Fehlermeldungen, dass die Dateien stddef.h, wchar.h, stdlib.h oder crt1.o fehlen oder dass der C compiler cannot create executables.

A.: Typischerweise heisst das, dass essentielle Header-Dateien fehlen, die im Paket DevSDK der Developer Tools enthalten sind. Überprüfen sie, ob /Library/Receipts/DevSDK.pkg auf ihrem System vorhanden ist. Wenn nicht, dann starten sie den Installer für die Developer Tools ein weiteres Mal und installieren sie das Paket DevSDK mittels Custom Install.

Der Fehler cannot create executables kann auch auftreten, wenn die Version ihrer Developer Tools nur für ein älteres OS X gültig ist.

F.6.12: Ich kann nicht aktualisieren, denn Fink meldet "unable to resolve version conflict on multiple dependencies".

A.: Zur Behebung dieses Fehlers, versuchen sie, ein einziges Paket zu aktualisieren. Dann können sie "fink update-all" noch einmal probieren. Wenn sie die Meldung immer noch bekommen, wiederholen sie die Prozedur.

F.6.13: Ich kann gar nichts installieren und bekommen nur die Fehlermeldung: "dpkg: parse error, in file `/sw/var/lib/dpkg/status'"!

A.: Dies bedeutet, dass die dpkg-Datenbank irgendwie beschädigt wurde, meist durch einen Absturz oder ähnlich schlimmes. Häufig ist ein Buildlock damit verbunden, z. B.:

package `fink-buildlock-foo-1.2.3-4':  missing version

(selbstverständlich muss der Name foo-1.2.3-4 durch den ersetzt werden, für den der Fehler auftritt).

Sollte dies passieren, müssen sie die Datei /sw/var/lib/dpkg/status als root editieren. Gehen sie zu der Zeile, die in der Fehlermeldung steht. Dort sollte ein Paket mit dem Namen fink-buildlock-foo-1.2.3-4 stehen, dessen Feld Status markiert ist

install ok installed

Ändern sie dies zu

purge ok not-installed

Unter Umständen steht auch Müll in diesem Fall. Dies können sie beheben, in dem sie die Datei mit ihrer vorigen Version überschreiben:

sudo cp /sw/var/lib/dpkg/status-old /sw/var/lib/dpkg/status

Sie müssen allerdings die Pakete, die sie kurz vorher installiert haben, erneut installieren.

F.6.14: Ich erhalte einen Fehler mit freetype.

A.: Es gibt damit mehrere verschiedene Fehler. Sieht er so aus:

/usr/bin/ld: can't locate file for: -lfreetype

überprüfen sie, ob sie ein zusätzliches Programm freetype-config haben, in dem sie dieses Kommando ausführen:

where freetype-config

wenn sie tcsh benutzen, oder

type -a freetype-config

wenn sie bash benutzen. Man weiß, dass das Framework Mono /usr/bin/freetype-config installiert, das ein Symlink auf eine Datei in diesem Framework ist.

Sieht ihr Fehler so aus:

/sw/include/pango-1.0/pango/pangoft2.h:52:
error: parse error before '*' token 
/sw/include/pango-1.0/pango/pangoft2.h:57:
error: parse error before '*' token
/sw/include/pango-1.0/pango/pangoft2.h:61: 
error: parse error before '*' token 
/sw/include/pango-1.0/pango/pangoft2.h:86: 
error: parse error before "pango_ft2_font_get_face"
/sw/include/pango-1.0/pango/pangoft2.h:86: 
warning: data definition has no type or storage class 
make[2]: *** [rsvg-gz.lo] Error 1
make[1]: *** [all-recursive] Error 1 
make: *** [all-recursive-am] Error 2 
### execution of make failed, exit code 2 
Failed: compiling librsvg2-2.4.0-3 failed

oder

In file included from vteft2.c:32:
vteglyph.h:64: error:
parse error before "FT_Library" 
vteglyph.h:64: warning: 
no semicolon at end of struct or union vteft2.c: 
In function `_vte_ft2_get_text_width': 
vteft2.c:236: error: 
dereferencing pointer to incomplete type 
vteft2.c: In function `_vte_ft2_get_text_height':
vteft2.c:244: error: 
dereferencing pointer to incomplete type
vteft2.c: In function `_vte_ft2_get_text_ascent': 
vteft2.c:252: error:
dereferencing pointer to incomplete type 
vteft2.c: In function `_vte_ft2_draw_text': 
vteft2.c:294: error: 
dereferencing pointer to incomplete type 
vteft2.c:295: error: 
dereferencing pointer to incomplete type
make[2]: *** [vteft2.lo] Error 1 
make[1]: *** [all-recursive] Error 1 
make: *** [all] Error 2 
### execution of make failed, exit code 2
Failed: compiling vte-0.11.10-3 failed

oder

checking for freetype-config.../usr/X11R6/bin/freetype-config
checking For sufficiently new FreeType (at least 2.0.1)... no 
configure: error: pangoxft 
Pango backend found but did not find freetype libraries 
make: *** No targets specified and no makefile found. Stop. 
### execution of LD_TWOLEVEL_NAMESPACE=1 failed, exit code 2 
Failed: compiling gtk+2-2.2.4-2 failed

Das Problem ist ein Konflikt zwischen den Header-Dateien aus den Paketen freetype oder freetype-hinting und der freetype2 Header-Datei, die in X11 oder XFree86 enthalten ist.

fink remove freetype freetype-hinting

wird löschen, was auch immer installiert ist. Sieht der Fehler aber so aus:

ld: Undefined symbols: _FT_Access_Frame

ist das dafür typisch, das noch Dateien von einer früheren Installation von X11 übrig sind. Installieren sie das X11 SDK erneut.

F.6.15: Ich bekommen Fehler mit 'Dl_info'.

A.: Sieht der Fehler so aus:

unix_dl.c: In function `rep_open_dl_library':
unix_dl.c:328: warning: assignment discards qualifiers from pointer target type 
unix_dl.c: In function `rep_find_c_symbol': 
unix_dl.c:466: error: `Dl_info' undeclared (first use in this function)
unix_dl.c:466: error: (Each undeclared identifier is reported only once 
unix_dl.c:466: error: for each function it appears in.)
unix_dl.c:466: error: parse error before "info" 
unix_dl.c:467: error: `info' undeclared (first use in this function) 
make[1]: *** [unix_dl.lo] Error 1

haben sie wahrscheinlich die Header-Datei /usr/local/include/dlfcn.h, die nicht mit Panther nicht kompatible ist. Verschieben sie die Datei.

Meistens wird sie von Open Office installiere und sie sollten die Header-Datei und die Bibliothek /usr/local/lib/libdl.dylib durch Symlinks zu den Dateien ersetzen, die in Panther enthalten sind.

sudo ln -s /usr/include/dlfcn.h /usr/local/include/dlfcn.h
sudo ln -s /usr/lib/libdl.dylib /usr/local/lib/libdl.dylib

F.6.16: Fink behauptet, dass gcc2 oder gcc3.1 fehlen, es sieht nicht so aus, dass ich sie installieren kann.

A.: gcc2 und gcc3.1 sind virtuelle Pakete, die anzeigen, dass gcc-2.95 und gcc-3.1 auf dem System installiert sind. Installieren sie gcc2.95 und/oder gcc3.1 aus Xcode Tools (frühere Versionen von OS X enthalten sie in der normalen Installation der Developer Tools).

Anmerkung: Installiert man gcc2.95 und/oder gcc3.1 verursacht dies keine Probleme bei der Installation des gcc3.3 Compilers - sie können koexistieren.

F.6.17: Fink beklagt sich mit: Failed: Can't resolve dependency "system-java-dev", aber das Paket gibt es gar nicht.

A.: "system-java-dev" ist ein virtuelles Paket. Derzeit (Jan. 2011) tritt der Fehler auf Leopard und Snow Leopard auf, bei denen sich Apples Java-Pakete änderten.

Sie müssen das Paket Java Developer Package von Apple herunter laden.

Dann überprüfen sie mit dem Kommando

fink -V

, dass die Version des Package Manager 0.29.15 oder höher ist.

Ist die Version von fink version älter, aktualisieren sie fink mit:

fink selfupdate

Zeigt ihre Distributionsversion point, wechseln sie auf rsync oder cvs, indem sie mit

fink selfupdate-rsync

oder

fink selfupdate-cvs

aktualisieren. Ist die Version von fink 0.29.99.cvs, dann benutzen sie ein CVS checkout von fink, das man nicht aktualisieren kann und das deshalb hinter der aktuellen Version zurück bleibt. Wir empfehlen, diese Kommandos auszuführen:

fink selfupdate ; fink dumpinfo -fallversions fink

Dies wird folgende Ausgabe erzeugen:

$ fink dumpinfo -fallversions fink
Scanning package description files..........
Information about 10146 packages read in 2 seconds.
allversions:
   	0.29.21-51
 bi	0.29.99.cvs-20110408.1821

Wählen sie letzte Release-Version (eine ohne .cvs, z. B. die 0.29.21-51 von oben) und führen sie diese Kommando aus:

fink install fink-version-revision

Zum Beispiel:

fink install fink-0.29.21-51

um fink-0.29.51 zu installieren.

Den Speicherplatz der CVS checkouts von fink bekommt man mit folgendem Befehl zurück:

sudo rm /sw/fink/10.4/local/injected/binary-darwin-<architecture>/*;
sudo rm /sw/fink/10.4/local/injected/finkinfo/*;
fink index -f
fink scanpackages
sudo apt-get update
fink cleanup

ersetzen sie <architecture> mit ihrer Architektur, also powerpc, i386, oder x86_64.

F.6.18: Wenn ich ein Paket installieren möchte, bekomme ich dpkg (subprocess): failed to exec dpkg-split to see if it's part of a multiparter: No such file or directory. Wie behebe ich diesen Fehler?

A.: Im allgemeinen kann dies behoben werden, in dem man die Umgebung korrekt einrichtet, wie hier hier beschrieben.

F.6.19: Ich bekommen folgende Fehler-Meldung: configure: error: XML::Parser perl module is required for intltool. Was soll ich machen?

A.: Benutzen sie den unstable Baum, überprüfen sie, dass intltool-0.34.1 oder später installiert ist..

Andernfalls überprüfen sie, ob die richtige Variante des Pakets xml-parser-pm installiert ist, die zu der Perl-Version auf ihrem System passt. Auf Panther sollten sie zum Beispiel xml-parser-pm581 statt xml-parser-pm560 haben (Sie können auch den Platzhalter xml-parser-pm haben), weil sie Perl-5.8.1 und nicht Perl-5.6.0 haben. Benutzen sie auf Jaguar die Standard-Systemversion von Perl, haben sie die Variante pm560. Haben sie Perl 5.8.0 installiert, haben sie die Variante pm580.

F.6.20: Wenn ich versuche, ein Paket herunter zu laden, geht Fink auf eine merkwürdige Seite mit distfiles im Namen und die Datei gibt es dort nicht.

A.: Es ist folgendes passiert: Fink versuchte einen seiner Master-Spiegelserver zu nutzen. Sie wurden aufgesetzt, damit Quell-Dateien für Fink-Pakete auch zur Verfügung stehen, wenn sie auf den Originalseiten verschoben wurden. Meistens tritt dieser Fehler auf, wenn eine neue Version veröffentlicht wurde, die Quell-Dateien aber noch nicht auf die Master-Spiegelserver kopiert wurden.

Beheben sie das Problem, indem sie das Kommando fink configure ausführen und setzen sie die Suchreihenfolge auf "use Master mirrors last".

F.6.21: Ich möchte, dass Fink andere Optionen beim Erstellen eines Pakets verwendet.

A.: Als erstes sollten sie den Paket-Autor kontaktieren und ihn um eine Variante bitten. Das ist manchmal leicht. Meldet sich der Autor aber nicht, es gibt kein neues Paket oder wollen sie eine andere Option selbst probieren, schauen sie sich die folgenden zwei Kapitel an: Packaging Tutorial und Packaging Handbuch.

Anmerkung: Die Einstellungen von Fink sind bewusst so, dass alle offiziellen Binär-Programme identisch sind egal auf welchem Rechner sie erstellt wurden. Optimierungen für einen G5 Prozessor sind also in offiziellen Paketen nicht eingeschaltet. Wenn sie das brauchen, müssen sie das selbst machen.

F.6.22: Immer wenn ich Pakete aus Quellen erzeugen möchte, fragt Fink immer wieder nach alternativen Versionen der selben Bibliothek.

A.: In komplexen Erstellungsabhängigkeiten kommt es oft vor, dass ein Paket von einer bestimmten Version einer Bibliothek abhängt und andere Pakete von einer anderen Version (z. B: db47 vs. db44). Folglich versucht Fink immer zu der Version zu wechseln, die wegen der Abhängigkeiten in dem Paket benötigt werden, die sie aktualisieren wollen.

Unglücklicherweise kann es wegen einiger Beschränkungen in Fink bei einem ausreichend kompliziertem update-all zu einer Fehlersituation mit folgender Meldung kommen:

Fink::SysState: Could not resolve inconsistent dependencies

Diese Situation kann mit folgenden Kommandos aufgelöst werden:

fink scanpackages
sudo apt-get update
sudo apt-get install foo=1.23-4

In manchen komplizierten Situationen kann es aber sein, dass dies noch nicht ausreicht. Dann müssen sie die Pakete eines nach dem anderen aktualisieren, zumindest ein Stück weit.

F.6.23: Versuche ich, ein Python-Modul zu erstellen, bekomme ich eine Fehlermeldung mit MACOSX_DEPLOYMENT_TARGET .

A.: Wenn die Fehlermeldungen so aussehen:

running build
running build_ext
Traceback (most recent call last):
  File "setup_socket_ssl.py", line 21, in ?
    depends = ['socketmodule.h'] )
  File "/sw/src/root-python24-2.4.1-1/sw/lib/python2.4/distutils/core.py", line 166, in setup
SystemExit: error: $MACOSX_DEPLOYMENT_TARGET mismatch: now "10.4" but "10.3" during configure
### execution of /sw/bin/python2.4 failed, exit code 1

liegt das Problem daran, dass das Paket python2* das aktuelle MACOSX_DEPLOYMENT_TARGET in eine Konfigurationsdatei schreibt, wenn es erzeugt wird und die python build utilities diesen Wert nehmen, wenn sie Module erstellen. Dadurch können Konflikte entstehen, wenn z. B. ein Paket python24 unter 10.4 von 10.3 stammt, weil entweder von 10.3 auf 10.4 oder über die binäre 10.4-transitional Distribution aktualisiert wurde und dabei python24 nicht erneut erstellt wurde, weil python von einem MACOSX_DEPLOYMENT_TARGET 10.3 ausgeht, das System aber 10.4 hat.

Die Lösung ist das problematische Paket python neu zu erstellen, also fink rebuild python24 im obigen Beispiel.

Taucht der gleiche Fehler zur Laufzeit auf, dann erstellen sie zuerst das entsprechende Paket python2* erneut und dann das Modul.

F.6.24: Ich bekomme von libtoolden Fehler unrecognized option `-dynamic'.

A.: Der Fehler:

 libtool: unrecognized option `-dynamic'

bedeutet normalerweise, dass Apples /usr/bin/libtool durch libtool von GNU ersetzt haben. Unglücklicherweise machen die beiden libtools nicht das selbe.

Die einzige Lösung ist von irgend woher ein funktionierendes libtool von Apple zu bekommen. Es ist im Paket DeveloperTools.pkg der Xcode Tools enthalten und sie können das gesamte Paket erneut installieren, wenn sie zuerst seine Quittung in /Library/Receipts löschen (einfach in den Mülleimer ziehen oder mit dem Kommando sudo rm -rf /Library/Receipts/DeveloperTools.pkg).

F.6.25: Ich erhalte eine Fehlermeldung über fehlende Header in /usr/include

A.: Wenn sie auf 10.9 oder 10.10 Fehlermeldungen wie

The directory that should contain system headers does not exist:
  /usr/include

oder

cp: /usr/include/lber*.h: No such file or directory

während der Erstellung erhalten, bedeutet das, dass sie eine Version der Xcode command-line tools von einer früheren OS X version verwenden. Versuchen sie, eine neuere Version aus dem App Store zu erhalten, mit sudo xcode-select -install zu aktualisieren oder von der Seite developer.apple.com herunter zu laden.

F.6.26: Wenn ich ein Paket mit app-Bundle unter Yosemite aktualisieren möchte, erhalte ich Fehler mit einer Datei PkgInfo.

A.: Die Fehlermeldung sieht vermutlich so aus:

Unpacking replacement wxmaxima-mac ...
/sw/bin/dpkg: error processing /sw/fink/dists/stable/main/binary-darwin-x86_64/sci/wxmaxima-mac_15.04.0-1_darwin-x86_64.deb (--install):
 unable to make backup link of `./sw/Applications/wxMaxima.app/Contents/PkgInfo' before installing new version: Operation not permitted
/sw/bin/dpkg-deb: subprocess paste killed by signal (Broken pipe: 13)

Gegenwärtig muss man das problematische Paket entfernen (remove), womit auch die Datei PkgInfo gelöscht wird und dann die aktualisierte Version installieren.

Weiter: 7. Probleme beim Übersetzen - Bestimmte Pakete