wie kompiliert man in der Linux-Emu unter NetBSD/FreeBSD?

quarzsnoopy

[Free|Net]BSD - User
Hi Leute,
ich habe vom programmieren nur SEHR wenig Ahnung! Ein Makefile kann ich nicht schreiben aber die Apache-Sourcen von der HP krieg ich noch hin zu kompilieren...

Meine Frage ist jetzt, wie kann man in der Linux-Emu unter *BSD Linux-Code kompilieren?
Und wie mache ich das, das Binäries (oder auch selbst geschriebene Scripte), die ich in die Linux-Emu-Verzeichnisse rein kopiert habe als Linux-Programme laufen und nicht auf Libs aus der *BSD-Umgebung zugraifen. Also, wenn die auf /usr/... zugreifen wollen, in wirklichkeit auf die [EMU]/usr/... zugreifen?
Gibt es da irgendwelche Schalter, Einträge oder Flag's?

Man könnte es mit "chroot" machen, aber ich glaube das läuft wohl etwas anders, denn der "acroread7" ist auch ein Linux-Binary und kommt aus der Emu-Umgebung auch nicht raus, wenn er drucken will (/usr/bin/lp findet er nicht!). Und das "acroread7" in einer chroot-Umgebung startet kann ich mir nicht vorstellen.


Ich würde mich sehr freuen wenn mir das jemand erklären könnte. :)
 
Das die Linuxprogramme nicht in einer "chroot"-Umgebung laufen, zeigt mir auch diese Fehlermeldung:

bash-2.05b$ acroread7
/compat/linux/usr/local/Adobe/Acrobat7.0/Reader/intellinux/bin/acroread: error while loading shared libraries: /usr/X11R6/lib/libfontconfig.so.1: ELF file OS ABI invalid

von einem Rechner, auf dem die Linux-Emu-Umgebung möglicherweise nicht richtig eingerichtet ist.

Was ist denn hier falsch? Da hat "acroread7" wohl nicht die Linux-Lib zu fassen bekommen...
:confused:
 
Crosscompilen geht wohl am bequemsten wenn du VMware oder aehnliches einsetzt.

Unter FreeBSD direkt braeuchtest du einen aktuellen linux_devtools Port (gibts gerade nicht) und koenntest dann mit chroot /compat/linux arbeiten.
 
MrFixit schrieb:
Crosscompilen geht wohl am bequemsten wenn du VMware oder aehnliches einsetzt.

Unter FreeBSD direkt braeuchtest du einen aktuellen linux_devtools Port (gibts gerade nicht) und koenntest dann mit chroot /compat/linux arbeiten.

Danke erstmal für Deine Antwort!

Also mit "chroot" muss man das machen?
Laufen denn die Linux-Programme unter FreeBSD auch in einer "chroot"-Umgebung?
Oder werden dabei nur die Pfade verboden?
 
"Muessen" tut man garnichts. Aber dann muss man hoellisch auf den Linker aufpassen, dass er die richtigen Pfade verwendet. Da ist chroot wirklich die schmerzfreiere Variante.

Im chroot laufen die Programme natuerlich, es muss halt alles benoetigte vorhanden sein. Der o.a. devtools-Port bringt da einiges Essenzielles mit (gcc, ld, etc.).

Ich kann das aber leider nicht weiter testen, da ich linux_base-suse-9.2 fahre, und deren bash3 kann nichtmal nach /dev/null schreiben, weil setfs{g,u}id16 nicht implementiert sind. Da werd ich mich mal ranmachen wenn ich Zeit habe.
 
MrFixit schrieb:
"Muessen" tut man garnichts. Aber dann muss man hoellisch auf den Linker aufpassen, dass er die richtigen Pfade verwendet. Da ist chroot wirklich die schmerzfreiere Variante.

Im chroot laufen die Programme natuerlich, es muss halt alles benoetigte vorhanden sein. Der o.a. devtools-Port bringt da einiges Essenzielles mit (gcc, ld, etc.).

Ich kann das aber leider nicht weiter testen, da ich linux_base-suse-9.2 fahre, und deren bash3 kann nichtmal nach /dev/null schreiben, weil setfs{g,u}id16 nicht implementiert sind. Da werd ich mich mal ranmachen wenn ich Zeit habe.

Kannst Du mir mal beschreiben oder einen Link zu einer Beschreibung hier rein legen...
wie man den Linux-Emu (ich verwende auch die Systemvorgabe => SuSE) richtig einrichtet um darin programmieren zu können und programme auszuführen?

Mein konkretes Problem ist, das ich meine Linux-Emu reparieren muss, komplettes Update nützte nichts

bash-2.05b$ acroread7
/compat/linux/usr/local/Adobe/Acrobat7.0/Reader/intellinux/bin/acroread: error while loading shared libraries: /usr/X11R6/lib/libfontconfig.so.1: ELF file OS ABI invalid

und ein (sehr) kleines Programm übersetzen will, das ich leider nur im Linux-Quellcode habe (damit kann man den Parallelport binär auf gezielte Werte setzen).

Kannst Du mir dabei helfen? :)
 
Also erstens ist Default RedHat 8.0 und nicht Suse. Zweites gibt es doch einen aktuellen devel/linux_devtools Port. Diese beiden willst du installieren, dann kannst du auch den "Linux-Quellcode" (was immer das sein soll) uebersetzen.
 
MrFixit schrieb:
Also erstens ist Default RedHat 8.0 und nicht Suse. Zweites gibt es doch einen aktuellen devel/linux_devtools Port. Diese beiden willst du installieren, dann kannst du auch den "Linux-Quellcode" (was immer das sein soll) uebersetzen.

Danke!
Ja! Du hast recht, ich habe auch die RedHat drauf, SuSE ist die Systemvoreinstellung bei NetBSD... :rolleyes:

Wie kann ich jetzt meinen demolierten Linux-Emu reparieren?
Das ist meine Fehlermeldung:
bash-2.05b$ acroread7
/compat/linux/usr/local/Adobe/Acrobat7.0/Reader/intellinux/bin/acroread: error while loading shared libraries: /usr/X11R6/lib/libfontconfig.so.1: ELF file OS ABI invalid

Das kompilieren ist mir auch nicht so wichtig, aber gut zu wissen, dass es geht. Ist es dann mit der installation des "devel/linux_devtools"-Ports getan? Oder muss man dann noch was beachten?

Danke für Eure Hilfe! :)
 
MrFixit schrieb:
pkg_delete -fx acroread\* linux_\*
portinstall acroread7

Gerade eben hat er die neuinstallation der Linux-Emu und des Acroread 7.0 abgeschlossen,
leider immernoch die selbe Fehlermeldung:

bash-2.05b$ acroread7
/compat/linux/usr/local/Adobe/Acrobat7.0/Reader/intellinux/bin/acroread: error while loading shared libraries: /usr/X11R6/lib/libfontconfig.so.1: ELF file OS ABI invalid

;'(
 
Unter der Annahme, das es dir nur darum geht den Acroreader zum laufen zu bringen (und nicht wirklich ums kompilieren):

"/usr/X11R6/lib/libfontconfig.so.1: ELF file OS ABI invalid"
das klingt doch so, wie wenn der acroreader auf linux apis zugreifen will, aber nur freebsds apis findet. Deswegen (und weil ichs in dem Thread noch nicht gelesen habe):
1) Ist das Kernelmodul für Linuxemulation geladen?
2) Ist in /etc/rc.conf der spezifische Eintrag für die Linuxemulation vorhanden? (linux_enable="YES")

Es sei hierbei auf http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/linuxemu-lbc-install.html verwiesen.
 
quarzsnoopy schrieb:
....
/compat/linux/usr/local/Adobe/Acrobat7.0/Reader/intellinux/bin/acroread: error while loading shared libraries: /usr/X11R6/lib/libfontconfig.so.1: ELF file OS ABI invalid
vieleicht hilft ja das:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/linuxemu-mathematica.html
Alternatively, you can simply set the default ELF brand to Linux for all unbranded binaries with the command:

# sysctl kern.fallback_elf_brand=3

This will make FreeBSD assume that unbranded ELF binaries use the Linux ABI ...
 
thyrver schrieb:
Unter der Annahme, das es dir nur darum geht den Acroreader zum laufen zu bringen (und nicht wirklich ums kompilieren):

"/usr/X11R6/lib/libfontconfig.so.1: ELF file OS ABI invalid"
das klingt doch so, wie wenn der acroreader auf linux apis zugreifen will, aber nur freebsds apis findet. Deswegen (und weil ichs in dem Thread noch nicht gelesen habe):
1) Ist das Kernelmodul für Linuxemulation geladen?
Nein, die Linuxunterstützung hab ich im Kernel einkompiliert.
das bestätigt auch diese Meldung:
bash-2.05b# kldload linux
kldload: can't load linux: File exists

thyrver schrieb:
2) Ist in /etc/rc.conf der spezifische Eintrag für die Linuxemulation vorhanden? (linux_enable="YES")
Ja!

thyrver schrieb:

Ich bin zwar schon seit 5 Jahren bei FreeBSD und hab bis jetzt auch alles damit hin bekommen (mal früher, mal später), aber die ganze Geschichte mit den "Shared Libraries" habe ich noch nicht ganz gefressen. Ich verstehe zwar das grundsätzlich wie das so läuft, aber solche praktischen sachen wie:
% ldd linuxdoom
libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0
libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0
libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29

verstehe ich nicht.
Und dann habe ich mal gehört, das die Pfade der Shared Libraries irgendwie bekannt gemacht werden müssen / geconft werden müssen.

Bis jetzt hab ich nur den Apache mit PHP und allen Abhängigkeiten auf Linux selber kompiliert, da mussten beim configure-Lauf die Shared Libraries angegeben werden. Deshalb weiss ich nicht wofür man die Pfade noch extra confen soll...
Oder hat das mit diesem Problem überhaupt nichts zu tun?

Aber trotzdem schon mal Danke für Eure Mühe! :)
 
maus schrieb:
vieleicht hilft ja das:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/linuxemu-mathematica.html
Code:
Alternatively, you can simply set the default ELF brand to Linux for all unbranded binaries with the command:

# sysctl kern.fallback_elf_brand=3

This will make FreeBSD assume that unbranded ELF binaries use the Linux ABI ...

Danke! Das klingt sehr interessant!!!

bash-2.05b# sysctl -a | grep kern.fallback_elf_brand
kern.fallback_elf_brand: -1

Ich habe mir mal die Seite angesehen, da bin ich wieder auf eine Wissenslücke gestossen! Was bedeutet "Branding the Linux Binaries" ???
Was passiert da und wie wird das vom System ausgewertet?
 
Der Befehl "sysctl kern.fallback_elf_brand=3" hat leider nichts geändert!

Ich habe gerade mal die gesammte Linux-Emu + Acrobat7 + [alle abhängigen Packages]
mit "force" nochmal neu kompiliert und installiert...
keine Änderung.

Vielleicht sollte ich den Kernel mal ohne Linuxunterstützung bauen und das Modul verwenden... obwohl es schon mal funktioniert hat, erst seit einigen Updates nicht mehr... ich weiss aber nicht genau seit wann... :confused:
 
Fehler gefunden!

Das war wirklich ein dummer Flüchtigkeitsfehler, wo man normalerweise garnicht drann denkt...
Das Verzeichnis "/compat/linux/proc" war nicht gemountet!
Naja, ich kann es noch nicht testen, da er mir den Acrobat erstmal wieder installieren muss aber ich bin mir recht sicher, das es daran liegt.

Bleibt nur noch die Frage:

quarzsnoopy schrieb:
....Was bedeutet "Branding the Linux Binaries" ???
Was passiert da und wie wird das vom System ausgewertet?
 
quarzsnoopy schrieb:
Das war wirklich ein dummer Flüchtigkeitsfehler, wo man normalerweise garnicht drann denkt...
Das Verzeichnis "/compat/linux/proc" war nicht gemountet!
Naja, ich kann es noch nicht testen, da er mir den Acrobat erstmal wieder installieren muss aber ich bin mir recht sicher, das es daran liegt.

Bleibt nur noch die Frage:
Antwort gibt evtl.
Murphys Law:
http://www.fen-net.de/norbert.arnoldi/jokes/j_murphy.html
1. 1 (Grundgesetz) Wenn etwas schiefgehen kann, dann wird es schiefgehen.

Nun zu Deiner Frage; brand bedeutet, die ausführbaren Datein werden als *BSD- oder Linux-Datein gekennzeichnet. Das hat zur Folge, daß die zur Ausführung notwendigen libs in / oder /compat/linux gesucht werden.

Ich war nie "nen Azubi zum FISI" oder "nen Informatikstudent" und habe noch zwei Jahre Vorruhestand bis zur Rente. Jetzt sollten solche *BSD- Spezies wie asg oder Maledictus eingreifen, und weitere Erläuterungen geben.
 
Zuletzt bearbeitet:
maus schrieb:
Antwort gibt evtl.
Murphys Law:
http://www.fen-net.de/norbert.arnoldi/jokes/j_murphy.html


Nun zu Deiner Frage; brand bedeutet, die ausführbaren Datein werden als *BSD- oder Linux-Datein gekennzeichnet. Das hat zur Folge, daß die zur Ausführung notwendigen libs in / oder /compat/linux gesucht werden.

Ich war nie "nen Azubi zum FISI" oder "nen Informatikstudent" und habe noch zwei Jahre Vorruhestand bis zur Rente. Jetzt sollten solche *BSD- Spezies wie asg oder Maledictus eingreifen, und weitere Erläuterungen geben.

Danke!
Soetwas in der art habe ich mir schon gedacht.
Mich interessiert jetzt aber mal, wo/wie werden diese Informationen gekenzeichnet?
Gibt es da ein Datei im System oder ist es ein Flag oder ist es ein Bit irgendwo?
Kann man sich diese Infos anzeigen lassen .... wie funktioniert diese "Kennzeichnung" genau?


Übrigens, das vergessene Mounten war nicht der Fehler... ;'(
Jetzt muss ich mir mal ganz expliziet ein kleines monolitisches Linux-Programm ausgucken und ein paar Tests machen...
 
Servus miteinander,

nochmal nachgefragt, da ich mich gerade ebenfalls damit abmühe, ein (gottseidank kleines) Programm für Linux (pxscan für Primax Parport Scanner) unter FreeBSD zu kompilieren.

Habe mich bisher so von -I<library> zur nächsten durchgehangelt. Doch der gcc mag's einfach nicht. Sollte ich einen anderen make nehmen, oder -- Hauptfrage -- ist "chroot /compat/linux" und dann das originale make[file] verwenden die "richtige" Methode? Fertiges Program soll dann unter FreeBSD laufen, linux-mode ist aktiviert.

Wo, bitte, kann ich denn nachlesen, wie man so etwas "richtig" macht?

Vielen Dank (hab' jetzt nur noch ganz wenige Sachen, für die ich WinzigWeich brauche -- es wird täglich weniger).

MfG, Rick.
 
Zurück
Oben