svn commit: r48830 - head/de_DE.ISO8859-1/books/handbook/linuxemu
Bjoern Heidotting
bhd at FreeBSD.org
Wed May 18 19:55:48 UTC 2016
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 at primenet.com</email>)
- an die FreeBSD-Chat-Mailingliste
- (<email>freebsd-chat at FreeBSD.org</email>) geschrieben wurde
- (Message ID: <literal><199906020108.SAA07001 at 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 at primenet.com</email>) an &a.chat; geschrieben
+ wurde (Message ID:
+ <literal><199906020108.SAA07001 at 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>
More information about the svn-doc-head
mailing list