⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linuxemu-lbc-install.html

📁 FreeBSD安装说明概述 FreeBSD 提供了一个以文字为主
💻 HTML
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta name="generator" content="HTML Tidy, see www.w3.org" /><title>安装</title><meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.7" /><link rel="HOME" title="FreeBSD 使用手册" href="index.html" /><link rel="UP" title="Linux二进制兼容模式" href="linuxemu.html" /><link rel="PREVIOUS" title="Linux二进制兼容模式" href="linuxemu.html" /><link rel="NEXT" title="安装Mathematica" href="linuxemu-mathematica.html" /><link rel="STYLESHEET" type="text/css" href="docbook.css" /><meta http-equiv="Content-Type" content="text/html; charset=GB2312" /></head><body class="SECT1" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#840084"alink="#0000FF"><div class="NAVHEADER"><table summary="Header navigation table" width="100%" border="0" cellpadding="0"cellspacing="0"><tr><th colspan="3" align="center">FreeBSD 使用手册</th></tr><tr><td width="10%" align="left" valign="bottom"><a href="linuxemu.html"accesskey="P">Prev</a></td><td width="80%" align="center" valign="bottom">Chapter 22. Linux二进制兼容模式</td><td width="10%" align="right" valign="bottom"><a href="linuxemu-mathematica.html"accesskey="N">Next</a></td></tr></table><hr align="LEFT" width="100%" /></div><div class="SECT1"><h1 class="SECT1"><a id="LINUXEMU-LBC-INSTALL" name="LINUXEMU-LBC-INSTALL">22.2.安装</a></h1><p>默认的Linux兼容模式没有被打开。启用这个功能的最容易的方法是调用<varclass="LITERAL">linux</var> KLD对象(“Kernel LoaDableobject”)。你可以在命令行通过健入<tt class="COMMAND">linux</tt>来加载这个模块。</p><p>如果你想让Linux二进制兼容性总是被启用,你可以在<ttclass="FILENAME">/etc/rc.conf</tt>加入下面这一行:</p><pre class="PROGRAMLISTING">linux_enable="YES"</pre><p><span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">kldstat</span>(8)</span>可以用来检查KLD模块是否加载:</p><pre class="SCREEN"><samp class="PROMPT">%</samp> <kbd class="USERINPUT">kldstat</kbd>Id Refs Address    Size     Name 1    2 0xc0100000 16bdb8   kernel 7    1 0xc24db000 d000     linux.ko</pre><p>如果你不想或者无法将LinuxKLD加载,你就需要在内核中静态链接进Linux二进制兼容模式。你必须在你的内核配置文件里面加入<var class="LITERAL">options LINUX</var>,然后按照<ahref="kernelconfig.html">Chapter 9</a>重新编译内核。</p><div class="SECT2"><h2 class="SECT2"><a id="AEN31437" name="AEN31437">22.2.1. 安装Linux运行时库</a></h2><p>有两种方法来安装Linux运行时库,要么使用<ahref="linuxemu-lbc-install.html#LINUXEMU-LIBS-PORT">linux_base</a> port, 要么<ahref="linuxemu-lbc-install.html#LINUXEMU-LIBS-MANUALLY">手动</a>安装。</p><div class="SECT3"><h3 class="SECT3"><a id="LINUXEMU-LIBS-PORT" name="LINUXEMU-LIBS-PORT">22.2.1.1.使用linux_base Port安装</a></h3><p>这是最容易的安装方法,只需要像安装其他port一样从 <a href="file://localhost/usr/ports/"target="_top">ports collection</a>来安装:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbdclass="USERINPUT">cd /usr/ports/emulators/linux_base</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">make install distclean</kbd></pre><p>你现在应当是工作在Linux兼容模式下了。一些程序可能会提示系统库的版本不正确。通常,这不是问题。</p><div class="NOTE"><blockquote class="NOTE"><p><b>Note:</b> 有多个版本的<ahref="http://www.FreeBSD.org/cgi/url.cgi?ports/emulators/linux_base/pkg-descr"><ttclass="FILENAME">emulators/linux_base</tt></a> port,针对不同的版本的Linux。你应该选择最接近Linux应用程序需要的那个版本来安装。</p></blockquote></div></div><div class="SECT3"><h3 class="SECT3"><a id="LINUXEMU-LIBS-MANUALLY" name="LINUXEMU-LIBS-MANUALLY">22.2.1.2.手动安装</a></h3><p>如果你没有安装“ports” collection,你也可以通过手动来安装Linux运行时库。你将需要这些程序依赖的Linux共享库,而且你需要创建一个“shadow root” 目录<ttclass="FILENAME">/compat/linux</tt>,任何要被Linux程序打开的共享库都首先在这个目录里面查找。所以,如果一个Linux程序加载了,例如,<tt class="FILENAME">/lib/libc.so</tt>,FreeBSD会首先尝试打开 <ttclass="FILENAME">/compat/linux/lib/libc.so</tt>,如果不存在,它将尝试打开<ttclass="FILENAME">/lib/libc.so</tt>。 共享库应该安装在<ttclass="FILENAME">/compat/linux/lib</tt>而不是Linux <ttclass="COMMAND">ld.so</tt>报告的其他路径。</p><p>通常,你需要寻找Linux程序依赖的共享库。然后,你需要在系统上做一个高效的Linux共享库设置,以便能够运行最新的Linux程序。</p></div><div class="SECT3"><h3 class="SECT3"><a id="AEN31470" name="AEN31470">22.2.1.3.如何安装额外的共享库</a></h3><p>如果你安装了<tt class="FILENAME">linux_base</tt> port,但是你的你的应用程序仍会报告丢失共享库的信息?你如何知道Linux程序需要哪个共享库?基本上,有两种可能性(接下来的指令需要<tt class="USERNAME">root</tt>权限):</p><p>如果你有可以访问的Linux系统, 看看应用程序需要什么共享库,把它们拷贝到你的FreeBSD系统。看下面的例子:</p><div class="INFORMALEXAMPLE"><a id="AEN31478" name="AEN31478"></a><p>我们假设你通过FTP得到Linux程序<b class="APPLICATION">Doom</b>,并把它放在你能访问的Linux系统上。然后你可以通过<tt class="COMMAND">lddlinuxdoom</tt>来检查需要哪些共享库, 就像这样:</p><pre class="SCREEN"><samp class="PROMPT">%</samp> <kbd class="USERINPUT">ldd linuxdoom</kbd>libXt.so.3 (DLL Jump 3.1) =&gt; /usr/X11/lib/libXt.so.3.1.0libX11.so.3 (DLL Jump 3.1) =&gt; /usr/X11/lib/libX11.so.3.1.0libc.so.4 (DLL Jump 4.5pl26) =&gt; /lib/libc.so.4.6.29</pre><p>你需要得到上面输出的右列的所有文件,并把他们拷贝到<ttclass="FILENAME">/compat/linux</tt>,第一列的名字用符号连接指向它们。这样你的FreeBSD系统上就有了这些文件:</p><pre class="SCREEN">/compat/linux/usr/X11/lib/libXt.so.3.1.0/compat/linux/usr/X11/lib/libXt.so.3 -&gt; libXt.so.3.1.0/compat/linux/usr/X11/lib/libX11.so.3.1.0/compat/linux/usr/X11/lib/libX11.so.3 -&gt; libX11.so.3.1.0/compat/linux/lib/libc.so.4.6.29/compat/linux/lib/libc.so.4 -&gt; libc.so.4.6.29</pre><a id="AEN31490" name="AEN31490"></a><blockquote class="BLOCKQUOTE"><div class="NOTE"><blockquote class="NOTE"><p><b>Note:</b> 如果你已经有了一个与<tt class="COMMAND">ldd</tt>输出的第一列的主修订号相匹配的Linux共享库,你将不需要把右列命名的文件拷贝到你的系统,你已经完成了工作。如果有一个新的版本,那无论如何都要拷贝一个共享库。你可以删掉旧的,你只要做一个符号连接到新的版本。 所以,如果有这些库在你的系统上:</p><pre class="SCREEN">/compat/linux/lib/libc.so.4.6.27/compat/linux/lib/libc.so.4 -&gt; libc.so.4.6.27</pre><p>如果你根据<tt class="COMMAND">ldd</tt>输出的发现需要一个更新版本的库:</p><pre class="SCREEN">libc.so.4 (DLL Jump 4.5pl26) -&gt; libc.so.4.6.29</pre><p>如果结尾的数字只有一到两个版本过期,那也不要担心拷贝<ttclass="FILENAME">/lib/libc.so.4.6.29</tt>, 因为程序在稍微旧一些的版本上也能很好地工作。然而,如果喜欢的话,你可以替换<tt class="FILENAME">libc.so</tt>,变成这样:</p><pre class="SCREEN">/compat/linux/lib/libc.so.4.6.29/compat/linux/lib/libc.so.4 -&gt; libc.so.4.6.29</pre></blockquote></div></blockquote><a id="AEN31502" name="AEN31502"></a><blockquote class="BLOCKQUOTE"><div class="NOTE"><blockquote class="NOTE"><p><b>Note:</b> 符号链接机制<span class="emphasis"><iclass="EMPHASIS">仅仅是</i></span>Linux程序需要的。FreeBSD的运行时连接器会自己寻找匹配的主修订号,你不需要为此担心。</p></blockquote></div></blockquote></div></div></div><div class="SECT2"><h2 class="SECT2"><a id="AEN31506" name="AEN31506">22.2.2. 安装Linux ELF程序</a></h2><p>ELF格式的程序需要一步额外的步骤“标记”。如果你尝试运行没有标记的ELF程序,你会得到像下面这样的错误信息:</p><pre class="SCREEN"><samp class="PROMPT">%</samp> <kbd class="USERINPUT">./my-linux-elf-binary</kbd>ELF binary type not knownAbort</pre><p>为了帮助FreeBSD内核分辨FreeBSD ELF程序和Linux程序,要使用<spanclass="CITEREFENTRY"><span class="REFENTRYTITLE">brandelf</span>(1)</span>工具:</p><pre class="SCREEN"><samp class="PROMPT">%</samp> <kbdclass="USERINPUT">brandelf -t Linux my-linux-elf-binary</kbd></pre><p>GNU工具现在会自动把适当的标记信息放到ELF程序中,你以后遇到这个问题的机会越来越少。</p></div><div class="SECT2"><h2 class="SECT2"><a id="AEN31525" name="AEN31525">22.2.3. 配置主机名解析器</a></h2><p>如果DNS不能正常工作或是你得到下列信息:</p><pre class="SCREEN">resolv+: "bind" is an invalid keyword resolv+:"hosts" is an invalid keyword</pre><p>你就需要配置<ttclass="FILENAME">/compat/linux/etc/host.conf</tt>文件,此文件包含:</p><pre class="PROGRAMLISTING">order hosts, bindmulti on</pre><p>order这一行指出<tt class="FILENAME">/etc/hosts</tt>先被搜索再接着搜索DNS。 如果<ttclass="FILENAME">/compat/linux/etc/host.conf</tt>没有被安装,Linux程序会读取FreeBSD的 <ttclass="FILENAME">/etc/host.conf</tt>然后提示不兼容的FreeBSD语法。 如果你没有使用<ttclass="FILENAME">/etc/resolv.conf</tt> 文件设置DNS,应该删除<varclass="LITERAL">bind</var>。</p></div></div><div class="NAVFOOTER"><hr align="LEFT" width="100%" /><table summary="Footer navigation table" width="100%" border="0" cellpadding="0"cellspacing="0"><tr><td width="33%" align="left" valign="top"><a href="linuxemu.html"accesskey="P">Prev</a></td><td width="34%" align="center" valign="top"><a href="index.html"accesskey="H">Home</a></td><td width="33%" align="right" valign="top"><a href="linuxemu-mathematica.html"accesskey="N">Next</a></td></tr><tr><td width="33%" align="left" valign="top">Linux二进制兼容模式</td><td width="34%" align="center" valign="top"><a href="linuxemu.html"accesskey="U">Up</a></td><td width="33%" align="right" valign="top">安装<spanclass="TRADEMARK">Mathematica</span>&reg;</td></tr></table></div></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -