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

📄 makeworld.html

📁 FreeBSD安装说明概述 FreeBSD 提供了一个以文字为主
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<!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>使用make world</title><meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.7" /><link rel="HOME" title="FreeBSD 使用手册" href="index.html" /><link rel="UP" title="最前沿" href="cutting-edge.html" /><link rel="PREVIOUS" title="同步你的源码" href="synching.html" /><link rel="NEXT" title="跟踪多台机器" href="small-lan.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="synching.html"accesskey="P">Prev</a></td><td width="80%" align="center" valign="bottom">Chapter 21. 最前沿</td><td width="10%" align="right" valign="bottom"><a href="small-lan.html"accesskey="N">Next</a></td></tr></table><hr align="LEFT" width="100%" /></div><div class="SECT1"><h1 class="SECT1"><a id="MAKEWORLD" name="MAKEWORLD">21.4. 使用<tt class="COMMAND">makeworld</tt></a></h1><p>只要你根据一定版本的FreeBSD (FreeBSD-STABLE, FreeBSD-CURRENT,等等),已经同步了你本地的源码树,那么你就可以使用这些源码树来重建系统。</p><div class="WARNING"><blockquote class="WARNING"><p><b>做好备份</b>不用强调在你做此(重建系统)<span class="emphasis"><iclass="EMPHASIS">之前</i></span>备份一下系统是多么地重要。尽管重建系统是很容易做的(只要你跟从这些指导),但有时出现错误也是在所难免的,有时其他人在源码里犯的错也会致使你的系统不能启动。</p><p>确信你已做了备份。还要有张修复软盘。你可能从不用它,但安全第一嘛!</p></blockquote></div><div class="WARNING"><blockquote class="WARNING"><p><b>订阅恰当的邮件列表</b>FreeBSD-STABLE 和 FreeBSD-CURRENT 分支自然是<spanclass="emphasis"><iclass="EMPHASIS">发展中的</i></span>。为FreeBSD做贡献的都是人,偶尔也会犯错误。</p><p>有时这些错误没什么危害,只是引起你的系统生成新的诊断警告。有时是灾难性的,并导致你的系统不能惊动启动或破坏你的文件系统(甚至更糟)。</p><p>如果出现了类似的问题,贴一封``小心(headsup)''帖到相关的邮件列表里,讲清问题的本质以及受影响的系统。在问题解决后,再贴封``解除(allclear)'' 声明。</p><p>如可你想跟踪FreeBSD-STABLE 或 FreeBSD-CURRENT而又不阅读<ahref="http://lists.FreeBSD.org/mailman/listinfo/freebsd-stable"target="_top">FreeBSD-STABLE 邮件列表</a>和<ahref="http://lists.FreeBSD.org/mailman/listinfo/freebsd-current"target="_top">FreeBSD-CURRENT 邮件列表</a>各自的邮件列表,那么你是自找麻烦。</p></blockquote></div><div class="SECT2"><h2 class="SECT2"><a id="AEN30444" name="AEN30444">21.4.1. 更新系统的规范途径</a></h2><p>要更新系统,就要使用下面的过程:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">make buildworld</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">make buildkernel</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">make installkernel</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">reboot</kbd></pre><p>你应该启动到单用户模式下(例如从启动提示符处使用<tt class="COMMAND">boot-s</tt>)。然后执行:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">mergemaster -p</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">make installworld</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">mergemaster</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">reboot</kbd></pre><div class="WARNING"><blockquote class="WARNING"><p><b>阅读进一步的说明</b>上边描述的序列只是有助于你开始工作的简要。要清楚的理解每一不步,尤其是你想使用定制内核配置,你就应阅读下面的部分。</p></blockquote></div></div><div class="SECT2"><h2 class="SECT2"><a id="AEN30470" name="AEN30470">21.4.2. 阅读 <ttclass="FILENAME">/usr/src/UPDATING</tt></a></h2><p>在你做其它事之前,请阅读<tt class="FILENAME">/usr/src/UPDATING</tt>(或在你的源码里的等效的文件)。这个文件要包含有关于你可能遇到的问题的重要信息,或指定了你可能使用到的命令的执行顺序。如果<tt class="FILENAME">UPDATING</tt> 与你这里读到相矛盾,那就先依据<ttclass="FILENAME">UPDATING</tt>。</p><div class="IMPORTANT"><blockquote class="IMPORTANT"><p><b>Important:</b> 正如先前所述,阅读<ttclass="FILENAME">UPDATING</tt>并不能替代订阅正确的邮件列表。两都是互补的,并不彼此排斥。</p></blockquote></div></div><div class="SECT2"><h2 class="SECT2"><a id="AEN30480" name="AEN30480">21.4.3. 检查 <ttclass="FILENAME">/etc/make.conf</tt></a></h2><p>检查<tt class="FILENAME">/etc/defaults/make.conf</tt> 和<ttclass="FILENAME">/etc/make.conf</tt>两个文件。前者包含了一些默认的定义--许多都有注释。在你从源码重建系统里要利用它们,把它们增加到<tt class="FILENAME">/etc/make.conf</tt>里边。脑中一定要记得,你加到<ttclass="FILENAME">/etc/make.conf</tt>里的东西也是你每次执行<ttclass="COMMAND">make</tt>所要用到的,因把设置它们能识别你的系统是个不错的主意。</p><p>一般的用户可能会把在<tt class="FILENAME">/etc/defaults/make.conf</tt>里找到的<ttclass="MAKEVAR">CFLAGS</tt>和<tt class="MAKEVAR">NOPROFILE</tt>这几行复制到<ttclass="FILENAME">/etc/make.conf</tt>里,并取消注释。</p><p>看看其它的定义(像<tt class="MAKEVAR">COPTFLAGS</tt>, <ttclass="MAKEVAR">NOPORTDOCS</tt>等等)是不是适合你使用。</p></div><div class="SECT2"><h2 class="SECT2"><a id="AEN30500" name="AEN30500">21.4.4. 更新<ttclass="FILENAME">/etc</tt>里边的文件</a></h2><p><ttclass="FILENAME">/etc</tt>目录包含有除了你的系统启动时执行的脚本外大部分的系统配置信息。有些脚本随FreeBSD的版本而不同。</p><p>有些配置文件在天天运行的系统里也是要使用到的。尤其是<ttclass="FILENAME">/etc/group</tt>。</p><p>偶尔有这样的机会,部分``makeworld''的安装需要特定的用户名或用户组存在。在升级时,有可能这些用户或组就不存在。这会在升级过程中出错问题。</p><p>最近就有个这样的例子,当时<tt class="USERNAME">smmsp</tt>用户是被增加了的。当<spanclass="CITEREFENTRY"><span class="REFENTRYTITLE">mtree</span>(8)</span>试着建立<ttclass="FILENAME">/var/spool/clientmqueue</tt>时,安装过程失败了。</p><p>解决办法是检查<ttclass="FILENAME">/usr/src/etc/group</tt>并把它的组列表与你的进行比较。如果在新文件里有而你的文件里没有的,就把它们复制过来。同样地,你把<tt class="FILENAME">/etc/group</tt>里的任何这样的组进行更名---与<ttclass="FILENAME">/usr/src/etc/group</tt>中有相同GID,但不同名的那些。</p><p>自4.6-RELEASE开始,你可以通过<varclass="OPTION">-p</var>选项以预建(pre-buildworld)模式运行<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">mergemaster</span>(8)</span> 。这样只是比较那些对于成功执行<ttclass="MAKETARGET">buildworld</tt>或<ttclass="MAKETARGET">installworld</tt>起关键作用的文件。在第一次时,如果早期的<ttclass="COMMAND">mergemaster</tt>版本不支持<varclass="OPTION">-p</var>的话,就使用源码树中的新版本:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbdclass="USERINPUT">cd /usr/src/usr.sbin/mergemaster</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">./mergemaster.sh -p</kbd></pre><div class="TIP"><blockquote class="TIP"><p><b>Tip:</b>如果你是个偏执狂(paranoid),你可以检查你的系统看看哪个文件属于你已更名或删除了的那个组。</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">find / -group <varclass="REPLACEABLE">GID</var> -print</kbd></pre><p>将显示所有<varclass="REPLACEABLE">GID</var>组(可以是组名也可以是数字地组ID)所有的文件。</p></blockquote></div></div><div class="SECT2"><h2 class="SECT2"><a id="MAKEWORLD-SINGLEUSER" name="MAKEWORLD-SINGLEUSER">21.4.5.改为单用户模式</a></h2><p>你可能相在单用户模式下编译系统。除了对更快处理事情显然有好处外,重装系统将接触许多重要的系统文件,包括所有标准系统二进制文件、库文件、包含(include)文件等等。在运行的系统里(尤其是同时系统里有激活的用户)更改这些文件是自寻烦恼。</p><p>另一种模式是在多用户模式下编译系统,然后转换到单用户模式下安装。如果你喜欢这种方式,只需在建立(build)完成后才执行下边的步骤。你推迟转换到单用户模式下直到你必须<tt class="MAKETARGET">installkernel</tt>或<tt class="MAKETARGET">installworld</tt>。</p><p>从运行的系统里,以超级用户方式执行:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">shutdown now</kbd></pre><p>这样就会转换到单用户模式。</p><p>另外也可以,重启系统,在启动提示符处,输入<varclass="OPTION">-s</var>标识。系统就会启动单用户。再在shell提示符处执行:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">fsck -p</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">mount -u /</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">mount -a -t ufs</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">swapon -a</kbd></pre><p>这会检查文件系统,重新装载<tt class="FILENAME">/</tt>为读/写,参考<ttclass="FILENAME">/etc/fstab</tt>装载其它所有的UFS文件系统,然后打开交换(swapping)开关。</p><div class="NOTE"><blockquote class="NOTE"><p><b>Note:</b> 如果你的CMOS时钟是设置为本地时间,而不是GMT(如果<spanclass="CITEREFENTRY"><spanclass="REFENTRYTITLE">date</span>(1)</span>命令输出不能显示正确的时间和地区也有确有其事),你可能也需要执行下边的命令:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">adjkerntz -i</kbd></pre><p>这样可以确定你正确的本地时区设置--不这样做,你以后可能会碰到一些问题。</p></blockquote></div></div><div class="SECT2"><h2 class="SECT2"><a id="AEN30579" name="AEN30579">21.4.6. 删除<ttclass="FILENAME">/usr/obj</tt></a></h2><p>在重建部分系统时,它们被(默认地)放到了<ttclass="FILENAME">/usr/obj</tt>目录下边。这些目录影射到了<ttclass="FILENAME">/usr/src</tt>下边。</p><p>删除这个目录,你可以加快``make world''的过程,并且省下许多头痛的事情。</p><p><ttclass="FILENAME">/usr/obj</tt>下的有些文件可能设置了不可改(immutable)属性(查看<spanclass="CITEREFENTRY"><span class="REFENTRYTITLE">chflags</span>(1)</span>了解更多),你必须先把它移除了。</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cd /usr/obj</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">chflags -R noschg *</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">rm -rf *</kbd></pre></div><div class="SECT2"><h2 class="SECT2"><a id="AEN30599" name="AEN30599">21.4.7. 重编译源码</a></h2><div class="SECT3"><h3 class="SECT3"><a id="AEN30601" name="AEN30601">21.4.7.1. 保存输出</a></h3><p>建议把执行<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">make</span>(1)</span>后得到的输出存成一个文件。如果什么地方出了错,你就会有个错误信息的备份。尽管这样不能帮你分析哪里出了错,但如果你把你的问题贴到某个邮件列表里就能帮助其他的人。</p><p>这样做最简单的办法是使用<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">script</span>(1)</span>命令,同是带上参数指定存放输出的文件名。你应在重建系统之前立即这样做,然后在过程完成时输入<kbd class="USERINPUT">exit</kbd>。</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">script /var/tmp/mw.out</kbd>Script started, output file is /var/tmp/mw.out<samp class="PROMPT">#</samp> <kbd class="USERINPUT">make TARGET</kbd><span class="emphasis"><i class="EMPHASIS">... compile, compile, compile ...</i></span><samp class="PROMPT">#</samp> <kbd class="USERINPUT">exit</kbd>Script done, ...</pre><p>如果你这样做,就<span class="emphasis"><iclass="EMPHASIS">不要</i></span>把文件存到<ttclass="FILENAME">/tmp</tt>里边。下次启动时,这个目录就会被清除掉。存放的最好地方是<ttclass="FILENAME">/var/tmp</tt> (如上个实例)或<ttclass="USERNAME">root</tt>的主目录。</p></div>

⌨️ 快捷键说明

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