<?xml version="1.0" encoding="iso-8859-1" standalone="no"?> <!-- The FreeBSD Documentation Project The FreeBSD German Documentation Project $FreeBSD$ $FreeBSDde: de-docproj/books/handbook/linuxemu/chapter.sgml,v 1.94 2012/04/30 17:13:51 bcr Exp $ basiert auf: 1.147 --> <chapter id="linuxemu"> <chapterinfo> <authorgroup> <author> <firstname>Jim</firstname> <surname>Mock</surname> <contrib>Restrukturiert und teilweise aktualisiert von </contrib> </author> <!-- 22 Mar 2000 --> </authorgroup> <authorgroup> <author> <firstname>Brian N.</firstname> <surname>Handy</surname> <contrib>Beigetragen von </contrib> </author> <author> <firstname>Rich</firstname> <surname>Murphey</surname> </author> </authorgroup> <authorgroup> <author> <firstname>Johann</firstname> <surname>Kois</surname> <contrib>Übersetzt von </contrib> </author> </authorgroup> </chapterinfo> <title>Linux-Binärkompatibilität</title> <sect1 id="linuxemu-synopsis"> <title>Übersicht</title> <indexterm> <primary>Linux-Binärkompatibilität</primary> </indexterm> <indexterm> <primary>Binärkompatibilität</primary> <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>&netscape;</application>, <application>&adobe; &acrobat;</application>, <application>&realplayer;</application>, <application>&oracle;</application>, <application>&wordperfect;</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>Nach dem Lesen dieses Kapitels werden Sie</para> <itemizedlist> <listitem> <para>wissen, wie Sie die Linux-Binärkompatibilität installieren bzw. aktivieren.</para> </listitem> <listitem> <para>Wissen, wie man zusätzliche Linux-Systembibliotheken unter FreeBSD installiert.</para> </listitem> <listitem> <para>Linux-Anwendungen unter FreeBSD installieren können.</para> </listitem> <listitem> <para>Wissen, wie die Linux-Binärkompatibilität unter FreeBSD verwirklicht wurde.</para> </listitem> </itemizedlist> <para>Bevor Sie dieses Kapitel lesen, sollten Sie</para> <itemizedlist> <listitem> <para>wissen, wie man Software Dritter installiert (<xref linkend="ports"/>).</para> </listitem> </itemizedlist> </sect1> <sect1 id="linuxemu-lbc-install"> <title>Installation</title> <indexterm><primary>KLD (kernel loadable object)</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> <screen>&prompt.root; <userinput>kldload linux</userinput></screen> <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> <para>Der &man.kldstat.8;-Befehl kann benutzt werden, um festzustellen, ob KLD 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> <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> <sect2> <title>Linux-Laufzeitbibliotheken installieren</title> <indexterm> <primary>Linux</primary> <secondary>Linux-Laufzeitbibliotheken installieren</secondary> </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 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 <ulink type="html" url="file://localhost/usr/ports/">Ports-Sammlung</ulink>. 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 <filename role="package">emulators/linux_base-fc4</filename> anstatt <filename role="package">emulators/linux_base-f10</filename> 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 <filename role="package">emulators/linux_base</filename>. 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 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 <username>root</username> 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> <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> <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> <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> <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> </sect2> <sect2> <title>Linux ELF-Binärdateien installieren</title> <indexterm> <primary>Linux</primary> <secondary>ELF-Binärdatei</secondary> </indexterm> <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> <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 &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> </sect2> <sect2> <title>Installieren einer beliebigen RPM-basierten Linuxanwendung</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> <screen>&prompt.root; <userinput>cd /compat/linux</userinput> &prompt.root; <userinput>rpm2cpio -q < /path/to/linux.archive.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> </sect2> <sect2> <title>Namensauflösung konfigurieren</title> <para>Wenn DNS nicht funktioniert, oder Sie folgende Fehlermeldung erhalten:</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> <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/host.conf</filename> und beschweren sich über die inkompatible FreeBSD-Syntax. Wenn Sie keinen Nameserver (in <filename>/etc/resolv.conf</filename>) konfiguriert haben, sollten Sie den Eintrag <literal>bind</literal> entfernen.</para> </sect2> </sect1> <sect1 id="linuxemu-mathematica"> <sect1info> <authorgroup> <author> <firstname>Boris</firstname> <surname>Hollas</surname> <contrib>Für Mathematica 5.x aktualisiert von </contrib> </author> </authorgroup> </sect1info> <title>&mathematica; installieren</title> <indexterm> <primary>Linux-Anwendungen</primary> <secondary><application>Mathematica</application></secondary> </indexterm> <para>Dieses Dokument beschreibt die Installation der Linux-Version von <application>&mathematica; 5.x</application> auf einem FreeBSD-System.</para> <para>Die Linux-Version von <application>&mathematica;</application> oder <application>&mathematica; für Studenten</application> kann direkt von Wolfram unter <ulink url="http://www.wolfram.com/"></ulink> bestellt werden.</para> <sect2> <title>Den &mathematica;-Installer starten</title> <para>Zuerst müssen Sie &os; mitteilen, dass die Linux-Binärversion von <application>&mathematica;</application> die Linux-ABI verwendet. Dies erreichen Sie am einfachsten, indem Sie die Standard-ELF-Kennzeichnung für alle ungekennzeichneten Binärdateien auf Linux festlegen:</para> <screen>&prompt.root; <userinput>sysctl kern.fallback_elf_brand=3</userinput></screen> <para>Danach wird FreeBSD annehmen, dass alle ungekennzeichneten ELF-Binärdateien die Linux-ABI verwenden und es wäre nun möglich, das Installationsprogramm direkt von der CD-ROM zu starten.</para> <para>Unter &os; müssen allerdings die Datei <filename>MathInstaller</filename> in ein lokales Verzeichnis Ihrer Festplatte kopieren:</para> <screen>&prompt.root; <userinput>mount /cdrom</userinput> &prompt.root; <userinput>cp /cdrom/Unix/Installers/Linux/MathInstaller /LokalesVerzeichnis/</userinput></screen> <para>In dieser Datei ersetzen Sie in der ersten Zeile den Wert <literal>/bin/sh</literal> durch <literal>/compat/linux/bin/sh</literal>. Dadurch wird sichergestellt, dass der Installer von der Linux-Version von &man.sh.1; aufgerufen wird. Danach ersetzen Sie durch das im nächsten Abschnitt zu findende Skript oder über einen Texteditor alle Vorkommen von <literal>Linux)</literal> durch <literal>FreeBSD)</literal>. Dadurch ist es dem <application>&mathematica;</application>-Installer möglich, durch den Einsatz von <command>uname -s</command> das Betriebssystem zu bestimmen. &os; wird dabei als Linux-artiges Betriebssystem behandelt. Durch den Aufruf von <command>MathInstaller</command> kann <application>&mathematica;</application> anschließend installiert werden.</para> </sect2> <sect2> <title>Die &mathematica;-Programmdateien anpassen</title> <para>Das von <application>&mathematica;</application> während der Installation erzeugte Shell-Skript muss angepasst werden, bevor Sie es einsetzen können. Wenn Sie die <application>&mathematica;</application>-Programmdateien unter <filename class="directory">/usr/local/bin</filename> installieren, finden Sie in diesem Verzeichnis die symbolische Links <filename>math</filename>, <filename>mathematica</filename>, <filename>Mathematica</filename>, sowie <filename>MathKernel</filename>. In jeder dieser Dateien müssen Sie jedes Vorkommen von <literal>Linux)</literal> durch <literal>FreeBSD)</literal> ersetzen (entweder über einen Texteditor oder durch das folgende Shellskript):</para> <programlisting>#!/bin/sh cd /usr/local/bin for i in math mathematica Mathematica MathKernel do sed 's/Linux)/FreeBSD)/g' $i > $i.tmp sed 's/\/bin\/sh/\/compat\/linux\/bin\/sh/g' $i.tmp > $i rm $i.tmp chmod a+x $i done</programlisting> </sect2> <sect2> <title>Ihr &mathematica;-Passwort anfordern</title> <indexterm> <primary>Ethernet</primary> <secondary>MAC-Adresse</secondary> </indexterm> <para>Wenn Sie <application>&mathematica;</application> das erste Mal starten, werden Sie nach einem Passwort gefragt. Haben Sie noch kein Passwort von Wolfram erhalten, müssen Sie zuerst im Installationsverzeichnis <command>mathinfo</command> aufrufen, um Ihre <quote>Rechner-ID</quote> zu bestimmen. Diese Rechner-ID basiert ausschließlich auf der MAC-Adresse Ihrer ersten Netzwerkkarte. Daher ist es nicht möglich, Ihre <application>&mathematica;</application>-Kopie auf verschiedenen Rechnern zu installieren.</para> <para>Wenn Sie sich bei Wolfram registrieren (durch E-Mail, Telefon oder Fax), teilen Sie Ihre <quote>Rechner-ID</quote> mit und erhalten dafür ein aus Zahlengruppen bestehendes Passwort.</para> </sect2> <sect2> <title>Das &mathematica;-Frontend über ein Netzwerk ausführen</title> <para><application>&mathematica;</application> verwendet einige spezielle Schriftarten, um Zeichen anzuzeigen, die in den Standardzeichensätzen nicht vorhanden sind (z.B. Integrale, Summen, griechische Buchstaben). Das X-Protokoll verlangt allerdings, dass diese Schriftarten <emphasis>lokal</emphasis> installiert sind. Das bedeutet, dass Sie diese Schriftarten von der CD-ROM oder von einem Rechner, auf dem <application>&mathematica;</application> installiert ist, auf Ihren Rechner kopieren müssen. Diese Schriftarten befinden sich normalerweise in <filename>/cdrom/Unix/Files/SystemFiles/Fonts</filename> (&mathematica;-CD) oder in <filename>/usr/local/mathematica/SystemFiles/Fonts</filename> (Festplatte). Die aktuellen Schriftarten befinden sich dabei in den Unterverzeichnissen <filename>Type1</filename> und <filename>X</filename>. Um diese Schriftarten zu verwenden, gibt es mehrere Möglichkeiten, die nun beschrieben werden:</para> <para>Die erste Möglichkeit besteht darin, die Schriftarten in eins der bereits existierenden Schriftartenverzeichnisse unter <filename>/usr/X11R6/lib/X11/fonts</filename> zu kopieren. Dies bedeutet, dass Sie <filename>fonts.dir</filename> editieren müssen, indem Sie die Schriftnamen hinzufügen und die Anzahl der Schriftarten in der ersten Zeile ändern. Alternativ ist es auch möglich, im Verzeichnis, in das Sie die Schriftarten kopiert haben, das Kommando &man.mkfontdir.1; auszuführen.</para> <para>Die zweite Möglichkeit, besteht darin, die Verzeichnisse nach <filename>/usr/X11R6/lib/X11/fonts</filename> zu kopieren:</para> <screen>&prompt.root; <userinput>cd /usr/X11R6/lib/X11/fonts</userinput> &prompt.root; <userinput>mkdir X</userinput> &prompt.root; <userinput>mkdir MathType1</userinput> &prompt.root; <userinput>cd /cdrom/Unix/Files/SystemFiles/Fonts</userinput> &prompt.root; <userinput>cp X/* /usr/X11R6/lib/X11/fonts/X</userinput> &prompt.root; <userinput>cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1</userinput> &prompt.root; <userinput>cd /usr/X11R6/lib/X11/fonts/X</userinput> &prompt.root; <userinput>mkfontdir</userinput> &prompt.root; <userinput>cd ../MathType1</userinput> &prompt.root; <userinput>mkfontdir</userinput></screen> <para>Nun fügen Sie die neuen Schriftartenverzeichnisse in Ihren Pfad ein:</para> <screen>&prompt.root; <userinput>xset fp+ /usr/X11R6/lib/X11/fonts/X</userinput> &prompt.root; <userinput>xset fp+ /usr/X11R6/lib/X11/fonts/MathType1</userinput> &prompt.root; <userinput>xset fp rehash</userinput></screen> <para>Wenn Sie den &xorg;-Server verwenden, können Sie die Schriftarten-Verzeichnisse automatisch laden lassen, wenn Sie sie in Ihrer <filename>xorg.conf</filename> angeben.</para> <indexterm><primary>Schriftarten</primary></indexterm> <para>Wenn Sie <emphasis>noch kein</emphasis> <filename>/usr/X11R6/lib/X11/fonts/Type1</filename>-Verzeichnis haben, können Sie das <filename>MathType1</filename>-Verzeichnis im vorherigen Beispiel in <filename>Type1</filename> umbenennen.</para> </sect2> </sect1> <sect1 id="linuxemu-maple"> <sect1info> <authorgroup> <author> <firstname>Aaron</firstname> <surname>Kaplan</surname> <!-- <address><email>aaron@lo-res.org</email></address>--> <contrib>Beigetragen von </contrib> </author> </authorgroup> <authorgroup> <author> <firstname>Robert</firstname> <surname>Getschmann</surname> <!-- <address><email>rob@getschmann.org</email></address>--> <contrib>Mit Unterstützung durch </contrib> </author> </authorgroup> </sect1info> <title>&maple; installieren</title> <indexterm> <primary>Linux-Anwendungen</primary> <secondary><application>Maple</application></secondary> </indexterm> <para><application>&maple;</application> ist ein mit <application>&mathematica;</application> vergleichbares kommerzielles Mathematikprogramm. Sie können dieses Programm unter <ulink url="http://www.maplesoft.com/"></ulink> kaufen und sich anschließend registrieren, um eine Lizenz zu erhalten. Um dieses Programm unter FreeBSD zu installieren, gehen Sie wie folgt vor:</para> <procedure> <step><para>Führen Sie das <filename>INSTALL</filename>-Shell-Skript der Softwaredistribution aus. Wählen Sie die <quote>RedHat</quote>-Option aus, wenn Sie das Installationsprogramm danach fragt. Ein typisches Installationsverzeichnis wäre z.B. <filename class="directory">/usr/local/maple</filename>.</para></step> <step><para>Wenn Sie dies noch nicht gemacht haben, besorgen Sie sich nun eine <application>&maple;</application>-Lizenz von Maple Waterloo Software (<ulink url="http://register.maplesoft.com"></ulink>) und kopieren Sie diese nach <filename>/usr/local/maple/license/license.dat</filename>.</para></step> <step><para>Installieren Sie den <application>FLEXlm</application>-Lizenz-Manager, indem Sie das <filename>INSTALL_LIC</filename>-Installations-Shellskript ausführen, das mit <application>&maple;</application> ausgeliefert wird. Geben Sie Ihren primären Rechnernamen für den Lizenz-Server an.</para></step> <step><para>Verändern Sie <filename>/usr/local/maple/bin/maple.system.type</filename> wie folgt:</para> <programlisting> ----- snip ------------------ *** maple.system.type.orig Sun Jul 8 16:35:33 2001 --- maple.system.type Sun Jul 8 16:35:51 2001 *************** *** 72,77 **** --- 72,78 ---- # the IBM RS/6000 AIX case MAPLE_BIN="bin.IBM_RISC_UNIX" ;; + "FreeBSD"|\ "Linux") # the Linux/x86 case # We have two Linux implementations, one for Red Hat and ----- snip end of patch -----</programlisting> <para>Bitte beachten Sie, dass nach <literal>"FreeBSD"|\</literal> kein anderes Zeichen eingefügt werden darf.</para> <para>Dieser Patch weist <application>&maple;</application> an, FreeBSD als <quote>eine Art von Linux-System</quote> zu erkennen. Das Shell-Skript <filename>bin/maple</filename> ruft das Shell-Skript <filename>bin/maple.system.type</filename> auf, welches wiederum <command>uname -a</command> verwendet, um den Namen des Betriebssystems herauszufinden. Abhängig vom Betriebssystem weiß das System nun, welche Binärdateien verwendet werden sollen.</para></step> <step><para>Starten Sie den Lizenz-Server.</para> <para>Das folgende, als <filename>/usr/local/etc/rc.d/lmgrd.sh</filename> installierte Shell-Skript ist ein komfortabler Weg, um <command>lmgrd</command> zu starten:</para> <programlisting> ----- snip ------------ #! /bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin PATH=${PATH}:/usr/local/maple/bin:/usr/local/maple/FLEXlm/UNIX/LINUX export PATH LICENSE_FILE=/usr/local/maple/license/license.dat LOG=/var/log/lmgrd.log case "$1" in start) lmgrd -c ${LICENSE_FILE} 2>> ${LOG} 1>&2 echo -n " lmgrd" ;; stop) lmgrd -c ${LICENSE_FILE} -x lmdown 2>> ${LOG} 1>&2 ;; *) echo "Usage: `basename $0` {start|stop}" 1>&2 exit 64 ;; esac exit 0 ----- snip ------------</programlisting></step> <step><para>Versuchen Sie, <application>&maple;</application> zu starten:</para> <screen>&prompt.user; <userinput>cd /usr/local/maple/bin</userinput> &prompt.user; <userinput>./xmaple</userinput></screen> <para>Nun sollte das Programm laufen und alles funktionieren. Falls ja, vergessen Sie nicht, an Maplesoft zu schreiben und sie wissen zu lassen, dass Sie gerne eine native FreeBSD-Version hätten.</para></step> </procedure> <sect2> <title>Häufige Fehlerquellen</title> <itemizedlist> <listitem><para>Der <application>FLEXlm</application>-Lizenzmanager kann schwierig zu bedienen sein. Zusätzliche Dokumentation zu diesem Thema finden Sie unter <ulink url="http://www.globetrotter.com/"></ulink>.</para></listitem> <listitem><para>Es ist bekannt, dass <command>lmgrd</command> sehr pingelig ist, wenn es um die Lizenzdatei geht. Gibt es Probleme, führt dies zu einem Speicherauszug (<foreignphrase>core dump</foreignphrase>). Ein korrekte Lizenzdatei sollte ähnlich der folgenden aussehen:</para> <programlisting># ======================================================= # License File for UNIX Installations ("Pointer File") # ======================================================= SERVER chillig ANY #USE_SERVER VENDOR maplelmg FEATURE Maple maplelmg 2000.0831 permanent 1 XXXXXXXXXXXX \ PLATFORMS=i86_r ISSUER="Waterloo Maple Inc." \ ISSUED=11-may-2000 NOTICE=" Technische Universitat Wien" \ SN=XXXXXXXXX</programlisting> <note><para>Seriennummer und Schlüssel wurden durch mehrere <literal>X</literal> unkenntlich gemacht. <hostid>chillig</hostid> ist ein Rechnername.</para></note> <para>Veränderungen an der Lizenzdatei sind möglich, solange Sie die <literal>FEATURE</literal>-Zeile nicht verändern (diese ist durch den Lizenzschlüssel geschützt).</para></listitem> </itemizedlist> </sect2> </sect1> <sect1 id="linuxemu-matlab"> <sect1info> <authorgroup> <author> <firstname>Dan</firstname> <surname>Pelleg</surname> <contrib>Beigesteuert von </contrib> </author> <!-- daniel+handbook@pelleg.org --> </authorgroup> </sect1info> <title>&matlab; installieren</title> <indexterm> <primary>Linux-Anwendungen</primary> <secondary><application>MATLAB</application></secondary> </indexterm> <para>Im Folgenden wird die Installation der Linux-Anwendung <application>&matlab;</application> Version 6.5 auf &os; beschrieben. Mit Ausnahme der <application>&java.virtual.machine;</application> (siehe <xref linkend="matlab-jre"/>) läuft die Anwendung auch ganz gut.</para> <para>Die Linux-Version von <application>&matlab;</application> können Sie direkt bei <ulink url="http://www.mathworks.com">The MathWorks</ulink> bestellen. Vergewissern Sie sich, dass Sie die Lizenz-Datei oder eine Anleitung zum Erstellen der Lizenz-Datei erhalten haben. Wenn Sie mit MathWorks in Kontakt stehen, weisen Sie bitte auf die fehlende &os;-Version der Software hin.</para> <sect2> <title>Das &matlab;-Installationsskript</title> <para>Um <application>&matlab;</application> zu installieren, gehen Sie wie folgt vor:</para> <procedure> <step> <para>Hängen Sie die Installations-CD ein und wechseln Sie zu <username>root</username>, wie im Installations-Skript gefordert. Starten Sie die Installation mit dem folgenden Kommando:</para> <screen>&prompt.root; <userinput>/compat/linux/bin/sh /cdrom/install</userinput></screen> <tip> <para>Die Installation erfordert eine graphische Benutzeroberfläche. Wenn Sie die Fehlermeldung erhalten, dass das Display nicht geöffnet werden konnte, führen Sie das folgende Kommando aus:</para> <screen>&prompt.root; <userinput>setenv HOME ~<replaceable>USER</replaceable></userinput></screen> <para>Für <replaceable>USER</replaceable> setzen Sie den Benutzer ein, von dem aus Sie <username>root</username> geworden sind.</para> </tip> </step> <step> <para>Beantworten Sie die Frage nach dem <application>&matlab;</application>-Root-Verzeichnis mit: <userinput>/compat/linux/usr/local/matlab</userinput>.</para> <tip> <para>Den langen Pfad werden Sie noch öfter brauchen. Die Tipparbeit können Sie sich mit dem folgenden Befehl erleichtern:</para> <screen>&prompt.root; <userinput>set MATLAB=/compat/linux/usr/local/matlab</userinput></screen> </tip> </step> <step> <para>Editieren Sie die Lizenz-Datei entsprechend der Anweisung, die Sie beim Erwerb der Lizenz erhalten haben.</para> <tip> <para>Sie können die Datei schon vorher mit Ihrem Lieblingseditor bearbeiten. Kopieren Sie die Lizenz-Datei nach <filename>$MATLAB/license.dat</filename> bevor das Installationsprogramm Sie auffordert, die Datei zu editieren.</para> </tip> </step> <step> <para>Schließen Sie die Installation ab.</para> </step> </procedure> <para>Die <application>&matlab;</application>-Installation ist jetzt abgeschlossen. Die folgenden Schritte passen <application>&matlab;</application> an &os; an.</para> </sect2> <sect2> <title>Den Lizenzmanager starten</title> <procedure> <step> <para>Erstellen Sie symbolische Links zu den Startskripten des Lizenzmanagers:</para> <screen>&prompt.root; <userinput>ln -s $MATLAB/etc/lmboot /usr/local/etc/lmboot_TMW</userinput> &prompt.root; <userinput>ln -s $MATLAB/etc/lmdown /usr/local/etc/lmdown_TMW</userinput></screen> </step> <step> <para>Erstellen Sie das Startskript <filename>/usr/local/etc/rc.d/flexlm.sh</filename>. Das folgende Beispiel ist eine geänderte Version des mitgelieferten Skripts <filename>$MATLAB/etc/rc.lm.glnx86</filename>. Angepasst wurden die Pfade zu den Dateien und der Start des Lizenzmanagers unter der Linux-Emulation.</para> <programlisting>#!/bin/sh case "$1" in start) if [ -f /usr/local/etc/lmboot_TMW ]; then /compat/linux/bin/sh /usr/local/etc/lmboot_TMW -u <replaceable>username</replaceable> && echo 'MATLAB_lmgrd' fi ;; stop) if [ -f /usr/local/etc/lmdown_TMW ]; then /compat/linux/bin/sh /usr/local/etc/lmdown_TMW > /dev/null 2>&1 fi ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac exit 0</programlisting> <important> <para>Machen Sie Datei ausführbar:</para> <screen>&prompt.root; <userinput>chmod +x /usr/local/etc/rc.d/flexlm.sh</userinput></screen> <para>Ersetzen Sie im Skript <replaceable>username</replaceable> durch einen existierenden Benutzer Ihres Systems (bitte keinesfalls <username>root</username>).</para> </important> </step> <step> <para>Starten Sie den Lizenzmanager:</para> <screen>&prompt.root; <userinput>/usr/local/etc/rc.d/flexlm.sh start</userinput></screen> </step> </procedure> </sect2> <sect2 id="matlab-jre"> <title>Einrichten der &java;-Laufzeitumgebung</title> <para>Erstellen Sie einen symbolischen Link auf eine unter &os; laufende &java;-Laufzeitumgebung (JRE):</para> <screen>&prompt.root; <userinput>cd $MATLAB/sys/java/jre/glnx86/</userinput> &prompt.root; <userinput>unlink jre; ln -s ./jre1.1.8 ./jre</userinput></screen> </sect2> <sect2> <title>Ein &matlab;-Startskript erstellen</title> <procedure> <step> <para>Kopieren Sie das folgende Skript nach <filename>/usr/local/bin/matlab</filename>:</para> <programlisting>#!/bin/sh /compat/linux/bin/sh /compat/linux/usr/local/matlab/bin/matlab "$@"</programlisting> </step> <step> <para>Machen Sie das Skript ausführbar:</para> <screen>&prompt.root; <userinput>chmod +x /usr/local/bin/matlab</userinput></screen> </step> </procedure> <tip> <para>Abhängig von der Version des Ports <filename role="package">emulators/linux_base</filename> kann das Skript auf Fehler laufen. Die Fehler können Sie vermeiden, indem Sie die Datei <filename>/compat/linux/usr/local/matlab/bin/matlab</filename> editieren. Ändern Sie die nachstehende Zeile</para> <programlisting>if [ `expr "$lscmd" : '.*->.*'` -ne 0 ]; then</programlisting> <para>(mit Version 13.0.1 in der Zeile 410) in die folgende um:</para> <programlisting>if test -L $newbase; then</programlisting> </tip> </sect2> <sect2> <title>Stopp-Skript für &matlab; erstellen</title> <para>Das nachstehende Skript beendet &matlab; ordnungsgemäß.</para> <procedure> <step> <para>Erstellen Sie die Datei <filename>$MATLAB/toolbox/local/finish.m</filename> mit dem nachstehenden Inhalt:</para> <programlisting>! $MATLAB/bin/finish.sh</programlisting> <note> <para>Übernehmen Sie die Zeichenkette <literal>$MATLAB</literal> unverändert.</para> </note> <tip> <para>Im selben Verzeichnis befinden sich die Dateien <filename>finishsav.m</filename> und <filename>finishdlg.m</filename>. Die Dateien sichern die Einstellungen der Arbeitsfläche bevor &matlab; beendet wird. Wenn Sie eine der beiden Dateien benutzen, fügen Sie die obige Zeile unmittelbar nach dem <literal>save</literal>-Kommando ein.</para> </tip> </step> <step> <para>Erstellen Sie die Datei <filename>$MATLAB/bin/finish.sh</filename> mit nachstehendem Inhalt:</para> <programlisting>#!/compat/linux/bin/sh (sleep 5; killall -1 matlab_helper) & exit 0</programlisting> </step> <step> <para>Machen Sie die Datei ausführbar:</para> <screen>&prompt.root; <userinput>chmod +x $MATLAB/bin/finish.sh</userinput></screen> </step> </procedure> </sect2> <sect2 id="matlab-using"> <title>&matlab; benutzen</title> <para>Jetzt können Sie <application>&matlab;</application> mit dem <command>matlab</command> starten.</para> </sect2> </sect1> <sect1 id="linuxemu-oracle"> <sect1info> <authorgroup> <author> <firstname>Marcel</firstname> <surname>Moolenaar</surname> <contrib>Beigetragen von </contrib> </author> <!-- marcel@cup.hp.com --> </authorgroup> </sect1info> <title>&oracle; installieren</title> <indexterm> <primary>Linux-Anwendungen</primary> <secondary><application>Oracle</application></secondary> </indexterm> <sect2> <title>Übersicht</title> <para>Dieses Dokument beschreibt die Installation von <application>&oracle; 8.0.5</application> und <application>&oracle; 8.0.5.1 Enterprise Edition</application> für Linux auf einem FreeBSD-Rechner.</para> </sect2> <sect2> <title>Installation der Linux-Umgebung</title> <para>Stellen Sie sicher, dass Sie sowohl <filename role="package">emulators/linux_base</filename> und <filename role="package">devel/linux_devtools</filename> aus der Ports-Sammlung installiert haben. Wenn Sie mit diesen Ports Schwierigkeiten haben, müssen Sie vielleicht ältere Versionen der Linux-Umgebung aus der Ports-Sammlung installieren.</para> <para>Wenn Sie den Intelligent-Agent verwenden wollen, müssen Sie zusätzlich das RedHat Tcl-Paket installieren: <filename>tcl-8.0.3-20.i386.rpm</filename>. Zur Installation von RPM-Paketen wir der Port <filename role='package'>archivers/rpm</filename> benötigt. Ist der Port installiert, lassen sich RPM-Pakete anschließend mit dem nachstehenden Befehl installieren:</para> <screen>&prompt.root; <userinput>rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm <replaceable>package</replaceable></userinput></screen> <para>Die Installation der RPM-Pakete sollte ohne Fehlermeldung ablaufen.</para> </sect2> <sect2> <title>Die &oracle;-Umgebung erzeugen</title> <para>Bevor Sie <application>&oracle;</application> installieren können, müssen Sie eine entsprechende Umgebung erzeugen. Dieses Dokument beschreibt nur, was Sie <emphasis>im Speziellen</emphasis> tun müssen, um die Linux-Version von <application>&oracle;</application> unter FreeBSD zu installieren, nicht aber, was bereits in der Installationsanleitung von <application>&oracle;</application> beschrieben wird.</para> <sect3 id="linuxemu-kernel-tuning"> <title>Kernel-Tuning</title> <indexterm><primary>Kernel Tuning</primary></indexterm> <para>Wie in der Installationsanleitung von <application>&oracle;</application> beschrieben, müssen Sie die maximale Shared-Memory Größe festlegen. Verwenden Sie <literal>SHMMAX</literal> nicht unter FreeBSD. <literal>SHMMAX</literal> wird lediglich aus <literal>SHMMAXPGS</literal> und <literal>PGSIZE</literal> berechnet. Definieren Sie stattdessen <literal>SHMMAXPGS</literal>. Alle anderen Optionen können wie in der Anleitung beschrieben verwendet werden. Zum Beispiel:</para> <programlisting>options SHMMAXPGS=10000 options SHMMNI=100 options SHMSEG=10 options SEMMNS=200 options SEMMNI=70 options SEMMSL=61</programlisting> <para>Passen Sie diese Optionen entsprechend dem von Ihnen gewünschten Einsatzzweck von <application>&oracle;</application> an.</para> <para>Stellen Sie außerdem sicher, dass Sie folgende Optionen in Ihren Kernel kompilieren:</para> <programlisting>options SYSVSHM #SysV shared memory options SYSVSEM #SysV semaphores options SYSVMSG #SysV interprocess communication</programlisting> </sect3> <sect3 id="linuxemu-oracle-account"> <title>&oracle;-Benutzer anlegen</title> <para>Legen Sie den Account <username>oracle</username> an. Der Account unterschiedet sich von normalen Accounts dadurch, dass er eine Linux-Shell zugeordnet bekommen muss. Fügen Sie <literal>/compat/linux/bin/bash</literal> in die Datei <filename>/etc/shells</filename> ein und setzen Sie die Shell für den <username>oracle</username>-Account auf <filename>/compat/linux/bin/bash</filename>.</para> </sect3> <sect3 id="linuxemu-environment"> <title>Umgebung</title> <para>Neben den normalen <application>&oracle;</application>-Variablen, wie z.B. <envar>ORACLE_HOME</envar> und <envar>ORACLE_SID</envar> müssen Sie die folgenden Variablen setzen:</para> <informaltable frame="none" pgwide="1"> <tgroup cols="2"> <colspec colwidth="1*"/> <colspec colwidth="2*"/> <thead> <row> <entry>Variable</entry> <entry>Wert</entry> </row> </thead> <tbody> <row> <entry><envar>LD_LIBRARY_PATH</envar></entry> <entry><literal>$ORACLE_HOME/lib</literal></entry> </row> <row> <entry><envar>CLASSPATH</envar></entry> <entry><literal>$ORACLE_HOME/jdbc/lib/classes111.zip</literal></entry> </row> <row> <entry><envar>PATH</envar></entry> <entry><literal>/compat/linux/bin /compat/linux/sbin /compat/linux/usr/bin /compat/linux/usr/sbin /bin /sbin /usr/bin /usr/sbin /usr/local/bin $ORACLE_HOME/bin</literal></entry> </row> </tbody> </tgroup> </informaltable> <para>Es ist empfehlenswert, alle Variablen in der Datei <filename>.profile</filename> zu setzen. Ein komplettes Beispiel sieht folgendermaßen aus:</para> <programlisting>ORACLE_BASE=/oracle; export ORACLE_BASE ORACLE_HOME=/oracle; export ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib export LD_LIBRARY_PATH ORACLE_SID=ORCL; export ORACLE_SID ORACLE_TERM=386x; export ORACLE_TERM CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip export CLASSPATH PATH=/compat/linux/bin:/compat/linux/sbin:/compat/linux/usr/bin PATH=$PATH:/compat/linux/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin PATH=$PATH:/usr/local/bin:$ORACLE_HOME/bin export PATH</programlisting> </sect3> </sect2> <sect2> <title>&oracle; installieren</title> <para>Auf Grund einer kleinen Unregelmäßigkeit im Linux-Emulator müssen Sie das Verzeichnis <filename>.oracle</filename> unter <filename>/var/tmp</filename> erzeugen, bevor Sie das Installationsprogramm starten. Das Verzeichnis muss dem Account <username>oracle</username> gehören. Sie sollten <application>&oracle;</application> nun ohne Probleme installieren können. Treten dennoch Probleme auf, überprüfen Sie zuerst Ihre <application>&oracle;</application>-Distribution und Ihre Konfiguration. Nachdem Sie <application>&oracle;</application> erfolgreich installiert haben, installieren Sie die Patches wie in den zwei folgenden Abschnitten beschrieben:</para> <para>Ein häufiges Problem ist, dass der TCP Protokoll-Adapter nicht korrekt installiert wird. Daraus folgt, dass Sie keine TCP-Listener starten können. Dieses Problem kann durch folgende Schritte behoben werden:</para> <screen>&prompt.root; <userinput>cd $ORACLE_HOME/network/lib</userinput> &prompt.root; <userinput>make -f ins_network.mk ntcontab.o</userinput> &prompt.root; <userinput>cd $ORACLE_HOME/lib</userinput> &prompt.root; <userinput>ar r libnetwork.a ntcontab.o</userinput> &prompt.root; <userinput>cd $ORACLE_HOME/network/lib</userinput> &prompt.root; <userinput>make -f ins_network.mk install</userinput></screen> <para>Vergessen Sie nicht, <filename>root.sh</filename> nochmals auszuführen!</para> <sect3 id="linuxemu-patch-root"> <title>root.sh patchen</title> <para>Während der <application>&oracle;</application>-Installation werden einige Aktionen, die als <username>root</username> ausgeführt werden müssen, in ein Shell-Skript mit dem Namen <filename>root.sh</filename> gespeichert. Dieses Skript befindet sich im Verzeichnis <filename>orainst</filename>. Verwenden Sie folgenden Patch für <filename>root.sh</filename>, damit es das richtige <command>chown</command> Kommando verwendet, oder lassen Sie das Skript alternativ unter einer Linux-Shell ablaufen:</para> <programlisting>*** orainst/root.sh.orig Tue Oct 6 21:57:33 1998 --- orainst/root.sh Mon Dec 28 15:58:53 1998 *************** *** 31,37 **** # This is the default value for CHOWN # It will redefined later in this script for those ports # which have it conditionally defined in ss_install.h ! CHOWN=/bin/chown # # Define variables to be used in this script --- 31,37 ---- # This is the default value for CHOWN # It will redefined later in this script for those ports # which have it conditionally defined in ss_install.h ! CHOWN=/usr/sbin/chown # # Define variables to be used in this script</programlisting> <para>Wenn Sie <application>&oracle;</application> nicht von CD-ROM installieren, können Sie Quelldatei für <filename>root.sh</filename> verändern. Sie heißt <filename>rthd.sh</filename> und befindet sich im <filename>orainst</filename>-Verzeichnis des Quellcodebaums.</para> </sect3> <sect3 id="linuxemu-patch-tcl"> <title>genclntsh patchen</title> <para>Das Skript <command>genclntsh</command> wird verwendet, um eine Shared-Library für Clients zu erzeugen. Diese wird bei der Erzeugung der Demos verwendet. Verwenden Sie folgenden Patch, um die Definition von <envar>PATH</envar> auszukommentieren:</para> <programlisting>*** bin/genclntsh.orig Wed Sep 30 07:37:19 1998 --- bin/genclntsh Tue Dec 22 15:36:49 1998 *************** *** 32,38 **** # # Explicit path to ensure that we're using the correct commands #PATH=/usr/bin:/usr/ccs/bin export PATH ! PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH # # each product MUST provide a $PRODUCT/admin/shrept.lst --- 32,38 ---- # # Explicit path to ensure that we're using the correct commands #PATH=/usr/bin:/usr/ccs/bin export PATH ! #PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH # # each product MUST provide a $PRODUCT/admin/shrept.lst</programlisting> </sect3> </sect2> <sect2> <title>&oracle; starten</title> <para>Wenn Sie den Anweisungen gefolgt sind, sollten Sie nun in der Lage sein, <application>&oracle;</application> zu starten, genau so, wie Sie dies auch unter Linux tun würden.</para> </sect2> </sect1> <sect1 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> <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>Historisch gesehen untersuchte der einzige, auf 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> <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> <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> <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> <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> </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, so dass der Trap-vector im Signal-trampoline-code eine spezielle Behandlung erfährt und das Linux-Kernelmodul verschiedene kleinere Korrekturen vornehmen kann.</para> <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>Zusätzlich <emphasis>verändert</emphasis> der Linuxmodus 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/<replaceable>Originalpfad</replaceable></filename> gesucht, <emphasis>danach</emphasis>, wenn sie dort nicht gefunden wurde, wird sie im FreeBSD-Verzeichnis <filename>/<replaceable>Originalpfad</replaceable></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> </sect1> </chapter>