FreeBSD Bugzilla – Attachment 146378 Details for
Bug 193066
zh_TW.UTF-8 handbook traditional chinese translation update
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
traditional chinese translation update
cutting-edge.diff.txt (text/plain), 151.60 KB, created by
raycherng
on 2014-08-27 14:35:09 UTC
(
hide
)
Description:
traditional chinese translation update
Filename:
MIME Type:
Creator:
raycherng
Created:
2014-08-27 14:35:09 UTC
Size:
151.60 KB
patch
obsolete
>Index: zh_TW.UTF-8/books/handbook/cutting-edge/chapter.xml >=================================================================== >--- zh_TW.UTF-8/books/handbook/cutting-edge/chapter.xml (revision 45031) >+++ zh_TW.UTF-8/books/handbook/cutting-edge/chapter.xml (working copy) >@@ -1,4 +1,4 @@ >-<?xml version="1.0" encoding="utf-8"?> >+<?xml version="1.0" encoding="iso-8859-1"?> > <!-- > The FreeBSD Documentation Project > >@@ -25,29 +25,43 @@ > <sect1 xml:id="cutting-edge-synopsis"> > <title>æ¦è¿°</title> > >- <para>&os; æ¯åæçºç¼å±ç使¥ç³»çµ±ãå°æ¼åæ¡è¿½æ±æ°é®®ãåºæ¿ç使ç¨è èè¨ï¼ >- æå¾å¤æ¹æ³å¯ä»¥ä½¿æ¨ç系統è¼é¬æ´æ°çºææ°çã >- 注æï¼ä¸¦éæ¯å人é½é©åé麼åï¼ãæ¬ç« ä¸»è¦æ¯å婿¨æ±ºå®å°åºè¦è·éç¼çæ¬ï¼ >- ææ¯è¦ä½¿ç¨è¼ç©©å®çéåºçã >+ <para>&os; æ¯åæçºç¼å±ç使¥ç³»çµ±ãæäºäººåæ¡å®æ¹éåºççæ¬ï¼ >+æäºäººååæ¡å宿¹ææ°çéç¼çæ¬ä¿æåæ¥ãç¶èå³ä½¿æ¯å®æ¹éåºççæ¬ä»ç¶æå¸¸æå®å ¨æ§æ´æ°æåå ¶ä»ç·æ¥ä¿®å¾©ãç¡è«ä½¿ç¨åªç¨®çæ¬ï¼&os;齿便æå¿ é çå·¥å ·ä¾è®ç³»çµ±ä¿æææ°ï¼èä¸å¯ä»¥è¼æåç´ä¸åçæ¬ãæ¬ç« å°æè¿°å¦ä½è¿½è¹¤éç¼çæ¬ï¼åä¿æ&os;ç³»çµ±ç¶æææ°çåºæ¬å·¥å · >+ > </para> > > <para>è®å®éç« ï¼æ¨å°äºè§£ï¸°</para> >+ <itemizedlist> >+ <listitem> >+ <para>å¦ä½ä½¿ç¨ >+ <application>freebsd-update</application>, >+ <application>Subversion</application>, æ >+ <application>CTM</application>è®&os;ç³»çµ±ä¿æå¨ææ°ççæ¬.</para> >+ </listitem> > >- <itemizedlist> >- <listitem><para>&os.stable; è &os.current;ãéå ©åæ¯çä¸åä¹èï¼</para> >+ <listitem> >+ <para>å¦ä½æ¯è¼å®è£ç³»çµ±ååå§è¤è£½ççæ </para> >+ > </listitem> >- <listitem><para>å¦ä½ä»¥ >- <application>CSup</application>, >- <application>CVSup</application>, >- <application>CVS</application> æ >- <application>CTM</application> 便´æ°ä½ ç系統</para> >+ >+ <listitem> >+ <para>å¦ä½ä½¿ç¨ >+ <application>Subversion</application>ææ¯documentation >+ ports<!--, and <application>Docsnap</application>-->ä¾ä½¿å·²å®è£çæä»¶ä¿æææ°ã</para> > </listitem> >- <listitem><para>å¦ä½ä»¥ <command>make buildworld</command> >- çæä»¤ä¾éæ°ç·¨è¯ãå®è£æ´å base systemã</para> >+ >+ <listitem> >+ <para>å ©åéç¼åæ¯çå·®ç°ï¼&os.stable; and &os.current;.</para> >+ > </listitem> > >+ <listitem> >+ <para>å¦ä½éæ°ç·¨è¯åéæ°å®è£æ´ååºç¤ç³»çµ±</para> >+ >+ </listitem> > </itemizedlist> > >+ > <para>å¨éå§é±è®éç« ä¹åï¼æ¨éè¦ï¸°</para> > > <itemizedlist> >@@ -54,1125 +68,1724 @@ > <listitem><para>å è¨å¥½ä½ ç網路(<xref linkend="advanced-networking"/>)ã > </para> > </listitem> >- <listitem><para>ç¥éå¦ä½éé port/package å®è£è»é«(<xref linkend="ports"/>)ã</para></listitem> >+ <listitem><para>ç¥éå¦ä½éé port/package å®è£ç¬¬ä¸æ¹è»é«(<xref linkend="ports"/>)ã</para></listitem> > </itemizedlist> >+ <note> >+ <para>æ¬ç« ä¸ï¼ 使ç¨<command>svn</command>ä¾ç²å¾åæ´æ°&os;åå§ç¢¼ã >+çºäºè½ä½¿ç¨ä»ï¼é¦å è¦å®è£ <package>devel/subversion</package> portæ package.</para> >+ </note> >+ > </sect1> > >- <sect1 xml:id="current-stable"> >- <title>&os.current; vs. &os.stable;</title> >- <indexterm><primary>-CURRENT</primary></indexterm> >- <indexterm><primary>-STABLE</primary></indexterm> >+ <sect1 xml:id="updating-upgrading-freebsdupdate"> >+ <info> >+ <title>&os; æ´æ°</title> > >- <para>FreeBSD æå ©åç¼å±åæ¯ï¼&os.current; å >- &os.stable;ãæ¬ç¯å°æé¸çºä»ç´¹ï¼ä¸¦ä»ç´¹å®ååå¥åæ¯å¦ä½æ´æ°ã >- é¦å ï¼å ä»ç´¹ &os.current;ï¼æ¥èåä»ç´¹ &os.stable;ã</para> >+ <authorgroup> >+ <author> >+ <personname> >+ <firstname>Tom</firstname> >+ <surname>Rhodes</surname> >+ </personname> >+ <contrib>Written by </contrib> >+ </author> >+ </authorgroup> > >- <sect2 xml:id="current"> >- <title>ä½¿ç¨ææ°ç &os; CURRENT</title> >+ <authorgroup> >+ <author> >+ <personname> >+ <firstname>Colin</firstname> >+ <surname>Percival</surname> >+ </personname> >+ <contrib>Based on notes provided by </contrib> >+ </author> >+ </authorgroup> >+ </info> > >- <para>éè£¡åæ¬¡å¼·èª¿ï¼&os.current; æ¯ &os; éç¼ç <quote>æåç·</quote>ã >- &os.current; 使ç¨è é æè¼å¼·çæè¡è½åï¼ >- èä¸æè©²è¦æè½åèªå·±è§£æ±ºå°é£ç系統åé¡ã è¥æ¨æ¯ &os; æ°æï¼ >- é£éº¼è«å¨å®è£åæå¥½å 䏿ã</para> >+ <indexterm> >+ <primary>Updating and Upgrading</primary> >+ </indexterm> >+ <indexterm> >+ <primary>freebsd-update</primary> >+ <see>updating-upgrading</see> >+ </indexterm> > >- <sect3> >- <title>ä»éº¼æ¯ &os.current;ï¼</title> >- <indexterm><primary>snapshot</primary></indexterm> >+ <para>峿æç¨å®å ¨æ§æ´æ°èåç´ä½æ¥ç³»çµ±å°æ°çç¼è¡çæ¬å°ä¸åæçºéä½ç系統æ¯éè¦çã&os; å æ¬ä¸åå« <command>freebsd-update</command> çæç¨ç¨å¼å¯ä»¥å·è¡éå ©é ä»»åã</para> >+ <para>éåæç¨ç¨å¼æ¯æ´&os;äºé²å¶å®å ¨æ§èåé¯èª¤æ´æ°ï¼ >+ä¸éè¦æåç·¨è¯åå®è£ä¿®å¾©ææ°æ ¸å¿ã >+å®å ¨æ§åéç®åæ¯æ´çæææ¶æ§åç¼è¡çé½å¯ä»¥åå¾äºé²å¶æ´æ°ã >+ç®åæ¯æ´çç¼è¡çå表åä»åçæ¯æ´æéé½åæ¼ >+ <uri >+ xlink:href="http://www.FreeBSD.org/security/">http://www.FreeBSD.org/security/</uri>ã</para> > >- <para>&os.current; æ¯ &os; çææ°çãå®å å«ï¼ >- ä»å¨ç ç¼é段ã坦驿§è³ªçä¿®æ¹ã鿏¡ææçæ©å¶ï¼ >- éäºæ±è¥¿å¨ä¸ä¸æ¬¡æ£å¼ relase ççæ¬å¯è½ææï¼ä¹å¯è½ä¸ææçã >- å管æè¨±å¤ &os; éç¼è æ¯å¤©é½æç·¨è¯ &os.current; source codeï¼ >- 使æéäºåå§ç¢¼æ¯ç¡æ³ç·¨è¯æåã éç¶ï¼éäºåé¡é常æåå¿«è§£æ±ºï¼ >- ä½ &os.current; å°åºæ¯å¸¶ä¾æµ©å«ææ¯å¤äºæ³è¦ç¨çæ°åè½ãæ¹åï¼ >- éé»ä¸»è¦åæ±ºæ¼æ¨æ´æ°åå§ç¢¼çææ©çºä½èå®ï¼</para> >+ <para>éåæç¨ç¨å¼ä¹æ¯æ´ä½æ¥ç³»çµ±åç´å°æ¬¡è¦çç¼è¡çæ¬ååç´å°ä»¤ä¸åç¼è¡ç忝åç´å°æ°çç¼è¡çæ¬åï¼è¦æª¢æ¥ä»çç¼è¡å®£åï¼å çºä»å å«ç¼è¡çæ¬ç¸éçéè¦è³è¨ãç¼è¡å ¬åå¯ä»¥ç±<uri >+ xlink:href="http://www.FreeBSD.org/releases/">http://www.FreeBSD.org/releases/</uri>åå¾ã</para> >+ >+ <note> >+ <para>妿æä½¿ç¨<command>crontab</command>ä¾æç¨ >+ &man.freebsd-update.8;ï¼é£ä»å¿ é å¨åç´ä½æ¥ç³»çµ±åå åç¨ã</para> >+ </note> >+ >+ <para>éç¯æè¿°<command>freebsd-update</command>使ç¨çè¨å®æªï¼ >+示ç¯å¦ä½éç¨å®å ¨æ§ä¿®è£åå¦ä½åç´å°ä¸»è¦ææ¬¡è¦ç使¥ç³»çµ±ç¼è¡çï¼ >+以åè¨è«æäºåç´ä½æ¥ç³»çµ±çèéã </para> >+ >+ <sect2 xml:id="freebsdupdate-config-file"> >+ <title>è¨å®æª</title> >+ >+ <para> >+ <command>freebsd-update</command>é è¨çè¨å®æªä¸éè®æ´å³å¯éä½ã >+æäºä½¿ç¨è å¯è½æ³è¦èª¿æ ¡é è¨çè¨å®æª <filename>/etc/freebsd-update.conf</filename> >+ä¾å°ç¨åºææ´å¥½çæ§å¶ãéåè¨å®æªç註解說æäºå¯ä»¥ä½¿ç¨çé¸é ï¼ >+ä½ä»¥ä¸å¯è½éè¦æ´å¤ä¸äºçè§£éï¼ >+ </para> >+ >+ <programlisting># Components of the base system which should be kept updated. >+Components world kernel</programlisting> >+ >+ <para>éå忏æ§å¶&os; çåªåé¨ä»½å°ä¿æææ°ã >+ é è¨æ¯å°æ´æ°æ´åbase systemåæ ¸å¿ã >+åå¥å ä»¶å¯ä»¥è¢«æå®ï¼ >+ä¾å¦ï¼<literal>src/base</literal>æ <literal>src/sys</literal>ã >+ç¶èæå¥½çé¸é æ¯ç¶æé è¨è¨å®ï¼ >+å çºæ¹è®è¨å®å»å æ¬ç¹å®é ç®ï¼åæ¯åéè¦çé ç®é½å¿ é è¦ååºã >+æéä¸ä¹ å¯è½æå çºåå§ç¢¼åäºé²å¶æªæ¡æ²ææ´æ°èé ææ éç徿ã >+ </para> >+ >+ <programlisting># Paths which start with anything matching an entry in an IgnorePaths >+# statement will be ignored. >+IgnorePaths /boot/kernel/linker.hints</programlisting> >+ >+ <para>ä¿æç¹å®çç®éï¼ä¾å¦ >+ <filename>/bin</filename> æ <filename>/sbin</filename>, >+ 卿´æ°éç¨ä¸è¢«æ´åï¼å¯ä»¥å°ä»åçè·¯å¾å å°æ¤æè¿°ä¸ã >+ éåé¸é å¯ä»¥é²æ¢ <command>freebsd-update</command>è¦èæ¬æ©çä¿®æ¹ã >+ </para> >+ >+ <programlisting># Paths which start with anything matching an entry in an UpdateIfUnmodified >+# statement will only be updated if the contents of the file have not been >+# modified by the user (unless changes are merged; see below). >+UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile</programlisting> >+ >+ <para>éåé¸é åªææ´æ°ç¹å®ç®é䏿ªä¿®æ¹çè¨å®æªã >+ ä»»ä½ä½¿ç¨è ä¿®æ¹çæªæ¡é½ä¸æèªåæ´æ°ã >+ user will prevent the automatic updating of these files. >+ æå¦ä¸åé¸é â >+ <literal>KeepModifiedMetadata</literal>ææç¤º >+ <command>freebsd-update</command>å¨åä½µæå°æ¹è®å²åä¸ä¾ >+ </para> >+ >+ <programlisting># When upgrading to a new &os; release, files which match MergeChanges >+# will have any local changes merged into the version from the new release. >+MergeChanges /etc/ /var/named/etc/ /boot/device.hints</programlisting> >+ >+ <para>ååº <command>freebsd-update</command>æå試åä½µçè¨å®æªç®éã >+ æªæ¡åä½µéç¨æ¯ä¸ç³»åé¡ä¼¼&man.mergemaster.8;ç&man.diff.1;ä¿®è£ï¼ >+使¯é¸é æ¯è¼å°ã >+ åä½µå¯ä»¥æ¥åï¼éå編輯å¨ï¼ææ¯ä»¤<command>freebsd-update</command>䏿¢ã >+妿æçæ ®ï¼å份 <filename>/etc</filename>ï¼ç¶å¾åæåä½µã >+ æ´å¤éæ¼<command>mergemaster</command>çè³è¨ï¼ >+åè¦ <xref linkend="mergemaster"/>ã >+ </para> >+ >+ <programlisting># Directory in which to store downloaded updates and temporary >+# files used by &os; Update. >+# WorkDir /var/db/freebsd-update</programlisting> >+ >+ <para>éåç®éæ¯ææä¿®è£æªåæ«åæªæ¾ç½®èã >+ ç¶ä½¿ç¨è é²è¡çæ¬åç´æï¼éåä½ç½®æè©²è¦æè³å°1GBçå¯ç¨ç£ç¢ç©ºéã >+ </para> >+ >+ <programlisting># When upgrading between releases, should the list of Components be >+# read strictly (StrictComponents yes) or merely as a list of components >+# which *might* be installed of which &os; Update should figure out >+# which actually are installed and upgrade those (StrictComponents no)? >+# StrictComponents no</programlisting> >+ >+ <para>ç¶éåé¸é è¨å®çº<literal>yes</literal>ï¼ >+ <command>freebsd-update</command> å°æåè¨ >+ <literal>Components</literal> åè¡¨å·²å®æï¼å°ä¸æå試åå表å¤çæ¹è®ã >+實éä¸ <command>freebsd-update</command>å°åè©¦æ´æ°æ¯ä¸åå±¬æ¼ <literal>Components</literal>åè¡¨çæªæ¡ã >+ </para> >+ </sect2> >+ >+ <sect2 xml:id="freebsdupdate-security-patches"> >+ <title>éç¨å®å ¨æ§ä¿®è£</title> >+ >+ <para>éç¨&os;å®å ¨æ§ä¿®è£çéç¨å·²ç¶è¢«ç°¡åï¼ >+ å 許系統管çå¡ä½¿ç¨<command>freebsd-update</command>ä¿æç³»çµ±æ´æ°ã >+ æ´å¤éæ¼&os; å®å ¨æ§å ±åçè³è¨å¯ä»¥åè >+ <xref linkend="security-advisories"/>ã</para> >+ >+ <para>&os; å®å ¨æ§ä¿®è£å¯ä»¥ä½¿ç¨ä»¥ä¸æä»¤ä¸è¼èå®è£ã >+ 第ä¸åæä»¤å°æ±ºå®æ¯å¦æå°æªå®æçä¿®è£ï¼å¦ææï¼å°ååºå·è¡ä¿®è£å°æè®æ´çæªæ¡æ¸ å®ã第äºåæä»¤å°æå·è¡ä¿®è£ã >+ </para> >+ >+ <screen>&prompt.root; <userinput>freebsd-update fetch</userinput> >+&prompt.root; <userinput>freebsd-update install</userinput></screen> >+ >+ <para>å¦ææ´æ°å·è¡ä»»ä½æ ¸å¿ä¿®è£ï¼ç³»çµ±å°æéæ°éæ©ä»¥ä½¿ç¨ä¿®è£éçæ ¸å¿ã >+妿å¨ä»»ä½å·è¡ä¸çäºé²ä½æªé²è¡ä¿®è£ï¼è¢«å½±é¿çæç¨ç¨å¼å°æéæ°ååä¾ä½¿ç¨ä¿®è£éçäºé²ä½æªã >+ </para> >+ >+ <para>å°ä»¥ä¸é ç®å å ¥ <filename>/etc/crontab</filename>系統å¯ä»¥æ¯å¤©èªåæª¢æ¥æ¯å¦ææ´æ°:</para> >+ >+ <programlisting>@daily root freebsd-update cron</programlisting> >+ >+ <para>å¦æææ°çä¿®è£ï¼å®åå°æèªåä¸è¼ï¼ä½æ¯é䏿å·è¡ã >+ 管çè <systemitem >+ class="username">root</systemitem>å°ææ¶å°email便ª¢è¦ä¿®è£ç¶å¾æåå·è¡ >+ <command>freebsd-update install</command>ä¾å®è£</para> >+ >+ <para>妿æç¼çä»»ä½é¯èª¤ï¼<command>freebsd-update</command> >+ å¯ä»¥ä½¿ç¨ä»¥ä¸æä»¤å溯æå¾çè®æ´ï¼ >+ </para> >+ >+ <screen>&prompt.root; <userinput>freebsd-update rollback</userinput> >+Uninstalling updates... done.</screen> >+ >+ <para>忬¡ï¼å¦ææ ¸å¿æä»»ä½æ ¸å¿æ¨¡çµæè®æ´ï¼ç³»çµ±å°éæ°éæ©ï¼åå½±é¿çäºé²ä½æªæéæ°å·è¡ã >+ </para> >+ >+ <para>åªæ<filename>GENERIC</filename>æ ¸å¿å¯ä»¥èªå被 >+ <command>freebsd-update</command>æ´æ°ã >+ 妿æå®è£èªè¨çæ ¸å¿ï¼å¨<command>freebsd-update</command> >+宿å®è£æ´æ°å¾ï¼å°æè¢«éæ°ç·¨è¯åéæ°å®è£ã >+ ç¶èï¼å¦æ<filename>/boot/GENERIC</filename>åå¨ï¼ >+ <command>freebsd-update</command>尿嵿¸¬åæ´æ° <filename>GENERIC</filename>æ ¸å¿ï¼ >+ å³ä½¿ä»ä¸¦éç®å系統æ£å¨å·è¡çæ ¸å¿ã >+ </para> >+ >+ <note> >+ <para>æ°¸é å¨<filename>/boot/GENERIC</filename>ä¿æä¸ä»½<filename>GENERIC</filename> >+ æ ¸å¿çå份ãéå°æ¼è¨ºæ·ä¸åçåé¡èçæ¬çåç´æå¹«å©ã >+ åè<xref >+ linkend="freebsd-update-custom-kernel-9x"/>æ<xref >+ linkend="freebsd-update-custom-kernel-8x"/>çéæ¼å¦ä½å份<filename>GENERIC</filename> æ ¸å¿ç說æ >+ </para> >+ </note> >+ >+ <para>é¤é<filename>/etc/freebsd-update.conf</filename>çé è¨è¨å®è¢«æ¹è®ï¼ >+ <command>freebsd-update</command>å°å®è£æ´æ°éçæ ¸å¿åå§ç¢¼åå ¶é¤çæ´æ° >+ ç¶å¾å°±å¯ä»¥ç §å¹³å¸¸çæ¹å¼éæ°ç·¨è¯åéæ°å®è£æ°çèªè¨æ ¸å¿ã >+ </para> >+ >+ <para>以<command>freebsd-update</command>ç¼è¡çæ´æ°ä¸¦é總æ¯å 嫿 ¸å¿ã >+å¦ææ ¸å¿çåå§ç¢¼æ²æè¢«<command>freebsd-update install</command>è®æ´ï¼ä¸¦ä¸éè¦éæ°ç·¨è¯èªè¨æ ¸å¿ã >+ ç¶è<command>freebsd-update</command>ç¸½æ¯ææ´æ° >+ <filename>/usr/src/sys/conf/newvers.sh</filename>ãç®åä¿®è£çç¨åº¦ï¼ >+å¦åå·è¡<command>uname -r</command>顯示ç<literal>-p</literal> >+æ¸åæ¯ç±éåæªæ¡åå¾ã >+ å³ä½¿æ²æå任使¹è®ï¼éæ°ç·¨è¯æ ¸å¿æè®<command>uname</command>æ£ç¢ºå°å ±åç®å系統修è£çç¨åº¦ã >+ éå°æ¼ç¶è·å¤å系統ç¹å¥æå¹«å©ï¼å¯ä»¥è®ä½ å¿«éè©ä¼°æ¯å系統å®è£çæ´æ°ã >+ </para> >+ </sect2> >+ >+ <sect2 xml:id="freebsdupdate-upgrade"> >+ <title>å·è¡ä¸»è¦å次è¦ççæ¬åç´</title> >+ >+ <para>å¾&os;çæ¬¡è¦çæ¬åç´å°å¦ä¸åçæ¬ï¼ä¾å¦å¾ >+ &os; 9.0 å° &os; 9.1, å«ä½ >+ <firstterm>次è¦çæ¬</firstterm>æ´æ°ã >+ <firstterm>主è¦çæ¬</firstterm>æ´æ°ç¼çå¨ç¶ &os; >+ å¾ä¸å主è¦çæ¬åç´å°ä¸»è¦çæ¬åç´å°å¦ä¸å主è¦çæ¬æ >+ï¼ä¾å¦å¾ &os; 9.X å° &os; 10.Xã >+å ©ç¨®æ´æ°é½å¯ä»¥ééæä¾ <command>freebsd-update</command> ç¼è¡çæ¬ä¾å·è¡ã >+ </para> >+ >+ <note> >+ <para>å¦æç³»çµ±æ£å¨å·è¡èªè¨çæ ¸å¿ï¼éå§åç´åï¼ >+確å®<filename>GENERIC</filename>æ ¸å¿ç坿¬å¨ >+ <filename>/boot/GENERIC</filename>ã >+ åè<xref >+ linkend="freebsd-update-custom-kernel-9x"/> æ <xref >+ linkend="freebsd-update-custom-kernel-8x"/> éæ¼å¦ä½è£½ä½ >+ <filename>GENERIC</filename>æ ¸å¿å¯æ¬ç說æã</para> >+ </note> >+ >+ <para>以ä¸çæä»¤å·è¡å¨&os; 9.0 系統æï¼ >+ å°ææç³»çµ±åç´è³ &os; 9.1ï¼</para> >+ >+ <screen>&prompt.root; <userinput>freebsd-update -r 9.1-RELEASE upgrade</userinput></screen> >+ >+ <para>ç¶æ¶å°éåæä»¤æï¼ >+ <command>freebsd-update</command>å°æè©ä¼°è¨å®æªåç®åçç³»çµ±ä¾æ¶éåç´éè¦çè³è¨ã >+è¢å¹ä¸çæ¸ å®æé¡¯ç¤ºåµæ¸¬å°ææ²åµæ¸¬å°åªäºå ä»¶ãä¾å¦ï¼ </para> >+ <screen>Looking up update.FreeBSD.org mirrors... 1 mirrors found. >+Fetching metadata signature for 9.0-RELEASE from update1.FreeBSD.org... done. >+Fetching metadata index... done. >+Inspecting system... done. >+ >+The following components of FreeBSD seem to be installed: >+kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games >+src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue >+src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin >+world/base world/info world/lib32 world/manpages >+ >+The following components of FreeBSD do not seem to be installed: >+kernel/generic world/catpages world/dict world/doc world/games >+world/proflibs >+ >+Does this look reasonable (y/n)? <userinput>y</userinput></screen> >+ >+ <para>æ¤æï¼<command>freebsd-update</command>å°å試ä¸è¼ææåç´éè¦çæªæ¡ã >+å¨æäºæ¡ä¾ï¼ä½¿ç¨è æè¢«æç¤ºä¸äºéæ¼å®è£ä»éº¼ææ¯å¦ä½é²è¡çåé¡ã >+ </para> >+ >+ <para>ç¶ä½¿ç¨èªè¨æ ¸å¿ï¼ä¸è¿°çæ¥é©å°æç¢çå¦ä¸åçè¦åï¼ >+ </para> >+ >+ <screen>WARNING: This system is running a "<replaceable>MYKERNEL</replaceable>" kernel, which is not a >+kernel configuration distributed as part of FreeBSD 9.0-RELEASE. >+This kernel will not be updated: you MUST update the kernel manually >+before running "/usr/sbin/freebsd-update install"</screen> >+ >+ <para>éåè¦åå¯ä»¥å®å ¨å°å¿½ç¥ï¼åç´éç¨å°æç«å³ä½¿ç¨æ´æ°éç >+ <filename>GENERIC</filename>æ ¸å¿ </para> >+ <para>䏿¦ææçä¿®è£é½è¢«ä¸è¼å°æ¬å°çç³»çµ±ï¼ >+ å®åå°æè¢«éç¨ãéåéç¨å¯è½æè±é»æéï¼åæ±ºæ¼æ©å¨çé度åå·¥ä½é >+ è¨å®æªå°æè¢«åä½µã >+åä½µçéç¨ä¸ç¶æªæ¡è¢«åä½µææ¯æååä½µè¢å¹ä¸åºç¾ç·¨è¼¯å¨æéè¦ä½¿ç¨è ä»å ¥ã >+ æ¯ä¸åæååä½µççµæå°æé¡¯ç¤ºçµ¦ä½¿ç¨è ã >+å¤±æææ¯è¢«å¿½ç¥çåä½µå°æä½¿ç¨åºä¸æ·ã使ç¨è ç¨åå¯è½æ³è¦å份 >+ <filename>/etc</filename> åæååä½µéè¦çæªæ¡ï¼ä¾å¦ï¼ >+ <filename>master.passwd</filename> æ >+ <filename>group</filename> ã</para> >+ >+ <note> >+ <para>ç¶ææä¿®è£ååä½µå¨å¦ä¸åç®éé²è¡æï¼ç³»çµ±éä¸æè¢«è¦åã >+䏿¦ææä¿®è£é½æåéç¨ï¼ææè¨å®æªé½è¢«åä½µï¼èä¸éç¨é å©ï¼ä½¿ç¨è å¯ä»¥ä»¥ä¸æä»¤ä¾å°éäºæ¹è®ä»è«¸æ¼ç£ç¢ä¸ï¼ >+ </para> >+ >+ <screen>&prompt.root; <userinput>freebsd-update install</userinput></screen> >+ </note> >+ >+ <para>æ ¸å¿åæ ¸å¿æ¨¡çµå°æå 被修è£ãå¦æç³»çµ±æ£å¨å·è¡èªè¨æ ¸å¿ï¼ä½¿ç¨ >+ &man.nextboot.8; æä»¤è¨å®ä¸æ¬¡éæ©çæ ¸å¿çºæ´æ°éç >+ <filename>/boot/GENERIC</filename>ï¼</para> >+ >+ <screen>&prompt.root; <userinput>nextboot -k GENERIC</userinput></screen> >+ >+ <warning> >+ <para>妿æ©å¨ä»¥é ç«¯éæ§ä¾æ´æ°ï¼ >+使ç¨<filename>GENERIC</filename>æ ¸å¿éæ°éæ©åï¼ >+ 確å®ä»å 嫿æç³»çµ±éæ©éè¦çé© åç¨å¼èä¸é£æ¥ç¶²è·¯ï¼ >+ ç¹å¥æ¯ç¶å·è¡çèªè¨æ ¸å¿å 嫿 ¸å¿æ¨¡çµæä¾å §å»ºåè½æï¼ >+ç¢ºå®æ«æå°ä½¿ç¨<filename>/boot/loader.conf</filename> å·¥å ·è¼å ¥éäºæ¨¡çµå°<filename>GENERIC</filename>æ ¸å¿ã >+ 建è°åç¨éå¿ é çæååç£ç¢è網路æè¼ç´å°åç´ç¨åºå®æã >+ </para> >+ </warning> >+ >+ <para>æ©å¨ç¾å¨æè©²æ´æ°éçæ ¸å¿éæ°éæ©ï¼ >+ </para> >+ >+ <screen>&prompt.root; <userinput>shutdown -r now</userinput></screen> >+ >+ <para>䏿¦ç³»çµ±éæ°ä¸ç·ï¼ä½¿ç¨ä»¥ä¸æä»¤éæ°éå§ >+ <command>freebsd-update</command>ã >+ å çºç¨åºççæ å·²è¢«å²åï¼ >+ <command>freebsd-update</command>å°ä¸æéé éå§ï¼ä»æé²è¡å°ä¸ä¸åéæ®µ >+ ï¼ç§»é¤ææèçå ±ç¨ç¨å¼åº«åç®æ¨æªã</para> >+ >+ <screen>&prompt.root; <userinput>freebsd-update install</userinput></screen> >+ >+ <note> >+ <para>æ ¹æç¨å¼åº«çæ¬ç·¨èï¼ å¯è½æå ©åè䏿¯ä¸åå®è£é段ã </para> >+ </note> >+ >+ <para>åç´ç¨åºç¾å¨å®æäºã妿鿝䏻è¦ççæ¬åç´ï¼åè >+ <xref linkend="freebsdupdate-portsrebuild"/> >+çæè¿°éæ°å®è£ææçportsåå¥ä»¶ã</para> >+ >+ <sect3 xml:id="freebsd-update-custom-kernel-9x"> >+ <title> &os; 9.X 以ä¸èªè¨æ ¸å¿</title> >+ >+ <para>ä½¿ç¨ <command>freebsd-update</command>åï¼ç¢ºå®æä¸ä»½æ ¸å¿ç坿¬, ensure >+ that a copy of the <filename>GENERIC</filename> kernel >+ exists in <filename>/boot/GENERIC</filename>. If a custom >+ kernel has only been built once, the kernel in >+ <filename>/boot/kernel.old</filename> is the >+ <literal>GENERIC</literal> kernel. Simply rename this >+ directory to <filename>/boot/kernel</filename>.</para> >+ >+ <para>If a custom kernel has been built more than once or if >+ it is unknown how many times the custom kernel has been >+ built, obtain a copy of the <literal>GENERIC</literal> >+ kernel that matches the current version of the operating >+ system. If physical access to the system is available, a >+ copy of the <literal>GENERIC</literal> kernel can be >+ installed from the installation media:</para> >+ >+ <screen>&prompt.root; <userinput>mount /cdrom</userinput> >+&prompt.root; <userinput>cd /cdrom/usr/freebsd-dist</userinput> >+&prompt.root; <userinput>tar -C/ -xvf kernel.txz boot/kernel/kernel</userinput></screen> >+ >+ <para>Alternately, the <literal>GENERIC</literal> kernel may >+ be rebuilt and installed from source:</para> >+ >+ <screen>&prompt.root; <userinput>cd /usr/src</userinput> >+&prompt.root; <userinput>make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null</userinput></screen> >+ >+ <para>For this kernel to be identified as the >+ <literal>GENERIC</literal> kernel by >+ <command>freebsd-update</command>, the >+ <filename>GENERIC</filename> configuration file must not >+ have been modified in any way. It is also suggested that >+ the kernel is built without any other special >+ options.</para> >+ >+ <para>Rebooting into the <filename>GENERIC</filename> kernel >+ is not required as <command>freebsd-update</command> only >+ needs <filename>/boot/GENERIC</filename> to exist.</para> > </sect3> > >- <sect3> >- <title>誰éè¦ &os.current;ï¼</title> >+ <sect3 xml:id="freebsd-update-custom-kernel-8x"> >+ <title>&os; 8.Xèªè¨æ ¸å¿</title> > >- <para>&os.current; é©åä¸åéä¸é¡äººï¼</para> >+ <para>On an &os; 8.X system, the instructions for >+ obtaining or building a <filename>GENERIC</filename> kernel >+ differ slightly.</para> > >- <orderedlist> >- <listitem> >- <para>&os; 社群æå¡ï¼ç©æ¥µå°æ³¨æ¼ source tree çæä¸é¨ä»½ï¼ >- 以åèªçºä¿æçº <quote>current(ææ°çæ )</quote> >- çºçµå°éæ±ç人ã</para> >- </listitem> >+ <para>Assuming physical access to the machine is possible, a >+ copy of the <filename>GENERIC</filename> kernel can be >+ installed from the installation media using the following >+ commands:</para> > >- <listitem> >- <para>&os; 社群æå¡ï¼çºäºç¢ºä¿ &os.current; >- è½å¤ åå¯è½å°ç¶æå¨æç©©å®ççæ ï¼ >- è主åè±æé解決åé¡ç測試è ã æ¤å¤ï¼éæå° &os; >- è½æåºå ·é«å»ºè°ä»¥åæ¹åæ¹åï¼ä¸¦æåº patch ä¿®æ£æªç人ã</para> >- </listitem> >+ <screen>&prompt.root; <userinput>mount /cdrom</userinput> >+&prompt.root; <userinput>cd /cdrom/<replaceable>X.Y-RELEASE</replaceable>/kernels</userinput> >+&prompt.root; <userinput>./install.sh GENERIC</userinput></screen> > >- <listitem> >- <para>åªæ¯éå¿æè æ³åè(æ¯å¦ï¼åªæ¯<emphasis>é±è®</emphasis>ï¼ >- èéå·è¡)ç人ã >- éäºäººææä¹æåäºè¨»è§£ï¼æè²¢ç»åå§ç¢¼ã</para> >- </listitem> >- </orderedlist> >+ <para>Replace <filename >+ class="directory"><replaceable>X.Y-RELEASE</replaceable></filename> >+ with the version of the release being used. The >+ <filename>GENERIC</filename> kernel will be installed in >+ <filename>/boot/GENERIC</filename> by default.</para> >+ >+ <para>To instead build the <filename>GENERIC</filename> kernel >+ from source:</para> >+ >+ <screen>&prompt.root; <userinput>cd /usr/src</userinput> >+&prompt.root; <userinput>env DESTDIR=/boot/GENERIC make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null</userinput> >+&prompt.root; <userinput>mv /boot/GENERIC/boot/kernel/* /boot/GENERIC</userinput> >+&prompt.root; <userinput>rm -rf /boot/GENERIC/boot</userinput></screen> >+ >+ <para>For this kernel to be picked up as >+ <filename>GENERIC</filename> by >+ <command>freebsd-update</command>, the >+ <filename>GENERIC</filename> configuration file must not >+ have been modified in any way. It is also suggested that it >+ is built without any other special options.</para> >+ >+ <para>Rebooting into the <filename>GENERIC</filename> kernel >+ is not required.</para> > </sect3> > >- <sect3> >- <title>&os.current; <emphasis>䏦䏿¯</emphasis> ä»éº¼ï¼</title> >+ <sect3 xml:id="freebsdupdate-portsrebuild"> >+ <title>主è¦çæ¬æ´æ°å¾éæ°å»ºç«Ports</title> > >- <orderedlist> >- <listitem> >- <para>è¿½æ±ææ°åè½ã è½èªªè£¡é¢æäºå¾é ·çæ°åè½ï¼ >- 䏦叿æçºæ¨å¨åç人ä¸ç¬¬ä¸åå試çäººï¼ >- å æ¤å° &os.current; è¦çºå徿¶é®®ççæ·å¾ã >- åç®¡ï¼æ¨è½å¤ å æ¤é¦å çè§£å°ææ°çåè½ï¼ >- ä½é乿å³èè¥åºç¾æ°ç bug æï¼æ¨ä¹æ¯é¦ç¶å ¶è¡ã</para> >- </listitem> >+ <para>ä¸è¬ä¾èªªï¼æ¬¡è¦çæ¬æ´æ°å¾å®è£çæç¨ç¨å¼å¯ä»¥æ²æåé¡å°ç¹¼çºå·è¡ã >+ 主è¦çæ¬é使ç¨ä¸åçæç¨ç¨å¼äºé²ä½ä»é¢ Application Binary Interfaces >+ (<acronym>ABI</acronym>s)ï¼æç ´å£å¤§é¨ä»½ç¬¬ä¸æ¹æç¨ç¨å¼ã >+ 主è¦çæ¬æ´æ°å¾ï¼ææå®è£çå¥ä»¶åportséè¦ä½¿ç¨æç¨ç¨å¼ä¾åç´ï¼ä¾å¦ >+ <package>ports-mgmt/portmaster</package>ã A >+ éæ°ç·¨è¯æææç¨ç¨å¼ï¼å¯ä»¥ä½¿ç¨ä»¥ä¸æä»¤å®æï¼ >+ </para> > >- <listitem> >- <para>修復 bug çéææ³ã å çº &os.current; >- çä»»ä½çæ¬å¨ä¿®å¾©å·²ç¥ bug çåæï¼åå¯è½æç¢çæ°ç bugã >- </para> >- </listitem> >+ <screen>&prompt.root; <userinput>portmaster -af</userinput></screen> > >- <listitem> >- <para>ç¡æä¸å¨ç <quote>officially supported</quote>ã >- æåæç¡ååå©ä¸è¿° &os.current; çé£ä¸ç¨®é¡å¥ç >- <quote>legitimate</quote> 使ç¨è ï¼ >- 使å<emphasis>æ²æé</emphasis>çºä»åæä¾æè¡æ¯æ´ã >- éä¸ä»£è¡¨æå徿¡å£ï¼ææ¯ä¸æ³å¹«å©äºº(è¥æ¯çè©±ï¼ >- æåä¹ä¸æçº &os; åªåäº) >- ï¼å¯¦å¨æ¯å çºæåå身ä¹è¡ï¼ç¡æ³æ¯å¤©åçæ¸ç¾ååé¡ï¼ >- <emphasis>èåæ</emphasis>ç¹¼çºéç¼ &os;ã >- å¯ä»¥ç¢ºå®çä¸é»å°±æ¯ï¼ >- 卿¹å &os; ææ¯åç大éæé實é©ç¢¼çåé¡ä¹éï¼ >- è¥è¦åå鏿ç話ï¼éç¼è æé¸æåè ã</para> >- </listitem> >- </orderedlist> >+ <para>éåæä»¤å°æé¡¯ç¤ºæ¯åç¨å¼çè¨å®é¸é è¨å®ç«é¢ï¼çå¾ ä½¿ç¨è çäºåã >+ 妿è¦ä½¿ç¨é è¨çé¸é ï¼å¯ä»¥å¨ä¸è¿°æä»¤ä½¿ç¨<option>-G</option>é¸é ã >+ </para> >+ >+ <para>䏿¦è»é«åç´å®æ, å·è¡ >+ <command>freebsd-update</command>ä¾å®æææåç´éç¨çé¶ç¢äºæ ã >+ ï¼</para> >+ >+ <screen>&prompt.root; <userinput>freebsd-update install</userinput></screen> >+ >+ <para>å¦ææ¯æ«æä½¿ç¨<filename>GENERIC</filename>æ ¸å¿ï¼ >+ ç¾å¨è«ä½¿ç¨ >+ <xref linkend="kernelconfig"/>ç說æç·¨è¯åå®è£æ°çèªè¨æ ¸å¿ã</para> >+ >+ <para>éæ°éæ©é²å ¥æ°çç &os;ãç¾å¨å·²ç¶å®æåç´éç¨äºã >+ </para> > </sect3> >+ </sect2> > >- <sect3> >- <title>ä½¿ç¨ &os.current;</title> >+ <sect2 xml:id="freebsdupdate-system-comparison"> >+ <title>ç³»çµ±çæ æ¯è¼</title> > >- <orderedlist> >- <listitem> >- <para>å å ¥ &a.current.name;<indexterm><primary>-CURRENT</primary><secondary>using</secondary></indexterm> å &a.cvsall.name; è«å£ã >- éä¸å®åªæ¯å建è°ï¼ä¹æ¯ <emphasis>å¿ é </emphasis> ä½çã >- è¥æ¨æ²è¨é± <emphasis>&a.current.name;</emphasis> >- ï¼é£éº¼å°±æé¯éå¥äººå°ç®åç³»çµ±çæ ç說æï¼èæ¯èå¨å¥äººå·²è§£çåé¡ã >- æ´éè¦çæ¯ï¼å¯è½æé¯å¤±ä¸äºå°å·±èº«æç®¡ç³»çµ±å®å±ç¸ç¶éè¦çå ¬åã >- </para> >+ <para>å·²å®è£ç &os; çæ¬å¯ä»¥ä½¿ç¨ <command>freebsd-update IDS</command> >+ä¾è·å¦ä¸åå·²ç¥å¥½çè¤è£½çæ¬ä¾å測試ã >+éåæä»¤è©ä¼°ç³»çµ±æç¨ç¨å¼ï¼ç¨å¼åº«åè¨å®æªæ¡ç®åççæ¬ï¼ >+å¯ä»¥è¢«ç¶æå §å»ºçå ¥ä¾µåµæ¸¬ç³»çµ±ä¾ä½¿ç¨ (<acronym>IDS</acronym>)ã</para> > >- <para>å¨ &a.cvsall.name; ä¸åå¯ä»¥çå°æ¯å commit ç´éï¼ >- å çºéäºè¨éæé£å¸¶å½±é¿å ¶ä»ç¸éè³è¨ã</para> >+ <warning> >+ <para>éåæä»¤ä¸æ¯åä»£çæ£ç >+ <acronym>IDS</acronym> ï¼ä¾å¦ >+ <package>security/snort</package>ãç¶ >+ <command>freebsd-update</command> å²åè³æå¨ç£ç¢è£¡ï¼æ¯æè¢«ç«æ¹çå¯è½æ§ >+ å¯ä»¥ä½¿ç¨<varname>kern.securelevel</varname> >+ææ¯å°æ²æå¨ä½¿ç¨ç<command>freebsd-update</command> >+çè³æå²åå¨å¯è®æªæ¡ç³»çµ±ä¾æ¸å°é樣çå¯è½æ§ï¼ >+æ¯è¼å¥½çè§£æ±ºæ¹æ³æ¯å°ç³»çµ±åå®å ¨çç£ç¢ï¼ä¾å¦ >+<acronym>DVD</acronym>ææ¯å®å ¨ç夿¥ >+ <acronym>USB</acronym> ç£ç¢è£ç½®åæ¯è¼ã >+ å¦é¡çæ¹æ³æ¯ä½¿ç¨å¨<xref linkend="security-ids"/>æè¿°çå §å»ºæç¨ç¨å¼æä¾ç<acronym>IDS</acronym> åè½</para> >+ </warning> > >- <para>è¦è¨é±éäºè«å£æå ¶ä»è«å£ï¼è«åè &a.mailman.lists.link; >- 並é»é¸æ³è¨é±çé¨åå³å¯ã è³æ¼å ¶ä»å¾çºæ¥é©å¦ä½é²è¡ï¼ >- å¨é£è£¡ææèªªæã</para> >- </listitem> >+ <para>çºäºéå§æ¯è¼ï¼å æå®ç¹å®çè¼¸åºæªæ¡ä¾å²åçµæï¼ >+ </para> > >- <listitem> >- <para>å¾ &os; <link linkend="mirrors">mirror ç«</link> >- åå¾åå§ç¢¼ã æå ©ç¨®æ¹å¼å¯ä»¥éæï¼</para> >+ <screen>&prompt.root; <userinput>freebsd-update IDS >> outfile.ids</userinput></screen> > >- <orderedlist> >- <listitem> >- <para>以 <link linkend="cvsup">csup</link><indexterm><primary><command>cvsup</command></primary></indexterm> æ >- <link linkend="cvsup">cvsup</link> ç¨å¼æé 使¼ >- <filename>/usr/share/examples/cvsup</filename> æªåçº >- <filename>standard-supfile</filename> ç >- <filename>supfile</filename>ã >- 鿝大家æå¸¸æ¨è¦çæ¹å¼ï¼å çºå®å¯ä»¥è®æ¨ææ´å tree 齿åä¾ï¼ >- ä¹å¾å°±åªåææ´æ°çé¨åå³å¯ã >- æ¤å¤ï¼è¨±å¤äººææ <command>csup</command> æ >- <command>cvsup</command> æ¾å° >- <command>cron</command><indexterm><primary><command>cron</command></primary></indexterm> 以宿èªåæ´æ°ã >- æ¨é è¦èªè¨åè¿°ç <filename>supfile</filename> ç¯ä¾æªï¼ >- 並éå°èªèº«ç¶²è·¯ç°å¢ä»¥èª¿æ´ <link linkend="cvsup">csup</link> >- æ <link linkend="cvsup">cvsup</link><indexterm><primary>-CURRENT</primary><secondary>Syncing with <application>CVSup</application></secondary></indexterm> ç¸éè¨å®ã</para> >- </listitem> >+ <para>ç¾å¨ç³»çµ±å°æè¢«æª¢æ¥ï¼ >+èå å«å·²ç¥ç¼è¡çåç¾å¨å®è£çç<acronym>SHA256</acronym>éæ¹å¼ >+çåé·æªæ¡æ¸ å®å°æè¢«éè³æå®çè¼¸åºæªã >+ </para> > >- <listitem> >- <para>ä½¿ç¨ <application>CTM</application><indexterm><primary>-CURRENT</primary><secondary>Syncing with CTM</secondary></indexterm> å·¥å ·ã è¥ç¶²è·¯ç°å¢ä¸ä½³ >- (ä¸ç¶²è²»ç¨è²´ï¼æåªè½ç¨ email èå·²) >- <application>CTM</application> ææ¯è¼é©åæ¨çéæ±ã >- ç¶èï¼é乿ä¸äºçè°ä¸¦ä¸å¸¸æå°ä¸äºæåé¡çæªæ¡ã å æ¤ï¼ >- å¾å°äººæç¨å®ã éä¹è¨»å®äºä¸è½é·æä¾è³´éåæ´æ°æ¹å¼ã >- è¥æ¯ä½¿ç¨ 9600 bps modem æé »å¯¬æ´å¤§çä¸ç¶²è ï¼å»ºè°ä½¿ç¨ >- <application>CVSup</application> >- ã</para> >- </listitem> >- </orderedlist> >+ <para>æ¸ å®çé ç®ç¸ç¶é·ï¼ä½æ¯è¼¸åºæ ¼å¼å¾å®¹æè¢«åæã >+ä¾å¦ï¼è¦ç²å¾ä¸ååç¼è¡çä¸åçæªæ¡æ¸ å®ï¼å¯ä»¥ä¸ä»¥ä¸æä»¤ï¼ </para> >+ >+ <screen>&prompt.root; <userinput>cat outfile.ids | awk '{ print $1 }' | more</userinput> >+/etc/master.passwd >+/etc/motd >+/etc/passwd >+/etc/pf.conf</screen> >+ >+ <para>éå輸åºç¯ä¾å·²ç¶è¢«æªçï¼å便æ´å¤çæªæ¡åå¨ã >+ æäºæªæ¡èªç¶ææä¿®æ¹ãä¾å¦ï¼å¦ææä½¿ç¨è 被å å ¥ç³»çµ±ï¼ >+ <filename>/etc/passwd</filename> æè¢«ä¿®æ¹ >+ 妿<command>freebsd-update</command>ææ´æ°éï¼æ ¸å¿æ¨¡çµå¯è½æä¸å >+ çºäºè¦æé¤ç¹å®çæªæ¡æç®éï¼æå®åå å°<filename>/etc/freebsd-update.conf</filename>裡ç<literal>IDSIgnorePaths</literal> é¸é ã >+ </para> >+ </sect2> >+ </sect1> >+ >+ <sect1 xml:id="updating-upgrading-documentation"> >+ <title>æ´æ°æä»¶çµ</title> >+ >+ <indexterm><primary>æ´æ°ååç´</primary></indexterm> >+ >+ <indexterm> >+ <primary>æä»¶</primary> >+ <see>æ´æ°ååç´</see> >+ </indexterm> >+ >+ <para>æä»¶æ¯&os;使¥ç³»çµ±ä¸å¯æç¼ºçä¸é¨ä»½ã >+ ææ°çæ¬ç &os; æä»¶å¯ä»¥å¨ >+ &os; ç¶²ç«åå¾(<link >+ xlink:href="&url.base;/doc/">http://www.freebsd.org/doc/</link>), >+ 徿¹ä¾¿æä¸ä»½ææ°ç&os; >+ ç¶²ç«ï¼ä½¿ç¨æåï¼ <acronym>常è¦åç</acronym>åæç« çæ¬å°ç«¯å¯æ¬ã</para> >+ >+ <para>éä¸ç¯æè¿°å¦ä½ä½¿ç¨åå§ç¢¼ææ¯ >+&os; Ports ç®¡çæ©å¶å° >+æ¬å°ç«¯&os;æä»¶ä¿æææ°ã >+ </para> >+ >+ <para>編輯åç¼ä½æä»¶æ´æ£çè³è¨ >+ è«åè &os; æä»¶è¨åæ°è²¢ç»è å ¥éæ¸ >+ (<link >+ xlink:href="&url.books.fdp-primer;">http://www.freebsd.org/doc/en_US.ISO8859-1/books/fdp-primer/</link>).</para> >+ >+ <sect2 xml:id="updating-installed-documentation"> >+ <title>å¾åå§ç¢¼æ´æ°æä»¶</title> >+ >+ <para>éæ°å¾åå§ç¢¼ç·¨è¯&os; æä»¶éè¦ä¸äºä¸æ¯å±¬æ¼ >+ &os; åºç¤ç³»çµ±çå·¥å · >+ éäºéè¦çå·¥å ·å æ¬ >+ <application>svn</application>å¯ä»¥å¾ >+ <package>textproc/docproj</package>å¥ä»¶å®è£ææ¯ >+ &os; æä»¶è¨åçéç¼çport</para> >+ >+ <para>䏿¦å®è£å¥½ï¼è«ä½¿ç¨<application>svn</application> >+ä¾åå¾ä¹¾æ·¨çæä»¶åå§ç¢¼å¯æ¬ã >+ å°<replaceable>https://svn0.us-west.FreeBSD.org</replaceable> >+ ç½®ææ<xref linkend="svn-mirrors"/>裡å°çä½ç½®åä½ æè¿çé¡åç«ï¼ >+</para> >+ >+ <screen>&prompt.root; <userinput>svn checkout <replaceable>https://svn0.us-west.FreeBSD.org</replaceable>/doc/head /usr/doc</userinput></screen> >+ >+ <para>ç¬¬ä¸æ¬¡ä¸è¼æä»¶åå§ç¢¼éè¦è±é»æéï¼è«è®ä»å·è¡å®ç¢ >+ </para> >+ >+ <para>å°ä¾æä»¶åå§ç¢¼æ´æ°çåå¾å¯ä»¥å·è¡ï¼</para> >+ >+ <screen>&prompt.root; <userinput>svn update /usr/doc</userinput></screen> >+ >+ <para>ç¶ææ°çæä»¶åå§ç¢¼å¿«ç §å·²ç¶æåå° >+ <filename>/usr/doc</filename>ï¼ä¸åé½å·²å°±ç·å¯ä»¥å°å·²å®è£çæä»¶é²è¡æ´æ°ã >+ </para> >+ >+ <para>è¦å®æ´æ´æ°ææèªè¨ï¼å¯ä»¥å·è¡:</para> >+ >+ <screen>&prompt.root; <userinput>cd /usr/doc</userinput> >+&prompt.root; <userinput>make install clean</userinput></screen> >+ >+ <para>妿åªè¦æ´æ°ä¸åç¹å®çèªè¨ï¼å¯ä»¥å¨<filename>/usr/doc</filename> >+ä¸ç¹å®èªè¨çåç®éå·è¡<command>make</command>:</para> >+ >+ <screen>&prompt.root; <userinput>cd /usr/doc/en_US.ISO8859-1</userinput> >+&prompt.root; <userinput>make install clean</userinput></screen> >+ >+ <para>å¦ä¸åæ´æ°æä»¶çæ¹æ³æ¯å¨ <filename>/usr/doc</filename> >+æç¹å®èªè¨çåç®éå·è¡:</para> >+ >+ <screen>&prompt.root; <userinput>make update</userinput></screen> >+ >+ <para>è¼¸åºæ ¼å¼å¯ä»¥ç¶ç±è¨å® <varname>FORMATS</varname>便ï¼</para> >+ >+ <screen>&prompt.root; <userinput>cd /usr/doc</userinput> >+&prompt.root; <userinput>make FORMATS='html html-split' install clean</userinput></screen> >+ >+ <para>æå¹¾åé¸é å¯ä»¥ä½¿å¾åªè¦æ´æ°é¨ä»½æä»¶ææ¯å»ºç«ç¹å®ç¿»è¯çéç¨æ´å ç°¡æã >+éäºé¸é å¯ä»¥å¨<filename>/etc/make.conf</filename>ä¸è¨å®ææ´å系統çé¸é ï¼ >+ææ¯ç¶ç±å½ä»¤åå³é給<command>make</command>ã</para> >+ >+ <para>éäºé¸é å æ¬:</para> >+ >+ <variablelist> >+ <varlistentry> >+ <term><varname>DOC_LANG</varname></term> >+ >+ <listitem> >+ <para>è¦å»ºç«ææ¯å®è£çèªè¨åç·¨ç¢¼æ¸ å®ï¼ä¾å¦è±ææä»¶ç¨<literal>en_US.ISO8859-1</literal>ã</para> > </listitem> >+ </varlistentry> > >+ <varlistentry> >+ <term><varname>FORMATS</varname></term> >+ > <listitem> >- <para>è¥æ source code æ¯è¦ç¨ä¾è·çï¼èä¸å åªæ¯ççèå·²ï¼ >- é£éº¼å°±æ <emphasis>æ´å</emphasis> &os.current;ï¼èä¸è¦åªæé¨åã >- å çºå¤§é¨åç source code 齿ç¸ä¾å°å ¶ä» source code ç°ç¯é¨åï¼ >- è¥æ¯æ¨åªç·¨è¯å ¶ä¸ä¸é¨ä»½ï¼ä¿èæå¾éº»ç ©ã</para> >- >- <para>å¨ç·¨è¯ &os.current;<indexterm><primary>-CURRENT</primary><secondary>compiling</secondary></indexterm> ä¹åï¼è«ä»ç´°é±è® >- <filename>/usr/src</filename> å §ç <filename>Makefile</filename>ã >- åç®¡åªæ¯åç´é¨åæ±è¥¿èå·²ï¼æ¨è³å°ä¹è¦å <link linkend="makeworld"> >- è£æ°ç kernel 以åéæ°ç·¨è¯ world</link>ã æ¤å¤ï¼å¤å¤é±è® >- &a.current; 以å <filename>/usr/src/UPDATING</filename> >- 乿¯å¿ é çï¼ >- æè½ç¥éç®åé²åº¦æ¯ææ¨£ä»¥åä¸ä¸çææä»éº¼æ°æ±è¥¿ã</para> >+ <para>å®ä¸æ ¼å¼ææ¯è¦å»ºç«çè¼¸åºæ ¼å¼æ¸ å®ãç®åæ¯æ´ <literal>html</literal>, >+ <literal>html-split</literal>, <literal>txt</literal>, >+ <literal>ps</literal>, å <literal>pdf</literal> >+ ã</para> > </listitem> >+ </varlistentry> > >+ <varlistentry> >+ <term><varname>DOCDIR</varname></term> >+ > <listitem> >- <para>ç±è¡ï¼è¥æ¨æ£å¨è· &os.current;ï¼ >- æå徿³ç¥éæ¨å°æ¼å®çæ³æ³æ¯ä»éº¼ï¼å°¤å ¶æ¯å å¼·åªäºåè½ï¼ >- æè©²ä¿®æ£åªäºé¯èª¤ç建è°ã 妿æ¨å¨å»ºè°æè½éä¸ç¸éç¨å¼ç¢¼çè©±ï¼ >- é£çæ¯å¤ªæ£äºï¼</para> >+ <para>å®è£æä»¶çä½ç½®ãé è¨è£å¨ >+ <filename>/usr/share/doc</filename>ã</para> > </listitem> >- </orderedlist> >- </sect3> >+ </varlistentry> >+ </variablelist> >+ >+ <para>æ´å¤éæ¼&os;å ¨ç³»çµ±ç<command>make</command> è®æ¸ï¼ >+è«åè&man.make.conf.5;ã</para> > </sect2> > >- <sect2 xml:id="stable"> >- <title>ä½¿ç¨ææ°ç &os; STABLE</title> >+ <sect2 xml:id="doc-ports-install-package"> >+ <info> >+ <title>å¾Portsæ´æ°æä»¶</title> > >- <sect3> >- <title>ä»éº¼æ¯ &os.stable;ï¼</title> >- <indexterm><primary>-STABLE</primary></indexterm> >+ <authorgroup> >+ <author> >+ <personname> >+ <firstname>Marc</firstname> >+ <surname>Fonvieille</surname> >+ </personname> >+ <contrib>Based on the work of </contrib> >+ </author> >+ </authorgroup> >+ </info> > >- <para>&os.stable; æ¯æåçéç¼åæ¯ï¼ä¸»è¦çç¼è¡çå°±ç±æ¤èä¾ã >- éå忝æä»¥ä¸åé度ä½ä¿®æ¹è®åï¼ä¸¦ä¸åè¨éäºæ¯ç¬¬ä¸æ¬¡é²å ¥ &os.current; >- é²è¡æ¸¬è©¦ã ç¶èï¼é <emphasis>ä»ç¶</emphasis> 屬æ¼éç¼ä¸çåæ¯ï¼ >- ä¹å°±æ¯èªªå¨æäºæåï¼&os.stable; å¯è½æãä¹å¯è½ä¸æç¬¦åä¸äºç¹æ®éæ±ã >- å®åªä¸éæ¯å¦ä¸åéç¼åæ¯èå·²ï¼å¯è½ä¸å¤ªé©åä¸è¬ä½¿ç¨è ã</para> >- </sect3> >+ <indexterm> >+ <primary>Updating and Upgrading</primary> >+ </indexterm> > >- <sect3> >- <title>誰éè¦ &os.stable;ï¼</title> >+ <indexterm> >+ <primary>documentation package</primary> >+ <see>Updating and Upgrading</see> >+ </indexterm> > >- <para>è¥æ¨æèè¶£å»è¿½è¹¤ãè²¢ç» FreeBSD éç¼éç¨æä½äºè²¢ç»ï¼ >- å°¤å ¶æ¯æè· FreeBSD æ¥ä¸ä¾ç <quote>é鵿§</quote> ç¼è¡æéï¼ >- æè©²èæ ®æ¡ç¨ &os.stable;ã</para> >+ <para>åä¸ç¯èªªæäºå¾åå§ç¢¼æ´æ°&os;æä»¶çæ¹æ³ãæ¬ç¯æè¿°ä½¿ç¨Ports Collectionçå¦é¡æ¹æ³ï¼</para> > >- <para>éç¶å®å ¨æ¼æ´çä¿®è£ä¹æé²å ¥ &os.stable; åæ¯ï¼ >- ä½ä¸å¿ å å å æ¤è <emphasis>éè¦</emphasis> å»ç¨ &os.stable;ã >- FreeBSD æ¯é security advisory(å®å ¨å ¬å) >- é½æè§£èªªå¦ä½å»ä¿®å¾©æåå°å½±é¿ççæ¬ >- <footnote><para>ç¶èï¼éä¹ä¸ä¸å®æ¯æ£ç¢ºï¼æåä¸å¯è½æ°¸é æ¯æ´ FreeBSD >- ææ¥çå種ç¼è¡çæ¬ï¼å管æ¯åç¼è¡çç¼ä½ä¹å¾ï¼é½ä»ææçºæ¯æ´æ¸å¹´ä¹ä¹ ã >- è¥æ¬²çè§£ FreeBSD ç®åå°æ¼èççæ¯æ´æ¿çç´°ç¯ï¼è«åé± <link xlink:href="&url.base;/security/">http://www.FreeBSD.org/security/</link> >- ã</para> >- </footnote> >- ï¼è¥å å çºå®å ¨å ç´ è廿¡ç¨éç¼åæ¯ï¼éç¶æè§£æ±ºç¾æå·²ç¥åé¡ï¼ >- ä½ä¹å¯è½å¸¶ä¾ä¸äºæ½èçåé¡ã</para> >+ <itemizedlist> >+ <listitem> >+ <para>Install pre-built packages of the documentation, >+ without having to locally build anything or install the >+ documentation toolchain.</para> >+ </listitem> > >- <para>å管æåç¡åç¢ºä¿ &os.stable; 忝å¨ä»»ä½æååè½æ£ç¢ºç·¨è¯ãéä½ï¼ >- 使²äººè½å¤ æä¿å®é¨æé½å¯ä»¥ç¬¦åä¸è¿°ç®çã æ¤å¤ï¼éç¶åå§ç¢¼å¨é²å ¥ >- &os.stable; ä¹åï¼é½æå å¨ &os.current; éç¼å®ç¢ï¼ä½ä½¿ç¨ &os.current; >- ç人ç¢ç«é æ¯ &os.stable; 使ç¨è ä¾çå°ï¼æä»¥é常æäºåé¡ï¼å¯è½å¨ >- &os.current; æ¯è¼æ²äººæ³¨æå°ï¼é¨è &os.stable; >- 使ç¨è ç廣æ³ä½¿ç¨æææµ®ç¾ã</para> >+ <listitem> >+ <para>Build the documentation sources through the ports >+ framework, making the checkout and build steps a bit >+ easier.</para> >+ </listitem> >+ </itemizedlist> > >- <para>ç±æ¼ä¸è¿°éäºçç±ï¼æå<emphasis>䏦䏿¨è¦</emphasis> ç²ç®è¿½é¨ >- &os.stable;ï¼è䏿´éè¦çæ¯ï¼å¥å¨åå§ç¢¼å°æªç¶å®æ´æ¸¬è©¦ä¹åï¼ >- å°±è¡åæ production server è½ç§»å° &os.stable; ç°å¢ã</para> >+ <para>This method of updating the &os; documentation is >+ supported by a set of documentation ports and packages which >+ are updated by the &a.doceng; on a monthly basis. These are >+ listed in the &os; Ports Collection, under the docs >+ category (<link >+ xlink:href="http://www.freshports.org/docs/">http://www.freshports.org/docs/</link>).</para> > >- <para>è¥æ¨æ²æéäºå¤çæéãç²¾ç¥ç話ï¼é£æ¨è¦æ¨ä½¿ç¨ææ°ç FreeBSD >- ç¼è¡çå³å¯ï¼ä¸¦æ¡ç¨å ¶ææä¾ç binary æ´æ°æ©å¶ä¾å®æåç´è½ç§»ã</para> >- </sect3> >+ <para>Organization of the documentation ports is as >+ follows:</para> > >- <sect3> >- <title>ä½¿ç¨ &os.stable;</title> >+ <itemizedlist> >+ <listitem> >+ <para>The <package>misc/freebsd-doc-en</package> package or >+ port installs all of the English documentation.</para> >+ </listitem> > >- <orderedlist> >- <listitem> >- <para>è¨é± &a.stable.name;<indexterm><primary>-STABLE</primary><secondary>using</secondary></indexterm> listã å¯ä»¥è®æ¨é¨æçè§£ &os.stable; >- çè»é«ç·¨è¯æçç¸ä¾éä¿ï¼ä»¥åå ¶ä»éç¹å¥æ³¨æçåé¡ã >- éç¼è å¨èæ ®ä¸äºæçè°çä¿®æ£ææ´æ°æï¼å°±æå å¨é裡ç¼ä¿¡èªªæï¼ >- 給使ç¨è ææ©æå¯ä»¥åæï¼ >- çä»åå°ææçæ´æ¹æ¯å¦æä»éº¼å»ºè°æåé¡ã</para> >+ <listitem> >+ <para>The <package>misc/freebsd-doc-all</package> >+ meta-package or port installs all documentation in all >+ available languages.</para> >+ </listitem> > >- <para>è &a.cvsall.name; list ééå¯ä»¥çå°æ¯å commit logï¼ >- å ¶ä¸å æ¬äºè¨±å¤ä¸è¯çè³è¨ï¼ä¾å¦ä¸äºå¯è½ç¼ççééææççã</para> >+ <listitem> >+ <para>There is a package and port for each translation, such >+ as <package>misc/freebsd-doc-hu</package> for the >+ Hungarian documentation.</para> >+ </listitem> >+ </itemizedlist> > >- <para>æ³è¦å å ¥éäºéä¿¡è«å£ç話ï¼åªè¦å° &a.mailman.lists.link; >- é»ä¸æ³è¨é±ç list å³å¯ã å ¶é¤çæ¥é©å¨ç¶²é 䏿æèªªæã</para> >- </listitem> >+ <para>When binary packages are used, the &os; documentation will >+ be installed in all available formats for the given language. >+ For example, the following command will install the latest >+ package of the Hungarian documentation:</para> > >- <listitem> >- <para>è¥æç®è¦å®è£ä¸åå ¨æ°ç系統ï¼ä¸¦ä¸å¸æè£ &os.stable; >- æ¯æå®æç snapshotï¼é£éº¼è«åé± <link xlink:href="&url.base;/snapshots/">Snapshots</link> ç¶²é 以çè§£ç¸éç´°ç¯ã >- æ¤å¤ï¼ä¹å¯å¾ <link linkend="mirrors">mirror ç«</link> >- ä¾å®è£ææ°ç &os.stable; ç¼è¡çï¼ä¸¦ééä¸åçç說æä¾æ´æ°å°ææ°ç >- &os.stable; åå§ç¢¼ã</para> >+ <screen>&prompt.root; <userinput>pkg install hu-freebsd-doc</userinput></screen> > >- <para>è¥å·²è£çæ¯ &os; 以åççæ¬ï¼èæ³ééåå§ç¢¼æ¹å¼ä¾åç´ï¼ >- é£éº¼ä¹æ¯å¯ä»¥å©ç¨ &os; <link linkend="mirrors">mirror ç«</link> >- ä¾å®æã 以ä¸ä»ç´¹å ©ç¨®æ¹å¼ï¼</para> >+ <note> >+ <para>Packages use a format that differs from the >+ corresponding port's name: >+ <literal><replaceable>lang</replaceable>-freebsd-doc</literal>, >+ where <replaceable>lang</replaceable> is the short format of >+ the language code, such as <literal>hu</literal> for >+ Hungarian, or <literal>zh_cn</literal> for Simplified >+ Chinese.</para> >+ </note> > >- <orderedlist> >- <listitem> >- <para>以 <link linkend="cvsup">csup</link><indexterm><primary><command>cvsup</command></primary></indexterm> æ >- <link linkend="cvsup">cvsup</link> ç¨å¼æé 使¼ >- <filename>/usr/share/examples/cvsup</filename> æªåçº >- <filename>stable-supfile</filename> ç >- <filename>supfile</filename>ã 鿝大家æå¸¸æ¨è¦çæ¹å¼ï¼ >- å çºå®å¯ä»¥è®ä½ ææ´å tree 齿åä¾ï¼ >- ä¹å¾å°±åªåææ´æ°çé¨åå³å¯ã >- æ¤å¤ï¼è¨±å¤äººææ <command>csup</command> æ >- <command>cvsup</command> æ¾å° <command>cron</command><indexterm><primary><command>cron</command></primary></indexterm> >- 以宿èªåæ´æ°ã æ¨é è¦èªè¨åè¿°ç >- <filename>supfile</filename> ç¯ä¾æªï¼ä¸¦éå°èªèº«ç¶²è·¯ç°å¢ä»¥èª¿æ´ >- <link linkend="cvsup">csup</link> æ >- <link linkend="cvsup">cvsup</link><indexterm><primary>-STABLE</primary><secondary>syncing with <application>CVSup</application></secondary></indexterm> ç¸éè¨å®ã</para> >- </listitem> >+ <para>To specify the format of the documentation, build the port >+ instead of installing the package. For example, to build and >+ install the English documentation:</para> > >- <listitem> >- <para>ä½¿ç¨ <application>CTM</application><indexterm><primary>-STABLE</primary><secondary>syncing with CTM</secondary></indexterm> æ´æ°å·¥å ·ã >- è¥ç¶²è·¯ä¸å¿«æç¶²è·¯è²»ç¨è²´ï¼é£éº¼å¯ä»¥èæ ®æ¡ç¨ã</para> >- </listitem> >- </orderedlist> >- </listitem> >+ <screen>&prompt.root; <userinput>cd /usr/ports/misc/freebsd-doc-en</userinput> >+&prompt.root; <userinput>make install clean</userinput></screen> > >+ <para>The port provides a configuration menu where the format to >+ build and install can be specified. By default, split >+ <acronym>HTML</acronym>, similar to the format used on <uri >+ xlink:href="http://www.FreeBSD.org">http://www.FreeBSD.org</uri>, >+ and <acronym>PDF</acronym> are selected.</para> >+ >+ <para>Alternately, several <command>make</command> options can >+ be specified when building a documentation port, >+ including:</para> >+ >+ <variablelist> >+ <varlistentry> >+ <term><varname>WITH_HTML</varname></term> >+ > <listitem> >- <para>ä¸è¬èè¨ï¼è¥å¸¸éååææ°åå§ç¢¼ï¼èä¸è¨è¼ç¶²è·¯é »å¯¬çè©±ï¼ >- å¯ä»¥ä½¿ç¨ <command>csup</command> æ <command>cvsup</command> >- æ <command>ftp</command>ã å¦åï¼å°±èæ ® >- <application>CTM</application>ã</para> >+ <para>Builds the HTML format with a single HTML file per >+ document. The formatted documentation is saved to a >+ file called <filename>article.html</filename>, or >+ <filename>book.html</filename>.</para> > </listitem> >+ </varlistentry> > >+ <varlistentry> >+ <term><varname>WITH_PDF</varname></term> >+ > <listitem> >- <para>å¨ç·¨è¯ &os.stable;<indexterm><primary>-STABLE</primary><secondary>compiling</secondary></indexterm> ä¹åï¼è«å ä»ç´°é±è® >- <filename>/usr/src</filename> å §ç <filename>Makefile</filename> >- æªã åç®¡åªæ¯åç´é¨åæ±è¥¿èå·²ï¼æ¨è³å°ä¹è¦å <link linkend="makeworld">è£æ°ç kernel 以åéæ°ç·¨è¯ world</link>ã >- æ¤å¤ï¼å¤å¤é±è® &a.stable; 以å >- <filename>/usr/src/UPDATING</filename> 乿¯å¿ åçï¼ >- 鿍£æè½ç¥éç®åé²åº¦æ¯ææ¨£ï¼ä»¥åä¸ä¸çææåªäºæ°æ±è¥¿ã</para> >+ <para>The formatted documentation is saved to a file >+ called <filename>article.pdf</filename> or >+ <filename>book.pdf</filename>.</para> > </listitem> >- </orderedlist> >- </sect3> >- </sect2> >- </sect1> >+ </varlistentry> > >- <sect1 xml:id="synching"> >- <title>æ´æ°ä½ ç Source</title> >+ <varlistentry> >+ <term><varname>DOCBASE</varname></term> > >- <para>&os; è¨ååå§ç¢¼æè¨±å¤éé網路(æ email)çæ¹å¼ä¾æ´æ°ï¼ >- ç¡è«æ¯æ´æ°é£ä¸å¡é åï¼éäºå ¨ç±æ¨èªè¡æ±ºå®ã æåä¸»è¦æä¾çæ¯ <link linkend="anoncvs">Anonymous CVS</link>ã<link linkend="cvsup">CVSup</link> >- ã<link linkend="ctm">CTM</link>ã</para> >+ <listitem> >+ <para>Specifies where to install the documentation. It >+ defaults to >+ <filename>/usr/local/share/doc/freebsd</filename>.</para> >+ </listitem> >+ </varlistentry> >+ </variablelist> > >- <warning> >- <para>éç¶å¯ä»¥åªæ´æ°é¨ååå§ç¢¼ï¼ä½å¯ä¸æ¯æ´çæ´æ°æµç¨æ¯æ´æ°æ´å treeï¼ >- 並ä¸éç·¨ userland(æ¯å¦ï¼ç±ä½¿ç¨è å»å·è¡çææç¨å¼ï¼åæ¯ >- <filename>/bin</filename>ã<filename>/sbin</filename> å §çç¨å¼)以å >- kernel åå§ç¢¼ã >- è¥åªæ´æ°é¨åç source treeãæåªæ kernel é¨åãæåªæ userland >- é¨åï¼é常æé æä¸äºé¯èª¤ï¼åæ¯ï¼ç·¨è¯é¯èª¤ãkernel panicãè³ææ¯æç >- ã</para> >- </warning> >+ <para>This example uses variables to install the Hungarian >+ documentation as a <acronym>PDF</acronym> in the specified >+ directory:</para> > >- <indexterm> >- <primary>CVS</primary> >- <secondary>anonymous</secondary> >- </indexterm> >+ <screen>&prompt.root; cd /usr/ports/misc/freebsd-doc-hu >+&prompt.root; make -DWITH_PDF DOCBASE=share/doc/freebsd/hu install clean</screen> > >- <para><application>Anonymous CVS</application> å >- <application>CVSup</application> åæ¯æ¡ <emphasis>pull</emphasis> >- 模å¼ä¾æ´æ°åå§ç¢¼ã 以 <application>CVSup</application> çºä¾ï¼ >- 使ç¨è (æ <command>cron</command> script)æå·è¡ <command>cvsup</command> >- ç¨å¼ï¼å¾è æèæä¸å° <command>cvsupd</command> 伺æå¨ä½äºäºåï¼ >- ä»¥æ´æ°ç¸éåå§ç¢¼æªæ¡ã æ¨ææ¶å°æ´æ°ææ¯ç¶æææ°çï¼ >- èä¸åªææ¶å°éæ´æ°çé¨åã æ¤å¤ï¼ä¹å¯ä»¥å¾è¼é¬å»è¨å®è¦æ´æ°çç¯åã >- æ´æ°æç±ä¼ºæå¨è·æ¬æ©æ¯å°ä¹å¾ï¼ä¸åºç¶ææ¨æéè¦çæ´æ°æªæ¡çµ¦ä½ ã >- <application>Anonymous CVS</application> çæ¦å¿µç¸å°æ¼ >- <application>CVSup</application> ä¾å¾æ´ç°¡å®äºï¼å çºå®åªæ¯ >- <application>CVS</application> ç延伸èå·²ï¼ä¸æ¨£è®ä½ å¯å¾é 端ç >- CVS repository ååºææ°åå§ç¢¼ã ç¶è <application>CVSup</application> >- å¨éæ¹é¢ææ´ææçï¼ä¸é <application>Anonymous CVS</application> >- å°æ°æèè¨ï¼æ¯ç¨èµ·ä¾æ¯è¼ç°¡å®ã</para> >+ <para>Documentation packages or ports can be updated using the >+ instructions in <xref linkend="ports"/>. For example, the >+ following command updates the installed Hungarian >+ documentation using <package>ports-mgmt/portmaster</package> >+ by using packages only:</para> > >- <indexterm> >- <primary><application>CTM</application></primary> >- </indexterm> >- <para>å¦ä¸ç¨®æ¹å¼åæ¯ <application>CTM</application>ã >- å®ä¸¦ä¸æ¯ä»¥äº¤è«å¼ä»é¢ä¾æ¯å°æ¨æææç sources å伺æå¨ä¸ç sources >- ææ¯æ¨åå¾çæ´æ°é¨ä»½ã ç¸åçï¼ææä¸å script >- æªå°éç¨ä¾è¾¨èè®æ´éçæªæ¡ï¼éåç¨å¼æ¯ç± CTM 伺æå¨ä¾å·è¡ï¼ >- æ¯å¤©ææ¯å°æ¸æ¬¡ï¼ä¸¦æå ©æ¬¡å·è¡æéå §è®æ´éçæªæ¡å 以å£ç¸®ï¼ >- 並給å®åä¸ååºèï¼ç¶å¾å°±å 以編碼(åªç¨ printable ASCII åå )ï¼ >- 並以 email çæ¹å¼å¯åºã ç¶æ¨æ¶å°å®çæåï¼éäº <quote>CTM deltas</quote> >- å°±å¯ä»¥ç± &man.ctm.rmail.1; ç¨å¼ä¾èçï¼è©²ç¨å¼æèªå解碼ã確èªã >- å¥ç¨éäºè®æ´ã éç¨åºæ¯ <application>CVSup</application> ä¾èªªæ¯å¿«å¾å¤äºï¼ >- èä¸ï¼é忍¡å¼å°æåç伺æå¨ä¾èªªæ¯æ¯è¼è¼é¬çï¼å çºéæ¯ä¸å >- <emphasis>push</emphasis> çæ¨¡å¼ï¼èé <emphasis>pull</emphasis> >- çæ¨¡å¼ã</para> >- >- <para>ç¶ç¶ï¼é樣å乿叶ä¾ä¸äºä¸ä¾¿ã è¥ä¸å°å¿ææ¨é¨ä»½çç¨å¼æ¸ 餿äºï¼ >- <application>CVSup</application> æåµæ¸¬åºä¾ï¼ä¸¦èªåçºæ¨æä¸è¶³çé¨ä»½è£é½ã >- <application>CTM</application> ä¸¦ä¸æçºæ¨åéäºåä½ã >- è¥æ¸ æäºæ¨çé¨ä»½ source (è䏿²å份)ï¼æ¨å¯ä»¥å¾é éå§(徿æ°ç CVS >- <quote>base delta</quote>)ä¸¦ç¨ <application>CTM</application> ä¾é建å®å >- ï¼ææ¯ç¨ <application>Anonymous CVS</application> ä¾å®æï¼ >- åªè¦æä¸æ£ç¢ºçå°æ¹ç æï¼åéæ°å忥çåä½å³å¯ã</para> >+ <screen>&prompt.root; <userinput>portmaster -PP hu-freebsd-doc</userinput></screen> >+ </sect2> > </sect1> > >- <sect1 xml:id="makeworld"> >- <title>éæ°ç·¨è¯ <quote>world</quote></title> >+ <sect1 xml:id="current-stable"> >+ <title>追蹤ç¼å±åæ¯</title> > >- <indexterm> >- <primary>Rebuilding <quote>world</quote></primary> >- </indexterm> >- <para>卿´æ° &os; ç source tree å°ææ°ä¹å¾(ç¡è«æ¯ &os.stable;ã >- &os.current; çç)ï¼æ¥ä¸ä¾å°±å¯ä»¥ç¨éäº source tree ä¾éæ°ç·¨è¯ç³»çµ± >- ã</para> >+ <indexterm><primary>-CURRENT</primary></indexterm> >+ <indexterm><primary>-STABLE</primary></indexterm> > >- <warning> >- <title>å好å份</title> >+ <para>&os; æå ©åç¼å±åæ¯ï¼ &os.current; and >+ &os.stable;.</para> > >- <para>å¨ä½ä»»ä½å¤§åä½ <emphasis>ä¹å</emphasis> >- è¦è¨å¾å æç³»çµ±ä½å份çéè¦æ§ç¡é 強調ã åç®¡éæ°ç·¨è¯ world æ¯ >- (åªè¦æç §æä»¶æç¤ºå»ä½ç話)ä¸ä»¶å¾ç°¡å®çäºæ ï¼ä½åºé¯ä¹æ¯å¨æé£å çã >- å¦å¤ï¼å¥äººå¨ source tree 䏿 ææ··çé¯èª¤ï¼ä¹å¯è½æé æç³»çµ±ç¡æ³éæ© >- ã</para> >+ <para>æ¬ç¯å°å°è§£éæ¯å忝åä»çé è¨ç使ç¨è ï¼ä»¥åå¦ä½ä¿ææ¯ååæ¯ç³»çµ±å¨ææ°ã >+ </para> > >- <para>è«ç¢ºèªèªå·±å·²ä½å¦¥ç¸éå份ï¼ä¸¦ä¸æéæ fixit ç£çæéæ©å ç¢ã >- æ¨å¯è½æ°¸é ä¹ç¨ä¸å°éäºæ±è¥¿ï¼ >- ä½å®å ¨ç¬¬ä¸ç¸½æ¯äºå¾èªªæ±æä¾å¾å¥½å§ï¼</para> >- </warning> >+ <sect2 xml:id="current"> >+ <title>ä½¿ç¨ &os.current;</title> > >- <warning> >- <title>è¨é±ç¸éç Mailing List</title> >+ <para>&os.current; æ¯&os; éç¼ç<quote>æåç·</quote>ï¼&os.current;ç使ç¨è ææè¼å¼·çæè¡è½åã >+ æè¡è½åè¼å¼±ç使ç¨è æ³è¿½è¹¤ç¼å±åæ¯æè©²è¿½è¹¤ &os.stable;ã</para> > >- <indexterm><primary>mailing list</primary></indexterm> >- <para>&os.stable; 以å &os.current; åæ¯ï¼æ¬è³ªä¸å°±æ¯å±¬æ¼ <emphasis> >- éç¼é段</emphasis>ã çº &os; ä½è²¢ç»çä¹é½æ¯äººï¼å¶ç¾ä¹æç¯é¯èª¤ã</para> >+ <para>&os.current; æ¯ &os; ææ°çåå§ç¢¼ï¼å æ¬æ£å¨é²è¡çå·¥ä½ï¼ >+坦驿§çæ¹è®ï¼ä»¥åå¯è½ææå¯è½ä¸æå¨ä¸ä¸å宿¹ç¼è¡çåºç¾ç鿏¡æææ©å¶ã >+ èè¨±å¤ &os; éç¼è æ¯å¤©ç·¨è¯ >+ &os.current; åå§ç¢¼ï¼å¯è½æä¸æ®µçæ«çæéåå§ç¢¼ç¡æ³ç·¨è¯æåã >+ éäºå顿å快被解決ï¼ä½æ¯ç¡è« >+ &os.current; 帶ä¾ç½é£ææ¯æ°åè½ï¼å¨åæ¥åå§ç¢¼æé½è¦èéçåé¡ã >+ </para> > >- <para>ææåéäºé¯èª¤ä¸¦ç¡å¤§ç¤ï¼åªæ¯æè®ç³»çµ±ç¢çæ°çé¯èª¤è¦åèå·²ã >- ææåæ¯ç½é£ï¼å¯è½æå°è´ä¸è½éæ©ææªæ¡ç³»çµ±çæ¯æ(ææ´ç³)ã</para> >+ <para>&os.current; é©åä¸åä¸é¡äººï¼ >+ </para> > >- <para>è¥éå°é¡ä¼¼åé¡ï¼è²¼å°æ¨é¡çº <quote>heads up(注æ)</quote> >- éé çä¿¡å°ç¸éç mailing listï¼ä¸¦è¬æ¸ æ¥åé¡é»ä»¥åæå½±é¿åªäºç³»çµ±ã >- å¨åé¡ç²è§£æ±ºå¾ï¼åè²¼æ¨é¡çº <quote>all clear(已解決)</quote> >- éé çè²æä¿¡ã</para> >+ <orderedlist> >+ <listitem> >+ <para>ç©æ¥µè´åæ¼æä¸é¨ä»½åå§ç¢¼æ¨¹ç &os; 社群æå¡ã >+ </para> >+ </listitem> > >- <para>è¥ç¨çæ¯ &os.stable; æ &os.current;ï¼å»åä¸é±è® &a.stable; æ >- &a.current; çè¨è«ï¼é£éº¼ææ¯èªæ¾éº»ç ©èå·²ã</para> >- </warning> >+ <listitem> >+ <para>æä»»ç©æ¥µæ¸¬è©¦è ç &os; 社群æå¡ã >+ ä»åé¡æè±æé解決åé¡ï¼æåº &os; æ¹è®ç建è°åç大æ¹åï¼ä¸¦ç¼å¸ä¿®è£ã</para> >+ </listitem> > >- <warning> >- <title>ä¸è¦ç¨ <command>make world</command></title> >+ <listitem> >+ <para>éæ³¨æäºäºç©ï¼ææ¯æ³åèç®åçåå§ç¢¼ï¼ææ¯å¶ç¾æä¾è¨»è§£æè²¢ç»åå§ç¢¼ç使ç¨è ã >+ </para> >+ </listitem> >+ </orderedlist> > >- <para>ä¸å æ©æçèæä»¶é½æå»ºè°èªªä½¿ç¨ <command>make world</command>ã >- 鿍£åæè·³éä¸äºéè¦æ¥é©ï¼å»ºè°åªæå¨ä½ ç¥éèªå·±å¨ä½ä»éº¼ï¼åé麼åã >- å¨çµå¤§å¤æ¸çæ æ³ä¸ï¼è«ä¸è¦äºç¨ <command>make world</command>ï¼ >- è該æ¹ç¨ä¸é¢ä»ç´¹çæ¹å¼ã</para> >- </warning> >+ <para>&os.current; <emphasis>ä¸æè©²</emphasis>被èªçºæ¯å¨ä¸ä¸çç¼è¡å >+å徿æ°åè½çå¿«ééå¾ï¼å çºå°æªç¼è¡çåè½ä¸¦æªè¢«å®æ´æ¸¬è©¦ï¼å¾å¯è½æbugã >+ ä»ä¹ä¸æ¯ä¸ååå¾bugä¿®è£çå¿«éæ¹å¼ï¼ >+å çºä»»ä½å·²ç¥bugçä¿®è£æå¯è½ç¢çæ°çbugã >+ &os.current;æ²æä»»ä½ >+ <quote>宿¹æ¯æ´</quote>ã</para> > >- <sect2> >- <title>æ´æ°ç³»çµ±çæ¨æºæ¹å¼</title> >+ <indexterm> >+ <primary>-CURRENT</primary> >+ <secondary>using</secondary> >+ </indexterm> > >- <para>è¦åç´ç³»çµ±åï¼ä¸å®è¦å æ¥é± <filename>/usr/src/UPDATING</filename> >- æä»¶ï¼ä»¥çè§£ buildworld ä¹åéè¦ä½åªäºäºæ ææ³¨æäºé ï¼ >- ç¶å¾æç¨ä¸åæ¥é©ï¼</para> >+ <para>追蹤 &os.current;ï¼</para> > >- <screen>&prompt.root; <userinput>make buildworld</userinput> >-&prompt.root; <userinput>make buildkernel</userinput> >-&prompt.root; <userinput>make installkernel</userinput> >-&prompt.root; <userinput>reboot</userinput></screen> >+ <orderedlist> >+ <listitem> >+ <para>å å ¥ &a.current.name; å >+ &a.svn-src-head.name; éµä»¶è«å£ã鿝<emphasis>å¿ é ç</emphasis> >+以æ¥ç人åéæ¼ç³»çµ±ç®åçæ çè©è«ä¸¦æ¥æ¶&os.current;ç®åçæ çéè¦å ¬åã </para> > >- <note> >- <para>å¨å°æ¸çæ³ï¼å¯è½éè¦å å¨ <buildtarget>buildworld</buildtarget> >- æ¥é©ä¹åå ä½ <command>mergemaster -p</command> æè½å®æã >- è³æ¼ä½æéè¦æä¸éè¦ï¼è«åé± <filename>UPDATING</filename> å §ç說æã >- ä¸è¬ä¾èªªï¼åªè¦ä¸æ¯é²è¡è·¨çè(major)ç &os; çæ¬åç´ï¼ >- å°±å¯ç¥é鿥é©ã</para> >- </note> >+ <para> &a.svn-src-head.name; è«å£ç´éæ¯ä¸æ¬¡ä¿®æ¹çç´éï¼ >+åå¯è½ç¢ççå¯ä½ç¨çç¸éè³è¨ </para> > >- <para>宿 <buildtarget>installkernel</buildtarget> ä¹å¾ï¼éè¦é鿩䏦åå° >- single user 模å¼(èä¾ï¼ä¹å¯ä»¥å¨ loader æç¤ºç¬¦èå¾é¢å ä¸ >- <command>boot -s</command>)ã æ¥ä¸ä¾å·è¡ï¼</para> >+ <para>åå¾&a.mailman.lists.link;ï¼é»é¸è«å£ä¾è¨é±ï¼ç §ç¶²é æç¤ºçæ¥é©ä½ï¼ >+çºäºè¿½è¹¤æ´ååå§ç¢¼æ¨¹ï¼ä¸æ¯åªæ&os.current;çæ¹è®ï¼è«è¨é± >+&a.svn-src-all.name;è«å£ã</para> >+ </listitem> > >- <screen>&prompt.root; <userinput>mergemaster -p</userinput> >-&prompt.root; <userinput>make installworld</userinput> >-&prompt.root; <userinput>mergemaster</userinput> >-&prompt.root; <userinput>reboot</userinput></screen> >+ <listitem> >+ <para>忥 &os.current; åå§ç¢¼ã >+é常使ç¨<link linkend="svn">svn</link>便ª¢æ¥<xref linkend="svn-mirrors"/> >+ååºçSubversioné¡åç«<literal>head</literal>忝ç-CURRENT åå§ç¢¼</para>ã > >- <warning> >- <title>Read Further Explanations</title> >+ <para>ç¶²è·¯å¾æ ¢ææ¯åå°éå¶ç使ç¨è å¯ä»¥å¦<xref linkend="ctm"/> >+ææè¿°çï¼ä½¿ç¨CTM便¿ä»£ï¼ä½æ¯ä»ä¸¦ä¸å¦<application>svn</application> >+䏿¨£å¼å¾ä¿¡è³´ï¼ <application>svn</application> æ¯å»ºè°ç忥åå§ç¢¼çæ¹æ³ã</para> >+ </listitem> > >- <para>ä¸è¿°æ¥é©åªæ¯å婿¨åç´çç°¡å®èªªæèå·²ï¼è¥è¦æ¸ æ¥çè§£æ¯ä¸æ¥é©ï¼ >- å°¤å ¶æ¯è¥æ¬²èªè¡æé kernel è¨å®ï¼å°±æ´è©²é±è®ä¸é¢çå §å®¹ã</para> >- </warning> >+ <listitem> >+ <para> ç±æ¼ç¨å¼ç¢¼åº«ç大å°çï¼ >+æäºä½¿ç¨è 鏿åªåæ¥é¨ä»½ä»åæèè¶£ææä¾ä¿®è£è²¢ç»çé¨ä»½åå§ç¢¼ãç¶èï¼ >+è¨åå¾åå§ç¢¼ç·¨è¯æ´å使¥ç³»çµ±ç使ç¨è å¿ é ä¸è¼ <emphasis>å ¨é¨</emphasis> >+ç&os.current;ï¼è䏿¯åªæé¸æçé¨ä»½ã</para> >+ >+ <para>ç·¨è¯ &os.current;å >+ <indexterm> >+ <primary>-CURRENT</primary> >+ <secondary>compiling</secondary> >+ </indexterm>ï¼è«é常ä»ç´°å°é±è®<filename>/usr/src/Makefile</filename> >+ 並éµå¾ <xref linkend="makeworld"/>çæç¤ºã >+ é±è® &a.current; å <filename>/usr/src/UPDATING</filename> >+便æ¡ä¸ä¸ç¼è¡ççææ°çæ ã</para> >+ </listitem> >+ >+ <listitem> >+ <para>ç±è¡!å¾é¼åµ &os.current; 使ç¨è >+ç¼è¡¨ä»åå°å å¼·åªäºåè½ææ¯ä¿®å¾©åªäºé¯èª¤ç建è°ã >+ 妿æ¨å¨å»ºè°æè½éä¸ç¸éç¨å¼ç¢¼çè©±ï¼ é£çæ¯å¤ªæ£äºï¼</para> >+ </listitem> >+ </orderedlist> > </sect2> > >- <sect2> >- <title>é±è® <filename>/usr/src/UPDATING</filename></title> >+ <sect2 xml:id="stable"> >+ <title>ä½¿ç¨ &os.stable;</title> > >- <para>å¨ä½ä»»ä½äºæ ä¹åï¼è«åå¿ å é±è® >- <filename>/usr/src/UPDATING</filename> (æå¨ source code å §é¡ä¼¼çæä»¶) >- ã é份æä»¶æå¯«å°å¯è½ééçåé¡ï¼ææå®é£äºæå·è¡çæä»¤é åºçºä½ã >- å¦æä½ æ©å¨ç¾å¨ç <filename>UPDATING</filename> >- æä»¶èééçæè¿°æè¡çªãçç¾ä¹èï¼é£éº¼è«ä»¥æ©å¨ä¸ç >- <filename>UPDATING</filename> çºæºã</para> >+ <para>主è¦ç¼è¡çå°±æ¯ç±&os.stable;éåéç¼åæ¯èä¾ã >+ ä¿®æ¹é²å ¥éå忝çé度æ¯è¼æ ¢ï¼ >+並ä¸åè¨éäºä¿®æ¹å·²ç¶å å¨&os.current;測試éã >+é<emphasis>ä»ç¶</emphasis>æ¯ä¸åéç¼åæ¯ï¼èä¸å¨ä»»ä½æåï¼&os.stable; çåå§ç¢¼é½å¯è½é©åæä¸é©åä¸è¬ç使ç¨ãä»å°±åªæ¯å¦ä¸åéç¼åæ¯ï¼ä¸æ¯çµ¦çµç«¯ä½¿ç¨è ç¨çã >+æ²æè¦é²è¡æ¸¬è©¦ç使ç¨è æè©²å·è¡ææ°ç&os;ç¼è¡çã</para> > >- <important> >- <para>ç¶èï¼å¦åå åæè¿°ï¼å®å®åªé é±è® <filename>UPDATING</filename> >- 並ä¸è½å®å ¨å代 mailing listã éå ©è 齿¯äºè£çï¼èä¸ç¸ææ¥ã</para> >- </important> >- </sect2> >+ <para>è¥æèè¶£å»è¿½è¹¤ãè²¢ç»&os;éç¼éç¨ï¼å°¤å ¶æ¯æè· >+ &os;æ¥ä¸ä¾çç¼è¡çæéç人,æè©²èæ ®æ¡ç¨&os.stable;ã</para> > >- <sect2> >- <title>æª¢æ¥ <filename>/etc/make.conf</filename></title> >+ <para>å管&os.stable; æè©²å¨ä»»ä½æååè½æ£ç¢ºç·¨è¯ãéä½ï¼ä½æ¯æ²æäººè½æä¿ä¸å®å¦æ¤ãå çºä½¿ç¨&os.stable; ç人æ¯&os.current;å¤ï¼ç¡å¯é¿å å°ï¼ >+ææåæå¨ &os.stable;ç¼ç¾é¯èª¤å極端ççæ³ï¼èéå¨&os.current;並é顯èæè¦ã >+ç±æ¼ä¸è¿°éäºçç±ï¼æå並ä¸å»ºè°ç²ç®è¿½é¨ &os.stable;ã >+ç¹å¥éè¦çæ¯ >+ <emphasis>ä¸è¦</emphasis>卿²ææ¼éç¼ææ¸¬è©¦ç°å¢å®æ´æ¸¬è©¦ç¨å¼ç¢¼ä¹åï¼ >+åç´ä»»ä½ä¸ç·ç伺æå¨å° >+ &os.stable;ã</para> >+ >+ <para>追蹤 &os.stable;:</para> >+ > <indexterm> >- <primary><filename>make.conf</filename></primary> >+ <primary>-STABLE</primary> >+ <secondary>using</secondary> > </indexterm> >+ <orderedlist> >+ <listitem> >+ <para>è¨é±&a.stable.name;è«å£ä¾é¨æçè§£&os.stable;ç·¨è¯æçç¸ä¾éä¿ >+ææ¯å ¶ä»ç¹å¥éè¦æ³¨æçè°é¡ã >+éç¼è å¨èæ ®ä¸äºæçè°çä¿®æ£ææ´æ°æï¼å°±æå å¨é裡ç¼ä¿¡èªªæï¼ 給使ç¨è ææ©æå¯ä»¥åæï¼ çä»åå°ææçæ´æ¹æ¯å¦æä»éº¼å»ºè°æåé¡ã</para> > >- <para>æª¢æ¥ >- <filename>/usr/share/examples/etc/make.conf</filename> >- 以å >- <filename>/etc/make.conf</filename>ã 第ä¸ä»½æä»¶ä¹æ¯ä¸äºç³»çµ±é è¨å¼ >- – ä¸éï¼å¤§é¨åé½è¢«è¨»è§£èµ·ä¾ã çºäºå¨éæ°ç·¨è¯æè½å¤ 使ç¨éäºï¼ >- è«æéäºè¨å®å å° <filename>/etc/make.conf</filename>ã è«æ³¨æå¨ >- <filename>/etc/make.conf</filename> çä»»ä½è¨å®ä¹æå½±é¿å°æ¯æ¬¡ä½¿ç¨ >- <command>make</command> ççµæï¼ >- å æ¤è¨å®ä¸äºé©åèªå·±ç³»çµ±çé¸é ææ¯ä¸é¯ç使³ã</para> >+ <para>è¨é±è¦è¿½è¹¤åæ¯ç <application>svn</application>ç¸éè«å£ã >+ä¾å¦ï¼è¿½è¹¤9-STABLE忝ç使ç¨è æè©²è¨é±&a.svn-src-stable-9.name;è«å£ã >+éåè«å£ç´éæ¯ä¸æ¬¡ä¿®æ¹çç´éï¼ >+åå¯è½ç¢ççå¯ä½ç¨çç¸éè³è¨ã</para> > >- <para>ä¸è¬ä½¿ç¨è é常æå¾ >- <filename>/usr/share/examples/etc/make.conf</filename> è¤è£½ >- <varname>CFLAGS</varname> 以å <varname>NO_PROFILE</varname> >- ä¹é¡çè¨å®å° <filename>/etc/make.conf</filename>ï¼ä¸¦è§£é¤ç¸é註解å°è¨ >- ã</para> >+ <para>åå¾&a.mailman.lists.link;ï¼é»é¸è«å£ä¾è¨é±ï¼ç §ç¶²é æç¤ºçæ¥é©ä½ï¼ >+çºäºè¿½è¹¤æ´ååå§ç¢¼æ¨¹ï¼è«è¨é±&a.svn-src-all.name;è«å£ã</para> >+ </listitem> > >- <para>æ¤å¤ï¼ä¹å¯ä»¥è©¦è©¦çå ¶ä»è¨å® (<varname>COPTFLAGS</varname>ã >- <varname>NOPORTDOCS</varname> çç)ï¼æ¯å¦ç¬¦åèªå·±æéã</para> >+ <listitem> >+ <para>è¦å®è£ä¸åæ°ç&os.stable; ç³»çµ±ï¼ >+å¾<link linkend="mirrors">&os; é¡åç«</link>å®è£ææ°ç&os.stable; ç¼è¡ç >+æä½¿ç¨å¾ &os.stable;æ¯åæç snapshot builtä¾å®è£ãæ´å¤éæ¼å¿«ç §çè³è¨ï¼ >+è«åè<link xlink:href="&url.base;/snapshots/">www.freebsd.org/snapshots</link> >+ ã</para> >+ >+ <para>è¦ç·¨è¯æåç´å·²ç¶å®è£ç &os; ç³»çµ±è³ &os.stable;ï¼ >+è«ä½¿ç¨<link linkend="svn">svn</link> >+ <indexterm> >+ <primary>Subversion</primary> >+ </indexterm> 便ª¢æ¥è¦å®è£åæ¯çåå§ç¢¼ã >+ 忝çå稱ï¼ä¾å¦ >+ <literal>stable/9</literal>ï¼åå¨<link >+ xlink:href="&url.base;/releng/">www.freebsd.org/releng</link>ã >+ å¦ææ²æå¯é çç¶²é網路é£ç·å¯ä»¥ä½¿ç¨CTM (<xref linkend="ctm"/>) ã >+</para> >+ </listitem> >+ >+ <listitem> >+ <para>å¨ç·¨è¯æåç´å° &os.stable;ä¹å >+ <indexterm> >+ <primary>-STABLE</primary> >+ <secondary>compiling</secondary> >+ </indexterm>ï¼ è«ä»ç´°é±è® <filename>/usr/src/Makefile</filename> >+ 並éµç §<xref >+ linkend="makeworld"/>çæç¤ºãé±è® &a.stable; å >+ <filename>/usr/src/UPDATING</filename>ä¸ä¸ç¼è¡ççææ°çæ ã</para> >+ </listitem> >+ </orderedlist> > </sect2> >+ </sect1> > >- <sect2> >- <title>æ´æ° <filename>/etc</filename> å §çè¨å®æª</title> >+ <sect1 xml:id="synching"> >+ <title>忥åå§ç¢¼</title> > >- <para>å¨ <filename>/etc</filename> ç®éææç³»çµ±çç¸éè¨å®æªï¼ >- 以åéæ©æçåé æååå scriptã æäº script é¨ FreeBSD >- çæ¬çä¸åèæäºå·®ç°ã</para> >+ <para>æå¹¾ç¨®ä¸åçæ¹æ³ä¿æ &os; åå§ç¢¼å¨ææ°çæ ã >+éç¯æ¯è¼éå ©å主è¦çæ¹æ³ï¼ <application>Subversion</application> å <application>CTM</application>ã</para> > >- <para>å ¶ä¸æäºè¨å®æªæå¨æ¯æ¥éä½çç³»çµ±è£¡ä¹æç¨å°ã å°¤å ¶æ¯ >- <filename>/etc/group</filename>ã</para> >+ <warning> >+ <para>éç¶æå¯è½åªæ´æ°é¨ä»½åå§ç¢¼æ¨¹ï¼ä½æ¯å¯ä¸æ¯æ´çæ´æ°æ¥é©æ¯æ´æ°æ´åæ¨¹ä½µéæ°ç·¨è¯ææå¨ä½¿ç¨è 空éçç¨å¼ï¼ >+ä¾å¦å¨<filename>/bin</filename> å >+ <filename>/sbin</filename>ï¼ä»¥åæ ¸å¿åå§ç¢¼ã >+ åªæ´æ°é¨ä»½åå§ç¢¼æ¨¹ï¼åªæ´æ°æ ¸å¿ï¼æåªæ´æ°ä½¿ç¨è 空éçç¨å¼æå¸¸æå°è´ç·¨è¯é¯èª¤ï¼æ ¸å¿é¯èª¤ææ¯è³ææ¡åçåé¡ã >+ </para> >+ </warning> > >- <para>ææåå¨ <command>make installworld</command> å®è£éç¨ä¸ï¼ >- æéè¦å å»ºç«æäºç¹å®å¸³èæç¾¤çµã å¨é²è¡åç´ä¹åï¼å®åå¯è½ä¸¦ä¸åå¨ï¼ >- å æ¤åç´æå°±æé æåé¡ã ææå <command>make buildworld</command> >- æå 檢æ¥éäºæéç帳èæç¾¤çµæ¯å¦å·²æåå¨ã</para> >+ <indexterm> >+ <primary>Subversion</primary> >+ </indexterm> > >- <para>èå鿍£çä¾åï¼åæ¯ææ¬¡åç´ä¹å¾å¿ é æ°å¢ <systemitem class="username">smmsp</systemitem> >- 帳èã è¥ä½¿ç¨è å°æªæ°å¢è©²å¸³èå°±è¦å®æåç´æä½çè©±ï¼ >- æå¨ &man.mtree.8; åè©¦å»ºç« <filename>/var/spool/clientmqueue</filename> >- æç¼ç失æã</para> >+ <para><application>Subversion</application>ä½¿ç¨æ´æ°åå§ç¢¼ç >+ <emphasis>pull</emphasis> 模åã使ç¨è ï¼ææ¯ >+ <command>cron</command> æç¨¿èªè¨, å¼å«æ´æ°æ¬å°ç«¯åå§ç¢¼ç >+ <command>svn</command> ç¨å¼ã >+ <application>Subversion</application> is the >+ preferred method for updating local source trees as updates are >+ up-to-the-minute and the user controls when updates are >+ downloaded. It is easy to restrict updates to specific files or >+ directories and the requested updates are generated on the fly >+ by the server. å¦ä½ä½¿ç¨How to synchronize source using >+ <application>Subversion</application>忥åå§ç¢¼ï¼æè¿°æ¼<xref >+ linkend="svn"/>ã</para> > >- <para>è§£æ³æ¯å¨ buildworld éæ®µä¹åï¼å å·è¡ &man.mergemaster.8; 並æé >- <option>-p</option> é¸é ã 宿æ¯å°é£äºå·è¡ >- <buildtarget>buildworld</buildtarget> æ >- <buildtarget>installworld</buildtarget> æéä¹ééµè¨å®æªã >- è¥ä½ æç¨çæ¯æ©æä»æªæ¯æ´ <option>-p</option> ç >- <command>mergemaster</command> çæ¬ï¼é£éº¼ç´æ¥ä½¿ç¨ source tree >- å §çæ°çå³å¯ï¼</para> >+ <indexterm> >+ <primary><application>CTM</application></primary> >+ </indexterm> >+ <para><application>CTM</application> does not interactively >+ compare the local sources with those on the master archive or >+ otherwise pull them across. Instead, a script which identifies >+ changes in files since its previous run is executed several >+ times a day on the master CTM machine. Any detected changes are >+ compressed, stamped with a sequence-number, and encoded for >+ transmission over email in printable <acronym>ASCII</acronym> >+ only. Once downloaded, these <firstterm>deltas</firstterm> can >+ be run through <command>ctm.rmail</command> which will >+ automatically decode, verify, and apply the changes to the >+ user's copy of the sources. This process is more efficient than >+ <application>Subversion</application> and places less strain on >+ server resources since it is a <emphasis>push</emphasis>, rather >+ than a <emphasis>pull</emphasis>, model. Instructions for using >+ <application>CTM</application> to synchronize source can be >+ found at <xref linkend="ctm"/>.</para> > >- <screen>&prompt.root; <userinput>cd /usr/src/usr.sbin/mergemaster</userinput> >-&prompt.root; <userinput>./mergemaster.sh -p</userinput></screen> >+ <para>If a user inadvertently wipes out portions of the local >+ archive, <application>Subversion</application> will detect and >+ rebuild the damaged portions. <application>CTM</application> >+ will not, and if a user deletes some portion of the source tree >+ and does not have a backup, they will have to start from scratch >+ from the most recent <firstterm>base delta</firstterm> and >+ rebuild it all with <application>CTM</application>.</para> >+ </sect1> > >- <tip> >- <para>è¥æ¨æ¯åå·ç(paranoid)ï¼ >- å¯ä»¥åä¸é¢é樣å»è©¦è檢æ¥ç³»çµ±ä¸æåªäºæªæ¡å±¬æ¼å·²æ¹åæè¢«åªé¤çç¾¤çµ >- ï¼</para> >+ <sect1 xml:id="makeworld"> >+ <title>éæ°ç·¨è¯ World</title> > >- <screen>&prompt.root; <userinput>find / -group GID -print</userinput></screen> >+ <indexterm> >+ <primary>Rebuilding <quote>world</quote></primary> >+ </indexterm> >+ <para>䏿¦æ¬å°ç«¯çåå§ç¢¼æ¨¹å&os;çç¹å®çæ¬åæ¥å¾ï¼ >+ä¾å¦ &os.stable; or &os.current;ï¼åå§ç¢¼æ¨¹å°±å¯ä»¥ç¨ä¾éæ°ç·¨è¯ç³»çµ±ã >+ éåéç¨å«éæ°ç·¨è¯ worldã</para> > >- <para>éæé¡¯ç¤ºææç¬¦åè¦æ¾ç <replaceable>GID</replaceable> ç¾¤çµ >- (å¯ä»¥æ¯ç¾¤çµåç¨±ï¼æè æ¯ç¾¤çµçæ¸å代è)çæææªæ¡ã</para> >- </tip> >- </sect2> >+ <para>éæ°ç·¨è¯ world<emphasis>ä¹å</emphasis> ï¼è«ç¢ºå®å·è¡ä»¥ä¸ä»»å >+ :</para> > >- <sect2 xml:id="makeworld-singleuser"> >- <title>åæå° Single User 模å¼</title> >- <indexterm><primary>single-user mode</primary></indexterm> >+ <procedure> >+ <title>ç·¨è¯ world<emphasis>ä¹å</emphasis> å·è¡éäºä»»å</title> > >- <para>æ¨å¯è½ææ³å¨ single user 模å¼ä¸ç·¨è¯ç³»çµ±ã >- é¤äºå¯ä»¥æé¡¯æ´å¿«å®æä¹å¤ï¼å®è£éç¨ä¸å°æç½æ¶è¨±å¤éè¦çç³»çµ±æªæ¡ï¼ >- å æ¬ææç³»çµ± binariesãlibrariesãinclude æªæ¡çã >- è¥å¨éä½ä¸ç系統(å°¤å ¶æè¨±å¤ä½¿ç¨è å¨ç¨çæå)å §æ´æ¹éäºæªæ¡ï¼ >- é£ç°¡ç´æ¯èªæ¾éº»ç ©ç使³ã</para> >+ <step> >+ <para>å份ææéè¦è³æå°å¦ä¸åç³»çµ±ææ¯å¯æå¼åªé«ï¼ >+ 檢æ¥å份ç宿´æ§ï¼æéæºåä¸åå¯ä»¥éæ©çå®è£åªé«ã >+ 忬¡å¼·èª¿å¨éæ°ç·¨è¯ç³»çµ± >+ <emphasis>ä¹å</emphasis>ï¼è£½ä½ç³»çµ±çå份æ¯é常éè¦çã While >+ rebuilding world is an easy task, there will inevitably be >+ times when mistakes in the source tree render the system >+ unbootable. You will probably never have to use the backup, >+ but it is better to be safe than sorry!</para> >+ </step> > >- <indexterm><primary>multi-user mode</primary></indexterm> >- <para>å¦ä¸ç¨®æ¨¡å¼æ¯å å¨ multi-user 模å¼ä¸ç·¨è¯å¥½ç³»çµ±ï¼ç¶å¾ååå° single user >- 模å¼å»å®è£ã è¥æ¨æ¯è¼åæ¡é種æ¹å¼ï¼åªéå¨ build(ç·¨è¯éç¨) 宿ä¹å¾ï¼ >- åå»å·è¡ä¸é¢çæ¥é©å³å¯ã ä¸ç´å°å¯åæ single user æ¨¡å¼æï¼åå»å·è¡ >- <buildtarget>installkernel</buildtarget> æ >- <buildtarget>installworld</buildtarget> å³å¯ã</para> >+ <step> >+ <indexterm><primary>mailing list</primary></indexterm> >+ <para>Review the recent &a.stable.name; or &a.current.name; >+ entries, depending upon the branch being tracked. Be aware >+ of any known problems and which systems are affected. If a >+ known issue affects the version of synchronized code, wait >+ for an <quote>all clear</quote> announcement to be posted >+ stating that the problem has been solved. Resynchronize the >+ sources to ensure that the local version of source has the >+ needed fix.</para> >+ </step> > >- <para>åæçº root 身份æï¼</para> >+ <step> >+ <para>Read <filename>/usr/src/UPDATING</filename> for any >+ extra steps necessary for that version of the source. This >+ file contains important information about potential problems >+ and may specify the order to run certain commands. Many >+ upgrades require specific additional steps such as renaming >+ or deleting specific files prior to installing the new >+ world. These will be listed at the end of this file where >+ the currently recommended upgrade sequence is explicitly >+ spelled out. If <filename>UPDATING</filename> contradicts >+ any steps in this chapter, the instructions in >+ <filename>UPDATING</filename> take precedence and should be >+ followed.</para> >+ </step> >+ </procedure> > >- <screen>&prompt.root; <userinput>shutdown now</userinput></screen> >+ <warning> >+ <title>ä¸è¦ä½¿ç¨ <command>make world</command></title> > >- <para>鿍£å°±æå¾åæ¬ç multi-user 模å¼åæå° single user 模å¼ã</para> >+ <para>æäºæ¯è¼èçæä»¶å»ºè°ä½¿ç¨ <command>make >+ world</command>ãç¶èï¼éåæä»¤æ ç¥éæäºéè¦çæ¥é©ï¼åªé©åå°å®¶ä½¿ç¨ã >+ 大é¨åçæ æ³ï¼ä½¿ç¨ <command>make world</command>齿¯é¯èª¤çï¼æè©²ç¨é裡æè¿°çæ¥é©ä»£æ¿ã >+ </para> >+ </warning> > >- <para>餿¤ä¹å¤ä¹å¯ä»¥ééæ©ï¼æ¥èå¨éæ©é¸å®è鏿 >- <quote>single user</quote> é¸é ã 妿¤ä¸ä¾å°±æé²å ¥ single user 模å¼ï¼ >- ç¶å¾å¨ shell æç¤ºç¬¦èèè¼¸å ¥ï¼</para> >+ <sect2 xml:id="canonical-build"> >+ <title>ç¨åºæ¦è¦</title> > >- <screen>&prompt.root; <userinput>fsck -p</userinput> >-&prompt.root; <userinput>mount -u /</userinput> >-&prompt.root; <userinput>mount -a -t ufs</userinput> >-&prompt.root; <userinput>swapon -a</userinput></screen> >+ <para>The build world process assumes an upgrade from an older >+ &os; version using the source of a newer version that was >+ obtained using the instructions in <xref >+ linkend="synching"/>.</para> > >- <para>鿍£æå æª¢æ¥æªæ¡ç³»çµ±ï¼ä¸¦éæ°å° <filename>/</filename> >- æ¹ä»¥å¯è®å¯«çæ¨¡å¼æè¼ï¼ä»¥å <filename>/etc/fstab</filename> >- å §æè¨å®çå ¶ä» UFS æªæ¡ç³»çµ±ï¼æå¾åç¨ swap ç£åã</para> >+ <para>In &os;, the term <quote>world</quote> includes the >+ kernel, core system binaries, libraries, programming files, >+ and built-in compiler. The order in which these components >+ are built and installed is important.</para> > >+ <para>For example, the old compiler might have a bug and not be >+ able to compile the new kernel. Since the new kernel should >+ be built with the new compiler, the new compiler must be >+ built, but not necessarily installed, before the new kernel is >+ built.</para> > >- <note> >- <para>è¥ CMOS æéæ¯è¨çºç¶å°æéï¼èé GMT æå(è¥ &man.date.1; >- æä»¤æ²é¡¯ç¤ºæ£ç¢ºçæéãæå)ï¼é£å¯è½éè¦åè¼¸å ¥ä¸åæä»¤ï¼</para> >-<screen>&prompt.root; <userinput>adjkerntz -i</userinput></screen> >+ <para>The new world might rely on new kernel features, so the >+ new kernel must be installed before the new world is >+ installed. The old world might not run correctly on the new >+ kernel, so the new world must be installed immediately upon >+ installing the new kernel.</para> > >- <para>鿥é©å¯ä»¥ç¢ºèªæ¨çç¶å°æåè¨å®æ¯å¦æ£ç¢º — >- å¦åæ¥å¾æé æä¸äºåé¡ã</para> >- </note> >+ <para>Some configuration changes must be made before the new >+ world is installed, but others might break the old world. >+ Hence, two different configuration upgrade steps are used. >+ For the most part, the update process only replaces or adds >+ files and existing old files are not deleted. Since this can >+ cause problems, <filename>/usr/src/UPDATING</filename> will >+ indicate if any files need to be manually deleted and at which >+ step to do so.</para> > >- </sect2> >+ <para>These concerns have led to the recommended upgrade >+ sequence described in the following procedure.</para> > >- <sect2> >- <title>ç§»é¤ <filename>/usr/obj</filename></title> >+ <note> >+ <para>It is a good idea to save the output from running >+ <command>make</command> to a file. If something goes wrong, >+ a copy of the error message can be posted to one of the &os; >+ mailing lists.</para> > >- <para>å¨éæ°ç·¨è¯ç³»çµ±çéç¨ä¸ï¼ç·¨è¯çµæææ¾å°(é è¨æ æ³) >- <filename>/usr/obj</filename> å §ã é裡é¢çç®éæå°æå° >- <filename>/usr/src</filename> çç®éçµæ§ã</para> >+ <para>The easiest way to do this is to use >+ <command>script</command> with a parameter that specifies >+ the name of the file to save all output to. Do not save the >+ output to <filename>/tmp</filename> as this directory may be >+ cleared at next reboot. A better place to save the file is >+ <filename>/var/tmp</filename>. Run this command immediately >+ before rebuilding the world, and then type >+ <userinput>exit</userinput> when the process has >+ finished:</para> > >- <para>ç æéç®éï¼å¯ä»¥è®ä»¥å¾ç <command>make buildworld</command> >- éç¨æ´å¿«ä¸äºï¼èä¸å¯é¿å 以åç·¨è¯çæ±è¥¿è·ç¾å¨çæ··æ·å¨ä¸èµ·çç¸ä¾é¯äº >- ã</para> >+ <screen>&prompt.root; <userinput>script <replaceable>/var/tmp/mw.out</replaceable></userinput> >+Script started, output file is /var/tmp/mw.out</screen> >+ </note> > >- <para>èæäº <filename>/usr/obj</filename> å §çæªæ¡å¯è½æè¨å®ä¸å¯æ´åç >- flag(ç´°ç¯è«åé± &man.chflags.1;)ï¼èå¿ é å æ¿æéäº flag è¨å®æè¡ >- ã</para> >+ <procedure> >+ <title>Overview of Build World Process</title> > >- <screen>&prompt.root; <userinput>cd /usr/obj</userinput> >+ <para>The commands used in the build world process should be >+ run in the order specified here. This section summarizes >+ the function of each command.</para> >+ >+ <step> >+ <para>If the build world process has previously been run on >+ this system, a copy of the previous build may still exist >+ in <filename class="directory">/usr/obj</filename>. To >+ speed up the new build world process, and possibly save >+ some dependency headaches, remove this directory if it >+ already exists:</para> >+ >+ <screen>&prompt.root; <userinput>cd /usr/obj</userinput> > &prompt.root; <userinput>chflags -R noschg *</userinput> > &prompt.root; <userinput>rm -rf *</userinput></screen> >- </sect2> >+ </step> > >- <sect2 xml:id="cutting-edge-compilebase"> >- <title>éæ°ç·¨è¯ Base System</title> >+ <step> >+ <para>Compile the new compiler and a few related tools, then >+ use the new compiler to compile the rest of the new world. >+ The result is saved to <filename >+ class="directory">/usr/obj</filename>.</para> > >- <sect3> >- <title>ä¿çç·¨è¯çç´é</title> >+ <screen>&prompt.root; <userinput>cd /usr/src</userinput> >+&prompt.root; <userinput>make buildworld</userinput></screen> >+ </step> > >- <para>建è°é¤æå¥½ç¿æ £ï¼æå·è¡ &man.make.1; æç¢ççç´éåèµ·ä¾ã >- 鿍£è¥æåªéåºé¯ï¼å°±ææé¯èª¤è¨æ¯çç´éã éç¶å®å®éæ¨£ï¼ >- ä½ å¯è½ä¸ç¥éå¦ä½åææ¯åªéåºäºå²ï¼ä½è¥æä½ åé¡è¨éè²¼å° &os; ç¸éç >- mailing list å°±å¯ä»¥æäººå¯ä»¥å¹«å¿çæ¯æéº¼ä¸åäºæ ã</para> >+ <step> >+ <para>Use the new compiler residing in <filename >+ class="directory">/usr/obj</filename> to build the new >+ kernel, in order to protect against compiler-kernel >+ mismatches. This is necessary, as certain memory >+ structures may have changed, and programs like >+ <command>ps</command> and <command>top</command> will fail >+ to work if the kernel and source code versions are not the >+ same.</para> > >- <para>æç°¡å®çæ¹æ¯å°±æ¯ç¨ &man.script.1; æä»¤ï¼ä¸¦å ä¸åæ¸ >- (ä½ æ³åæ¾è¨éçæªæ¡ä½ç½®ãæªå)å³å¯ã >- éæ¥é©æè©²å¨éæ°ç·¨è¯ç³»çµ±æå°±è¦ä½ï¼ç¶å¾å¨å®æç·¨è¯å¾è¼¸å ¥ >- <userinput>exit</userinput> å³å¯é¢éã</para> >+ <screen>&prompt.root; <userinput>make buildkernel</userinput></screen> >+ </step> > >- <screen>&prompt.root; <userinput>script /var/tmp/mw.out</userinput> >-Script started, output file is /var/tmp/mw.out >-&prompt.root; <userinput>make TARGET</userinput> >-<emphasis>… compile, compile, compile …</emphasis> >-&prompt.root; <userinput>exit</userinput> >-Script done, …</screen> >+ <step> >+ <para>Install the new kernel and kernel modules, making it >+ possible to boot with the newly updated kernel. If >+ <varname>kern.securelevel</varname> has been raised above >+ <literal>1</literal> <emphasis>and</emphasis> >+ <literal>noschg</literal> or similar flags have been set >+ on the kernel binary, drop the system into single-user >+ mode first. Otherwise, this command can be run from >+ multi-user mode without problems. See &man.init.8; for >+ details about <varname>kern.securelevel</varname> and >+ &man.chflags.1; for details about the various file >+ flags.</para> > >- <para>å°äºï¼éæä¸é»åé<emphasis>奿</emphasis>æªæ¡åå° >- <filename>/tmp</filename> ç®éå §ã å çºééæ©ä¹å¾ï¼ >- éç®éå §çæ±è¥¿é½æè¢«æ¸ ç©ºã æ¯è¼å¦¥åçå°æ¹æ¯ >- <filename>/var/tmp</filename> (å¦ä¸ä¾æç¤º) æè æ¯ >- <systemitem class="username">root</systemitem> çå®¶ç®éã</para> >- </sect3> >+ <screen>&prompt.root; <userinput>make installkernel</userinput></screen> >+ </step> > >- <sect3 xml:id="make-buildworld"> >- <title>ç·¨è¯ Base System</title> >+ <step> >+ <para>Drop the system into single-user mode in order to >+ minimize problems from updating any binaries that are >+ already running. It also minimizes any problems from >+ running the old world on a new kernel.</para> > >- <para>é¦å è«å åæå° <filename>/usr/src</filename> ç®éï¼</para> >+ <screen>&prompt.root; <userinput>shutdown now</userinput></screen> > >- <screen>&prompt.root; <userinput>cd /usr/src</userinput></screen> >+ <para>Once in single-user mode, run these commands if the >+ system is formatted with UFS:</para> > >- <para>(ç¶ç¶ï¼é¤éä½ æ source code æ¾å°å ¶ä»å°æ¹ï¼è¥çæ¯éæ¨£ï¼ >- å°±åæå°é£åç®éå³å¯)ã</para> >- <indexterm><primary><command>make</command></primary></indexterm> >+ <screen>&prompt.root; <userinput>mount -u /</userinput> >+&prompt.root; <userinput>mount -a -t ufs</userinput> >+&prompt.root; <userinput>swapon -a</userinput></screen> > >- <para>ä½¿ç¨ &man.make.1; æä»¤ä¾éæ°ç·¨è¯ worldã >- éæä»¤æå¾ <filename>Makefile</filename> æª(éæªæå¯« &os; >- çç¨å¼è©²å¦ä½éæ°ç·¨è¯ã以åªäºé åºä¾ç·¨è¯çç)å»è®åç¸éæä»¤ã</para> >+ <para>If the system is instead formatted with ZFS, run these >+ two commands. This example assumes a zpool name of >+ <literal>zroot</literal>:</para> > >- <para>ä¸è¬ä¸æä»¤çæ ¼å¼å¦ä¸ï¼</para> >+ <screen>&prompt.root; <userinput>zfs set readonly=off zroot</userinput> >+&prompt.root; <userinput>zfs mount -a</userinput></screen> >+ </step> > >- <screen>&prompt.root; <userinput>make -x -DVARIABLE target</userinput></screen> >+ <step> >+ <para>Then, for either file system, if the >+ <acronym>CMOS</acronym> clock is set to local time (this >+ is true if the output of &man.date.1; does not show the >+ correct time and zone), run:</para> > >- <para>å¨éåä¾åï¼<option>-<replaceable>x</replaceable></option> >- æ¯ä½ æ³å³çµ¦ &man.make.1; çé¸é ï¼ç´°ç¯èªªæè«åé± &man.make.1; 說æï¼ >- è£¡é¢æç¸éç¯ä¾èªªæã</para> >+ <screen>&prompt.root; <userinput>adjkerntz -i</userinput></screen> >+ </step> > >- <para><option>-D<replaceable>VARIABLE</replaceable></option> >- 忝æè®æ¸è¨å®å³çµ¦ <filename>Makefile</filename>ã éäºè®æ¸ææ§å¶ >- <filename>Makefile</filename> çè¡çºã éäºè¨å®è >- <filename>/etc/make.conf</filename> çè®æ¸è¨å®æ¯ä¸æ¨£ï¼ >- åªæ¯å¦ä¸ç¨®è¨å®æ¹å¼èå·²ã</para> >+ <step> >+ <para>Remaking the world will not update certain >+ directories, such as <filename>/etc</filename>, >+ <filename>/var</filename> and <filename>/usr</filename>, >+ with new or changed configuration files. The next step is >+ to perform some initial configuration file updates >+ to <filename class="directory">/etc</filename> in >+ preparation for the new world. The following command >+ compares only those files that are essential for the >+ success of <buildtarget>installworld</buildtarget>. For >+ instance, this step may add new groups, system accounts, >+ or startup scripts which have been added to &os; since the >+ last update. This is necessary so that the >+ <buildtarget>installworld</buildtarget> step will be able >+ to use any new system accounts, groups, and scripts. >+ Refer to <xref linkend="mergemaster"/> for more detailed >+ instructions about this command:</para> > >- <screen>&prompt.root; <userinput>make -DNO_PROFILE target</userinput></screen> >+ <screen>&prompt.root; <userinput>mergemaster -p</userinput></screen> >+ </step> > >- <para>ä¸é¢çä¾å忝å¦ä¸ç¨®è¨å®æ¹å¼ï¼ä¹å°±æ¯åªäºä¸è¦ã >- éåä¾åä¸çæææ¯ä¸å»ç·¨è¯ profiled librariesï¼ææå°±å¦åè¨å®å¨ >- <filename>/etc/make.conf</filename> ç</para> >+ <step> >+ <para>Install the new world and system binaries from >+ <filename class="directory">/usr/obj</filename>.</para> > >- <programlisting>NO_PROFILE= true # Avoid compiling profiled libraries</programlisting> >+ <screen>&prompt.root; <userinput>cd /usr/src</userinput> >+&prompt.root; <userinput>make installworld</userinput></screen> >+ </step> > >- <para><replaceable>target</replaceable> 忝å訴 &man.make.1; >- 該å»ååªäºã æ¯å <filename>Makefile</filename> 齿å®ç¾©ä¸åç >- <quote>targets</quote>ï¼ç¶å¾ä¾æ¨æçµ¦ç target å°±ææ±ºå®æååªäºåä½ >- ã</para> >+ <step> >+ <para>Update any remaining configuration files.</para> > >- <para>Some targets are listed in the >- <filename>Makefile</filename>, but are not meant for you to run. >- Instead, they are used by the build process to break out the >- steps necessary to rebuild the system into a number of >- sub-steps.</para> >+ <screen>&prompt.root; <userinput>mergemaster -iF</userinput></screen> >+ </step> > >- <para>Most of the time you will not need to pass any parameters to >- &man.make.1;, and so your command like will look like >- this:</para> >+ <step> >+ <para>Delete any obsolete files. This is important as they >+ may cause problems if left on the disk.</para> > >- <screen>&prompt.root; <userinput>make target</userinput></screen> >+ <screen>&prompt.root; <userinput>make delete-old</userinput></screen> >+ </step> > >- <para>Where <replaceable>target</replaceable> will be one of >- many build options. The first target should always be >- <varname>buildworld</varname>.</para> >+ <step> >+ <para>A full reboot is now needed to load the new kernel and >+ new world with the new configuration files.</para> > >- <para>As the names imply, <buildtarget>buildworld</buildtarget> >- builds a complete new tree under <filename>/usr/obj</filename>, >- and <buildtarget>installworld</buildtarget>, another target, installs this tree on >- the current machine.</para> >+ <screen>&prompt.root; <userinput>reboot</userinput></screen> >+ </step> > >- <para>Having separate options is very useful for two reasons. First, it allows you >- to do the build safe in the knowledge that no components of >- your running system will be affected. The build is >- <quote>self hosted</quote>. Because of this, you can safely >- run <buildtarget>buildworld</buildtarget> on a machine running >- in multi-user mode with no fear of ill-effects. It is still >- recommended that you run the >- <buildtarget>installworld</buildtarget> part in single user >- mode, though.</para> >+ <step> >+ <para>Make sure that all installed ports have first been >+ rebuilt before old libraries are removed using the >+ instructions in <xref linkend="ports-upgrading"/>. When >+ finished, remove any obsolete libraries to avoid conflicts >+ with newer ones. For a more detailed description of this >+ step, refer to <xref linkend="make-delete-old"/>.</para> > >- <para>Secondly, it allows you to use NFS mounts to upgrade >- multiple machines on your network. If you have three machines, >- <systemitem>A</systemitem>, <systemitem>B</systemitem> and <systemitem>C</systemitem> that you want to upgrade, run <command>make >- buildworld</command> and <command>make installworld</command> on >- <systemitem>A</systemitem>. <systemitem>B</systemitem> and <systemitem>C</systemitem> should then NFS mount <filename>/usr/src</filename> >- and <filename>/usr/obj</filename> from <systemitem>A</systemitem>, and you can then run >- <command>make installworld</command> to install the results of >- the build on <systemitem>B</systemitem> and <systemitem>C</systemitem>.</para> >+ <screen>&prompt.root; <userinput>make delete-old-libs</userinput></screen> >+ </step> >+ </procedure> > >- <para>Although the <buildtarget>world</buildtarget> target still exists, >- you are strongly encouraged not to use it.</para> >+ <indexterm><primary>single-user mode</primary></indexterm> > >- <para>Run</para> >+ <para>If the system can have a window of down-time, consider >+ compiling the system in single-user mode instead of compiling >+ the system in multi-user mode, and then dropping into >+ single-user mode for the installation. Reinstalling the >+ system touches a lot of important system files, all the >+ standard system binaries, libraries, and include files. >+ Changing these on a running system, particularly one with >+ active users, is asking for trouble.</para> >+ </sect2> > >- <screen>&prompt.root; <userinput>make buildworld</userinput></screen> >+ <sect2 xml:id="src-updating"> >+ <title>Configuration Files</title> > >- <para>It is possible to specify a <option>-j</option> option to >- <command>make</command> which will cause it to spawn several >- simultaneous processes. This is most useful on multi-CPU machines. >- However, since much of the compiling process is IO bound rather >- than CPU bound it is also useful on single CPU machines.</para> >+ <indexterm> >+ <primary><filename>make.conf</filename></primary> >+ </indexterm> > >- <para>On a typical single-CPU machine you would run:</para> >+ <para>This build world process uses several configuration >+ files.</para> > >- <screen>&prompt.root; <userinput>make -j4 buildworld</userinput></screen> >+ <para>The <filename>Makefile</filename> located in >+ <filename>/usr/src</filename> describes how the programs that >+ comprise &os; should be built and the order in which they >+ should be built.</para> > >- <para>&man.make.1; will then have up to 4 processes running at any one >- time. Empirical evidence posted to the mailing lists shows this >- generally gives the best performance benefit.</para> >+ <para>The options available to <command>make</command> are >+ described in &man.make.conf.5; and some common examples are >+ included in >+ <filename>/usr/share/examples/etc/make.conf</filename>. Any >+ options which are added to <filename>/etc/make.conf</filename> >+ will control the how <command>make</command> runs and builds >+ programs. These options take effect every time >+ <command>make</command> is used, including compiling >+ applications from the Ports Collection, compiling custom C >+ programs, or building the &os; operating system. Changes to >+ some settings can have far-reaching and potentially surprising >+ effects. Read the comments in both locations and keep in mind >+ that the defaults have been chosen for a combination of >+ performance and safety.</para> > >- <para>If you have a multi-CPU machine and you are using an SMP >- configured kernel try values between 6 and 10 and see how they speed >- things up.</para> >- </sect3> >+ <indexterm> >+ <primary><filename>src.conf</filename></primary> >+ </indexterm> > >- <sect3> >- <title>Timings</title> >- <indexterm> >- <primary>rebuilding <quote>world</quote></primary> >- <secondary>timings</secondary> >- </indexterm> >- >- <para>Many factors influence the build time, but fairly recent >- machines may only take a one or two hours to build >- the &os.stable; tree, with no tricks or shortcuts used during the >- process. A &os.current; tree will take somewhat longer.</para> >- </sect3> >+ <para>How the operating system is built from source code is >+ controlled by <filename>/etc/src.conf</filename>. Unlike >+ <filename>/etc/make.conf</filename>, the contents of >+ <filename>/etc/src.conf</filename> only take effect when the >+ &os; operating system itself is being built. Descriptions of >+ the many options available for this file are shown in >+ &man.src.conf.5;. Be cautious about disabling seemingly >+ unneeded kernel modules and build options. Sometimes there >+ are unexpected or subtle interactions.</para> > </sect2> > >- <sect2> >- <title>Compile and Install a New Kernel</title> >- <indexterm> >- <primary>kernel</primary> >- <secondary>compiling</secondary> >- </indexterm> >+ <sect2 xml:id="make-buildworld"> >+ <title>Variables and Targets</title> > >- <para>To take full advantage of your new system you should recompile the >- kernel. This is practically a necessity, as certain memory structures >- may have changed, and programs like &man.ps.1; and &man.top.1; will >- fail to work until the kernel and source code versions are the >- same.</para> >+ <para>The general format for using <command>make</command> is as >+ follows:</para> > >- <para>The simplest, safest way to do this is to build and install a >- kernel based on <filename>GENERIC</filename>. While >- <filename>GENERIC</filename> may not have all the necessary devices >- for your system, it should contain everything necessary to boot your >- system back to single user mode. This is a good test that the new >- system works properly. After booting from >- <filename>GENERIC</filename> and verifying that your system works you >- can then build a new kernel based on your normal kernel configuration >- file.</para> >+ <screen>&prompt.root; <userinput>make -<replaceable>x</replaceable> -D<replaceable>VARIABLE</replaceable> <replaceable>target</replaceable></userinput></screen> > >- <para>On &os; it is important to <link linkend="make-buildworld">build world</link> before building a >- new kernel.</para> >+ <para>In this example, >+ <option>-<replaceable>x</replaceable></option> is an option >+ passed to <command>make</command>. Refer to &man.make.1; for >+ examples of the available options.</para> > >- <note><para>If you want to build a custom kernel, and already have a configuration >- file, just use <literal>KERNCONF=MYKERNEL</literal> >- like this:</para> >+ <para>To pass a variable, specify the variable name with >+ <option>-D<replaceable>VARIABLE</replaceable></option>. The >+ behavior of the <filename>Makefile</filename> is controlled by >+ variables. These can either be set in >+ <filename>/etc/make.conf</filename> or they can be specified >+ when using <command>make</command>. For example, this >+ variable specifies that profiled libraries should not be >+ built:</para> > >- <screen>&prompt.root; <userinput>cd /usr/src</userinput> >-&prompt.root; <userinput>make buildkernel KERNCONF=MYKERNEL</userinput> >-&prompt.root; <userinput>make installkernel KERNCONF=MYKERNEL</userinput></screen> >- </note> >+ <screen>&prompt.root; <userinput>make -DNO_PROFILE <replaceable>target</replaceable></userinput></screen> > >- <para>Note that if you have raised <literal>kern.securelevel</literal> >- above 1 <emphasis>and</emphasis> you have set either the >- <literal>noschg</literal> or similar flags to your kernel binary, you >- might find it necessary to drop into single user mode to use >- <buildtarget>installkernel</buildtarget>. Otherwise you should be able >- to run both these commands from multi user mode without >- problems. See &man.init.8; for details about >- <literal>kern.securelevel</literal> and &man.chflags.1; for details >- about the various file flags.</para> >- </sect2> >+ <para>It corresponds with this setting in >+ <filename>/etc/make.conf</filename>:</para> > >- <sect2> >- <title>Reboot into Single User Mode</title> >- <indexterm><primary>single-user mode</primary></indexterm> >+ <programlisting>NO_PROFILE= true # Avoid compiling profiled libraries</programlisting> > >- <para>You should reboot into single user mode to test the new kernel >- works. Do this by following the instructions in >- <xref linkend="makeworld-singleuser"/>.</para> >- </sect2> >+ <para>The <replaceable>target</replaceable> tells >+ <command>make</command> what to do and the >+ <filename>Makefile</filename> defines the available targets. >+ Some targets are used by the build process to break out the >+ steps necessary to rebuild the system into a number of >+ sub-steps.</para> > >- <sect2 xml:id="make-installworld"> >- <title>Install the New System Binaries</title> >+ <para>Having separate options is useful for two reasons. First, >+ it allows for a build that does not affect any components of a >+ running system. Because of this, >+ <buildtarget>buildworld</buildtarget> can be safely run on a >+ machine running in multi-user mode. It is still recommended >+ that <buildtarget>installworld</buildtarget> be run in part in >+ single-user mode, though.</para> > >- <para>If you were building a version of &os; recent enough to have >- used <command>make buildworld</command> then you should now use >- <buildtarget>installworld</buildtarget> to install the new system >- binaries.</para> >+ <para>Secondly, it allows <acronym>NFS</acronym> mounts to be >+ used to upgrade multiple machines on a network, as described >+ in <xref linkend="small-lan"/>.</para> > >- <para>Run</para> >+ <para>It is possible to specify <option>-j</option> which will >+ cause <command>make</command> to spawn several simultaneous >+ processes. Since much of the compiling process is >+ <acronym>I/O</acronym>-bound rather than >+ <acronym>CPU</acronym>-bound, this is useful on both single >+ <acronym>CPU</acronym> and multi-<acronym>CPU</acronym> >+ machines.</para> > >- <screen>&prompt.root; <userinput>cd /usr/src</userinput> >-&prompt.root; <userinput>make installworld</userinput></screen> >+ <para>On a single-<acronym>CPU</acronym> machine, run the >+ following command to have up to 4 processes running at any one >+ time. Empirical evidence posted to the mailing lists shows >+ this generally gives the best performance benefit.</para> > >+ <screen>&prompt.root; <userinput>make -j4 buildworld</userinput></screen> >+ >+ <para>On a multi-<acronym>CPU</acronym> machine, try values >+ between <literal>6</literal> and <literal>10</literal> to see >+ how they speed things up.</para> >+ >+ <indexterm> >+ <primary>rebuilding <quote>world</quote></primary> >+ <secondary>timings</secondary> >+ </indexterm> >+ > <note> >- <para>If you specified variables on the <command>make >- buildworld</command> command line, you must specify the same >- variables in the <command>make installworld</command> command >- line. This does not necessarily hold true for other options; >- for example, <option>-j</option> must never be used with >- <buildtarget>installworld</buildtarget>.</para> >+ <para>If any variables were specified to <command>make >+ buildworld</command>, specify the same variables to >+ <command>make installworld</command>. However, >+ <option>-j</option> must <emphasis>never</emphasis> be used >+ with <buildtarget>installworld</buildtarget>.</para> > >- <para>For example, if you ran:</para> >+ <para>For example, if this command was used:</para> > > <screen>&prompt.root; <userinput>make -DNO_PROFILE buildworld</userinput></screen> > >- <para>you must install the results with:</para> >+ <para>Install the results with:</para> > > <screen>&prompt.root; <userinput>make -DNO_PROFILE installworld</userinput></screen> > >- <para>otherwise it would try to install profiled libraries that >- had not been built during the <command>make buildworld</command> >- phase.</para> >+ <para>Otherwise, the second command will try to install >+ profiled libraries that were not built during the >+ <command>make buildworld</command> phase.</para> > </note> > </sect2> > >- <sect2> >- <title>Update Files Not Updated by <command>make installworld</command></title> >+ <sect2 xml:id="mergemaster"> >+ <info> >+ <title>Merging Configuration Files</title> > >- <para>Remaking the world will not update certain directories (in >- particular, <filename>/etc</filename>, <filename>/var</filename> and >- <filename>/usr</filename>) with new or changed configuration files.</para> >+ <authorgroup> >+ <author> >+ <personname> >+ <firstname>Tom</firstname> >+ <surname>Rhodes</surname> >+ </personname> >+ <contrib>Contributed by </contrib> >+ </author> >+ </authorgroup> >+ </info> > >- <para>The simplest way to update these files is to use >- &man.mergemaster.8;, though it is possible to do it manually >- if you would prefer to do that. Regardless of which way you >- choose, be sure to make a backup of <filename>/etc</filename> in >- case anything goes wrong.</para> >+ <indexterm> >+ <primary> >+ <command>mergemaster</command> >+ </primary> >+ </indexterm> > >- <sect3 xml:id="mergemaster"> >- <info><title><command>mergemaster</command></title> >- <authorgroup> >- <author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Contributed by </contrib></author> >- </authorgroup> >- </info> >- >- <indexterm><primary><command>mergemaster</command></primary></indexterm> >+ <para>&os; provides the &man.mergemaster.8; Bourne script to aid >+ in determining the differences between the configuration files >+ in <filename>/etc</filename>, and the configuration files in >+ <filename>/usr/src/etc</filename>. This is the recommended >+ solution for keeping the system configuration files up to date >+ with those located in the source tree.</para> > >- <para>The &man.mergemaster.8; utility is a Bourne script that will >- aid you in determining the differences between your configuration files >- in <filename>/etc</filename>, and the configuration files in >- the source tree <filename>/usr/src/etc</filename>. This is >- the recommended solution for keeping the system configuration files up to date >- with those located in the source tree.</para> >+ <para>Before using <command>mergemaster</command>, it is >+ recommended to first copy the existing >+ <filename>/etc</filename> somewhere safe. Include >+ <option>-R</option> which does a recursive copy and >+ <option>-p</option> which preserves times and the ownerships >+ on files:</para> > >- <para>To begin simply type <command>mergemaster</command> at your prompt, and >- watch it start going. <command>mergemaster</command> will then build a >- temporary root environment, from <filename>/</filename> down, and populate >- it with various system configuration files. Those files are then compared >- to the ones currently installed in your system. At this point, files that >- differ will be shown in &man.diff.1; format, with the <option>+</option> sign >- representing added or modified lines, and <option>-</option> representing >- lines that will be either removed completely, or replaced with a new line. >- See the &man.diff.1; manual page for more information about the &man.diff.1; >- syntax and how file differences are shown.</para> >+ <screen>&prompt.root; <userinput>cp -Rp /etc /etc.old</userinput></screen> > >- <para>&man.mergemaster.8; will then show you each file that displays variances, >- and at this point you will have the option of either deleting the new file (referred >- to as the temporary file), installing the temporary file in its unmodified state, >- merging the temporary file with the currently installed file, or viewing the >- &man.diff.1; results again.</para> >+ <para>When run, <command>mergemaster</command> builds a >+ temporary root environment, from <filename>/</filename> down, >+ and populates it with various system configuration files. >+ Those files are then compared to the ones currently installed >+ in the system. Files that differ will be shown in >+ &man.diff.1; format, with the <option>+</option> sign >+ representing added or modified lines, and <option>-</option> >+ representing lines that will be either removed completely or >+ replaced with a new file. Refer to &man.diff.1; for more >+ information about how file differences are shown.</para> > >- <para>Choosing to delete the temporary file will tell &man.mergemaster.8; that we >- wish to keep our current file unchanged, and to delete the new version. >- This option is not recommended, unless you see no >- reason to change the current file. You can get help at any time by >- typing <keycap>?</keycap> at the &man.mergemaster.8; prompt. If the user >- chooses to skip a file, it will be presented again after all other files >- have been dealt with.</para> >+ <para>Next, <command>mergemaster</command> will display each >+ file that differs, and present options to: delete the new >+ file, referred to as the temporary file, install the temporary >+ file in its unmodified state, merge the temporary file with >+ the currently installed file, or view the results >+ again.</para> > >- <para>Choosing to install the unmodified temporary file will replace the >- current file with the new one. For most unmodified files, this is the best >- option.</para> >+ <para>Choosing to delete the temporary file will tell >+ <command>mergemaster</command> to keep the current file >+ unchanged and to delete the new version. This option is not >+ recommended. To get help at any time, type >+ <keycap>?</keycap> at the <command>mergemaster</command> >+ prompt. If the user chooses to skip a file, it will be >+ presented again after all other files have been dealt >+ with.</para> > >- <para>Choosing to merge the file will present you with a text editor, >- and the contents of both files. You can now merge them by >- reviewing both files side by side on the screen, and choosing parts from >- both to create a finished product. When the files are compared side by side, >- the <keycap>l</keycap> key will select the left contents and the >- <keycap>r</keycap> key will select contents from your right. >- The final output will be a file consisting of both parts, which can then be >- installed. This option is customarily used for files where settings have been >- modified by the user.</para> >+ <para>Choosing to install the unmodified temporary file will >+ replace the current file with the new one. For most >+ unmodified files, this is the best option.</para> > >- <para>Choosing to view the &man.diff.1; results again will show you the file differences >- just like &man.mergemaster.8; did before prompting you for an option.</para> >+ <para>Choosing to merge the file will present a text editor, and >+ the contents of both files. The files can be merged by >+ reviewing both files side by side on the screen, and choosing >+ parts from both to create a finished product. When the files >+ are compared side by side, <keycap>l</keycap> selects the left >+ contents and <keycap>r</keycap> selects contents from the >+ right. The final output will be a file consisting of both >+ parts, which can then be installed. This option is >+ customarily used for files where settings have been modified >+ by the user.</para> > >- <para>After &man.mergemaster.8; is done with the system files you will be >- prompted for other options. &man.mergemaster.8; may ask if you want to rebuild >- the password file and will finish up with an option to >- remove left-over temporary files.</para> >- </sect3> >+ <para>Choosing to view the results again will redisplay the file >+ differences.</para> > >- <sect3> >- <title>Manual Update</title> >+ <para>After <command>mergemaster</command> is done with the >+ system files, it will prompt for other options. It may prompt >+ to rebuild the password file and will finish up with an option >+ to remove left-over temporary files.</para> >+<!-- >+Probably not needed as changes should be minimal and mergemaster does >+a good job of merging. >+ <tip> >+ <title>Name the New Root Directory >+ (<filename>/var/tmp/root</filename>) >+ with a Time Stamp, so You Can Easily Compare Differences >+ Between Versions</title> > >- <para>If you wish to do the update manually, however, >- you cannot just copy over the files from >- <filename>/usr/src/etc</filename> to <filename>/etc</filename> and >- have it work. Some of these files must be <quote>installed</quote> >- first. This is because the <filename>/usr/src/etc</filename> >- directory <emphasis>is not</emphasis> a copy of what your >- <filename>/etc</filename> directory should look like. In addition, >- there are files that should be in <filename>/etc</filename> that are >- not in <filename>/usr/src/etc</filename>.</para> >+ <para>Frequently rebuilding world entails frequently >+ updating <filename>/etc</filename> >+ as well, which can be a bit of a chore.</para> > >- <para>If you are using &man.mergemaster.8; (as recommended), >- you can skip forward to the <link linkend="cutting-edge-rebooting">next >- section</link>.</para> >+ <para>To speed up this process, use the following >+ procedure to keep a copy of the last set of changed files >+ that were merged into <filename>/etc</filename>.</para> > >- <para>The simplest way to do this by hand is to install the >- files into a new directory, and then work through them looking >- for differences.</para> >+ <procedure> >+ <step> >+ <para>Make the world as normal. When updating >+ <filename>/etc</filename> and the >+ other directories, give the target directory a name >+ based on the current date:</para> > >- <warning> >- <title>Backup Your Existing <filename>/etc</filename></title> >+ <screen>&prompt.root; <userinput>mkdir /var/tmp/root-20130214</userinput> >+&prompt.root; <userinput>cd /usr/src/etc</userinput> >+&prompt.root; <userinput>make DESTDIR=/var/tmp/root-20130214 \ >+ distrib-dirs distribution</userinput></screen> >+ </step> > >- <para>Although, in theory, nothing is going to touch this directory >- automatically, it is always better to be sure. So copy your >- existing <filename>/etc</filename> directory somewhere safe. >- Something like:</para> >+ <step> >+ <para>Merge in the changes from this directory as >+ outlined above. <emphasis>Do not</emphasis> remove >+ the <filename>/var/tmp/root-20130214</filename> >+ directory when you have finished.</para> >+ </step> > >- <screen>&prompt.root; <userinput>cp -Rp /etc /etc.old</userinput></screen> >+ <step> >+ <para>After downloading the latest version of the >+ source and remaking it, follow step 1. Create a new >+ directory, which reflects the new date. This example >+ uses >+ <filename>/var/tmp/root-20130221</filename>.</para> >+ </step> > >- <para><option>-R</option> does a recursive copy, <option>-p</option> >- preserves times, ownerships on files and suchlike.</para> >- </warning> >+ <step> >+ <para>Use &man.diff.1; to see the differences that have >+ been made in the intervening week by creating a >+ recursive diff between the two directories:</para> > >- <para>You need to build a dummy set of directories to install the new >- <filename>/etc</filename> and other files into. >- <filename>/var/tmp/root</filename> is a reasonable choice, and >- there are a number of subdirectories required under this as >- well.</para> >+ <screen>&prompt.root; <userinput>cd /var/tmp</userinput> >+&prompt.root; <userinput>diff -r root-20130214 root-20130221</userinput></screen> > >- <screen>&prompt.root; <userinput>mkdir /var/tmp/root</userinput> >-&prompt.root; <userinput>cd /usr/src/etc</userinput> >-&prompt.root; <userinput>make DESTDIR=/var/tmp/root distrib-dirs distribution</userinput></screen> >+ <para>Typically, this will be a much smaller set of >+ differences than those between >+ <filename>/var/tmp/root-20130221/etc</filename> and >+ <filename>/etc</filename>. Because the set of >+ differences is smaller, it is easier to migrate those >+ changes across into <filename>/etc</filename>.</para> >+ </step> > >- <para>This will build the necessary directory structure and install the >- files. A lot of the subdirectories that have been created under >- <filename>/var/tmp/root</filename> are empty and should be deleted. >- The simplest way to do this is to:</para> >+ <step> >+ <para>When finished, remove the older of the two >+ <filename>/var/tmp/root-*</filename> >+ directories:</para> > >- <screen>&prompt.root; <userinput>cd /var/tmp/root</userinput> >-&prompt.root; <userinput>find -d . -type d | xargs rmdir 2>/dev/null</userinput></screen> >+ <screen>&prompt.root; <userinput>rm -rf /var/tmp/root-20130214</userinput></screen> >+ </step> > >- <para>This will remove all empty directories. (Standard error is >- redirected to <filename>/dev/null</filename> to prevent the warnings >- about the directories that are not empty.)</para> >+ <step> >+ <para>Repeat this process whenever merging >+ in changes to <filename>/etc</filename>.</para> >+ </step> >+ </procedure> > >- <para><filename>/var/tmp/root</filename> now contains all the files that >- should be placed in appropriate locations below >- <filename>/</filename>. You now have to go through each of these >- files, determining how they differ with your existing files.</para> >+ <para>Use &man.date.1; to automate the generation of the >+ directory names:</para> > >- <para>Note that some of the files that will have been installed in >- <filename>/var/tmp/root</filename> have a leading <quote>.</quote>. At the >- time of writing the only files like this are shell startup files in >- <filename>/var/tmp/root/</filename> and >- <filename>/var/tmp/root/root/</filename>, although there may be others >- (depending on when you are reading this). Make sure you use >- <command>ls -a</command> to catch them.</para> >+ <screen>&prompt.root; <userinput>mkdir /var/tmp/root-`date "+%Y%m%d"`</userinput></screen> >+ </tip> >+ --> >+ </sect2> > >- <para>The simplest way to do this is to use &man.diff.1; to compare the >- two files:</para> >+ <sect2 xml:id="make-delete-old"> >+ <info> >+ <title>Deleting Obsolete Files and Libraries</title> > >- <screen>&prompt.root; <userinput>diff /etc/shells /var/tmp/root/etc/shells</userinput></screen> >+ <authorgroup> >+ <author> >+ <personname> >+ <firstname>Anton</firstname> >+ <surname>Shterenlikht</surname> >+ </personname> >+ <contrib>Based on notes provided by </contrib> >+ </author> >+ </authorgroup> >+ </info> > >- <para>This will show you the differences between your >- <filename>/etc/shells</filename> file and the new >- <filename>/var/tmp/root/etc/shells</filename> file. Use these to decide whether to >- merge in changes that you have made or whether to copy over your old >- file.</para> >+ <indexterm> >+ <primary>Deleting obsolete files and directories</primary> >+ </indexterm> > >- <tip> >- <title>Name the New Root Directory >- (<filename>/var/tmp/root</filename>) with a Time Stamp, so You Can >- Easily Compare Differences Between Versions</title> >+ <para>As a part of the &os; development lifecycle, files and >+ their contents occasionally become obsolete. This may be >+ because functionality is implemented elsewhere, the version >+ number of the library has changed, or it was removed from the >+ system entirely. These obsoleted files, libraries, and >+ directories should be removed when updating the system. >+ This ensures that the system is not cluttered with old files >+ which take up unnecessary space on the storage and backup >+ media. Additionally, if the old library has a security or >+ stability issue, the system should be updated to the newer >+ library to keep it safe and to prevent crashes caused by the >+ old library. Files, directories, and libraries which are >+ considered obsolete are listed in >+ <filename>/usr/src/ObsoleteFiles.inc</filename>. The >+ following instructions should be used to remove obsolete files >+ during the system upgrade process.</para> > >- <para>Frequently rebuilding the world means that you have to update >- <filename>/etc</filename> frequently as well, which can be a bit of >- a chore.</para> >+ <para>After the <command>make installworld</command> and the >+ subsequent <command>mergemaster</command> have finished >+ successfully, check for obsolete files and libraries:</para> > >- <para>You can speed this process up by keeping a copy of the last set >- of changed files that you merged into <filename>/etc</filename>. >- The following procedure gives one idea of how to do this.</para> >+ <screen>&prompt.root; <userinput>cd /usr/src</userinput> >+&prompt.root; <userinput>make check-old</userinput></screen> > >- <procedure> >- <step> >- <para>Make the world as normal. When you want to update >- <filename>/etc</filename> and the other directories, give the >- target directory a name based on the current date. If you were >- doing this on the 14th of February 1998 you could do the >- following:</para> >+ <para>If any obsolete files are found, they can be deleted using >+ the following command:</para> > >- <screen>&prompt.root; <userinput>mkdir /var/tmp/root-19980214</userinput> >-&prompt.root; <userinput>cd /usr/src/etc</userinput> >-&prompt.root; <userinput>make DESTDIR=/var/tmp/root-19980214 \ >- distrib-dirs distribution</userinput></screen> >- </step> >+ <screen>&prompt.root; <userinput>make delete-old</userinput></screen> > >- <step> >- <para>Merge in the changes from this directory as outlined >- above.</para> >+ <para>A prompt is displayed before deleting each obsolete file. >+ To skip the prompt and let the system remove these files >+ automatically, use >+ <varname>BATCH_DELETE_OLD_FILES</varname>:</para> > >- <para><emphasis>Do not</emphasis> remove the >- <filename>/var/tmp/root-19980214</filename> directory when you >- have finished.</para> >- </step> >+ <screen>&prompt.root; <userinput>make -DBATCH_DELETE_OLD_FILES delete-old</userinput></screen> > >- <step> >- <para>When you have downloaded the latest version of the source >- and remade it, follow step 1. This will give you a new >- directory, which might be called >- <filename>/var/tmp/root-19980221</filename> (if you wait a week >- between doing updates).</para> >- </step> >+ <para>The same goal can be achieved by piping these commands >+ through <command>yes</command>:</para> > >- <step> >- <para>You can now see the differences that have been made in the >- intervening week using &man.diff.1; to create a recursive diff >- between the two directories:</para> >+ <screen>&prompt.root; <userinput>yes|make delete-old</userinput></screen> > >- <screen>&prompt.root; <userinput>cd /var/tmp</userinput> >-&prompt.root; <userinput>diff -r root-19980214 root-19980221</userinput></screen> >+ <warning> >+ <title>Warning</title> > >- <para>Typically, this will be a much smaller set of differences >- than those between >- <filename>/var/tmp/root-19980221/etc</filename> and >- <filename>/etc</filename>. Because the set of differences is >- smaller, it is easier to migrate those changes across into your >- <filename>/etc</filename> directory.</para> >- </step> >+ <para>Deleting obsolete files will break applications that >+ still depend on those obsolete files. This is especially >+ true for old libraries. In most cases, the programs, ports, >+ or libraries that used the old library need to be recompiled >+ before <command>make delete-old-libs</command> is >+ executed.</para> >+ </warning> > >- <step> >- <para>You can now remove the older of the two >- <filename>/var/tmp/root-*</filename> directories:</para> >+ <para>Utilities for checking shared library dependencies include >+ <package>sysutils/libchk</package> and >+ <package>sysutils/bsdadminscripts</package>.</para> > >- <screen>&prompt.root; <userinput>rm -rf /var/tmp/root-19980214</userinput></screen> >- </step> >+ <para>Obsolete shared libraries can conflict with newer >+ libraries, causing messages like these:</para> > >- <step> >- <para>Repeat this process every time you need to merge in changes >- to <filename>/etc</filename>.</para> >- </step> >- </procedure> >+ <screen>/usr/bin/ld: warning: libz.so.4, needed by /usr/local/lib/libtiff.so, may conflict with libz.so.5 >+/usr/bin/ld: warning: librpcsvc.so.4, needed by /usr/local/lib/libXext.so, may conflict with librpcsvc.so.5</screen> > >- <para>You can use &man.date.1; to automate the generation of the >- directory names:</para> >+ <para>To solve these problems, determine which port installed >+ the library:</para> > >- <screen>&prompt.root; <userinput>mkdir /var/tmp/root-`date "+%Y%m%d"`</userinput></screen> >- </tip> >- </sect3> >- </sect2> >+ <screen>&prompt.root; <userinput>pkg which /usr/local/lib/libtiff.so</userinput> >+ /usr/local/lib/libtiff.so was installed by package tiff-3.9.4 >+&prompt.root; <userinput>pkg which /usr/local/lib/libXext.so</userinput> >+ /usr/local/lib/libXext.so was installed by package libXext-1.1.1,1</screen> > >- <sect2 xml:id="cutting-edge-rebooting"> >- <title>Rebooting</title> >+ <para>Then deinstall, rebuild, and reinstall the port. To >+ automate this process, >+ <package>ports-mgmt/portmaster</package> can be used. After >+ all ports are rebuilt and no longer use the old libraries, >+ delete the old libraries using the following command:</para> > >- <para>You are now done. After you have verified that everything appears >- to be in the right place you can reboot the system. A simple >- &man.shutdown.8; should do it:</para> >+ <screen>&prompt.root; <userinput>make delete-old-libs</userinput></screen> > >- <screen>&prompt.root; <userinput>shutdown -r now</userinput></screen> >- </sect2> >+ <para>If something goes wrong, it is easy to rebuild a >+ particular piece of the system. For example, if >+ <filename>/etc/magic</filename> was accidentally deleted as >+ part of the upgrade or merge of <filename>/etc</filename>, >+ <command>file</command> will stop working. To fix this, >+ run:</para> > >- <sect2> >- <title>Finished</title> >- >- <para>You should now have successfully upgraded your &os; system. >- Congratulations.</para> >- >- <para>If things went slightly wrong, it is easy to rebuild a particular >- piece of the system. For example, if you accidentally deleted >- <filename>/etc/magic</filename> as part of the upgrade or merge of >- <filename>/etc</filename>, the &man.file.1; command will stop working. >- In this case, the fix would be to run:</para> >- >- <screen>&prompt.root; <userinput>cd /usr/src/usr.bin/file</userinput> >+ <screen>&prompt.root; <userinput>cd /usr/src/usr.bin/file</userinput> > &prompt.root; <userinput>make all install</userinput></screen> > </sect2> > >- <sect2> >- <title>Questions</title> >+ <sect2 xml:id="updating-questions"> >+ <title>Common Questions</title> > >- <qandaset> >- <qandaentry> >- <question> >- <para>Do I need to re-make the world for every change?</para> >- </question> >+ <variablelist> >+ <varlistentry> >+ <term>Do I need to re-make the world for every >+ change?</term> > >- <answer> >- <para>There is no easy answer to this one, as it depends on the >- nature of the change. For example, if you just ran <application>CVSup</application>, and >- it has shown the following files as being updated:</para> >+ <listitem> >+ <para>It depends upon the nature of the change. For >+ example, if <application>svn</application> only shows >+ the following files as being updated:</para> > > <screen><filename>src/games/cribbage/instr.c</filename> > <filename>src/games/sail/pl_main.c</filename> >@@ -1180,356 +1793,272 @@ > <filename>src/release/sysinstall/media.c</filename> > <filename>src/share/mk/bsd.port.mk</filename></screen> > >- <para>it probably is not worth rebuilding the entire world. >- You could just go to the appropriate sub-directories and >- <command>make all install</command>, and that's about it. But >- if something major changed, for example >- <filename>src/lib/libc/stdlib</filename> then you should either >- re-make the world, or at least those parts of it that are >- statically linked (as well as anything else you might have added >- that is statically linked).</para> >+ <para>it probably is not worth rebuilding the entire >+ world. Instead, go into the appropriate sub-directories >+ and run <command>make all install</command>. But if >+ something major changes, such as >+ <filename>src/lib/libc/stdlib</filename>, consider >+ rebuilding world.</para> > >- <para>At the end of the day, it is your call. You might be happy >- re-making the world every fortnight say, and let changes >- accumulate over that fortnight. Or you might want to re-make >- just those things that have changed, and be confident you can >- spot all the dependencies.</para> >+ <para>Some users rebuild world every fortnight and let >+ changes accumulate over that fortnight. Others only >+ re-make those things that have changed and are careful >+ to spot all the dependencies. It all depends on how >+ often a user wants to upgrade and whether they are >+ tracking &os.stable; or &os.current;.</para> >+ </listitem> >+ </varlistentry> > >- <para>And, of course, this all depends on how often you want to >- upgrade, and whether you are tracking &os.stable; or >- &os.current;.</para> >- </answer> >- </qandaentry> >+ <varlistentry> >+ <term>What would cause a compile to fail with lots of >+ signal 11<indexterm> >+ <primary>signal 11</primary> >+ </indexterm> >+ (or other signal number) errors?</term> > >- <qandaentry> >- <question> >- <para>My compile failed with lots of signal 11<indexterm> >- <primary>signal 11</primary></indexterm> (or other signal >- number) errors. What has happened?</para> >- </question> >+ <listitem> >+ <para>This normally indicates a hardware problem. >+ Building world is an effective way to stress test >+ hardware, especially memory. A sure indicator of a >+ hardware issue is when <application>make</application> >+ is restarted and it dies at a different point in the >+ process.</para> > >- <answer> >- <para>This is normally indicative of hardware problems. >- (Re)making the world is an effective way to stress test your >- hardware, and will frequently throw up memory problems. These >- normally manifest themselves as the compiler mysteriously dying >- on receipt of strange signals.</para> >+ <para>To resolve this error, swap out the components in >+ the machine, starting with RAM, to determine which >+ component is failing.</para> >+ </listitem> >+ </varlistentry> > >- <para>A sure indicator of this is if you can restart the make and >- it dies at a different point in the process.</para> >+ <varlistentry> >+ <term>Can <filename class="directory">/usr/obj</filename> >+ be removed when finished?</term> > >- <para>In this instance there is little you can do except start >- swapping around the components in your machine to determine >- which one is failing.</para> >- </answer> >- </qandaentry> >+ <listitem> >+ <para>This directory contains all the object files that >+ were produced during the compilation phase. Normally, >+ one of the first steps in the <command>make >+ buildworld</command> process is to remove this >+ directory and start afresh. Keeping >+ <filename>/usr/obj</filename> around when finished makes >+ little sense, and its removal frees up a approximately >+ 2GB of disk space.</para> >+ </listitem> >+ </varlistentry> > >- <qandaentry> >- <question> >- <para>Can I remove <filename>/usr/obj</filename> when I have >- finished?</para> >- </question> >+ <varlistentry> >+ <term>Can interrupted builds be resumed?</term> > >- <answer> >- <para>The short answer is yes.</para> >+ <listitem> >+ <para>This depends on how far into the process the >+ problem occurs. In general, <command>make >+ buildworld</command> builds new copies of essential >+ tools and the system libraries. These tools and >+ libraries are then installed, used to rebuild >+ themselves, and are installed again. The rest of the >+ system is then rebuilt with the new system >+ tools.</para> > >- <para><filename>/usr/obj</filename> contains all the object files >- that were produced during the compilation phase. Normally, one >- of the first steps in the <command>make buildworld</command> process is to >- remove this directory and start afresh. In this case, keeping >- <filename>/usr/obj</filename> around after you have finished >- makes little sense, and will free up a large chunk of disk space >- (currently about 340 MB).</para> >+ <para>During the last stage, it is fairly safe to run >+ these commands as they will not undo the work of the >+ previous <command>make buildworld</command>:</para> > >- <para>However, if you know what you are doing you can have >- <command>make buildworld</command> skip this step. This will make subsequent >- builds run much faster, since most of sources will not need to >- be recompiled. The flip side of this is that subtle dependency >- problems can creep in, causing your build to fail in odd ways. >- This frequently generates noise on the &os; mailing lists, >- when one person complains that their build has failed, not >- realizing that it is because they have tried to cut >- corners.</para> >- </answer> >- </qandaentry> >- >- <qandaentry> >- <question> >- <para>Can interrupted builds be resumed?</para> >- </question> >- >- <answer> >- <para>This depends on how far through the process you got before >- you found a problem.</para> >- >- <para><emphasis>In general</emphasis> (and this is not a hard and >- fast rule) the <command>make buildworld</command> process builds new >- copies of essential tools (such as &man.gcc.1;, and >- &man.make.1;) and the system libraries. These tools and >- libraries are then installed. The new tools and libraries are >- then used to rebuild themselves, and are installed again. The >- entire system (now including regular user programs, such as >- &man.ls.1; or &man.grep.1;) is then rebuilt with the new >- system files.</para> >- >- <para>If you are at the last stage, and you know it (because you >- have looked through the output that you were storing) then you >- can (fairly safely) do:</para> >- >- <screen><emphasis>… fix the problem …</emphasis> >-&prompt.root; <userinput>cd /usr/src</userinput> >+ <screen>&prompt.root; <userinput>cd /usr/src</userinput> > &prompt.root; <userinput>make -DNO_CLEAN all</userinput></screen> > >- <para>This will not undo the work of the previous >- <command>make buildworld</command>.</para> >+ <para>If this message appears:</para> > >- <para>If you see the message:</para> >- >- <screen>-------------------------------------------------------------- >+ <screen>-------------------------------------------------------------- > Building everything.. > --------------------------------------------------------------</screen> > >- <para>in the <command>make buildworld</command> output then it is >- probably fairly safe to do so.</para> >+ <para>in the <command>make buildworld</command> output, >+ it is probably fairly safe to do so.</para> > >- <para>If you do not see that message, or you are not sure, then it >- is always better to be safe than sorry, and restart the build >+ <para>If that message is not displayed, it is always >+ better to be safe than sorry and to restart the build > from scratch.</para> >- </answer> >- </qandaentry> >+ </listitem> >+ </varlistentry> > >- <qandaentry> >- <question> >- <para>How can I speed up making the world?</para> >- </question> >+ <varlistentry> >+ <term>Is it possible to speed up making the world?</term> > >- <answer> >- <itemizedlist> >- <listitem> >- <para>Run in single user mode.</para> >- </listitem> >+ <listitem> >+ <para>Several actions can speed up the build world >+ process. For example, the entire process can be run >+ from single-user mode. However, this will prevent users >+ from having access to the system until the process is >+ complete.</para> > >- <listitem> >- <para>Put the <filename>/usr/src</filename> and >- <filename>/usr/obj</filename> directories on separate >- file systems held on separate disks. If possible, put these >- disks on separate disk controllers.</para> >- </listitem> >+ <para>Careful file system design or the use of ZFS >+ datasets can make a difference. Consider putting >+ <filename class="directory">/usr/src</filename> and >+ <filename class="directory">/usr/obj</filename> on >+ separate file systems. If possible, place the file >+ systems on separate disks on separate disk controllers. >+ When mounting <filename >+ class="directory">/usr/src</filename>, use >+ <option>noatime</option> which prevents the file system >+ from recording the file access time. If <filename >+ class="directory">/usr/src</filename> is not on its >+ own file system, consider remounting <filename >+ class="directory">/usr</filename> with >+ <option>noatime</option>.</para> > >- <listitem> >- <para>Better still, put these file systems across multiple >- disks using the &man.ccd.4; (concatenated disk >- driver) device.</para> >- </listitem> >+ <para>The file system holding <filename >+ class="directory">/usr/obj</filename> can be mounted >+ or remounted with <option>async</option> so that disk >+ writes happen asynchronously. The write completes >+ immediately, and the data is written to the disk a few >+ seconds later. This allows writes to be clustered >+ together, and can provide a dramatic performance >+ boost.</para> > >- <listitem> >- <para>Turn off profiling (set <quote>NO_PROFILE=true</quote> in >- <filename>/etc/make.conf</filename>). You almost certainly >- do not need it.</para> >- </listitem> >+ <warning> >+ <para>Keep in mind that this option makes the file >+ system more fragile. With this option, there is an >+ increased chance that, should power fail, the file >+ system will be in an unrecoverable state when the >+ machine restarts.</para> > >- <listitem> >- <para>Also in <filename>/etc/make.conf</filename>, set >- <varname>CFLAGS</varname> to something like <option>-O >- -pipe</option>. The optimization <option>-O2</option> is much >- slower, and the optimization difference between >- <option>-O</option> and <option>-O2</option> is normally >- negligible. <option>-pipe</option> lets the compiler use >- pipes rather than temporary files for communication, which >- saves disk access (at the expense of memory).</para> >- </listitem> >+ <para>If <filename>/usr/obj</filename> is the only >+ directory on this file system, this is not a problem. >+ If you have other, valuable data on the same file >+ system, ensure that there are verified backups before >+ enabling this option.</para> >+ </warning> > >- <listitem> >- <para>Pass the <option>-j<replaceable>n</replaceable></option> option to &man.make.1; to >- run multiple processes in parallel. This usually helps >- regardless of whether you have a single or a multi processor >- machine.</para> >- </listitem> >+ <para>Turn off profiling by setting >+ <quote>NO_PROFILE=true</quote> in >+ <filename>/etc/make.conf</filename>.</para> > >- <listitem><para>The file system holding >- <filename>/usr/src</filename> can be mounted (or remounted) >- with the <option>noatime</option> option. This prevents the >- file system from recording the file access time. You probably >- do not need this information anyway.</para> >+ <para>Pass <option>-j<replaceable>n</replaceable></option> >+ to &man.make.1; to run multiple processes in parallel. >+ This usually helps on both single- and multi-processor >+ machines.</para> >+ </listitem> >+ </varlistentry> > >- <screen>&prompt.root; <userinput>mount -u -o noatime /usr/src</userinput></screen> >+ <varlistentry> >+ <term>What if something goes wrong?</term> > >- <warning> >- <para>The example assumes <filename>/usr/src</filename> is >- on its own file system. If it is not (if it is a part of >- <filename>/usr</filename> for example) then you will >- need to use that file system mount point, and not >- <filename>/usr/src</filename>.</para> >- </warning> >- </listitem> >+ <listitem> >+ <para>First, make absolutely sure that the environment has >+ no extraneous cruft from earlier builds:</para> > >- <listitem> >- <para>The file system holding <filename>/usr/obj</filename> can >- be mounted (or remounted) with the <option>async</option> >- option. This causes disk writes to happen asynchronously. >- In other words, the write completes immediately, and the >- data is written to the disk a few seconds later. This >- allows writes to be clustered together, and can be a >- dramatic performance boost.</para> >- >- <warning> >- <para>Keep in mind that this option makes your file system >- more fragile. With this option there is an increased >- chance that, should power fail, the file system will be in >- an unrecoverable state when the machine restarts.</para> >- >- <para>If <filename>/usr/obj</filename> is the only thing on >- this file system then it is not a problem. If you have >- other, valuable data on the same file system then ensure >- your backups are fresh before you enable this >- option.</para> >- </warning> >- >- <screen>&prompt.root; <userinput>mount -u -o async /usr/obj</userinput></screen> >- >- <warning> >- <para>As above, if <filename>/usr/obj</filename> is not on >- its own file system, replace it in the example with the >- name of the appropriate mount point.</para> >- </warning> >- </listitem> >- </itemizedlist> >- </answer> >- </qandaentry> >- >- <qandaentry> >- <question> >- <para>What do I do if something goes wrong?</para> >- </question> >- >- <answer> >- <para>Make absolutely sure your environment has no >- extraneous cruft from earlier builds. This is simple >- enough.</para> >- >- <screen>&prompt.root; <userinput>chflags -R noschg /usr/obj/usr</userinput> >+ <screen>&prompt.root; <userinput>chflags -R noschg /usr/obj/usr</userinput> > &prompt.root; <userinput>rm -rf /usr/obj/usr</userinput> > &prompt.root; <userinput>cd /usr/src</userinput> > &prompt.root; <userinput>make cleandir</userinput> > &prompt.root; <userinput>make cleandir</userinput></screen> > >- <para>Yes, <command>make cleandir</command> really should >- be run twice.</para> >+ <para>Yes, <command>make cleandir</command> really should >+ be run twice.</para> > >- <para>Then restart the whole process, starting >- with <command>make buildworld</command>.</para> >+ <para>Then, restart the whole process, starting with >+ <command>make buildworld</command>.</para> > >- <para>If you still have problems, send the error and the >- output of <command>uname -a</command> to &a.questions;. >- Be prepared to answer other questions about your >- setup!</para> >- </answer> >- </qandaentry> >- </qandaset> >+ <para>If problems persist, send the error and the output >+ of <command>uname -a</command> to &a.questions;. Be >+ prepared to answer other questions about the >+ setup!</para> >+ </listitem> >+ </varlistentry> >+ </variablelist> > </sect2> > </sect1> > > <sect1 xml:id="small-lan"> >- <info><title>Tracking for Multiple Machines</title> >+ <info> >+ <title>追蹤å¤è¿½è¹¤å¤é¨æ©å¨</title> >+ > <authorgroup> >- <author><personname><firstname>Mike</firstname><surname>Meyer</surname></personname><contrib>Contributed by </contrib></author> >+ <author> >+ <personname> >+ <firstname>Mike</firstname> >+ <surname>Meyer</surname> >+ </personname> >+ <contrib>Contributed by </contrib> >+ </author> > </authorgroup> > </info> >- >+ > <indexterm> > <primary>NFS</primary> >- <secondary>installing multiple machines</secondary> >+ <secondary>å®è£å¤é¨æ©å¨</secondary> > </indexterm> > >- <para>If you have multiple machines that you want to track the >- same source tree, then having all of them download sources and >- rebuild everything seems like a waste of resources: disk space, >- network bandwidth, and CPU cycles. It is, and the solution is >- to have one machine do most of the work, while the rest of the >- machines mount that work via NFS. This section outlines a >- method of doing so.</para> >+ <para>ç¶æå¤é¨æ©å¨éè¦è¿½è¹¤åä¸ååå§ç¢¼æ¨¹ï¼ >+ ææµªè²»ç£ç¢ç©ºéï¼ç¶²è·¯é »å¯¬ï¼å >+ <acronym>ä¸å¤®èçå¨</acronym>卿ä¾è®æ¯å系統ä¸è¼åå§ç¢¼åç·¨è¯æææ±è¥¿ã >+ è§£æ±ºæ¹æ³æ¯æè§£æ±ºæ¹æ³æ¯æä¸å°æ©å¨å大é¨ä»½çå·¥ä½ï¼å©ä¸çæ©å¨ç¶ç± >+ <acronym>NFS</acronym>便è¼éåå·¥ä½ãéä¸ç¯æ¦è¿°äºä¸å妿¤åçæ¹æ³ã >+ æ´å¤éæ¼ä½¿ç¨ <acronym>NFS</acronym>çè³è¨ï¼è«åè<xref >+ linkend="network-nfs"/>ã</para> > >- <sect2 xml:id="small-lan-preliminaries"> >- <title>Preliminaries</title> >+ <para>First, identify a set of machines which will run the same >+ set of binaries, known as a <firstterm>build set</firstterm>. >+ Each machine can have a custom kernel, but will run the same >+ userland binaries. From that set, choose a machine to be the >+ <firstterm>build machine</firstterm> that the world and kernel >+ are built on. Ideally, this is a fast machine that has >+ sufficient spare <acronym>CPU</acronym> to run <command>make >+ buildworld</command> and <command>make >+ buildkernel</command>.</para> > >- <para>First, identify a set of machines that is going to run >- the same set of binaries, which we will call a >- <emphasis>build set</emphasis>. Each machine can have a >- custom kernel, but they will be running the same userland >- binaries. From that set, choose a machine to be the >- <emphasis>build machine</emphasis>. It is going to be the >- machine that the world and kernel are built on. Ideally, it >- should be a fast machine that has sufficient spare CPU to >- run <command>make buildworld</command> and >- <command>make buildkernel</command>. You will also want to >- choose a machine to be the <emphasis>test >- machine</emphasis>, which will test software updates before they >- are put into production. This <emphasis>must</emphasis> be a >- machine that you can afford to have down for an extended >- period of time. It can be the build machine, but need not be.</para> >+ <para>Select a machine to be the <firstterm>test >+ machine</firstterm>, which will test software updates before >+ they are put into production. This <emphasis>must</emphasis> be >+ a machine that can afford to be down for an extended period of >+ time. It can be the build machine, but need not be.</para> > >- <para>All the machines in this build set need to mount >- <filename>/usr/obj</filename> and >- <filename>/usr/src</filename> from the same machine, and at >- the same point. Ideally, those are on two different drives >- on the build machine, but they can be NFS mounted on that machine >- as well. If you have multiple build sets, >- <filename>/usr/src</filename> should be on one build machine, and >- NFS mounted on the rest.</para> >+ <para>All the machines in this build set need to mount >+ <filename>/usr/obj</filename> and <filename>/usr/src</filename> >+ from the build machine via <acronym>NFS</acronym>. For multiple >+ build sets, <filename>/usr/src</filename> should be on one build >+ machine, and <acronym>NFS</acronym> mounted on the rest.</para> > >- <para>Finally make sure that >- <filename>/etc/make.conf</filename> on all the machines in >- the build set agrees with the build machine. That means that >- the build machine must build all the parts of the base >- system that any machine in the build set is going to >- install. Also, each build machine should have its kernel >- name set with <varname>KERNCONF</varname> in >- <filename>/etc/make.conf</filename>, and the build machine >- should list them all in <varname>KERNCONF</varname>, listing >- its own kernel first. The build machine must have the kernel >- configuration files for each machine in >- <filename>/usr/src/sys/arch/conf</filename> >- if it is going to build their kernels.</para> >- </sect2> >+ <para>Ensure that <filename>/etc/make.conf</filename> and >+ <filename>/etc/src.conf</filename> on all the machines in the >+ build set agree with the build machine. That means that the >+ build machine must build all the parts of the base system that >+ any machine in the build set is going to install. Also, each >+ build machine should have its kernel name set with >+ <varname>KERNCONF</varname> in >+ <filename>/etc/make.conf</filename>, and the build machine >+ should list them all in its <varname>KERNCONF</varname>, >+ listing its own kernel first. The build machine must have the >+ kernel configuration files for each machine in its <filename >+ class="directory">/usr/src/sys/<replaceable>arch</replaceable>/conf</filename>.</para> > >- <sect2> >- <title>The Base System</title> >+ <para>On the build machine, build the kernel and world as >+ described in <xref linkend="makeworld"/>, but do not install >+ anything on the build machine. Instead, install the built >+ kernel on the test machine. On the test machine, mount >+ <filename>/usr/src</filename> and >+ <filename>/usr/obj</filename> via <acronym>NFS</acronym>. Then, >+ run <command>shutdown now</command> to go to single-user mode in >+ order to install the new kernel and world and run >+ <command>mergemaster</command> as usual. When done, reboot to >+ return to normal multi-user operations.</para> > >- <para>Now that all that is done, you are ready to build >- everything. Build the kernel and world as described in <xref linkend="make-buildworld"/> on the build machine, >- but do not install anything. After the build has finished, go >- to the test machine, and install the kernel you just >- built. If this machine mounts <filename>/usr/src</filename> >- and <filename>/usr/obj</filename> via NFS, when you reboot >- to single user you will need to enable the network and mount >- them. The easiest way to do this is to boot to multi-user, >- then run <command>shutdown now</command> to go to single user >- mode. Once there, you can install the new kernel and world and run >- <command>mergemaster</command> just as you normally would. When >- done, reboot to return to normal multi-user operations for this >- machine.</para> >+ <para>After verifying that everything on the test machine is >+ working properly, use the same procedure to install the new >+ software on each of the other machines in the build set.</para> > >- <para>After you are certain that everything on the test >- machine is working properly, use the same procedure to >- install the new software on each of the other machines in >- the build set.</para> >- </sect2> >- >- <sect2> >- <title>Ports</title> >- >- <para>The same ideas can be used for the ports tree. The first >- critical step is mounting <filename>/usr/ports</filename> from >- the same machine to all the machines in the build set. You can >- then set up <filename>/etc/make.conf</filename> properly to share >- distfiles. You should set <varname>DISTDIR</varname> to a >- common shared directory that is writable by whichever user >- <systemitem class="username">root</systemitem> is mapped to by your NFS mounts. Each >- machine should set <varname>WRKDIRPREFIX</varname> to a >- local build directory. Finally, if you are going to be >- building and distributing packages, you should set >- <varname>PACKAGES</varname> to a directory similar to >- <varname>DISTDIR</varname>.</para> >- </sect2> >+ <para>The same methodology can be used for the ports tree. The >+ first step is to share <filename>/usr/ports</filename> via >+ <acronym>NFS</acronym> to all the machines in the build set. To >+ configure <filename>/etc/make.conf</filename> to share >+ distfiles, set <varname>DISTDIR</varname> to a common shared >+ directory that is writable by whichever user <systemitem >+ class="username">root</systemitem> is mapped to by the >+ <acronym>NFS</acronym> mount. Each machine should set >+ <varname>WRKDIRPREFIX</varname> to a local build directory, if >+ ports are to be built locally. Alternately, if the build system >+ is to build and distribute packages to the machines in the build >+ set, set <varname>PACKAGES</varname> on the build system to a >+ directory similar to <varname>DISTDIR</varname>.</para> > </sect1> > </chapter>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 193066
: 146378