Date: Wed, 18 May 2016 19:55:47 +0000 (UTC) From: Bjoern Heidotting <bhd@FreeBSD.org> To: doc-committers@freebsd.org, svn-doc-all@freebsd.org, svn-doc-head@freebsd.org Subject: svn commit: r48830 - head/de_DE.ISO8859-1/books/handbook/linuxemu Message-ID: <201605181955.u4IJtlio008669@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: bhd Date: Wed May 18 19:55:47 2016 New Revision: 48830 URL: https://svnweb.freebsd.org/changeset/doc/48830 Log: Update to r48090: Patch to get straight to r48090. Reviewed by: bcr Differential Revision: https://reviews.freebsd.org/D6440 Modified: head/de_DE.ISO8859-1/books/handbook/linuxemu/chapter.xml Modified: head/de_DE.ISO8859-1/books/handbook/linuxemu/chapter.xml ============================================================================== --- head/de_DE.ISO8859-1/books/handbook/linuxemu/chapter.xml Wed May 18 00:18:50 2016 (r48829) +++ head/de_DE.ISO8859-1/books/handbook/linuxemu/chapter.xml Wed May 18 19:55:47 2016 (r48830) @@ -5,10 +5,10 @@ $FreeBSD$ $FreeBSDde: de-docproj/books/handbook/linuxemu/chapter.xml,v 1.94 2012/04/30 17:13:51 bcr Exp $ - basiert auf: r40979 + basiert auf: r48090 --> <chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="linuxemu"> - <info><title>Linux-Binärkompatibilität</title> + <info><title>&linux;-Binärkompatibilität</title> <authorgroup> <author><personname><firstname>Jim</firstname><surname>Mock</surname></personname><contrib>Restrukturiert und teilweise aktualisiert von </contrib></author> <!-- 22 Mar 2000 --> @@ -22,8 +22,6 @@ </authorgroup> </info> - - <sect1 xml:id="linuxemu-synopsis"> <title>Übersicht</title> <indexterm> @@ -34,298 +32,182 @@ <secondary>Linux</secondary> </indexterm> - <para>FreeBSD bietet Binärkompatibilität zu verschiedenen - anderen &unix; Betriebssystemen, darunter auch Linux. Nun - könnten Sie sich fragen, warum FreeBSD in der Lage sein - muss, Linux-Binärprogramme auszuführen? Die Antwort - auf diese Frage ist sehr einfach. Viele Unternehmen und Entwickler - programmieren bzw. entwickeln nur für Linux, da es - <quote>das Neueste und Beste</quote> in der Computerwelt ist. - Für uns FreeBSD-Anwender heißt dies, genau diese Unternehmen - und Entwickler zu bitten, FreeBSD-Versionen ihrer Programme - herauszubringen. Das Problem dabei ist nur, dass die meisten dieser - Firmen trotzdem nicht erkennen, wie viele zusätzliche - Anwender ihre Produkte benutzen würden, wenn es auch - FreeBSD-Versionen gäbe, und daher weiterhin - ausschließlich für Linux entwickeln. Was also kann ein - FreeBSD-Anwender tun? Genau an diesem Punkt kommt die Linux- - Binärkompatibilität ins Spiel.</para> - - <para>Um es auf den Punkt zu bringen, genau diese Kompatibilität - erlaubt es FreeBSD-Anwendern, etwa 90 % aller Linux-Anwendungen - ohne Code-Änderungen zu verwenden. Dies schließt - solche Anwendungen wie <application>&staroffice;</application>, - <application>Open Office</application>, die Linux-Versionen von - <application>&adobe; &acrobat;</application>, - <application>&realplayer;</application>, - <application>&oracle;</application>, - <application>Doom</application>, - <application>Quake</application> und viele andere ein. Es wird - sogar berichtet, dass diese Linux-Anwendungen in manchen - Fällen unter FreeBSD eine bessere Leistung als unter - Linux aufweisen.</para> - - <para>Allerdings gibt es nach wie vor einige Linux-spezifische - Betriebssystem-Eigenschaften, die unter FreeBSD nicht - unterstützt werden. Linux-Anwendungen, die - &i386;-spezifische Aufrufe (wie die Aktivierung des - virtuellen 8086-Modus) verwenden, funktionieren - unter FreeBSD leider nicht.</para> + <para>&os; bietet 32-Bit-Binärkompatibilität zu &linux;, so dass + Benutzer 32-Bit &linux; Anwendungen auf einem &os;-System + installieren und ausführen können, ohne die Binärdatei ändern zu + müssen. Es wurde sogar berichtet, dass in einigen Situationen + die 32-Bit &linux; Anwendungen auf &os; besser laufen als unter + &linux;.</para> + + <para>Allerdings werden einige &linux;-spezifischen Merkmale nicht + von &os; unterstützt. &linux;-Anwendungen, die + &i386;-spezifische Aufrufe, wie bspw. die Aktivierung + des virtuellen 8086-Modus verwenden, werden derzeit nicht + unterstützt.</para> + + <para>Nach dem Lesen dieses Kapitels werden Sie wissen:</para> - <para>Nach dem Lesen dieses Kapitels werden Sie</para> <itemizedlist> <listitem> - <para>wissen, wie Sie die Linux-Binärkompatibilität - installieren bzw. aktivieren.</para> + <para>Wie Sie die &linux;-Binärkompatibilität + aktivieren.</para> </listitem> <listitem> - <para>Wissen, wie man zusätzliche Linux-Systembibliotheken - unter FreeBSD installiert.</para> + <para>Wie zusätzliche &linux;-Systembibliotheken installiert + werden.</para> </listitem> <listitem> - <para>Linux-Anwendungen unter FreeBSD installieren können.</para> + <para>Wie Sie &linux;-Anwendungen unter &os; + installieren.</para> </listitem> <listitem> - <para>Wissen, wie die Linux-Binärkompatibilität - unter FreeBSD verwirklicht wurde.</para> + <para>Wie die &linux;-Binärkompatibilität unter &os; + implementiert ist.</para> </listitem> </itemizedlist> - <para>Bevor Sie dieses Kapitel lesen, sollten Sie</para> + <para>Bevor Sie dieses Kapitel lesen, sollten Sie wissen:</para> <itemizedlist> <listitem> - <para>wissen, wie man Software Dritter installiert - (<xref linkend="ports"/>).</para> + <para>Wie Sie <link linkend="ports"> + Software von Drittanbietern installieren</link>.</para> </listitem> </itemizedlist> </sect1> <sect1 xml:id="linuxemu-lbc-install"> - <title>Installation</title> + <title>Konfiguration der &linux;-Binärkompatibilität</title> - <indexterm><primary>KLD (kernel loadable object)</primary></indexterm> + <indexterm><primary>Ports-Sammlung</primary></indexterm> - <para>Die Linux-Binärkompatibilität ist per Voreinstellung - nicht aktiviert. Der einfachste Weg, dies zu tun, ist das - <literal>Linux</literal> KLD (<quote>Kernel LoaDable object</quote>) - zu laden. Dies erreichen Sie durch die Eingabe des folgenden - Befehls:</para> + <para>Die &linux;-Binärkompatibilität ist per Voreinstellung + nicht aktiviert und auch &linux;-Bibliotheken werden nicht + installiert. &linux;-Bibliotheken können entweder manuell, + oder aus der &os; Ports-Sammlung installiert werden.</para> - <screen>&prompt.root; <userinput>kldload linux</userinput></screen> + <para>Bevor Sie versuchen den Port zu bauen, laden Sie das + &linux;-Kernelmodul, da ansonsten der Bau fehlschlägt:</para> - <para>Wollen Sie die Linux-Binärkompatibilität dauerhaft - aktivieren, sollten Sie die folgende Zeile in - <filename>/etc/rc.conf</filename> einfügen:</para> - - <programlisting>linux_enable="YES"</programlisting> + <screen>&prompt.root; <userinput>kldload linux</userinput></screen> - <para>Der &man.kldstat.8;-Befehl kann benutzt werden, um - festzustellen, ob KLD geladen wurde:</para> + <para>Prüfen Sie, ob das Modul geladen wurde:</para> <screen>&prompt.user; <userinput>kldstat</userinput> Id Refs Address Size Name 1 2 0xc0100000 16bdb8 kernel 7 1 0xc24db000 d000 linux.ko</screen> + + <para>Der einfachste Weg um einen Basissatz von + &linux;-Bibliotheken und Binärdateien auf einem &os;-System zu + installieren, ist über den Port oder das Paket + <package>emulators/linux_base-c6</package>. So installieren Sie + das Paket:</para> + + <screen>&prompt.root; <userinput>printf "compat.linux.osrelease=2.6.18\n" >> /etc/sysctl.conf</userinput> +&prompt.root; <userinput>sysctl compat.linux.osrelease=2.6.18</userinput> +&prompt.root; <userinput>pkg install emulators/linux_base-c6</userinput></screen> + + <para>Wollen Sie die &linux;-Binärkompatibilität beim Systemstart + aktivieren, fügen Sie folgende Zeile in + <filename>/etc/rc.conf</filename> hinzu:</para> + + <programlisting>linux_enable="YES"</programlisting> + <indexterm> <primary>Kerneloptionen</primary> <secondary>COMPAT_LINUX</secondary> </indexterm> - <para>Wenn Sie das KLD nicht laden können oder wollen, besteht - auch die Möglichkeit, die Linux-Binärkompatibiltät - statisch in den Kernel einzubinden. Dazu fügen Sie Ihrer - Kernelkonfigurationsdatei den Eintrag - <literal>options COMPAT_LINUX</literal> - hinzu. Anschließend installieren Sie Ihren neuen Kernel - wie in <xref linkend="kernelconfig"/> beschrieben.</para> + <para>Benutzer, die es vorziehen, &linux;-Binärkompatibilität + statisch in den Kernel zu linken, müssen + <literal>options COMPAT_LINUX</literal> in die + Kernelkonfigurationsdatei aufnehmen und anschließend einen neuen + Kernel installieren. Dies ist in <xref linkend="kernelconfig"/> + beschrieben.</para> + + <sect2 xml:id="linuxemu-libs-manually"> + <title>Manuelle Installation zusätzlicher Bibliotheken</title> - <sect2> - <title>Linux-Laufzeitbibliotheken installieren</title> <indexterm> - <primary>Linux</primary> - <secondary>Linux-Laufzeitbibliotheken installieren</secondary> + <primary>Gemeinsam benutzte Bibliotheken</primary> </indexterm> - <para>Dies kann auf zwei Arten geschehen, entweder über den - <link linkend="linuxemu-libs-port">linux_base</link>-Port - oder durch <link linkend="linuxemu-libs-manually">manuelle - Installation</link> der Bibliotheken.</para> - - <sect3 xml:id="linuxemu-libs-port"> - <title>Installation unter Verwendung des linux_base-Ports</title> - <indexterm><primary>Ports-Sammlung</primary></indexterm> - - <para>Dies ist die einfachste Methode, um die Laufzeitbibliotheken - zu installieren. Sie funktioniert genauso wie die - Installation eines beliebigen anderen Ports aus der - <link xlink:href="file://localhost/usr/ports/">Ports-Sammlung</link>. - Dazu machen Sie einfach folgendes:</para> - - <screen>&prompt.root; <userinput>cd /usr/ports/emulators/linux_base-f10</userinput> -&prompt.root; <userinput>make install distclean</userinput></screen> - - <note> - <para>Bei &os;-Systemen vor &os; 8.0 müssen Sie den Port - <package>emulators/linux_base-fc4</package> - anstatt <package>emulators/linux_base-f10</package> - installieren.</para> - </note> - - <para>Sie sollten nun über eine funktionierende - Linux-Binärkompatibilität verfügen. Einige - Programme könnten sich zwar über falsche - Unterversionsnummern der Systembibliotheken beschweren, dies ist - im Allgemeinen aber kein Problem.</para> - - <note> - <para>Unter Umständen gibt es mehrere Versionen des - Ports <package>emulators/linux_base</package>. - Die Ports entsprechen unterschiedlichen Versionen - verschiedener Linux-Distributionen Sie sollten den - Port installieren, der am besten die Anforderungen - der Linux-Anwendung erfüllt.</para> - </note> - </sect3> - - <sect3 xml:id="linuxemu-libs-manually"> - <title>Manuelle Installation der Bibliotheken</title> - - <para>Wenn Sie die <quote>Ports</quote>-Sammlung nicht installiert - haben, können Sie die Bibliotheken auch manuell - installieren. Dazu brauchen Sie die jeweiligen - Linux-Systembibliotheken, die das zu installierende Programm - verwendet sowie den Laufzeit-Linker. Zusätzlich müssen - Sie auf Ihrem FreeBSD-System einen - <quote>virtuellen</quote> Verzeichnisbaum für die - Linux-Bibliotheken einrichten. Alle unter FreeBSD gestarteten - Linux-Programme suchen zuerst in diesem Verzeichnisbaum - nach Systembibliotheken. Wenn also ein Linuxprogramm beispielsweise - <filename>/lib/libc.so</filename> lädt, versucht FreeBSD - zuerst, <filename>/compat/linux/lib/libc.so</filename> laden. - Ist diese Datei nicht vorhanden, wird - <filename>/lib/libc.so</filename> geladen. Systembibliotheken - sollten daher besser in den <quote>virtuellen</quote> Verzeichnisbaum - <filename>/compat/linux/lib</filename> als in den vom - Linux-<command>ld.so</command> vorgeschlagenen installiert - werden.</para> - - <para>Im Allgemeinen müssen Sie nur zu Beginn nach den - Systembibliotheken suchen, die von Linuxprogrammen - benötigt werden. Nach den ersten Installationen von - Linuxprogrammen auf Ihrem FreeBSD-System verfügen Sie - über eine Sammlung von Linux-Systembibliotheken, - die es Ihnen ermöglichen wird, neue Linuxprogramme - ohne Zusatzarbeit zu installieren.</para> - </sect3> - - <sect3> - <title>Installation zusätzlicher Systembibliotheken</title> - <indexterm><primary>Shared-Libraries</primary></indexterm> - - <para>Was passiert, wenn Sie den <filename>linux_base</filename>-Port - installieren, und Ihr Programm beschwert sich trotzdem - über fehlende Systembibliotheken? Woher wissen Sie, - welche Systembibliotheken von Linux-Binärprogrammen - benötigt werden, und wo Sie diese finden? Grundsätzlich - gibt es dafür zwei Möglichkeiten (um dieser - Anleitung zu folgen, müssen Sie unter - FreeBSD als Benutzer <systemitem class="username">root</systemitem> angemeldet - sein):</para> - - <para>Wenn Sie Zugriff auf ein Linux-System haben, können - Sie dort nachsehen, welche Systembibliotheken eine Anwendung - benötigt, und diese auf Ihr FreeBSD-System kopieren. - Dazu folgendes Beispiel:</para> - - <informalexample> - <para>Nehmen wir an, Sie haben FTP verwendet, um die - Linux-Binärversion von <application>Doom</application> - zu bekommen und haben sie auf Ihrem Linux-System installiert. - Nun können Sie überprüfen, welche - Systembibliotheken das Programm benötigt, indem Sie - <command>ldd linuxdoom</command> eingeben. Das Resultat - sieht dann so aus:</para> + <para>Wenn sich eine &linux;-Anwendung über fehlende + Bibliotheken beschwert nachdem die + &linux;-Binärkompatibilität installiert wurde, finden Sie + heraus welche Bibliothken die Anwendung benötigt und + installieren Sie diese manuell.</para> + + <para>Mit <command>ldd</command> können Sie unter &linux; + bestimmen, welche gemeinsam benutzten Bibliotheken eine + Anwendung benötigt. Wenn Sie herausfinden wollen, welche + Bibliotheken <command>linuxdoom</command> benötigt, können Sie + folgenden Befehl auf einem &linux;-System ausführen, welches + <application>Doom</application> installiert hat:</para> - <screen>&prompt.user; <userinput>ldd linuxdoom</userinput> + <screen>&prompt.user; <userinput>ldd linuxdoom</userinput> 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</screen> - <indexterm><primary>symbolische Links</primary></indexterm> - <para>Sie müssten nun alle Dateien aus der - letzten Spalte kopieren und sie unter - <filename>/compat/linux</filename> speichern, wobei - die Namen der ersten Spalte als symbolische Links auf - diese Dateien zeigen. Damit haben Sie schließlich - folgende Dateien auf Ihrem FreeBSD-System:</para> + <para>Kopieren Sie alle Dateien aus der letzten Spalte der + Ausgabe von einem &linux;-System auf das &os;-System in das + Verzeichnis <filename>/compat/linux</filename>. Nach dem + Kopieren erstellen Sie symbolische Links auf die Namen in der + ersten Spalte. In diesem Beispiel werden folgende Dateien auf + dem &os;-System installiert:</para> - <screen>/compat/linux/usr/X11/lib/libXt.so.3.1.0 + <screen>/compat/linux/usr/X11/lib/libXt.so.3.1.0 /compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0 /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29</screen> - <blockquote> - <note> - <para>Beachten Sie, dass wenn Sie bereits eine - Linux-Systembibliothek einer zur ersten Spalte - passenden Hauptversionsnummer (laut - <command>ldd</command>-Ausgabe) besitzen, Sie die Datei - aus der zweiten Spalte nicht mehr kopieren müssen, - da die bereits vorhandene Version funktionieren sollte. - Hat die Systembibliothek jedoch eine neuere - Versionsnummer, sollten Sie sie dennoch kopieren. - Sie können die alte Version löschen, solange - Sie einen symbolischen Link auf die neue - Version anlegen. Wenn Sie also folgende Bibliotheken - auf Ihrem System installiert haben:</para> + <para>Wenn Sie bereits eine &linux;-Bibliothek einer zur + ersten Spalte passenden Hauptversionsnummer besitzen, muss sie + nicht mehr kopiert werden, da die bereits vorhandene Version + funktionieren sollte. Hat die Bibliothek jedoch eine neuere + Versionsnummer, sollten Sie sie dennoch kopieren. Sie können + die alte Version löschen, solange Sie einen symbolischen Link + auf die neue Version anlegen.</para> + + <para>Folgende Bibliotheken existieren bereits auf dem + &os;-System:</para> - <screen>/compat/linux/lib/libc.so.4.6.27 + <screen>/compat/linux/lib/libc.so.4.6.27$ /compat/linux/lib/libc.so.4 -> libc.so.4.6.27</screen> - <para>und Sie haben eine neue Binärdatei, die - laut <command>ldd</command> - eine neuere Bibliothek benötigt:</para> - - <screen>libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29</screen> - - <para>Wenn diese sich nur um ein oder zwei Stellen - in der Unterversionsnummer unterscheiden, müssen - Sie <filename>/lib/libc.so.4.6.29</filename> - nicht auf Ihr System kopieren, da das Programm auch - mit der etwas älteren Version ohne Probleme - funktionieren sollte. Wenn Sie wollen, - können Sie <filename>libc.so</filename> aber - dennoch ersetzen (das heißt aktualisieren), was dann zu - folgender Ausgabe führt:</para> + <para><command>ldd</command> zeigt an, dass eine Anwendung eine + neuere Version benötigt:</para> - <screen>/compat/linux/lib/libc.so.4.6.29 + <screen>libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29</screen> + + <para>Wenn diese Bibliotheken sich nur um ein oder zwei Stellen + in der Unterversionsnummer unterscheiden, sollte das Programm + dennoch mit der älteren Version funktionieren. Wenn Sie + wollen, können Sie die bestehende <filename>libc.so</filename> + durch die neuere Version ersetzen:</para> + + <screen>/compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29</screen> - </note> - </blockquote> - <blockquote> - <note> - <para>Der Mechanismus der symbolischen Links wird - <emphasis>nur</emphasis> für Linux-Binärdateien - benötigt. Der FreeBSD-Laufzeitlinker sucht - sich die passenden Hauptversionsnummern selbst, - das heißt Sie müssen sich nicht darum - kümmern.</para> - </note> - </blockquote> - </informalexample> - </sect3> + <para>Der Mechanismus der symbolischen Links wird nur für + &linux;-Binärdateien benötigt. Nach einer Weile wird es eine + ausreichende Menge an &linux;-Bibliotheken auf dem System + geben, sodass Sie neu installierte &linux;-Anwendungen ohne + zusätzlichen Aufwand auf dem System laufen lassen + können.</para> </sect2> <sect2> - <title>Linux ELF-Binärdateien installieren</title> + <title>&linux; ELF-Binärdateien installieren</title> + <indexterm> <primary>Linux</primary> <secondary>ELF-Binärdatei</secondary> @@ -333,75 +215,81 @@ libc.so.4 (DLL Jump 4.5pl26) => /lib/ <para>ELF-Binärdateien benötigen manchmal eine zusätzliche <quote>Kennzeichnung</quote>. Wenn Sie versuchen, eine nicht - gekennzeichnete ELF-Binärdatei auszuführen, - werden Sie eine Fehlermeldung ähnlich der folgenden - erhalten:</para> + gekennzeichnete ELF-Binärdatei auszuführen, werden Sie eine + Fehlermeldung ähnlich der folgenden erhalten:</para> <screen>&prompt.user; <userinput>./my-linux-elf-binary</userinput> ELF binary type not known Abort</screen> - <para>Damit der FreeBSD-Kernel eine Linux-ELF-Datei von einer - FreeBSD-ELF-Datei unterscheiden kann, gibt es das Werkzeug + <para>Damit der &os;-Kernel eine &linux;-ELF-Datei von einer + &os;-ELF-Datei unterscheiden kann, gibt es das Werkzeug &man.brandelf.1;.</para> <screen>&prompt.user; <userinput>brandelf -t Linux my-linux-elf-binary</userinput></screen> <indexterm><primary>GNU Werkzeuge</primary></indexterm> - <para>Die GNU Werkzeuge schreiben nun automatisch die - passende Kennzeichnungsinformation in die ELF-Binärdateien, - so dass Sie diesen Schritt in Zukunft nur noch selten benötigen - werden.</para> + + <para>Die GNU Werkzeuge schreiben nun automatisch die passende + Kennzeichnungsinformation in die ELF-Binärdateien, so dass Sie + diesen Schritt in Zukunft nur noch selten benötigen.</para> </sect2> <sect2> - <title>Installieren einer beliebigen RPM-basierten Linuxanwendung</title> + <title>Installieren einer <acronym>RPM</acronym>-basierten + &linux;-Anwendung</title> - <para>&os; besitzt seine eigene Paketdatenbank und diese wird dazu - verwendet, um alle Ports (auch &linux;-Ports) zu verfolgen. Deshalb - wird die &linux; RPM-Datenbank nicht benutzt (fehlende - Unterstützung).</para> - - <para>Falls Sie jedoch eine beliebige RPM-basierte &linux;-Anwendung - installieren wollen, erreichen Sie das mittels:</para> + <para>Wenn Sie eine &linux; <acronym>RPM</acronym>-basierte + Anwendung installieren möchten, installieren Sie zunächst den + Port oder das Paket <package>archivers/rpm4</package>. + Anschließend kann der Superuser das folgende Kommando + benutzen, um ein <filename>.rpm</filename> zu + installieren:</para> <screen>&prompt.root; <userinput>cd /compat/linux</userinput> -&prompt.root; <userinput>rpm2cpio -q < /path/to/linux.archive.rpm | cpio -id</userinput></screen> +&prompt.root; <userinput>rpm2cpio < /pfad/zum/linux.archiv.rpm | cpio -id</userinput></screen> - <para>Benutzen Sie dann brandelf auf die installierten - ELF-Binärdateien (nicht die Bibliotheken!). Sie werden keine - saubere Deinstallation hinbekommen, aber evtl. helfen ein paar Tests - weiter.</para> + <para>Fall notwendig, benutzen Sie <command>brandelf</command> + auf den installierten ELF-Binärdateien. Beachten Sie, dass + dies eine saubere Deinstallation verhindert.</para> </sect2> <sect2> <title>Namensauflösung konfigurieren</title> - <para>Wenn DNS nicht funktioniert, oder Sie folgende Fehlermeldung - erhalten:</para> + <para>Wenn <acronym>DNS</acronym> nicht funktioniert, oder die + folgende Fehlermeldung erscheint:</para> <screen>resolv+: "bind" is an invalid keyword resolv+: "hosts" is an invalid keyword</screen> - <para>müssen sie <filename>/compat/linux/etc/host.conf</filename> - wie folgt anlegen:</para> + <para>müssen Sie + <filename>/compat/linux/etc/host.conf</filename> wie folgt + bearbeiten:</para> <programlisting>order hosts, bind multi on</programlisting> <para>Diese Reihenfolge legt fest, dass zuerst - <filename>/etc/hosts</filename> und anschließend DNS - durchsucht werden. Wenn - <filename>/compat/linux/etc/host.conf</filename> nicht vorhanden - ist, finden Linux-Anwendungen FreeBSD's + <filename>/etc/hosts</filename> und anschließend + <acronym>DNS</acronym> durchsucht werden. Wenn + <filename>/compat/linux/etc/host.conf</filename> nicht + vorhanden ist, nutzen &linux;-Anwendungen <filename>/etc/host.conf</filename> und - beschweren sich über die inkompatible FreeBSD-Syntax. Wenn Sie - keinen Nameserver (in <filename>/etc/resolv.conf</filename>) + beschweren sich über die inkompatible &os;-Syntax. Wenn Sie + in <filename>/etc/resolv.conf</filename> keinen Nameserver konfiguriert haben, sollten Sie den Eintrag <literal>bind</literal> entfernen.</para> </sect2> </sect1> + <?ignore + + While the installer works, the binaries do not. As of Oct 2013, + Linux emulation is 32-bit but the trial version of Mathematica is + only available as 64-bit. This section should be revisited if Linux + emulation gets 64-bit binary support. + <sect1 xml:id="linuxemu-mathematica"> <info><title>&mathematica; installieren</title> <authorgroup> @@ -1290,169 +1178,126 @@ export PATH</programlisting> genau so, wie Sie dies auch unter Linux tun würden.</para> </sect2> </sect1> + ?> <sect1 xml:id="linuxemu-advanced"> <title>Weiterführende Themen</title> - <para>Wenn Sie sich fragen, wie die Linux-Binärkompatibilität - unter FreeBSD realisiert wurde, sollten Sie diesen Abschnitt lesen. - Der Großteil der folgenden Informationen stammt aus einer - E-Mail, die von Terry Lambert (<email>tlambert@primenet.com</email>) - an die FreeBSD-Chat-Mailingliste - (<email>freebsd-chat@FreeBSD.org</email>) geschrieben wurde - (Message ID: <literal><199906020108.SAA07001@usr09.primenet.com></literal>).</para> + <para>Dieser Abschnitt beschreibt wie die + &linux;-Binärkompatibilität funktioniert. Die folgenden + Informationen stammen aus einer E-Mail, die von Terry Lambert + (<email>tlambert@primenet.com</email>) an &a.chat; geschrieben + wurde (Message ID: + <literal><199906020108.SAA07001@usr09.primenet.com></literal>).</para> - <sect2> - <title>Wie funktioniert es?</title> <indexterm><primary>execution class loader</primary></indexterm> - <para>FreeBSD verfügt über eine <quote>execution class - loader</quote> genannte Abstraktion. Dabei handelt es sich um einen - Eingriff in den &man.execve.2; Systemaufruf.</para> - - <para>FreeBSD verfügt über eine Liste von Ladern, anstelle - eines einzigen, auf <literal>#!</literal> - zurückgreifenden Laders, um Shell-Interpreter oder Shell-Skripte - auszuführen.</para> + <para>&os; verfügt über eine + <quote>execution class loader</quote> genannte Abstraktion. + Dabei handelt es sich um einen Eingriff in den &man.execve.2; + Systemaufruf.</para> <para>Historisch gesehen untersuchte der einzige, auf - UNIX-Plattformen vorhandene Lader die "magische Zahl" + &unix;-Plattformen vorhandene Lader die "magische Zahl" (in der Regel die ersten 4 oder 8 Bytes der Datei), um festzustellen, ob der Binärtyp dem System bekannt war. War dies der Fall, wurde der Binärlader aufgerufen.</para> <para>Wenn es sich nicht um den zum System gehörigen Binärtyp - handelte, gab &man.execve.2; einen Fehler zurück, - und die Shell versuchte stattdessen, die Datei als Shell-Befehl - auszuführen.</para> - - <para>Dabei wurde als Standardeinstellung <quote>was auch immer die - aktuelle Shell ist</quote> festgelegt.</para> + handelte, gab &man.execve.2; einen Fehler zurück, und die + Shell versuchte stattdessen, die Datei als Shell-Befehl + auszuführen. Dabei wurde als Standardeinstellung + <quote>was auch immer die aktuelle Shell ist</quote> + festgelegt.</para> <para>Später wurde ein Hack in &man.sh.1; eingefügt, der die zwei ersten Zeichen untersuchte. Wenn diese <literal>:\n</literal> entsprachen, - wurde stattdessen die &man.csh.1;-Shell aufgerufen - (wir glauben, dass dies zuerst von SCO umgesetzt wurde).</para> + wurde stattdessen die &man.csh.1;-Shell aufgerufen.</para> - <para>FreeBSD versucht heute eine Liste von Ladern, unter denen - sich ein allgemeiner Lader für Interpreter befindet. Der - auszuführende Interpreter wird im ersten, durch - Leerzeichen getrennten Feld, der <literal>#!</literal>-Zeile - angegeben. Lässt sich der Interpreter nicht ermitteln, - wird auf <filename>/bin/sh</filename> zurückgegriffen.</para> + <para>FreeBSD verfügt über eine Liste von Ladern, anstelle + eines einzigen, auf <literal>#!</literal> + zurückgreifenden Laders, um Shell-Interpreter oder Shell-Skripte + auszuführen.</para> <indexterm><primary>ELF</primary></indexterm> - - <para>Für die Linux ABI-Unterstützung erkennt FreeBSD - die magische Zahl als ELF-Binärdatei (Zu diesem Zeitpunkt wird - nicht zwischen FreeBSD, &solaris;, Linux oder anderen Systemen - unterschieden, die über ELF-Binärdateien - verfügen.).</para> - <indexterm><primary>Solaris</primary></indexterm> - <para>Der ELF-Lader sucht nach einer speziellen - <emphasis>Kennzeichnung</emphasis>, die aus einem Kommentarabschnitt - in der ELF-Datei besteht, und die in SVR4/&solaris; ELF - Binärdateien nicht vorhanden ist.</para> - - <para>Damit Linux-Binärdateien (unter FreeBSD) funktionieren, - müssen sie als <literal> Linux</literal> - <emphasis>gekennzeichnet</emphasis> werden, und zwar durch - &man.brandelf.1;:</para> + <para>Für die &linux; <acronym>ABI</acronym>-Unterstützung + erkennt &os; die magische Zahl als ELF-Binärdatei. Der + ELF-Lader sucht nach einer speziellen + <emphasis>Kennzeichnung</emphasis>, die aus einem + Kommentarabschnitt in der ELF-Datei besteht, und die in + SVR4/&solaris; ELF Binärdateien nicht vorhanden ist.</para> + + <para>Damit &linux;-Binärdateien unter &os; funktionieren, müssen + sie mit &man.brandelf.1; als <literal>Linux</literal> + <emphasis>gekennzeichnet</emphasis> werden:</para> <screen>&prompt.root; <userinput>brandelf -t Linux file</userinput></screen> - <para>Nachdem dies geschehen ist, erkennt der ELF-Lader die - <literal>Linux</literal>-Kennzeichnung der Datei.</para> <indexterm> - <primary>ELF</primary> - <secondary><command>brandelf</command></secondary> + <primary>ELF</primary> + <secondary>Kennzeichnung</secondary> </indexterm> <para>Wenn der ELF-Lader die <literal>Linux</literal>-Kennzeichnung sieht, wird ein Zeiger in der <literal>proc</literal>-Struktur - ersetzt. Alle Systemaufrufe werden durch diesen Zeiger indiziert - (in einem traditionellen &unix; System wäre das ein - <literal>sysent[]</literal>-Strukturfeld, das die Systemaufrufe - enthält). Der Prozess wird weiterhin speziell gekennzeichnet, + ersetzt. Alle Systemaufrufe werden durch diesen Zeiger + indiziert. Der Prozess wird weiterhin speziell gekennzeichnet, so dass der Trap-vector im Signal-trampoline-code eine spezielle - Behandlung erfährt und das Linux-Kernelmodul verschiedene + Behandlung erfährt und das &linux;-Kernelmodul verschiedene kleinere Korrekturen vornehmen kann.</para> - <para>Der Linux-Systemaufrufvektor enthält neben anderen + <para>Der &linux;-Systemaufrufvektor enthält neben anderen Dingen eine Liste der <literal>sysent[]</literal>-Einträge, deren Adressen sich im Kernelmodul befinden.</para> - <para>Wenn ein Linux-Programm einen Systemaufruf ausführt, - dereferenziert die Trap-Behandlungsroutine den Zeiger auf die - Eintrittspunkte für die Systemaufrufe und erhält damit die - Linux-Eintrittspunkte und nicht die FreeBSD-Eintrittspunkte.</para> + <para>Wenn ein &linux;-Programm einen Systemaufruf ausführt, + dereferenziert die Trap-Behandlungsroutine den Zeiger für den + Systemaufruf aus der <literal>proc</literal>-Struktur und + erhält damit die &linux;-Eintrittspunkte für den + Systemaufruf.</para> <para>Zusätzlich <emphasis>verändert</emphasis> der - Linuxmodus die Systempfade dynamisch; genauso, wie dies die + &linux;-Modus die Systempfade dynamisch; genauso, wie dies die Option <option>union</option> beim Einbinden von Dateisystemen - macht (Achtung: <emphasis>nicht</emphasis> das Dateisystem unionfs!). - Zuerst wird die Datei im Verzeichnis <filename>/compat/linux/Originalpfad</filename> - gesucht, <emphasis>danach</emphasis>, wenn sie dort nicht gefunden - wurde, wird sie im FreeBSD-Verzeichnis - <filename>/Originalpfad</filename> - gesucht. Dadurch wird sichergestellt, dass - Binärdateien, die zur Ausführung andere - Binärdateien benötigen, ausgeführt - werden können (so dass alle Linux-Werkzeuge unter der - ABI laufen). Dies bedeutet auch, - dass Linux-Binärdateien FreeBSD-Binärdateien - laden und ausführen können, wenn keine passenden - Linux-Binärdateien vorhanden sind. Ein in - <filename>/compat/linux</filename> plaziertes &man.uname.1; kann - damit Linux-Programmen vorgaukeln, dass sie auf einem Linux-System - laufen.</para> - - <para>Im Endeffekt gibt es einen Linux-Kernel innerhalb des - FreeBSD-Kernels. Die Sprungtabellen für Linux- - beziehungsweise FreeBSD-Systemaufrufe verweisen allerdings auf - dieselben Funktionen, die Kerneldienste wie Dateisystemoperationen, - Operationen für den virtuellen Speicher, - Signalübermittlung und System V IPC bereitstellen, - Der einzige Unterschied ist, dass Binärdateien unter FreeBSD - FreeBSD-<emphasis>glue</emphasis>-Funktionen verwenden. - Linux-Binärdateien hingegen verwenden die - Linux-<emphasis>glue</emphasis>-Funktionen. Die meisten - älteren Betriebssysteme hatten ihre eigenen - <emphasis>glue</emphasis>-Funktionen: Funktionsadressen - in einem globalen, statischen <literal>sysent[]</literal> - Strukturfeld an Stelle von Funktionsadressen, die durch - einen dynamisch initialisierten Zeiger aus der - <literal>proc</literal> Struktur, die den Aufruf gemacht hatte, - dereferenziert wurden.</para> - - <para>Welche ist die echte FreeBSD-ABI? Das spielt keine Rolle. - Grundsätzlich ist der einzige Unterschied (zurzeit - ist das so; dies könnte sich in zukünftigen - Versionen leicht ändern und wird sich wahrscheinlich - auch ändern), dass die - FreeBSD-<emphasis>glue</emphasis>-Funktionen statisch in - den Kernel gelinkt sind, und dass die - Linux-<emphasis>glue</emphasis>-Funktionen statisch gelinkt - oder über ein Modul eingebunden werden können.</para> - - <para>Ja, aber ist das wirkliche eine Emulation? Nein. Es ist eine - Implementierung eines ABIs, keine Emulation. Es ist kein Emulator - (oder Simulator, um der nächsten Frage zuvorzukommen) - beteiligt.</para> - - <para>Warum wird es manchmal <quote>Linux-Emulation</quote> genannt? - Um es schwerer zu machen, FreeBSD zu verkaufen. Wirklich, das kommt - daher, weil dies zu einer Zeit implemtiert wurde, - in der es kein anderes Wort - (als Emulation) gab, das beschrieb, was vor sich ging. - Wenn der Kernel nicht entsprechend konfiguriert wurde oder das - Modul geladen wurde, war es falsch zu behaupten, FreeBSD würde - Linux-Binärprogramme ausführen. Man benötigte - ein Wort, das beschrieb, was da geladen - wurde – daher <quote>Der Linux-Emulator</quote>.</para> - </sect2> + macht. Zuerst wird die Datei im Verzeichnis + <filename>/compat/linux/Originalpfad</filename> gesucht, wenn + sie dort nicht gefunden wurde, wird sie im Verzeichnis + <filename>/Originalpfad</filename> gesucht. Dadurch wird + sichergestellt, dass Binärdateien, die zur Ausführung andere + Binärdateien benötigen, ausgeführt werden können (so dass alle + &linux;-Werkzeuge unter der <acronym>ABI</acronym> laufen). + Dies bedeutet auch, dass &linux;-Binärdateien + &os;-Binärdateien laden und ausführen können, wenn keine + passenden &linux;-Binärdateien vorhanden sind. Ein in + <filename>/compat/linux</filename> plaziertes &man.uname.1; + kann damit &linux;-Programmen vorgaukeln, dass sie auf einem + &linux;-System laufen.</para> + + <para>Im Endeffekt gibt es einen &linux;-Kernel innerhalb des + &os;-Kernels. Die Sprungtabellen für &linux;- beziehungsweise + &os;-Systemaufrufe verweisen allerdings auf dieselben + Funktionen, die Kerneldienste wie Dateisystemoperationen, + Operationen für den virtuellen Speicher, Signalübermittlung + und System V IPC bereitstellen. Der einzige + Unterschied ist, dass Binärdateien unter &os; + &os;-<emphasis>glue</emphasis>-Funktionen verwendet werden. + &linux;-Binärdateien hingegen verwenden die + &linux;-<emphasis>glue</emphasis>-Funktionen. + &os;-<emphasis>glue</emphasis>-Funktionen sind statisch in + den Kernel gelinkt, + &linux;-<emphasis>glue</emphasis>-Funktionen sind statisch + gelinkt oder können über ein ladbares Kernelmodul eingebunden + werden.</para> + + <para>Technisch gesehen ist dies nicht wirklich eine Emulation, + sondern eine <acronym>ABI</acronym>-Implementation. Es wird + manchmal <quote>&linux; Emulation</quote> genannt, da es zu + einer Zeit implementiert wurde, in der es kein anderes Wort + gab, das beschrieb, was vor sich ging. Es war falsch zu + behaupten, &os; würde &linux;-Binärprogramme ausführen, da der + Code nicht unter &os; übersetzt wurde.</para> </sect1> </chapter>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201605181955.u4IJtlio008669>