VLC-Installation gescheitert

goofy864

Active Member
Bin bei der Installation steckengeblieben. FBSD 7. Kann jemand helfen oder muß ich alles wieder mit make clean entfernen? Das Problem tritt bei twolame auf. Mit Error code 1 kann ich umgehen, mit code 2 nicht:

dhcppc0# cd /usr/ports/audio/twolame && make install clean
===> Building for twolame-0.3.12
Making all in libtwolame
gmake[1]: Entering directory `/usr/ports/audio/twolame/work/twolame-0.3.12/libtwolame'
gmake[1]: Nothing to be done for `all'.
gmake[1]: Leaving directory `/usr/ports/audio/twolame/work/twolame-0.3.12/libtwolame'
Making all in frontend
gmake[1]: Entering directory `/usr/ports/audio/twolame/work/twolame-0.3.12/frontend'
/bin/sh ../libtool --tag=CC --mode=link cc -I../build/ -I../libtwolame/ -I/usr/local/include -O2 -fno-strict-aliasing -pipe -std=c99 -Wunused -Wall -L/usr/local/lib -lsndfile -o twolame frontend.o audioin_raw.o audioin_sndfile.o ../libtwolame/libtwolame.la -lm -lm
cc -I../build/ -I../libtwolame/ -I/usr/local/include -O2 -fno-strict-aliasing -pipe -std=c99 -Wunused -Wall -o .libs/twolame frontend.o audioin_raw.o audioin_sndfile.o -L/usr/local/lib /usr/local/lib/libsndfile.so /usr/local/lib/libFLAC.so ../libtwolame/.libs/libtwolame.so -lm -Wl,--rpath -Wl,/usr/local/lib
/usr/bin/ld: warning: libFLAC.so.7, needed by /usr/local/lib/libsndfile.so, not found (try using -rpath or -rpath-link)
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_encoder_set_seek_callback'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_encoder_process_interleaved'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_encoder_get_resolved_state_string'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_encoder_set_write_callback'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_encoder_delete'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_process_single'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_set_client_data'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_get_decode_position'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_set_write_callback'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_set_error_callback'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_encoder_init'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_encoder_set_client_data'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_set_metadata_callback'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_encoder_set_sample_rate'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_finish'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_set_eof_callback'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_init'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_set_length_callback'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_encoder_set_bits_per_sample'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_new'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_set_seek_callback'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_set_metadata_respond'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_set_tell_callback'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_set_read_callback'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_encoder_set_channels'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_encoder_finish'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_seek_absolute'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_encoder_new'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_encoder_set_tell_callback'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_process_until_end_of_metadata'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_get_state'
/usr/local/lib/libsndfile.so: undefined reference to `FLAC__seekable_stream_decoder_delete'
gmake[1]: *** [twolame] Error 1
gmake[1]: Leaving directory `/usr/ports/audio/twolame/work/twolame-0.3.12/frontend'
gmake: *** [all-recursive] Error 1
*** Error code 2

Stop in /usr/ports/audio/twolame.
dhcppc0# whereis flac
flac: /usr/local/bin/flac /usr/local/man/man1/flac.1.gz /usr/ports/audio/flac
 
Twolame basiert auf libsndfile.1, welche wiederum libFlac.10 verlangt, was bei Dir jedoch wahrscheinlich in einer anderen Version vorliegt. Bei mir ist libFlac.10 drauf, während bei Dir libsndfile noch gegen die libFlac.7 gelinkt ist. Ein upgrade von libsndfile (und evtl. flac) sollte es also tun. Am besten portupgrade/portmaster verwenden und aufwärts rekursiv von libsndfile arbeiten, um weitere Probleme zu vermeiden :)
 
Einige Wochen später: Ich habe inzwischen einen Hardwarewechsel durchgeführt, konnte aber gleich weitermachen, da die Installation unter VirtualPC lief. Es geht aber immer noch nicht. Ich habe zuerst mit pkgdb -F -O alles repariert, dann mit portupgrade -a -r und anschließend mußte ich noch mal pkgdb -L machen. Es ging immer noch nicht. Bei libsndfile wurde ein rekursiver Fehler 2 angezeigt. Dann habe ich alle Ports noch mal mit portsnap aktualisiert und VLC deinstalliert. Nun schien die Installation zu klappen, bis zu dem Punkt, daß angezeigt wurde (Fehler 1), daß sich noch eine ältere Version von /usr/ports/devel auf dem Rechner befindet. Also habe ich devel komplett deinstalliert, wobei mir eine große Menge Pakete angezeigt wurde, bei denen die pkg_info korrupt sein soll.

Bei der Reinstallation ging es auch bis zu einem gewissen Punkt gut, dann hat er aber bestimmte Sachen nicht mehr gefunden (java...). Am Anfang wurde angezeigt, daß die Installation das Einlegen einer bestimmten CD erfordert. Daran scheint es wohl zu liegen. Welche CD ist das? Oder soll ich einfach mein Backup mit der nächsten Distri upgraden?

Zur Not hätte ich noch ein Backup des Festplattenimages vor der ganzen Aktion.
 
also ganz grundsätzlich: du solltest den portstree vor einer Installation aus den ports stets aktualisieren.
Er enthält ja auch Bauanleitungen wund wenn die gar nicht zu dem passen, was momentan der Stand ist, sondern irgendwelche veralteten Abhängigkeiten jagen, dann macht das Müll.
Welche CD? Gute frage. So was bekam ich noch nie angezeigt und es würde mich absolut wundern, woher solch eine Aufforderung kommen sollte.
Also, jeden Tag ändert sich der portstree und damit die Bauanweisungen für ports und das muss dein System wissen und durchdenken.
Es denkt nur mit portupgrade oder portmaster. Mit make install clean in den ports mußt du selbst denken. (naja, ein wenig hilft FreeBSD da schon auch).
Mit aktuellem portstree solltest du deine Datenbanken nochmal prüfen (pkgdb) und ich würde da einen kompletten Durchbau des Systems empfehlen, sowas wie portupgrade -arf (oder -aRf oder so, ich kann mir sowas nie merken und sehe immer erst in man nach). Dann bist du gewappnet, falls alles gelingt.
Alternativ habe ich sehr zu schätzen gelernt, was kamikaze uns mit pkg_libchk präsentierte. pkg_libchk -q | xargs -o portupgrade -fu kann vieles aufdecken und lösen.
 
Danke für die Antwort aber wie bekomme ich vorher erstmal mein /usr/ports/devel wieder reinstalliert? Ohne das geht portupgrade -arf nicht (arf = kontrastlos, flau, nebelhaft, undeutlich, verwischt).

Und was mache ich mit den Fehlermeldungen pkg_info corrupted? Das ist während der ganzen portupgrades und pkgdb passiert. Das wird z.B. bei der Deinstallation angezeigt. Die ganzen Linux-Pakete sind korrupt.

Am besten, ich fange noch mal mit dem Backup an. Das ist aber auch nicht mehr ganz sauber.
 
Sorry, sehe gerade, daß ich dieses hier ganz vergessen hatte. Vielleicht ist es nun schon überholt.

also, ich würde das mal so versuchen:
mv /usr/ports/distfiles /usr/
mv /usr/ports/packages /usr/
rm -rf /usr/ports
portsnap fetch extract
portsnap fetch update (der sollte nun keine Änderung bringen, weil eben mit extract ja der aktuelle Baum gezogen wurde, nur so zum sehen, würde ich das doch machen.
wenn ich vorher die beiden mv gemacht hatte (was für ein Deutsch!), kann ich die nun nutzen. Also zurücklinken oder mv oder cp oder so. Ich bin mir nicht sicher, ob du nicht auf diese Sicherungen verzichten solltest und lieber den erneuten Download in Kauf nehmen möchtest. Dann kannst du das Sichern (mv...) nämlich auch gleich lassen.
pkgdb -aUfF (mal wieder so ein Vorschlag aus dem Bauch, sieh vorher die man pages an, du solltest die pkgdb vollkommen neu bauen lassen.
Zur Not, würde ich probieren, die auch zu löschen (in diesem Fall wohl erst mal cp) und dann den Update versuchen. I habe nicht viel Erfahrung hiermit.
/var/db/pkg enthält diese Info, die pkgdb.db, deine Pkg-Database. Also
cp /var/db/pkg/pkgdb.db /usr/pkgdb.db.save
rm /var/db/pkg/pkgdb.db
pkgdb -ufF oder -aufF wären da meine Versuche.
danach würde ich versuchen zu reparieren (du wirst evtl schon einiges dabei zu tun bekommen haben und hast damit die Grundlage gelegt) und zwar entweder diesen ominösen Neubau, der portupgrade -arf aufgelastet werden soll (und erst, nachdem du wieder den portstree aktuallisierrt hast (jenachdem, wie lange dein Datenbank Neubau eben dauert). -arf soll alle installierten nehmen und die recursiv neu bauen und dabei Gewalt anwenden.
Dazu sagte ich bereits in einem anderen thread, den du auch verfolgt hast, daß ich auch dies erst in der man lesen würde und ich tue das jetzt mal, wobei es mir immer wieder schwer fällt.
Aus dem man portupgrade:
Code:
     -a
     --all                  Do with all the installed packages.  Equivalent to
                            specify '*' as pkgname_glob.


     -f
     --force                Force the upgrade of a package even if it is to be
                            a downgrade or just a reinstall of the same ver-
                            sion, or the port is held by user using the
                            HOLD_PKGS variable in pkgtools.conf.

     -F
     --fetch-only           Only fetch distfiles or packages (if -P is speci-
                            fied), do not build, upgrade or install anything.
                            This is useful if you want to download all the
                            needed distfiles or packages at once in advance of
                            installing or upgrading.

                            By default, if a port or a package fails to build
                            or install, its dependents will be skipped.



     -r
     --recursive            Act on all those packages depending on the given
                            packages as well.

     -R
     --upward-recursive     Act on all those packages required by the given
                            packages as well. (When specified with -F, fetch
                            recursively, including the brand new, uninstalled
                            ports that an upgraded port requires)
Ich sage mal, -af ist unstrittig.
Nun kommt die schwere Entscheidung, -r oder -R zu nehmen. -r sagt, wenn ich das recht lese: mache das auch bei allen denen Paketen, die abhängig sind von den angegebenen, in unserem Fall also von allen, weil wir -a setzten.
Dazu nehme ich auch noch einen Ausschnitt aus der /usr/ports/UPDATING, der schon älter ist:
Code:
  gnutls has been updated to 2.2.2 and all shared libraries' versions have
  been bumped.  So you need to rebuild all applications that depend on
  gnutls. Do something like:

	portupgrade -rf gnutls
Ich glaube, das macht es noch deutlicher: -r sorgt dafür. daß alle Pakete neu gebaut werden, die sich auf das angegebene verlassen. Das ist so, als wenn jemand nur ein einziges Paket neu baut und dann eine neue Version hat, alle anderen, die dieses Paket nutzen wollen, aber die alte Version erwarten und sich darauf auch verlassen. Mit dem -r werden alle die anderen Pakete neu gebaut und finden sich deshalb mit der neuen Version des Einen Paketes ab (ich unterscheide bewusst hier nicht nach ports und pakg install).
Weil du dieses -r auf alle installierten anwenden würdest, würden wohl alle installierten Pakete neu durchgebaut.

-R lese ich so:
mache das auch bei all den Paketen, die von den angegebenen Paketen benötigt werden. Wieder ein Beispiel aus der UPDATING:
Code:
  X.org ports were updated to 7.3.  Since we're now using the modular
  build, the upgrade is pretty much painless.  If you're using the
  x11/xorg meta-port, upgrade should be as easy as:

	# portupgrade -R xorg
Also, da wurde Xorg neu gemacht und nun will man allen Paketen das sagen, die von xorg abhängen und lässt die deshalb neu bauen.

Ich gebe es zu, es verwirrt mich immer wieder aufs neue. Wahrscheinlich habe ich es selbst gar nicht verstanden. Trotzdem, oder gerade deshalb, will ich darüber so ausführlich reden!
Bei -r wird auch gern gesagt: abwärts-Recursiv und -R aufwärts-Recursiv.

Nehmen wir mal xclock und lass es mich versuchen, ob ich das erkenne, wie die Zusammenhänge sind:

/usr/ports/x11-clocks/xclock, das kannst du so in dein System einbauen. Wenn dir alles andere egal ist, wird es aber nicht sehr glücklich machen, denn es ist eine Anwendung, die eine Uhr darstellt und dazu einen X-Server braucht. Sie braucht vielleicht noch andere Anwendungen. Sie braucht sicher einen X-Server.
Ein X-Server braucht kein xclock. Vielleicht weiß er noch nicht mal, daß es einen Xclock auf dem System überhaupt gibt. Aber, logischerweise hängt xclock von ihm ab.
Das ist einleuchtend.
Es könnte hier Master-Slave oder Server-Client Anwendung genannt werden, Provider-User ist eine modernere Wort-Konstruktion, es gibt viele Ansätze mit möglicherweise besseren Begriffen und eindeutigeren Bezügen. Wahrscheinlich hat niemand Probleme, die Abhängigkeiten dieses Beispiels zu deuten und eine Master-Slave Beziehung zu sehen. Das ist aber zum Teil nur meine Willkür in der Wahl der Beispiele.

Wenn ich nun xorg ändere, also einen neuen X-Server einbaue, dann ist es mehr als nur höflich, wenn ich alle die Anwendungen, die sich auf den X-Server verlassen, darüber informiere, sie darauf einstelle, sie eben neu durchbauen lasse und das wird offensichtlich mit -R erreicht.

Nun könnte ich aber mal ein neues xclock bekommen und vielleicht würde dieses nur richtig funktionieren, wenn es auch einen neuen Xserver findet und dann könnte das mit -r dafür sorgen, daß genau dieses passiert.

Oh, ich glaube, nun habe ich das tatsächlich verwechselt.

Um es etwas abzukürzen: du hast vollkommen recht (in meinen Augen): das ist arg dubios! Nebulös und undurchsichtig.
Es beginnt schon damit, daß es nicht feststeht, wie eine Hierarchie bestimmt ist. Ist nun die kleine Anwendung (für den Enduser das wichtigste) oberste oder unterste Schicht?
Wir reden von Oben im Sinne von oberflächlich und in Abgrenzung zu tiefgehend, dabei kann es auch Oben im Gegensatz zu Unten meinen. Unten kann die Basis sein, das wichtigste von allem, oder eben das letzte, das Unbedeutendste im Ganzen. Die Begriffe werden hier durchaus konfus verwendet und ebenso übersetzt. Kurz: sie taugen nicht, jedenfalls nicht im Deutschen.
Deshalb funktioniert abwärts- und aufwärts- Recursiv so schlecht, es kann sich niemand was Gescheites dabei denken.

Mir selbst, als Unterschicht-User ist der Unterschied gar nicht so klar.
Weshalb soll es mich denn interessieren: wenn ich eine neue Version von xclock haben will, dann will ich, daß diese zusammen mit allen anderen funktioniert, abwärts und aufwärts und nicht nur mit einer Richtung und es scheint mir auch gar keinen Sinn zu machen, hier zu unterscheiden. Bestenfalls kann bei kluger Wahl der Begriffe die Update-Zeit und -Last reduziert werden.
Wer Zeit hat und sicher gehen will und nicht so klug ist, der hat Glück:
Code:
	# portupgrade -a -x 'gstreamer*'

  Followed by:

	# portupgrade -Rr 'gstreamer*'
sagt die UPDATING -> es geht also beides!

Was folgt daraus: vielleicht, nimm was du willst?
ich würde meinen, der Ultimative Systemneu-durchbau wird am ehesten garantiert mit portupgrade -arRf .

Für Fehler, die oben enthalten sein mögen, entschuldige ich mich, teilweise sind sie absichtlich, teilweise, weil ich es wirklich nicht besser weiß.
-r und -R sind ja beliebte Optionen und das kommt noch verwirrend hinzu. Jedesmal, bei cp, rm, tar, rsync und dann noch unterschiedlich zwischen GNU und FreeBSD und schließlich bei portupgrade zu portmaster, bekommen die beiden eine leicht unterschiedliche Bedeutung. Das muß teilweise sein, teilweise ist es aber einfach lästig und unverständlich. Das finde ich auch und gebe dir dabei Recht, das kommt verwirrend rüber.
Trotzdem kann die man page dazu jedesmal helfen. Du bist also nicht auf solche Deutungskünstler angewiesen, wie ich hier nun einen abgebe.

Aber vergiss mal nicht pkg_libchk -q | xargs -o portupgrade -fu
was zwar nicht alle Abhängigkeiten im Fokus hat, aber alle libs, die in den Abhängigkeiten aufgelöst werden und das kann eine sehr große Hile sein, wenn ein System bereinigt werden soll und das muß bei dir wohl dringend passieren.
 
Zurück
Oben