White space only changes to fix long lines.
This commit is contained in:
parent
19d4d8cc1a
commit
44173f163e
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=5634
2 changed files with 172 additions and 150 deletions
|
|
@ -12,19 +12,19 @@
|
|||
<sect1>
|
||||
<title>How to Install the Linux Mode</title>
|
||||
|
||||
<para>Linux binary compatibility in FreeBSD has reached a point where it is possible
|
||||
to run a large fraction of Linux binaries in both a.out and ELF format.
|
||||
The Linux compatibility in the 2.1-STABLE branch is capable of running Linux
|
||||
DOOM and Mathematica; the version present in &rel.current;-RELEASE is
|
||||
vastly more capable and runs all these as well as Oracle8,
|
||||
WordPerfect, StarOffice, Acrobat, Quake, Abuse, IDL, and
|
||||
<para>Linux binary compatibility in FreeBSD has reached a point where it
|
||||
is possible to run a large fraction of Linux binaries in both a.out and
|
||||
ELF format. The Linux compatibility in the 2.1-STABLE branch is capable
|
||||
of running Linux DOOM and Mathematica; the version present in
|
||||
&rel.current;-RELEASE is vastly more capable and runs all these as well
|
||||
as Oracle8, WordPerfect, StarOffice, Acrobat, Quake, Abuse, IDL, and
|
||||
netrek for Linux and a whole host of other programs.</para>
|
||||
|
||||
<para>There are some Linux-specific operating system features that are not
|
||||
supported on FreeBSD. Linux binaries will not work on FreeBSD if they
|
||||
overly use the Linux <filename>/proc</filename> filesystem (which is different
|
||||
from the optional FreeBSD <filename>/proc</filename> filesystem) or
|
||||
i386-specific calls, such as enabling virtual 8086 mode.</para>
|
||||
overly use the Linux <filename>/proc</filename> filesystem (which is
|
||||
different from the optional FreeBSD <filename>/proc</filename> filesystem)
|
||||
or i386-specific calls, such as enabling virtual 8086 mode.</para>
|
||||
|
||||
<para>Depending on which version of FreeBSD you are running, how you get
|
||||
Linux mode up will vary somewhat:</para>
|
||||
|
|
@ -33,10 +33,11 @@
|
|||
<title>Installing Linux Mode in 3.0-RELEASE and later</title>
|
||||
|
||||
<para>It is no longer necessary to specify <literal>options
|
||||
LINUX</literal> or <literal>options COMPAT_LINUX</literal>. Linux
|
||||
binary compatibility is done with an KLD object (“Kernel LoaDable object”)
|
||||
so it can be installed on the fly without having to reboot. You will
|
||||
need the following things in your startup files, however:</para>
|
||||
LINUX</literal> or <literal>options COMPAT_LINUX</literal>. Linux
|
||||
binary compatibility is done with an KLD object (“Kernel LoaDable
|
||||
object”) so it can be installed on the fly without having to
|
||||
reboot. You will need the following things in your startup files,
|
||||
however:</para>
|
||||
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
|
|
@ -59,7 +60,8 @@ fi</programlisting>
|
|||
</listitem>
|
||||
</orderedlist>
|
||||
|
||||
<para>If you want to verify that the KLD is loaded, <command>kldstat</command> will do that:</para>
|
||||
<para>If you want to verify that the KLD is loaded,
|
||||
<command>kldstat</command> will do that:</para>
|
||||
|
||||
<screen>&prompt.user; kldstat
|
||||
Id Refs Address Size Name
|
||||
|
|
@ -67,25 +69,26 @@ Id Refs Address Size Name
|
|||
7 1 0xc24db000 d000 linux.ko</screen>
|
||||
|
||||
<para>If for some reason you do not want to or cannot load the
|
||||
Linux KLD, then statically link the binary compatibility in the kernel by
|
||||
adding
|
||||
Linux KLD, then statically link the binary compatibility in the kernel
|
||||
by adding
|
||||
|
||||
<programlisting>
|
||||
options LINUX</programlisting>
|
||||
|
||||
to your kernel config file. Then run <command>config</command> and install the new
|
||||
kernel as described in the <link linkend="kernelconfig">kernel
|
||||
configuration</link> section.</para>
|
||||
to your kernel config file. Then run <command>config</command> and install
|
||||
the new kernel as described in the <link linkend="kernelconfig">kernel
|
||||
configuration</link> section.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Installing Linux Mode in 2.2.2-RELEASE and later 2.2.x versions</title>
|
||||
|
||||
<para>It is no longer necessary to specify <literal>options
|
||||
LINUX</literal> or <literal>options COMPAT_LINUX</literal>. Linux
|
||||
binary compatibility is done with an LKM (“Loadable Kernel Module”)
|
||||
so it can be installed on the fly without having to reboot. You will
|
||||
need the following things in your startup files, however:</para>
|
||||
LINUX</literal> or <literal>options COMPAT_LINUX</literal>. Linux
|
||||
binary compatibility is done with an LKM (“Loadable Kernel
|
||||
Module”) so it can be installed on the fly without having to
|
||||
reboot. You will need the following things in your startup files,
|
||||
however:</para>
|
||||
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
|
|
@ -122,9 +125,9 @@ EXEC 0 4 f09e6000 001c f09ec010 1 linux_mod</screen>
|
|||
<programlisting>
|
||||
options LINUX</programlisting>
|
||||
|
||||
to your kernel config file. Then run <command>config</command> and install the new
|
||||
kernel as described in the <link linkend="kernelconfig">kernel
|
||||
configuration</link> section.</para>
|
||||
to your kernel config file. Then run <command>config</command> and
|
||||
install the new kernel as described in the
|
||||
<link linkend="kernelconfig">kernel configuration</link> section.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
|
|
@ -132,12 +135,12 @@ options LINUX</programlisting>
|
|||
|
||||
<para>The <filename>GENERIC</filename> kernel in 2.1-STABLE is not
|
||||
configured for Linux compatibility so you must reconfigure your kernel
|
||||
for it. There are two ways to do this: 1. linking the binary compatibility
|
||||
statically in the kernel itself and 2. configuring your kernel to
|
||||
dynamically load the Linux loadable kernel module (LKM).</para>
|
||||
for it. There are two ways to do this: 1. linking the binary
|
||||
compatibility statically in the kernel itself and 2. configuring your
|
||||
kernel to dynamically load the Linux loadable kernel module (LKM).</para>
|
||||
|
||||
<para>To enable Linux binary compatibility, add the following to your configuration
|
||||
file (c.f. <filename>/sys/i386/conf/LINT</filename>):</para>
|
||||
<para>To enable Linux binary compatibility, add the following to your
|
||||
configuration file (c.f. <filename>/sys/i386/conf/LINT</filename>):</para>
|
||||
|
||||
<programlisting>
|
||||
options COMPAT_LINUX</programlisting>
|
||||
|
|
@ -154,15 +157,15 @@ options SYSVSHM</programlisting>
|
|||
<programlisting>
|
||||
options "COMPAT_43"</programlisting>
|
||||
|
||||
<para>If you prefer to statically link the binary compatibility in the kernel rather
|
||||
than use the loadable kernel module (LKM), then add</para>
|
||||
<para>If you prefer to statically link the binary compatibility in the
|
||||
kernel rather than use the loadable kernel module (LKM), then add</para>
|
||||
|
||||
<programlisting>
|
||||
options LINUX</programlisting>
|
||||
|
||||
<para>Then run <command>config</command> and install the new kernel as described in the
|
||||
<link linkend="kernelconfig">kernel configuration</link>
|
||||
section.</para>
|
||||
<para>Then run <command>config</command> and install the new kernel as
|
||||
described in the <link linkend="kernelconfig">kernel
|
||||
configuration</link> section.</para>
|
||||
|
||||
<para>If you decide to use the LKM you must also install the loadable
|
||||
module. A mismatch of versions between the kernel and loadable module
|
||||
|
|
@ -193,9 +196,10 @@ Module Name EXEC 0 3 f0baf000 0018 f0bb4000 1 linux_emulator</screen>
|
|||
<programlisting>
|
||||
linux=YES</programlisting>
|
||||
|
||||
by changing it from <literal>NO</literal> to <literal>YES</literal>. FreeBSD 2.1 RELEASE and earlier do not
|
||||
have such a line and on those you will need to edit
|
||||
<filename>/etc/rc.local</filename> to add the following line.</para>
|
||||
by changing it from <literal>NO</literal> to <literal>YES</literal>.
|
||||
FreeBSD 2.1 RELEASE and earlier do not have such a line and on those you
|
||||
will need to edit <filename>/etc/rc.local</filename> to add the following
|
||||
line.</para>
|
||||
|
||||
<programlisting>
|
||||
linux</programlisting>
|
||||
|
|
@ -215,13 +219,14 @@ linux</programlisting>
|
|||
<screen>&prompt.root; <userinput>cd /usr/ports/emulators/linux_base</userinput>
|
||||
&prompt.root; <userinput>make all install</userinput></screen>
|
||||
|
||||
<para>and you should have working Linux binary compatibility. Legend (and the
|
||||
mail archives <!-- smiley -->:-) seems to hold that Linux mode
|
||||
works best with Linux binaries linked against the ZMAGIC libraries;
|
||||
QMAGIC libraries (such as those used in Slackware V2.0) may tend to
|
||||
give the Linux mode heartburn. Also, expect some programs to
|
||||
complain about incorrect minor versions of the system libraries. In
|
||||
general, however, this does not seem to be a problem.</para>
|
||||
<para>and you should have working Linux binary compatibility. Legend
|
||||
(and the mail archives <!-- smiley -->:-) seems to hold that Linux
|
||||
mode works best with Linux binaries linked against the ZMAGIC
|
||||
libraries; QMAGIC libraries (such as those used in Slackware V2.0)
|
||||
may tend to give the Linux mode heartburn. Also, expect some
|
||||
programs to complain about incorrect minor versions of the system
|
||||
libraries. In general, however, this does not seem to be a
|
||||
problem.</para>
|
||||
</sect3>
|
||||
|
||||
<sect3>
|
||||
|
|
@ -368,9 +373,10 @@ libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29</screen>
|
|||
<para>Create the file
|
||||
<filename>/compat/linux/etc/ld.so.conf</filename>, containing the
|
||||
directories in which the Linux runtime linker should look for shared
|
||||
libraries. It is a plain text file, containing a directory name on each
|
||||
line. <filename>/lib</filename> and <filename>/usr/lib</filename>
|
||||
are standard, you could add the following:</para>
|
||||
libraries. It is a plain text file, containing a directory name on
|
||||
each line. <filename>/lib</filename> and
|
||||
<filename>/usr/lib</filename> are standard, you could add the
|
||||
following:</para>
|
||||
|
||||
<programlisting>
|
||||
/usr/X11/lib
|
||||
|
|
@ -384,8 +390,8 @@ libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29</screen>
|
|||
<filename>/compat/linux/usr/X11/lib/libX11.so</filename>, etc.) in
|
||||
order for the Linux ABI loader to find them.</para>
|
||||
|
||||
<para>Those running FreeBSD 2.2-RELEASE should run the Linux <command>ldconfig</command>
|
||||
program.</para>
|
||||
<para>Those running FreeBSD 2.2-RELEASE should run the Linux
|
||||
<command>ldconfig</command> program.</para>
|
||||
|
||||
<screen>&prompt.root <userinput>cd /compat/linux/lib</userinput>
|
||||
&prompt.root; <userinput>/compat/linux/sbin/ldconfig</userinput></screen>
|
||||
|
|
@ -547,10 +553,11 @@ multi on</programlisting>
|
|||
separate packages. Normally, they are controlled by an install
|
||||
program, but you can retrieve files “by hand” too. First
|
||||
of all, you will need to look in the <filename>contents</filename>
|
||||
subdirectory of the distribution. You will find a lot of small text files
|
||||
here describing the contents of the separate packages. The fastest
|
||||
way to look something up is to retrieve all the files in the contents
|
||||
subdirectory, and <command>grep</command> through them for the file you need. Here is an
|
||||
subdirectory of the distribution. You will find a lot of small text
|
||||
files here describing the contents of the separate packages. The
|
||||
fastest way to look something up is to retrieve all the files in the
|
||||
contents subdirectory, and <command>grep</command> through them for
|
||||
the file you need. Here is an
|
||||
example of a list of files that you might need, and in which
|
||||
contents-file you will find it by grepping through them:</para>
|
||||
|
||||
|
|
@ -750,15 +757,16 @@ richc.isdn.bcm.tmc.edu 9845-03452-90255</screen>
|
|||
|
||||
<para>It will ask you to enter your license number and the Wolfram
|
||||
supplied password. If you get them mixed up or for some reason the
|
||||
<command>math.install</command> fails, that is OK; you can simply edit the file
|
||||
<filename>mathpass</filename> in this same directory to correct the
|
||||
info manually.</para>
|
||||
<command>math.install</command> fails, that is OK; you can simply edit
|
||||
the file <filename>mathpass</filename> in this same directory to
|
||||
correct the info manually.</para>
|
||||
|
||||
<para>After getting past the password, <command>math.install</command> will ask you if you
|
||||
accept the install defaults provided, or if you want to use your own.
|
||||
If you are like us and distrust all install programs, you probably
|
||||
want to specify the actual directories. Beware. Although the
|
||||
<command>math.install</command> program asks you to specify directories, it will not
|
||||
<para>After getting past the password, <command>math.install</command>
|
||||
will ask you if you accept the install defaults provided, or if you
|
||||
want to use your own. If you are like us and distrust all install
|
||||
programs, you probably want to specify the actual directories.
|
||||
Beware. Although the <command>math.install</command> program asks
|
||||
you to specify directories, it will not
|
||||
create them for you, so you should perhaps have a second window open
|
||||
with another shell so that you can create them before you give them to
|
||||
the install program. Or, if it fails, you can create the directories
|
||||
|
|
@ -799,8 +807,9 @@ richc.isdn.bcm.tmc.edu 9845-03452-90255</screen>
|
|||
execute the <command>xfe.install</command> shell script. You will
|
||||
have to tell it where to put things, but you do not have to create any
|
||||
directories because it will use the same directories that had been
|
||||
created for <command>math.install</command>. When it finishes, there should be a new
|
||||
shell script in <filename>/usr/local/Mathematica/bin</filename> called
|
||||
created for <command>math.install</command>. When it finishes, there
|
||||
should be a new shell script in
|
||||
<filename>/usr/local/Mathematica/bin</filename> called
|
||||
<filename>mathematica</filename>.</para>
|
||||
|
||||
<para>Lastly, you need to modify each of the shell scripts that
|
||||
|
|
@ -819,8 +828,9 @@ richc.isdn.bcm.tmc.edu 9845-03452-90255</screen>
|
|||
|
||||
<screen>&prompt.user; <userinput>RESOLV_HOST_CONF=/compat/linux/etc/host.conf; export RESOLV_HOST_CONF</userinput></screen>
|
||||
|
||||
<para>This tells Mathematica to use the Linux version of <filename>host.conf</filename>.
|
||||
This file has a different syntax from FreeBSD's <filename>host.conf</filename>, so you will
|
||||
<para>This tells Mathematica to use the Linux version of
|
||||
<filename>host.conf</filename>. This file has a different syntax
|
||||
from FreeBSD's <filename>host.conf</filename>, so you will
|
||||
get an error message about <filename>/etc/host.conf</filename> if you
|
||||
leave this out.</para>
|
||||
|
||||
|
|
@ -847,8 +857,8 @@ richc.isdn.bcm.tmc.edu 9845-03452-90255</screen>
|
|||
|
||||
<para>We have not found the cause for this, but it only affects the
|
||||
Notebook's X Window front end, not the mathematica engine itself. So
|
||||
the command line interface invoked by <command>math</command> is unaffected by this
|
||||
bug.</para>
|
||||
the command line interface invoked by <command>math</command> is
|
||||
unaffected by this bug.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
|
|
@ -918,8 +928,9 @@ richc.isdn.bcm.tmc.edu 9845-03452-90255</screen>
|
|||
<para>When the ELF loader sees the <literal>Linux</literal> brand, the
|
||||
loader replaces a pointer in the <literal>proc</literal>
|
||||
structure. All system calls are indexed through this pointer (in a
|
||||
traditional UNIX system, this would be the <literal>sysent[]</literal> structure array, containing the system
|
||||
calls). In addition, the process is flagged for special handling of the
|
||||
traditional UNIX system, this would be the <literal>sysent[]</literal>
|
||||
structure array, containing the system calls). In addition, the
|
||||
process flagged for special handling of the
|
||||
trap vector for the signal trampoline code, and sever other (minor)
|
||||
fix-ups that are handled by the Linux kernel module.</para>
|
||||
|
||||
|
|
@ -941,8 +952,8 @@ richc.isdn.bcm.tmc.edu 9845-03452-90255</screen>
|
|||
done in the
|
||||
<filename>/<replaceable>original-path</replaceable></filename>
|
||||
directory. This makes sure that binaries that require other binaries
|
||||
can run (e.g., the Linux toolchain can all run under Linux ABI support). It
|
||||
also means that the Linux binaries can load and exec FreeBSD binaries,
|
||||
can run (e.g., the Linux toolchain can all run under Linux ABI support).
|
||||
It also means that the Linux binaries can load and exec FreeBSD binaries,
|
||||
if there are no corresponding Linux binaries present, and that you could
|
||||
place a &man.uname.1; command in the <filename>/compat/linux</filename>
|
||||
directory tree to ensure that the Linux binaries could not tell they
|
||||
|
|
@ -973,8 +984,8 @@ richc.isdn.bcm.tmc.edu 9845-03452-90255</screen>
|
|||
implementation, not an emulation. There is no emulator (or simulator,
|
||||
to cut off the next question) involved.</para>
|
||||
|
||||
<para>So why is it sometimes called “Linux emulation”? To make it hard
|
||||
to sell FreeBSD! <!-- smiley -->8-). Really, it is because the
|
||||
<para>So why is it sometimes called “Linux emulation”? To make
|
||||
it hard to sell FreeBSD! <!-- smiley -->8-). Really, it is because the
|
||||
historical implementation was done at a time when there was really no
|
||||
word other than that to describe what was going on; saying that FreeBSD
|
||||
ran Linux binaries was not true, if you did not compile the code in or
|
||||
|
|
|
|||
|
|
@ -12,19 +12,19 @@
|
|||
<sect1>
|
||||
<title>How to Install the Linux Mode</title>
|
||||
|
||||
<para>Linux binary compatibility in FreeBSD has reached a point where it is possible
|
||||
to run a large fraction of Linux binaries in both a.out and ELF format.
|
||||
The Linux compatibility in the 2.1-STABLE branch is capable of running Linux
|
||||
DOOM and Mathematica; the version present in &rel.current;-RELEASE is
|
||||
vastly more capable and runs all these as well as Oracle8,
|
||||
WordPerfect, StarOffice, Acrobat, Quake, Abuse, IDL, and
|
||||
<para>Linux binary compatibility in FreeBSD has reached a point where it
|
||||
is possible to run a large fraction of Linux binaries in both a.out and
|
||||
ELF format. The Linux compatibility in the 2.1-STABLE branch is capable
|
||||
of running Linux DOOM and Mathematica; the version present in
|
||||
&rel.current;-RELEASE is vastly more capable and runs all these as well
|
||||
as Oracle8, WordPerfect, StarOffice, Acrobat, Quake, Abuse, IDL, and
|
||||
netrek for Linux and a whole host of other programs.</para>
|
||||
|
||||
<para>There are some Linux-specific operating system features that are not
|
||||
supported on FreeBSD. Linux binaries will not work on FreeBSD if they
|
||||
overly use the Linux <filename>/proc</filename> filesystem (which is different
|
||||
from the optional FreeBSD <filename>/proc</filename> filesystem) or
|
||||
i386-specific calls, such as enabling virtual 8086 mode.</para>
|
||||
overly use the Linux <filename>/proc</filename> filesystem (which is
|
||||
different from the optional FreeBSD <filename>/proc</filename> filesystem)
|
||||
or i386-specific calls, such as enabling virtual 8086 mode.</para>
|
||||
|
||||
<para>Depending on which version of FreeBSD you are running, how you get
|
||||
Linux mode up will vary somewhat:</para>
|
||||
|
|
@ -33,10 +33,11 @@
|
|||
<title>Installing Linux Mode in 3.0-RELEASE and later</title>
|
||||
|
||||
<para>It is no longer necessary to specify <literal>options
|
||||
LINUX</literal> or <literal>options COMPAT_LINUX</literal>. Linux
|
||||
binary compatibility is done with an KLD object (“Kernel LoaDable object”)
|
||||
so it can be installed on the fly without having to reboot. You will
|
||||
need the following things in your startup files, however:</para>
|
||||
LINUX</literal> or <literal>options COMPAT_LINUX</literal>. Linux
|
||||
binary compatibility is done with an KLD object (“Kernel LoaDable
|
||||
object”) so it can be installed on the fly without having to
|
||||
reboot. You will need the following things in your startup files,
|
||||
however:</para>
|
||||
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
|
|
@ -59,7 +60,8 @@ fi</programlisting>
|
|||
</listitem>
|
||||
</orderedlist>
|
||||
|
||||
<para>If you want to verify that the KLD is loaded, <command>kldstat</command> will do that:</para>
|
||||
<para>If you want to verify that the KLD is loaded,
|
||||
<command>kldstat</command> will do that:</para>
|
||||
|
||||
<screen>&prompt.user; kldstat
|
||||
Id Refs Address Size Name
|
||||
|
|
@ -67,25 +69,26 @@ Id Refs Address Size Name
|
|||
7 1 0xc24db000 d000 linux.ko</screen>
|
||||
|
||||
<para>If for some reason you do not want to or cannot load the
|
||||
Linux KLD, then statically link the binary compatibility in the kernel by
|
||||
adding
|
||||
Linux KLD, then statically link the binary compatibility in the kernel
|
||||
by adding
|
||||
|
||||
<programlisting>
|
||||
options LINUX</programlisting>
|
||||
|
||||
to your kernel config file. Then run <command>config</command> and install the new
|
||||
kernel as described in the <link linkend="kernelconfig">kernel
|
||||
configuration</link> section.</para>
|
||||
to your kernel config file. Then run <command>config</command> and install
|
||||
the new kernel as described in the <link linkend="kernelconfig">kernel
|
||||
configuration</link> section.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>Installing Linux Mode in 2.2.2-RELEASE and later 2.2.x versions</title>
|
||||
|
||||
<para>It is no longer necessary to specify <literal>options
|
||||
LINUX</literal> or <literal>options COMPAT_LINUX</literal>. Linux
|
||||
binary compatibility is done with an LKM (“Loadable Kernel Module”)
|
||||
so it can be installed on the fly without having to reboot. You will
|
||||
need the following things in your startup files, however:</para>
|
||||
LINUX</literal> or <literal>options COMPAT_LINUX</literal>. Linux
|
||||
binary compatibility is done with an LKM (“Loadable Kernel
|
||||
Module”) so it can be installed on the fly without having to
|
||||
reboot. You will need the following things in your startup files,
|
||||
however:</para>
|
||||
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
|
|
@ -122,9 +125,9 @@ EXEC 0 4 f09e6000 001c f09ec010 1 linux_mod</screen>
|
|||
<programlisting>
|
||||
options LINUX</programlisting>
|
||||
|
||||
to your kernel config file. Then run <command>config</command> and install the new
|
||||
kernel as described in the <link linkend="kernelconfig">kernel
|
||||
configuration</link> section.</para>
|
||||
to your kernel config file. Then run <command>config</command> and
|
||||
install the new kernel as described in the
|
||||
<link linkend="kernelconfig">kernel configuration</link> section.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
|
|
@ -132,12 +135,12 @@ options LINUX</programlisting>
|
|||
|
||||
<para>The <filename>GENERIC</filename> kernel in 2.1-STABLE is not
|
||||
configured for Linux compatibility so you must reconfigure your kernel
|
||||
for it. There are two ways to do this: 1. linking the binary compatibility
|
||||
statically in the kernel itself and 2. configuring your kernel to
|
||||
dynamically load the Linux loadable kernel module (LKM).</para>
|
||||
for it. There are two ways to do this: 1. linking the binary
|
||||
compatibility statically in the kernel itself and 2. configuring your
|
||||
kernel to dynamically load the Linux loadable kernel module (LKM).</para>
|
||||
|
||||
<para>To enable Linux binary compatibility, add the following to your configuration
|
||||
file (c.f. <filename>/sys/i386/conf/LINT</filename>):</para>
|
||||
<para>To enable Linux binary compatibility, add the following to your
|
||||
configuration file (c.f. <filename>/sys/i386/conf/LINT</filename>):</para>
|
||||
|
||||
<programlisting>
|
||||
options COMPAT_LINUX</programlisting>
|
||||
|
|
@ -154,15 +157,15 @@ options SYSVSHM</programlisting>
|
|||
<programlisting>
|
||||
options "COMPAT_43"</programlisting>
|
||||
|
||||
<para>If you prefer to statically link the binary compatibility in the kernel rather
|
||||
than use the loadable kernel module (LKM), then add</para>
|
||||
<para>If you prefer to statically link the binary compatibility in the
|
||||
kernel rather than use the loadable kernel module (LKM), then add</para>
|
||||
|
||||
<programlisting>
|
||||
options LINUX</programlisting>
|
||||
|
||||
<para>Then run <command>config</command> and install the new kernel as described in the
|
||||
<link linkend="kernelconfig">kernel configuration</link>
|
||||
section.</para>
|
||||
<para>Then run <command>config</command> and install the new kernel as
|
||||
described in the <link linkend="kernelconfig">kernel
|
||||
configuration</link> section.</para>
|
||||
|
||||
<para>If you decide to use the LKM you must also install the loadable
|
||||
module. A mismatch of versions between the kernel and loadable module
|
||||
|
|
@ -193,9 +196,10 @@ Module Name EXEC 0 3 f0baf000 0018 f0bb4000 1 linux_emulator</screen>
|
|||
<programlisting>
|
||||
linux=YES</programlisting>
|
||||
|
||||
by changing it from <literal>NO</literal> to <literal>YES</literal>. FreeBSD 2.1 RELEASE and earlier do not
|
||||
have such a line and on those you will need to edit
|
||||
<filename>/etc/rc.local</filename> to add the following line.</para>
|
||||
by changing it from <literal>NO</literal> to <literal>YES</literal>.
|
||||
FreeBSD 2.1 RELEASE and earlier do not have such a line and on those you
|
||||
will need to edit <filename>/etc/rc.local</filename> to add the following
|
||||
line.</para>
|
||||
|
||||
<programlisting>
|
||||
linux</programlisting>
|
||||
|
|
@ -215,13 +219,14 @@ linux</programlisting>
|
|||
<screen>&prompt.root; <userinput>cd /usr/ports/emulators/linux_base</userinput>
|
||||
&prompt.root; <userinput>make all install</userinput></screen>
|
||||
|
||||
<para>and you should have working Linux binary compatibility. Legend (and the
|
||||
mail archives <!-- smiley -->:-) seems to hold that Linux mode
|
||||
works best with Linux binaries linked against the ZMAGIC libraries;
|
||||
QMAGIC libraries (such as those used in Slackware V2.0) may tend to
|
||||
give the Linux mode heartburn. Also, expect some programs to
|
||||
complain about incorrect minor versions of the system libraries. In
|
||||
general, however, this does not seem to be a problem.</para>
|
||||
<para>and you should have working Linux binary compatibility. Legend
|
||||
(and the mail archives <!-- smiley -->:-) seems to hold that Linux
|
||||
mode works best with Linux binaries linked against the ZMAGIC
|
||||
libraries; QMAGIC libraries (such as those used in Slackware V2.0)
|
||||
may tend to give the Linux mode heartburn. Also, expect some
|
||||
programs to complain about incorrect minor versions of the system
|
||||
libraries. In general, however, this does not seem to be a
|
||||
problem.</para>
|
||||
</sect3>
|
||||
|
||||
<sect3>
|
||||
|
|
@ -368,9 +373,10 @@ libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29</screen>
|
|||
<para>Create the file
|
||||
<filename>/compat/linux/etc/ld.so.conf</filename>, containing the
|
||||
directories in which the Linux runtime linker should look for shared
|
||||
libraries. It is a plain text file, containing a directory name on each
|
||||
line. <filename>/lib</filename> and <filename>/usr/lib</filename>
|
||||
are standard, you could add the following:</para>
|
||||
libraries. It is a plain text file, containing a directory name on
|
||||
each line. <filename>/lib</filename> and
|
||||
<filename>/usr/lib</filename> are standard, you could add the
|
||||
following:</para>
|
||||
|
||||
<programlisting>
|
||||
/usr/X11/lib
|
||||
|
|
@ -384,8 +390,8 @@ libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29</screen>
|
|||
<filename>/compat/linux/usr/X11/lib/libX11.so</filename>, etc.) in
|
||||
order for the Linux ABI loader to find them.</para>
|
||||
|
||||
<para>Those running FreeBSD 2.2-RELEASE should run the Linux <command>ldconfig</command>
|
||||
program.</para>
|
||||
<para>Those running FreeBSD 2.2-RELEASE should run the Linux
|
||||
<command>ldconfig</command> program.</para>
|
||||
|
||||
<screen>&prompt.root <userinput>cd /compat/linux/lib</userinput>
|
||||
&prompt.root; <userinput>/compat/linux/sbin/ldconfig</userinput></screen>
|
||||
|
|
@ -547,10 +553,11 @@ multi on</programlisting>
|
|||
separate packages. Normally, they are controlled by an install
|
||||
program, but you can retrieve files “by hand” too. First
|
||||
of all, you will need to look in the <filename>contents</filename>
|
||||
subdirectory of the distribution. You will find a lot of small text files
|
||||
here describing the contents of the separate packages. The fastest
|
||||
way to look something up is to retrieve all the files in the contents
|
||||
subdirectory, and <command>grep</command> through them for the file you need. Here is an
|
||||
subdirectory of the distribution. You will find a lot of small text
|
||||
files here describing the contents of the separate packages. The
|
||||
fastest way to look something up is to retrieve all the files in the
|
||||
contents subdirectory, and <command>grep</command> through them for
|
||||
the file you need. Here is an
|
||||
example of a list of files that you might need, and in which
|
||||
contents-file you will find it by grepping through them:</para>
|
||||
|
||||
|
|
@ -750,15 +757,16 @@ richc.isdn.bcm.tmc.edu 9845-03452-90255</screen>
|
|||
|
||||
<para>It will ask you to enter your license number and the Wolfram
|
||||
supplied password. If you get them mixed up or for some reason the
|
||||
<command>math.install</command> fails, that is OK; you can simply edit the file
|
||||
<filename>mathpass</filename> in this same directory to correct the
|
||||
info manually.</para>
|
||||
<command>math.install</command> fails, that is OK; you can simply edit
|
||||
the file <filename>mathpass</filename> in this same directory to
|
||||
correct the info manually.</para>
|
||||
|
||||
<para>After getting past the password, <command>math.install</command> will ask you if you
|
||||
accept the install defaults provided, or if you want to use your own.
|
||||
If you are like us and distrust all install programs, you probably
|
||||
want to specify the actual directories. Beware. Although the
|
||||
<command>math.install</command> program asks you to specify directories, it will not
|
||||
<para>After getting past the password, <command>math.install</command>
|
||||
will ask you if you accept the install defaults provided, or if you
|
||||
want to use your own. If you are like us and distrust all install
|
||||
programs, you probably want to specify the actual directories.
|
||||
Beware. Although the <command>math.install</command> program asks
|
||||
you to specify directories, it will not
|
||||
create them for you, so you should perhaps have a second window open
|
||||
with another shell so that you can create them before you give them to
|
||||
the install program. Or, if it fails, you can create the directories
|
||||
|
|
@ -799,8 +807,9 @@ richc.isdn.bcm.tmc.edu 9845-03452-90255</screen>
|
|||
execute the <command>xfe.install</command> shell script. You will
|
||||
have to tell it where to put things, but you do not have to create any
|
||||
directories because it will use the same directories that had been
|
||||
created for <command>math.install</command>. When it finishes, there should be a new
|
||||
shell script in <filename>/usr/local/Mathematica/bin</filename> called
|
||||
created for <command>math.install</command>. When it finishes, there
|
||||
should be a new shell script in
|
||||
<filename>/usr/local/Mathematica/bin</filename> called
|
||||
<filename>mathematica</filename>.</para>
|
||||
|
||||
<para>Lastly, you need to modify each of the shell scripts that
|
||||
|
|
@ -819,8 +828,9 @@ richc.isdn.bcm.tmc.edu 9845-03452-90255</screen>
|
|||
|
||||
<screen>&prompt.user; <userinput>RESOLV_HOST_CONF=/compat/linux/etc/host.conf; export RESOLV_HOST_CONF</userinput></screen>
|
||||
|
||||
<para>This tells Mathematica to use the Linux version of <filename>host.conf</filename>.
|
||||
This file has a different syntax from FreeBSD's <filename>host.conf</filename>, so you will
|
||||
<para>This tells Mathematica to use the Linux version of
|
||||
<filename>host.conf</filename>. This file has a different syntax
|
||||
from FreeBSD's <filename>host.conf</filename>, so you will
|
||||
get an error message about <filename>/etc/host.conf</filename> if you
|
||||
leave this out.</para>
|
||||
|
||||
|
|
@ -847,8 +857,8 @@ richc.isdn.bcm.tmc.edu 9845-03452-90255</screen>
|
|||
|
||||
<para>We have not found the cause for this, but it only affects the
|
||||
Notebook's X Window front end, not the mathematica engine itself. So
|
||||
the command line interface invoked by <command>math</command> is unaffected by this
|
||||
bug.</para>
|
||||
the command line interface invoked by <command>math</command> is
|
||||
unaffected by this bug.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
|
|
@ -918,8 +928,9 @@ richc.isdn.bcm.tmc.edu 9845-03452-90255</screen>
|
|||
<para>When the ELF loader sees the <literal>Linux</literal> brand, the
|
||||
loader replaces a pointer in the <literal>proc</literal>
|
||||
structure. All system calls are indexed through this pointer (in a
|
||||
traditional UNIX system, this would be the <literal>sysent[]</literal> structure array, containing the system
|
||||
calls). In addition, the process is flagged for special handling of the
|
||||
traditional UNIX system, this would be the <literal>sysent[]</literal>
|
||||
structure array, containing the system calls). In addition, the
|
||||
process flagged for special handling of the
|
||||
trap vector for the signal trampoline code, and sever other (minor)
|
||||
fix-ups that are handled by the Linux kernel module.</para>
|
||||
|
||||
|
|
@ -941,8 +952,8 @@ richc.isdn.bcm.tmc.edu 9845-03452-90255</screen>
|
|||
done in the
|
||||
<filename>/<replaceable>original-path</replaceable></filename>
|
||||
directory. This makes sure that binaries that require other binaries
|
||||
can run (e.g., the Linux toolchain can all run under Linux ABI support). It
|
||||
also means that the Linux binaries can load and exec FreeBSD binaries,
|
||||
can run (e.g., the Linux toolchain can all run under Linux ABI support).
|
||||
It also means that the Linux binaries can load and exec FreeBSD binaries,
|
||||
if there are no corresponding Linux binaries present, and that you could
|
||||
place a &man.uname.1; command in the <filename>/compat/linux</filename>
|
||||
directory tree to ensure that the Linux binaries could not tell they
|
||||
|
|
@ -973,8 +984,8 @@ richc.isdn.bcm.tmc.edu 9845-03452-90255</screen>
|
|||
implementation, not an emulation. There is no emulator (or simulator,
|
||||
to cut off the next question) involved.</para>
|
||||
|
||||
<para>So why is it sometimes called “Linux emulation”? To make it hard
|
||||
to sell FreeBSD! <!-- smiley -->8-). Really, it is because the
|
||||
<para>So why is it sometimes called “Linux emulation”? To make
|
||||
it hard to sell FreeBSD! <!-- smiley -->8-). Really, it is because the
|
||||
historical implementation was done at a time when there was really no
|
||||
word other than that to describe what was going on; saying that FreeBSD
|
||||
ran Linux binaries was not true, if you did not compile the code in or
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue