Convert zh_TW from Big5 to UTF-8.

Approved by:	bcr
projects/sysctl^2
Li-Wen Hsu 10 years ago
parent 536050cea8
commit 163ba6b752
Notes: svn2git 3 years ago
svn path=/head/; revision=44974

@ -28,7 +28,7 @@ SUBDIR+= ru_RU.KOI8-R
SUBDIR+= sr_YU.ISO8859-2
SUBDIR+= tr_TR.ISO8859-9
SUBDIR+= zh_CN.UTF-8
SUBDIR+= zh_TW.Big5
SUBDIR+= zh_TW.UTF-8
.endif
SUBDIR+= share

@ -792,9 +792,9 @@
</row>
<row>
<entry><literal>zh_TW.Big5</literal></entry>
<entry><literal>zh_TW.UTF-8</literal></entry>
<entry>Traditional Chinese (Taiwan, Big5
<entry>Traditional Chinese (Taiwan, UTF-8
encoding)</entry>
</row>
</tbody>

@ -100,7 +100,7 @@
<entry>One directory exists for each available translation
and encoding of the documentation, for example
<filename>en_US.ISO8859-1/</filename>
and <filename>zh_TW.Big5/</filename>.
and <filename>zh_TW.UTF-8/</filename>.
The names are long, but by fully specifying the language
and encoding we prevent any future headaches when a
translation team wants to provide documentation in the

@ -103,7 +103,7 @@ WEB_LANG= da_DK.ISO8859-1 \
pt_BR.ISO8859-1 \
ru_RU.KOI8-R \
zh_CN.UTF-8 \
zh_TW.Big5
zh_TW.UTF-8
.endif
.if !defined(ENGLISH_ONLY) || empty(ENGLISH_ONLY)
.for _D in ${WEB_LANG}

@ -1,5 +0,0 @@
#
# $FreeBSD$
#
DESTDIR?= ${DOCDIR}/zh_TW.Big5/articles/${.CURDIR:T}

@ -1,465 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!--
The FreeBSD Documentation Project
The FreeBSD Chinese (Traditional) Documentation Project
Original Revision: 1.506
Chased Revision: 1.508
-->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
<info><title>幫助 FreeBSD</title>
<abstract>
<para>無論是個人或是各種組織,如果希望為 FreeBSD 提供幫助,都可以在本文中找到合適的方法。</para>
</abstract>
<authorgroup>
<author><personname><firstname>Jordan</firstname><surname>Hubbard</surname></personname><contrib>原著: </contrib></author>
</authorgroup>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.ieee;
&tm-attrib.general;
</legalnotice>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
</info>
<indexterm><primary>貢獻</primary></indexterm>
<para>你希望替 FreeBSD 做點什麼嗎太好了我們歡迎你。FreeBSD
正是有賴於廣大使用者的貢獻才得以發展壯大的。我們不僅非常感謝您所做的貢獻,而且,這些工作對於 FreeBSD 的持續發展也至關重要。</para>
<para>也許與您想像的不同,您既不必得是一名出色的 Programmer也無須和
FreeBSD core team 成員有很好的私交,我們會一視同仁的對待您的工作。
FreeBSD 的開發人員遍布全球,大家技術專長各異,年齡分布也非常廣泛。
然而,每天我們都在面對持續增加的工作,而苦於沒有足夠的人手,因此我們隨時歡迎您的幫助。</para>
<para>FreeBSD 計劃所處理的是一個完整的作業系統環境,而不只是一個 kernel 或是一些零散的工具包。
因此,我們的 <filename>TODO</filename> 待辦任務列表裡包含各式各樣的工作:
從文件、使用者測試、demo到系統安裝程式和更專業的 kernel 開發。
因此無論您的技術水準如何,從事何種領域,都可以幫助這個計劃。</para>
<para>我們鼓勵從事和 FreeBSD 相關工作的企業和我們聯繫。
您需要一些特殊的擴展來使您的產品運轉起來嗎?
您會發現我們很樂意答應您的請求,除非是特別稀奇古怪的。
您是否正從事相關的增值業務? 讓我們來幫助您吧,
我們也許可以在某些方面相互合作。
自由軟體界正在努力打破舊有的框框(像是關於軟體開發、銷售和維護)
我們希望懇請您至少能給它一次機會。</para>
<sect1 xml:id="contrib-what">
<title>我們的需求</title>
<para>下面列出了一些需要完成的任務和子計劃,
它們代表 <filename>TODO</filename>(待辦任務列表)
列表的意思,以及使用者的要求。</para>
<sect2 xml:id="non-programmer-tasks">
<title>正在進行中的任務(非程式開發人員)</title>
<para>很多參加 FreeBSD 計劃的人不是 Programmer。
這個計劃裡有文件撰寫者、網頁設計師、以及技術支援人員。
對於這些義工來說,他們只需要貢獻一些時間,並且具有學習的意願。</para>
<orderedlist>
<listitem>
<para>您可以時常翻閱 FAQ 和手冊(Handbook)
,如果發現有解釋不清楚的地方,或是不合時宜的文件,甚至完全不正確的地方,
都請告訴我們。當然,若能順手把他們修正,並把勘誤寄給我們,那就更好了。:)
(SGML 其實並不難學,但我們也不反對您直接提交一般 ASCII 的純文字版本)。</para>
</listitem>
<listitem>
<para>幫助我們把 FreeBSD 文件翻譯成你的母語。
如果你的母語版本已經存在了,
也可以翻譯一些額外的文件,或者檢查那些已有的文件是否為最新版。
您可以先簡單看看 FreeBSD 文件計劃中有關 <link xlink:href="&url.books.fdp-primer;/translations.html">翻譯時的常見問題</link>
參加翻譯工作,並不是說您要孤軍奮戰翻譯所有 FreeBSD 文件。
身為義工,要做多少工作完全取決於您的意願。一旦某個人開始翻譯了,
之後幾乎一定會有其他人參與到這些工作中來。
如果時間有限,或者精力不夠去翻譯整份文件,那可以首先去翻譯安裝指南。</para>
</listitem>
<listitem>
<para>閱讀 &a.questions; 並偶爾翻閱(甚至有規律地這樣做) &ng.misc;
。與別人分享您的專業知識,
並幫助他們解決問題,是件令人愉悅的事情;
有時候,您甚至可以在這個過程中學到一些新東西!
這些論壇有時也會為您激發出一些不錯的想法。</para>
</listitem>
</orderedlist>
</sect2>
<sect2 xml:id="ongoing-programmer-tasks">
<title>正在進行中的任務(程式開發人員)</title>
<para>列在這裡的大部分任務都需要您投入可觀的時間,或者需要您在 FreeBSD kernel
方面有豐富的知識,或者兩者都要。當然這裡也有很多重要的任務,適合像是
<quote>weekend hackers</quote> 這類只用週末就可以搞定的 Hacker。</para>
<orderedlist>
<listitem>
<para>如果您正在跑的是 FreeBSD -CURRENT 版本,並且網路速度還不錯,
那麼可以到 <systemitem class="fqdomainname">current.FreeBSD.org</systemitem>
這台每天會有一個新版本 &mdash; 如果您有空,
您可以三不五時下載並安裝,
其間如果出了什麼問題,請告訴我們。</para>
</listitem>
<listitem>
<para>閱讀 &a.bugs;。這些問題,或許您能提供有建設性意義的意見,
或者幫忙測試一些 patch 。此外,甚至可以嘗試修正其中的一些問題。</para>
</listitem>
<listitem>
<para>如果您知道有一些修正已經在 -CURRENT 上成功地使用,
但在經過一段時間(通常是 2 週左右)之後,仍未合併到 -STABLE
(這步驟就是 MFC -- Merged From Current),那麼可以給相關的 committer 人員發封禮貌的提醒信。</para>
</listitem>
<listitem>
<para>將第三方(3rd party)軟體加入到原始碼中的
<filename>src/contrib</filename> 目錄。</para>
</listitem>
<listitem>
<para>確保 <filename>src/contrib</filename> 中的原始碼是最新的。</para>
</listitem>
<listitem>
<para>編譯原始碼(或是部分原始碼)時,請改用更高的警告等級(warning level)
以便偵錯(debug)用,並在完成測試、確認正常完畢之後,清除這些編譯的警告等級。</para>
</listitem>
<listitem>
<para>更新那些在 ports 中使用過時的東西,
例如 <function>gets()</function> 或包含
<filename>malloc.h</filename> 所產生的警告。</para>
</listitem>
<listitem>
<para>如果有為 ports 作了任何修正,
請記得將您的 patch 發給原作者 (這樣下次升級時,您的工作會變得輕鬆一些)。</para>
</listitem>
<listitem>
<para>先取得正式的標準,如 &posix; 的副本。
<link xlink:href="&url.base;/projects/c99/index.html">FreeBSD
C99 &amp; POSIX 標準相容計劃</link> 網站上,可以得到相關鏈接。
請將 FreeBSD 的行為與上述的標準進行比較,若所得結果與 C99 &amp; POSIX 標準不同的話,
特別是那些細節地方的微小差異,請發一個關於它的 PR (問題報告)。
如果可能,請指出如何修正它,並隨 PR 提交 patch 。
如果您認為標準有問題,請向這些規格標準的相關團體,請求對其進行重新的考慮。</para>
</listitem>
<listitem>
<para>為這份列表提供更多建議!</para>
</listitem>
</orderedlist>
</sect2>
<sect2>
<title>查閱整個 PR 資料庫</title>
<indexterm><primary>問題報告資料庫</primary></indexterm>
<para><link xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi">FreeBSD
PR 列表</link> 這裡會顯示目前所有 PR 的問題狀態,以及由
FreeBSD 使用者提交的改進建議。
PR 資料庫同時包括了開發人員和非開發人員的任務。
查看那些尚未解決的 PR並看看是否有您感興趣的任務。
這其中可能有一些是非常簡單的問題,只需要看一看並確認 PR 是正確的。
另外一些可能會非常複雜,或者完全未附任何修正。</para>
<para>首先看一看那些還沒有人接手的 PR。
如果 PR 已經分配給了其它人,但看起來是您能夠處理的,
您可以寄信給那個人,並詢問您是否可以提供幫助 &mdash;
他們可能已經有可供測試的 patch ,或有一些可供討論的意見。</para>
</sect2>
<sect2>
<title><quote>Ideas</quote> 中選一項</title>
<para><link xlink:href="&url.base;/projects/ideas/">&os; list of
projects and ideas for volunteers</link> 同樣地開放給有意願參與
&os; 計劃的人。
這份清單將持續地更新,同時提供各個項目的資訊給所有人
(不論是否為程式設計人員)。</para>
</sect2>
</sect1>
<sect1 xml:id="contrib-how">
<title>如何提供幫助</title>
<para>基本上可以分為以下 5 種方式:</para>
<sect2 xml:id="contrib-general">
<title>錯誤報告和意見發表</title>
<para>通常,<emphasis>一般</emphasis>
的技術想法和建議應該發到 &a.hackers;
同樣地,對於這些東西有興趣的人 (當然,
他們同時還要能夠容忍 <emphasis>大量的</emphasis> 郵件!)
可以考慮訂閱 &a.hackers;
請參閱 <link xlink:href="&url.books.handbook;/eresources.html#ERESOURCES-MAIL">FreeBSD
使用手冊</link> 以了解關於這個郵遞論壇,
以及其它郵遞論壇的詳細情況。</para>
<para>如果您發現了 bug 或者想要提交某些修改,
請透過 &man.send-pr.1; 程式或使用
<link xlink:href="&url.base;/send-pr.html">網頁介面
的回報</link> 來提交。請試著填寫 PR 的每個項目。
一般來說,除非 patch 檔超過 65 KB我們建議在 PR 中直接附上 patch 就可以了。
若可直接套用 patch 到原始碼的話,那麼建議在 PR 的
Synopsis 欄位註明 <literal>[PATCH]</literal>
對了,在附上 patch 時,請 <emphasis>不要</emphasis>
透過滑鼠的『複製、貼上』來進行,因為這樣做會把 Tab 變成空格,
會導致 patch 就不能用了。如果 patch 超過 20KB
請考慮壓縮它並使用 &man.uuencode.1; 來進行編碼。</para>
<para>在寫完 PR 之後,您會收到一封確認郵件以及事件追蹤編號。
請保留這個編號,因為事後可以用這編號發信到 &a.bugfollowup;
來回覆、提供關於該事件的後續資料。您需要做的是將編號放到郵件的標題中,
例如 <literal>"Re:
kern/3377"</literal>
若是同一問題的回覆方面,應該透過這種方式來進行。</para>
<para>如果您在一段時間 (超過 3 天甚至 1 週,這取決於您的郵件服務)之後仍然沒有收到確認信
或者由於一些原因無法使用 &man.send-pr.1; 程式,
則可以發信到 &a.bugs; 來請別人幫你代寄。</para>
<para>請參閱 <link xlink:href="&url.articles.problem-reports;/article.html">這篇文章</link>
了解如何撰寫好的問題報告。</para>
</sect2>
<sect2>
<title>對於文件的修訂</title>
<indexterm><primary>提交文件</primary></indexterm>
<para>文件的修改方面,是由 &a.doc; 來審查。
請參閱 <link xlink:href="&url.books.fdp-primer;/index.html">FreeBSD Documentation Project Primer</link>
來獲得完整的教學細節。
請按照 <xref linkend="contrib-general"/> 中介紹的方法使用 &man.send-pr.1;
來提交新的文件,或者改善現有的文件 (哪怕是很小的改進也是歡迎的!)。</para>
</sect2>
<sect2>
<title>對於現有原始碼的修改</title>
<indexterm><primary>FreeBSD-CURRENT</primary></indexterm>
<para>在現有原始碼上進行修改或增加功能,在某種程度上是需要更多技巧的事,
並且還跟您對於目前 FreeBSD 的開發現狀了解程度有關。
有多種方式可以得到被稱作 <quote>FreeBSD-CURRENT</quote>
的 FreeBSD 開發版本。
請參閱 FreeBSD 使用手冊的 <link xlink:href=" &url.books.handbook;/current-stable.html">相關部份</link> ,來了解使用 FreeBSD-CURRENT 的詳情。</para>
<para>在舊的原始碼上進行修改,則通常可能原始碼已過時,
或與新的版本差異太大而無法被重新整合到 FreeBSD 中。
如果您有訂 &a.announce; 以及 &a.current; 的話,
則可以透過它們來大致了解目前的開發狀態。</para>
<para>若您能夠儘量以最新的原始碼來進行您的修改,
則下一步要做的事情就是產生您所修改的 diff 檔,
並將它發給 FreeBSD 的維護人員。這項工作可以透過 &man.diff.1;
命令來完成。</para>
<para>提交 patch 時,建議 &man.diff.1; 格式採用 unified diff (可以用 <command>diff
-u</command> 來產生)。不過,如果您修改了大量的原始碼,
則使用 <command>diff -c</command> 來生成的 context diff
的 diff 可能更容易閱讀,因而推薦使用。一般而言,大都是採用 <command>diff -ruN</command> 即可。</para>
<indexterm>
<primary><command>diff</command></primary>
</indexterm>
<para>例如:</para>
<para>
<screen>&prompt.user; <userinput>diff -c oldfile newfile</userinput></screen>
<screen>&prompt.user; <userinput>diff -c -r olddir newdir</userinput></screen>
將會對特定目錄,產生 context 的 diff 檔。</para>
<para>或者像是...
<screen>&prompt.user; <userinput>diff -u oldfile newfile</userinput></screen>
<screen>&prompt.user; <userinput>diff -u -r olddir newdir</userinput></screen>
將產生一樣的 diff ,但是格式為 unified 。</para>
<para>更多的細節部份,請參閱 &man.diff.1;</para>
<para>一旦您使用 &man.diff.1; 來產生 diff 檔 (可以使用
&man.patch.1; 命令來測試一下),就可以提交它們,以便被 FreeBSD 收錄。
透過使用 <xref linkend="contrib-general"/>
中所介紹的 &man.send-pr.1; 程式就可以完成這項工作。
請注意:不要只把 diff 檔發到 &a.hackers;
否則它們可能會被遺忘! 我們會非常感激您提交的修改
(這是一個義工計劃!) 因為我們都很忙,
因此有時不一定能夠立即修正問題,但 PR 資料庫將一直保持著這些記錄,
因此只要有人有了時間它們就能被改正了。
如果您的問題報告中包括 patch ,不要忘了在標題加上
<literal>[PATCH]</literal> 來強調一下。</para>
<indexterm>
<primary><command>uuencode</command></primary>
</indexterm>
<para>如果您認為合適 (例如增、刪檔案或更改檔名)
還可以考慮使用
<command>tar</command> 來將檔案打包,然後用 &man.uuencode.1;
來編碼。此外,也可以用 &man.shar.1; 產生的方式。</para>
<para>如果您的修改可能存在潛在的爭議,例如,
您不確定相關的版權問題,或者感覺需要經過更嚴格的復審才可以發佈它們,
則應直接發給 &a.core;,而不是透過 &man.send-pr.1; 來發送。
&a.core; 這小組成員大多從事 FreeBSD 的日常工作。
需要注意的是,這個小組也因此十分忙碌,
因此只有在非常必要的時候,才應寫信給他們。</para>
<para>請參考 &man.intro.9;&man.style.9; 以了解關於撰寫程式碼的風格偏好。
若能在送出相關程式碼之前,先了解這些,那對大家來說將是極大的幫助。</para>
</sect2>
<sect2>
<title>新原始碼或重要的加值軟體包</title>
<para>如果您打算提供規模較大的原始碼,或者為 FreeBSD 增加重要的新功能,
則可能必須將它們透過 uuencode 進行編碼,或傳到某個 Web 或
FTP 站點,以便更多的人能夠得到它。如果您沒有這樣的主機,
請到相關的 FreeBSD 郵遞論壇提出,看看是否有人願意幫您放置它們。</para>
<para>對於大量的原始碼而言,關於版權的問題肯定會被提出。
FreeBSD 基本系統中能夠使用的版權聲明包括:</para>
<orderedlist>
<listitem>
<para>BSD<indexterm><primary>BSD 版權聲明</primary></indexterm> 版權。我們傾向於使用這類授權的原始碼,
因為它『不附加多餘的條件』,因而更能夠吸引商業企業使用。
FreeBSD 並不反對商業公司使用它的原始碼,相反,
我們積極地鼓勵商業公司使用我們的原始碼,
當然,如果它們若最終能把部分原始碼,重新捐贈給 FreeBSD 就更好了。</para>
</listitem>
<listitem>
<para>GNU General Public License或簡稱 <quote>GPL</quote><indexterm><primary>GPL</primary><see>GNU General Public License</see></indexterm><indexterm><primary>GNU General Public License</primary></indexterm>
我們並不很歡迎使用這樣授權的原始碼,
因為商業公司使用它需要做更多的工作。不過,由於很多使用
GPL 授權的原始碼目前是無法避免的 (compiler, assembler, text formatter等等)
,拒絕使用所有採用這樣授權的軟體是很不明智的。
採用 GPL 授權的原始碼會被放到原始碼的一些特定的位置,例如
<filename>/sys/gnu</filename>
<filename>/usr/src/gnu</filename>,以便那些認為 GPL
可能會造成麻煩的人能夠作出適當的判斷。</para>
</listitem>
</orderedlist>
<para>使用其它授權的原始碼在進入 FreeBSD 之前必須經過慎重的復審和考慮。
採用包含嚴厲限制的商業授權的原始碼,一般來說會被拒絕,
但我們鼓勵這些原始碼的作者,透過自己的管道來發布它們。</para>
<para>若要在您的成果上加入 <quote>BSD-based</quote> 版權的話,
請把下列文字放到每份原始碼的最開始部分,
並用適當的文字替換 <literal>%%</literal> 之間的文字。</para>
<programlisting>Copyright (c) %%proper_years_here%%
%%your_name_here%%, %%your_state%% %%your_zip%%.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer as
the first lines of this file unmodified.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY %%your_name_here%% ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL %%your_name_here%% BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&#36;Id&#36;</programlisting>
<para>為了方便您的使用,在
<filename>/usr/share/examples/etc/bsd-style-copyright</filename>
也可以找到此授權的副本。</para>
</sect2>
<sect2>
<title>贊助資金、硬體或 Internet mirror</title>
<para>我們非常願意接受各種形式的捐贈,以進一步拓展 FreeBSD 計劃
,因為有您的支持,像我們這樣的義工努力才能夠有更大的成就!
捐贈硬體也非常重要,因為這樣能夠幫助我們增加可支援的硬體種類,
而我們中的很多人並沒有足夠的資金來購置這些硬體。</para>
<sect3 xml:id="donations">
<title>捐款</title>
<para>FreeBSD 基金會是一個非營利的、有課稅豁免權的基金會,
之所以會建立這個基金會,是為了讓 FreeBSD 計劃能夠可長可久。
因為該基金會屬 501(c)3 實體,一般而言捐款給基金會的話,可以免繳美國聯邦收入稅,
以及科羅拉多州收入稅。通常對於有課稅豁免權的實體進行捐贈的話,
可以折抵聯邦收入中應課稅部分的金額。</para>
<para>您可以把支票寄往:
<address>
The FreeBSD Foundation
<street>7321 Brockway Dr.</street>
<city>Boulder</city>, <state>CO</state> <postcode>80303</postcode>
<country>USA</country>
</address>
</para>
<para>FreeBSD 基金會現在可以透過 PayPal 從網上接受捐款。
如果您想向基金會捐款,請參閱 <link xlink:href="http://www.freebsdfoundation.org">FreeBSD 基金會</link> 網站。</para>
<para>關於 FreeBSD 基金會的更多詳情,可以在 <link xlink:href="http://people.FreeBSD.org/~jdp/foundation/announcement.html">FreeBSD
基金會 -- 介紹</link> 找到。要聯絡基金會,
請發送電子郵件到
<email>bod@FreeBSDFoundation.org</email></para>
</sect3>
<sect3>
<title>捐贈硬體</title>
<indexterm><primary>捐贈</primary></indexterm>
<para>FreeBSD 計劃歡迎任何人捐贈可以使用的硬體。
如果您有興趣捐贈硬體,請聯繫 <link xlink:href="&url.base;/donations/">捐贈聯絡人辦公室</link></para>
</sect3>
<sect3>
<title>成為 FreeBSD mirror 的網站</title>
<para>我們歡迎新的 FTP、WWW 或
<command>cvsup</command> mirror 站。如果您希望成為這樣的 mirror 站,
請參閱 <link xlink:href="&url.articles.hubs;/index.html">如何架設 FreeBSD mirror</link>
一文,以了解進一步的情況。</para>
</sect3>
</sect2>
</sect1>
<index/>
</article>

@ -1,570 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!-- $FreeBSD$ -->
<!-- The FreeBSD Documentation Project -->
<!-- Setting up a CVS repository - the FreeBSD way -->
<!-- Translate into Chinese by jose@jose.idv.tw -->
<!-- English Version: 1.15 -->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
<info><title>建立 CVS 儲存庫(repository) - 使用 FreeBSD 的方式</title>
<author><personname><firstname>Stijn</firstname><surname>Hoop</surname></personname><affiliation>
<address><email>stijn@win.tue.nl</email></address>
</affiliation></author>
<pubdate>$FreeBSD$</pubdate>
<copyright>
<year>2001</year>
<year>2002</year>
<year>2003</year>
<holder role="mailto:stijn@win.tue.nl">Stijn Hoop</holder>
</copyright>
<releaseinfo>$FreeBSD$</releaseinfo>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
</legalnotice>
<abstract>
<para>這份文件描述了使用和 FreeBSD 專案相同的命令稿來建立 CVS 儲存庫的步驟
。這和標準 CVS 建立的儲存庫相較之下有許多優點,包含了更多對於原始碼樹的
granular access 控制,以及為每一次的提交產生易讀的電子郵件。</para>
</abstract>
</info>
<sect1 xml:id="introduction">
<title>簡介</title>
<para>大多數的開放原始碼軟體專案都使用 <application>CVS</application> 作為
他們的原始碼控制系統。當 <application>CVS</application> 有這樣的優點存在
時,它也有部份的瑕疵和缺點。其中之一的原因是和其他的開發者分享原始碼樹能
夠快速地導致系統管理的惡夢,特別是如果其中一人希望保護部份的原始碼樹免受
於一般的存取。</para>
<para>FreeBSD 是其中一個使用 <application>CVS</application> 的專案,同時也
是基於它的開發者遍佈於全世界。他們撰寫了一些命令稿使得管理儲存庫變得更加
容易。最近這些命令稿由 &a.joe; 重新整理過且更標準化,使得在其他的專案上再
次使用這些命令稿會更加容易。本文件將描述使用這些新的命令稿的方法。</para>
<para>為了使本文件中的訊息有用,你需要熟悉 <application>CVS</application>
基本的操作方式。</para>
</sect1>
<sect1 xml:id="first-setup">
<title>基本設定</title>
<warning>
<para>最好的方式是在一個全新的儲存庫中執行這些步驟,並確定你了解所有的後
果。同時,請確定你有最新且可讀的資料備份!</para>
</warning>
<sect2>
<title>初始化儲存庫</title>
<para>首先要做的是建立一個新的儲存庫,執行下列命令告訴
<application>CVS</application> 建立並初始化:</para>
<screen>&prompt.user; <userinput>cvs -d path-to-repository init</userinput></screen>
<para>這命令告訴 <application>CVS</application> 建立
<filename>CVSROOT</filename> 的目錄,這個目錄裡放置了所有的組態檔。</para>
</sect2>
<sect2>
<title>設定儲存庫的群組</title>
<para>現在我們將建立一個擁有該儲存庫的群組,所有的開發者必須加入這個群組
,這樣他們才能夠存取該儲存庫。我們假設群組名稱是以 FreeBSD 內定的
<literal>ncvs</literal></para>
<screen>&prompt.root; <userinput>pw groupadd ncvs</userinput></screen>
<para>接者你需要使用 &man.chown.8; 將目錄所有者指定給剛剛新增的群組:</para>
<screen>&prompt.root; <userinput>chown -R :ncvs path-to-your-repository</userinput></screen>
<para>如此一來沒有適當的群組許可將沒有其他人可以寫入該儲存庫。</para>
</sect2>
<sect2>
<title>取回原始檔案</title>
<para>現在你需要從 FreeBSD 儲存庫中取回 <filename>CVSROOT</filename> 目錄,
從 FreeBSD 匿名的 CVS 映射站來取回會是最簡單的方法。請查閱 <link xlink:href="&url.books.handbook;/anoncvs.html">在 handbook 中的相關章節</link>
獲得更多資訊。我們假設取回的檔案存放在相同目錄下的
<filename>CVSROOT-freebsd</filename> 目錄中。</para>
</sect2>
<sect2>
<title>複製 FreeBSD 的命令稿</title>
<para>接下來我們要複製 FreeBSD <filename>CVSROOT</filename> 裡的檔案到你
的儲存庫中。如果你是孰悉於 <application>CVS</application>,你也許會想你
可以直接匯入這些命令稿,試圖更容易的同時和更新的版本同步;不過,事實是
<application>CVS</application> 在這個部份有缺點:當匯入檔案到
<filename>CVSROOT</filename> 時,它並不會更新組態檔。為了要認出這些檔案
,你還需要在匯入它們後一一重新提交,這就失去了
<literal>cvs import</literal> 的價值。因此,建議的方法是僅複製這些命令
稿過去。</para>
<para>若上述內容對你沒有意義是不重要的&mdash;因為最後的結果都是一樣的。
首先匯出你的 <filename>CVSROOT</filename>,然後複製剛剛取回的 FreeBSD
檔案到本地的目錄中(尚未變動過):</para>
<screen>&prompt.user; <userinput>cvs -d path-to-your-repository checkout CVSROOT</userinput>
&prompt.user; <userinput>cd CVSROOT</userinput>
&prompt.user; <userinput>cp ../CVSROOT-freebsd/* .</userinput>
&prompt.user; <userinput>cvs add *</userinput></screen>
<para>注意:你很可能會得到一段關於某些目錄沒有被複製的警告,這是正常的,
你並不需要用到這些目錄。</para>
</sect2>
<sect2>
<title>命令稿說明</title>
<para>現在你的工作目錄中有了完整 FreeBSD 專案在它們的儲存庫中使用的命令稿
的複本,以下是每個檔案簡單的介紹。</para>
<itemizedlist>
<listitem>
<para><filename>access</filename> - 此檔案在預設的安裝中沒有被用到。
這是使用在<link linkend="freebsdspecific">FreeBSD 的特殊設定</link>
,用來控制儲存庫的存取。如果你不希望使用這個設定的話你可以刪除這個檔案。</para>
</listitem>
<listitem>
<para><filename>avail</filename> - 此檔案控制儲存庫的存取。在此檔案中
你可以指定允許存取儲存庫的群組,也可以針對目錄或檔案來拒絕提交。你應該
調整為在你的儲存庫中將包含的群組和目錄。</para>
</listitem>
<listitem>
<para><filename>cfg.pm</filename> - 此檔案說明了設定內容,並提供預設的設定。
<emphasis></emphasis>該修改此檔案,而該將修改的設定放到
<filename>cfg_local.pm</filename></para>
</listitem>
<listitem>
<para><filename>cfg_local.pm</filename> - 此檔案包含所有的系統設定值
。你應該設定所有列在此的設定,例如提交的郵件要寄到哪、在哪些主機上
的使用者可以提交等等。更多的相關資訊在稍後會提到。</para>
</listitem>
<listitem>
<para><filename>checkoutlist</filename> - 此檔案列出所有在
<application>CVS</application> 控制下此目錄中的檔案,除了標準在
<literal>cvs init</literal> 建立出的檔案。你可以刪除某些不需要的
FreeBSD 特殊的檔案。</para>
</listitem>
<listitem>
<para><filename>commit_prep.pl</filename> - 此命令稿執行各種提交前的檢查,
基於你是否在 <filename>cfg_local.pm</filename> 中啟用。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>commitcheck</filename> - 此命令稿會直接影響
<application>CVS</application>。首先它會使用
<filename>cvs_acls.pl</filename> 來檢查提交者是否可以存取指定的原始碼樹,
然後執行 <filename>commit_prep.pl</filename> 來確認各種提交前的檢查。
如果一切正常,<application>CVS</application> 將允許此次提交繼續執行。
你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>commitinfo</filename> - 此檔案是
<application>CVS</application> 用來定義在提交前所要執行的程式&mdash;
此例中是 <filename>commitcheck</filename>。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>config</filename> - 儲存庫的設定選項。你可以修改為你
想要的,但大多數的管理者可能會保留預設值。更多關於可以在此設定的選項
資訊可以查閱 <application>CVS</application> 手冊。</para>
</listitem>
<listitem>
<para><filename>cvs_acls.pl</filename> - 此命令稿定義提交者的身分,以
及他/她是否允許存取原始碼樹,它是基於 <filename>avail</filename>
的設定。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>cvsignore</filename> - 此檔案列出哪些檔案
<application>CVS</application> 不用處理到儲存庫中,你可以修改成你想
要的。更多關於可以此檔案的說明可以查閱 <application>CVS</application>
手冊。</para>
</listitem>
<listitem>
<para><filename>cvswrappers</filename> - 此檔案是
<application>CVS</application> 用來啟用或停用關鍵字展開,或者是否檔
案該被視為二進位檔。你可以修改成你想要的。更多關於可以此檔案的說明
可以查閱 <application>CVS</application> 手冊。注意 <literal>-t</literal>
<literal>-f</literal> 選項在 <application>CVS</application>
client/server 並不能夠正確的運作。</para>
</listitem>
<listitem>
<para><filename>edithook</filename> - 此檔案已經沒有在使用了,留著只
是為了某些有意義的原因。你可以安全地刪除此檔案。</para>
</listitem>
<listitem>
<para><filename>editinfo</filename> - <application>CVS</application>
使用這個檔案來強迫你使用特定的編輯器。FreeBSD 沒有使用這個功能,因
為輸入日誌訊息已經由 <filename>verifymsg</filename>
<filename>logcheck</filename> 來完成。這是因為
<filename>editinfo</filename> 功能在從遠端提交或是使用
<literal>-m</literal><literal>-F</literal> 選項時不會執行。你不
該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>exclude</filename> - 此檔案列出被
<filename>commit_prep.pl</filename> 定義不能包含修正版標頭的檔案。
在 FreeBSD 版本的設定中,所有在修正版控制下的檔案需有一個修正版標頭
,(像是 &dollar;FreeBSD&dollar;)。在此檔案中所有符合一行一個的檔
案名稱將不會被檢查。你可以在此檔案中為不需要修正版標頭的檔案新增一
個正規運算式。為了安裝這些命令稿,最好的方法是排除
<filename>CVSROOT/</filename> 會受到標頭的檢查。</para>
</listitem>
<listitem>
<para><filename>log_accum.pl</filename> - 此命令稿會處理由
<filename>logcheck</filename> 所提供的日誌訊息,並且將之為備份目的
附加於儲存庫中的記錄檔案。同時也執行要將郵件寄到你提供的信箱中的程
式(在 <filename>cfg_local.pm</filename> 中)。它和
<application>CVS</application> 之間是由 <filename>loginfo</filename>
負責溝通。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>logcheck</filename> - 此檔案分析提交者提供的日誌訊息
,並試圖對其作清理動作。它和 <application>CVS</application> 之間是
<filename>verifymsg</filename> 負責溝通。你不該更動此檔案。</para>
<note><para>此命令稿依附於本地的 FreeBSD <application>CVS</application>
處理FreeBSD 版本在此命令稿修改過後才讀取日誌訊息;標準的
<application>CVS</application> 版本雖然能夠檢查語法上是否正確,但並
不會清理日誌訊息。<application>CVS</application> 1.11.2 可以透過在
<filename>config</filename> 設定 <literal>RereadLogAfterVerify=always</literal>
來和 FreeBSD 版本有相同的作用。</para></note>
</listitem>
<listitem>
<para><filename>loginfo</filename> - 此檔案是
<application>CVS</application> 用來控制日誌訊息要寄到哪裡,而
<filename>log_accum.pl</filename> 負責處理。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>modules</filename> - 此檔案保留了
<application>CVS</application> 原始的意義。你應該刪除新增的 FreeBSD
模組,並修改為你想要的內容。更多關於可以此檔案的說明可以查閱
<application>CVS</application> 手冊。</para>
</listitem>
<listitem>
<para><filename>notify</filename> - 此檔案為
<application>CVS</application> 用來控制監看某個檔案。在 FreeBSD 的
儲存庫中沒有使用到此檔案,你可以修改成你想要的。更多關於可以此檔案
的說明可以查閱 <application>CVS</application> 手冊。</para>
</listitem>
<listitem>
<para><filename>options</filename> - 此檔案僅限使用於 FreeBSD 和 Debian
<application>CVS</application> 版本。它包含了需要在修正版標頭中
展開的關鍵字。你可以修改為符合你指定在 <filename>cfg_local.pm</filename>
的關鍵字。</para>
</listitem>
<listitem>
<para><filename>rcsinfo</filename> - 此檔案定義提交時儲存庫所要使用的
日誌訊息樣式範本,如 <filename>rcstemplate</filename>。FreeBSD 預設
為所有的儲存庫使用同一個樣式範本,你可以加入其他你想要的。</para>
</listitem>
<listitem>
<para><filename>rcstemplate</filename> - 此檔案是提交者在提交時會看到
的日誌訊息樣式範本,你應該修改為你定義在 <filename>cfg_local.pm</filename>
的各種參數。</para>
</listitem>
<listitem>
<para><filename>tagcheck</filename> - 此檔案控制在儲存庫中貼上標籤的
存取。標準的 FreeBSD 版本拒絕名為 RELENG* 的標籤,因為這是 release
engineering 的工作。你可以根據需要來修改此檔案。</para>
</listitem>
<listitem>
<para><filename>taginfo</filename> - 此檔案控制執行在儲存庫中貼上標籤
的存取的命令稿,如 <filename>tagcheck</filename>。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>unwrap</filename> - 此命令稿可以用來在匯出時自動<quote>解開</quote>
二進位檔(請見 <filename>cvswrappers</filename>)。現在 FreeBSD 並
沒有使用此設定,因為此功能在遠端提交時並不是執行的非常完善。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>verifymsg</filename> - 此檔案用來執行和日誌訊息相關的
命令稿,如 <filename>logcheck</filename>。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>wrap</filename> - 此命令稿可以用來在提交時自動<quote>包裹</quote>
二進位檔(請見 <filename>cvswrappers</filename>)。現在 FreeBSD 並
沒有使用此設定,因為此功能在遠端提交時並不是執行的非常完善。你不該更動此檔案。</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>自訂命令稿</title>
<para>接下來的步驟要設定這些命令稿使得它們可以在你的環境中運作。你應該檢
查所有在目錄中的檔案,並修改為符合你的設定。尤其,你會想要修改下列的檔案:</para>
<procedure>
<step>
<para>如果你不希望使用<link linkend="freebsdspecific">FreeBSD 的特殊設定</link>
你可以安全地刪除 <filename>access</filename></para>
<screen>&prompt.user; <userinput>cvs rm -f access</userinput></screen>
</step>
<step>
<para>編輯 <filename>avail</filename> 來包含你想控制存取的各種儲存庫
目錄,請確定你有保留 <literal>avail||CVSROOT</literal> 這一行,否則
你將會在下一步把你自己鎖在外面。</para>
<para>另外你可以在此檔案中新增開發者的群組FreeBSD 預設使用
<filename>access</filename> 來列出所有的開發者,但你可以使用任何你
想要用的檔案。如果你想的話也可以新增群組(請使用指定在
<filename>cvs_acls.pl</filename> 上層裡的語法)。</para>
</step>
<step>
<para>編輯 <filename>cfg_local.pm</filename> 來包含你需要的選項。尤其
你應該檢視一下下列的設定項目:</para>
<itemizedlist>
<listitem>
<para><literal>%TEMPLATE_HEADERS</literal> - 這是用來取得日誌訊
息內容的程序,並加入將呈現的郵件項目和提供非空值的訊息。你可
以刪除 <literal>PR</literal><literal>MFC after</literal>
敘述,當然也可以加入你想要的。</para>
</listitem>
<listitem>
<para><literal>$MAIL_BRANCH_HDR</literal> - 如果你想要在每一封
提交的郵件中加入描述是在哪一個分支中提交的標頭,那麼請定義為
符合你的設定。如果你不想使用這樣的標頭,那麼請設定為空值。</para>
</listitem>
<listitem>
<para><literal>@COMMIT_HOSTS</literal> - 定義使用者能夠提交的主機。</para>
</listitem>
<listitem>
<para><literal>$MAILADDRS</literal> - 設定應該收到提交郵件的郵
件位址。</para>
</listitem>
<listitem>
<para><literal>@LOG_FILE_MAP</literal> - 以你所需要的來修改這個
陣列,每個設定值應該符合被提交的目錄,而提交的日誌訊息會以
<filename>commitlogs</filename> 的名稱儲存在每個被設定的目錄下。</para>
</listitem>
<listitem>
<para><literal>$COMMITCHECK_EXTRA</literal> - 如果你不想使用
<link linkend="freebsdspecific">FreeBSD 特殊的存取控制</link>
功能,你可以在此檔案中刪除對 <literal>$COMMITCHECK_EXTRA</literal>
的定義。</para>
</listitem>
</itemizedlist>
<note><para>修改 <literal>$IDHEADER</literal> 的功能只有在 FreeBSD
平台上可以運作,它是相依在 FreeBSD 的特殊 <application>CVS</application>
設定上。</para></note>
<para>你可以檢查 <filename>cfg.pm</filename> 是否有其他的參數可以修改
,但是修改最好是有原因的。</para>
</step>
<step>
<para>刪除 <filename>exclude</filename> 中關於FreeBSD 的特殊設定的敘
述(如以 <literal>^ports/</literal> 為開頭的每一行等)。此外,註解
掉以 <literal>^CVSROOT/</literal> 為開頭的行列,然後新增一行只有
<literal>^CVSROOT/</literal>。等到關鍵字展開的命令稿安裝好後,你可
以在 <filename>CVSROOT</filename> 目錄中的檔案裡加上標頭,然後再恢
復剛剛註解的行列,但在你還沒有提交前則只保持這樣。</para>
</step>
<step>
<para>編輯 <filename>modules</filename>,並刪除所有 FreeBSD 的群組。
加入你需要的模組。</para>
</step>
<step>
<note><para>此步驟只有在你於 <filename>cfg_local.pm</filename> 中指定
<literal>$IDHEADER</literal> 才有必要設定(只有在 FreeBSD 的特殊
<application>CVS</application> 設定上才能夠執行)。</para></note>
<para>編輯 <filename>options</filename> 以符合你在
<filename>cfg_local.pm</filename> 中設定的標籤名稱。並在所有的檔案
中搜尋 <literal>FreeBSD</literal> 並替換為你設定的標籤名稱。</para>
</step>
<step>
<para>修改 <filename>rcstemplate</filename> 為和在
<filename>cfg_local.pm</filename> 中相同的設定。</para>
</step>
<step>
<para>選擇性的刪除在 <filename>tagcheck</filename> 中針對 FreeBSD 檢
查的設定。你可以僅僅在檔案的最上層加上 <literal>exit 0</literal>
取消所有標籤的檢查。</para>
</step>
<step>
<para>在你完成前的最後一件事是確認 commitlogs 可以正確儲存。預設會儲
存在儲存庫中的 <filename>commitlogs</filename> 子目錄中,而這個目錄
需要先建立:</para>
<screen>&prompt.user; <userinput>mkdir commitlogs</userinput>
&prompt.user; <userinput>cvs add commitlogs</userinput></screen>
</step>
</procedure>
<para>現在,在細心的檢視過後,你可以提交你的修改了。確定你先前有在
<filename>avail</filename> 中允許你自己存取 <filename>CVSROOT</filename>
目錄,因為如果沒有這樣做的話你會把你自己鎖在外面。完整確認過後請執行下
列命令:</para>
<screen>&prompt.user; <userinput>cvs commit -m '- Initial FreeBSD scripts commit'</userinput></screen>
</sect2>
<sect2>
<title>測試設定</title>
<para>你已經準備好做基本的測試了:強制提交 <filename>avail</filename>
以確認每件事都如預期的運作。</para>
<screen>&prompt.user; <userinput>cvs commit -f -m 'Forced commit to test the new CVSROOT scripts' avail</userinput></screen>
<para>如果一切正常,那麼恭喜了!你現在已經為你的儲存庫建立好 FreeBSD 的命
令稿了。如果 <application>CVS</application> 仍然有警告什麼,回頭檢視上
述的步驟是否有正確的執行。</para>
</sect2>
</sect1>
<sect1 xml:id="freebsdspecific">
<title>FreeBSD 的特殊設定</title>
<para>FreeBSD 專案自己使用一個有點不同的設定,那就是同時也使用 FreeBSD
<filename>CVSROOT</filename> 中的 <filename>freebsd</filename> 子目錄。因
為大量的提交者必須在相同的群組中,因此專案寫了一個簡單的 wrapper 來確認提
交者可以正確的提交,並設定儲存庫的群組名稱。</para>
<para>如果你的儲存庫也需要這樣的功能,那麼下面就會介紹如何建立,不過首先要
先來看一段複雜的概述。</para>
<sect2>
<title>FreeBSD 設定中使用的檔案</title>
<itemizedlist>
<listitem>
<para><filename>access</filename> - 此檔案用來控制儲存庫的存取。你
應該編輯並加入所有在專案中的成員。</para>
</listitem>
<listitem>
<para><filename>freebsd/commitmail.pl</filename> - 此檔案已經沒有在
使用了,留著只是為了某些有意義的原因。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>freebsd/cvswrap.c</filename> - 此 CVS wrapper 原始
碼是用來建立檢查所有存取的工作。更多的訊息在稍後會提出。你應該編
<literal>ACCESS</literal><literal>REALCVS</literal> 的路徑
以符合你的設定。</para>
</listitem>
<listitem>
<para><filename>freebsd/mailsend.c</filename> - 此檔案是 FreeBSD 設
定 mailing lists 需要的,你不該更動此檔案。</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>步驟</title>
<procedure>
<step>
<para>只有加入你的使用者名稱到 <filename>access</filename> 中。</para>
</step>
<step>
<para>編輯 <filename>cvswrap.c</filename> 的路徑以符合你的設定,定義
在大寫的 <literal>ACCESS</literal> 中。同時如果預設值不符合你的情況
的話也應該修改本地實際的 <command>cvs</command> 程式所在位置。原始
<filename>cvswrap.c</filename> 希望替代伺服端的 CVS 程式,例如可
能會是 <filename>/usr/bin/ncvs</filename></para>
<para>我的 <filename>cvswrap.c</filename> 是這樣:</para>
<programlisting>#define ACCESS "/local/cvsroot/CVSROOT/access"
#define REALCVS "/usr/bin/ncvs"</programlisting>
</step>
<step>
<para>接下來是建立 wrapper 來確認你在提交時是在正確的群組中。
在你的 <filename>CVSROOT</filename> 中的
<filename>cvswrap.c</filename> 要能夠使用。</para>
<para>在你完成編輯並加入正確的路徑後我們要來編譯原始碼:</para>
<screen>&prompt.user; <userinput>cc -o cvs cvswrap.c</userinput></screen>
<para>然後進行需要設定(此步驟需要 root 權限):</para>
<screen>&prompt.root; <userinput>mv /usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>mv cvs /usr/bin/cvs</userinput>
&prompt.root; <userinput>chown root:ncvs /usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod o-rx /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod u-w,g+s /usr/bin/cvs</userinput></screen>
<para>這會將 wrapper 安裝成預設的 <command>cvs</command> 程式,請確定
任何要使用儲存庫的人應該有正確的存取權限。</para>
</step>
<step>
<para>現在你可以刪除所有在儲存庫群組中的使用者,所有的存取控制會經由
wrapper 完成,同時 wrapper 會設定存取的正確群組。</para>
</step>
</procedure>
</sect2>
<sect2>
<title>測試設定</title>
<para>你的 wrapper 現在應該已經安裝好了,你當然也可以強制提交
<filename>access</filename> 來測試是否正常:</para>
<screen>&prompt.user; <userinput>cvs commit -f -m 'Forced commit to test the new CVSROOT scripts' access</userinput></screen>
<para>同樣地,如果有錯誤,檢查是否上述所有步驟都有正確的執行。</para>
</sect2>
</sect1>
</article>

@ -1,416 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!-- $FreeBSD$ -->
<!-- The FreeBSD Documentation Project -->
<!-- FreeBSD Mailing Lists 常見問答集 -->
<!-- Translate into Chinese by chinsan.tw@gmail.com -->
<!-- English Version: 1.7 -->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
<info><title>&os; Mailing Lists 常見問答集</title>
<authorgroup>
<author><personname><surname>The &os; Documentation Project</surname></personname></author>
</authorgroup>
<copyright>
<year>2004</year>
<year>2005</year>
<year>2006</year>
<holder>&os; 文件計畫</holder>
</copyright>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
<abstract>
<para>這是有關 &os; mailing lists 的 FAQ。如果您對協助本文件/翻譯計畫
的進行有興趣的話,請寄 e-mail 到
&a.doc;。此外,隨時可從 <link xlink:href="http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/mailing-list-faq/index.html">
FreeBSD 網站</link> 拿到這份文件的最新版本。
也可以利用 HTTP 來下載 <link xlink:href="article.html">HTML</link>
文件,或是經由 <link xlink:href="ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/">
FreeBSD FTP 站</link> 下載純文字、&postscript;、或 PDF 版本的檔案。
您也可以在這裡使用
<link xlink:href="&url.base;/search/search.html">搜尋 FAQ 資料</link>
的功能。</para>
</abstract>
</info>
<sect1 xml:id="introduction">
<title>前言</title>
<para>如同其他 FAQs 一樣,本文主要目的是希望涵蓋在 &os; mailing
lists 上面的常見問題(當然,包括答案)。
雖然,原本構想是希望能降低這些重複問題的網路流量,但如今已被公認 FAQs 也是相當好用的資源之一。</para>
<para>本文主要是描述社群之間所培養的一些禮儀(或默契),但本文本身並非『聖旨』般的權威。
若發現本文內有任何技術瑕疵,或者是想建議可以增加哪些部分的話,請送 PR或是 email 到 &a.doc;。謝囉!</para>
<qandaset>
<qandaentry>
<question xml:id="purpose">
<para>&os; mailing lists 的目的為何?</para>
</question>
<answer>
<para>&os; mailing lists 主要是提供 &os; 社群間的溝通管道,這裡有各式專題領域的探討,以及興趣交流。</para>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="audience">
<para>&os; mailing lists 的參與者有哪些?</para>
</question>
<answer>
<para>這個問題,要看各個 list 的『版規(charter)』定位而有所不同。有些 lists 主要是 developers 在參與討論的;
而有些則主要是幾乎整體 &os; 社群都可以隨意參與討論的。請看 <link xlink:href="http://lists.FreeBSD.org/mailman/listinfo">這份清單</link> 上面有目前所有 list 的摘要說明。</para>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="participation-who">
<para>&os; mailing lists 對任何人都是開放參與的嗎?</para>
</question>
<answer>
<para>再重複一次,這要看各個 list 的『版規(charter)』定位而有所不同。
請在發文前,先注意閱讀該 list 的『版規(charter)』,並遵守相關原則。
如此一來,才會讓大家都能溝通更無礙。</para>
<para>如果看了上一個問答內的清單之後,還是不清楚要到哪個 list 去發問的話,
那麼可以試著把問題丟到 freebsd-questions 看看(但請先看下面講的補充)。</para>
<para>請注意:習慣上所有 mailing lists 都是開放發表討論的,也不必得先成為訂閱會員才行。
這是相當審慎的選擇,來讓參與 &os; 社群更輕鬆容易,並鼓勵互相分享彼此的想法。
然而,由於過去有些人的濫用,有些 lists 現在開始限制參與討論的部分,以避免不必要的困擾。</para>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="subscribe">
<para>要怎麼訂閱呢?</para>
</question>
<answer>
<para>可以用 <link xlink:href="http://lists.FreeBSD.org/mailman/listinfo">
Mailman 網頁介面</link> 來訂閱任何公開的 lists。</para>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="unsubscribe">
<para>要怎麼退訂?</para>
</question>
<answer>
<para>一樣請用剛上面說的網頁介面,或者 mailing list 上面每封信結尾處都會有相關 URL 連結的指示說明。</para>
<para>千萬請不要直接寫信到這些公開的 mailing lists 說你要退訂。
首先呢..因為本來就不是這樣退訂的,其次你會惹來眾怒而招來圍剿、筆戰。
這是很典型的退訂錯誤示範,請不要這樣做。</para>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="archives">
<para>可以找到舊信的資料庫嗎?</para>
</question>
<answer>
<para>嗯,有!可以在 <link xlink:href="http://docs.FreeBSD.org/mail/">這邊</link>
找到相關的舊信資料庫(archive)。</para>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="digest">
<para>mailing lists 可有摘要版呢?</para>
</question>
<answer>
<para>當然也有,請看 <link xlink:href="http://lists.FreeBSD.org/mailman/listinfo">
Mailman 網頁介面</link></para>
</answer>
</qandaentry>
</qandaset>
</sect1>
<sect1 xml:id="etiquette">
<title>Mailing List 的參與禮儀</title>
<para>在 mailing lists 上參與討論,就像在其他社群一樣,我們都需要一些溝通上的共識。
發言請注重禮儀(或默契),切勿無的放矢。</para>
<qandaset>
<qandaentry>
<question xml:id="before-posting">
<para>在發文之前,有什麼注意事項呢?</para>
</question>
<answer>
<para>最重要的是你已經看了這篇文章,然而,若您對 &os; 不熟的話,
可能需要先廣泛閱讀
<link xlink:href="&url.base;/docs/books.html">相關書籍及文章</link>
來先熟悉這套作業系統和一些典故,尤其是其中的 <link xlink:href="&url.books.faq;/index.html">
&os; 常見問答集 (FAQ)</link> 文件,
<link xlink:href="&url.books.handbook;/index.html">
&os; 使用手冊(Handbook)</link>
以及相關文章:<link xlink:href="&url.articles.freebsd-questions;/article.html">
How to get best results from the FreeBSD-questions mailing list</link>
<link xlink:href="&url.articles.explaining-bsd;/article.html">
Explaining BSD</link>、以及 <link xlink:href="&url.articles.new-users;/article.html">
&os; First Steps</link></para>
<para>此外,對上述文件內已有解答的部份又提出來問的話,會被認為是相當不禮貌的。
這並不是因為這群志工是相當吝於回答的,而是一再被相同的問題不斷疲勞轟炸之後,所產生的挫折感很重。
尤其是現成答案明明就在眼前,卻仍同樣問題滿天飛,這實在是...。
請注意:這些 &os; 相關文件幾乎都是由一群無薪志工的好心成果,而他們也是人。</para>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="inappropriate">
<para>如何避免不當發文呢?</para>
</question>
<answer>
<itemizedlist>
<listitem>
<para>發文時,請務必遵守該 mailing list 的遊戲規則。</para>
</listitem>
<listitem>
<para>不要作人身攻擊。好的網路公民,應該要有更高的言行標準。</para>
</listitem>
<listitem>
<para>請不要試圖作 Spam 行為(廣告、轉貼多處等不請自來行為)。
所有 mailing lists 都會積極禁止這些違規者,一旦有的話,那麼後果請自行負責。</para>
</listitem>
</itemizedlist>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="etiquette-posting">
<para>發文時,有什麼該注意的嗎?</para>
</question>
<answer>
<itemizedlist>
<listitem>
<para>發文時,請保持一行約 75 個字元就自動斷行,因為並不是每個看的人都有很炫的圖形介面(GUI)看信軟體。</para>
</listitem>
<listitem>
<para>請注意:事實上,網路頻寬並不是無限的。
並非每個讀者的頻寬都很大,所以若想貼一些像是 <filename>config.log</filename>
之類的設定檔內容,或是大量的 stack trace 紀錄,那麼請把它放在自己網站上,然後貼出該網址 URL 就行了。
還有一件事,請記住,這些信件都會被舊信資料庫保存下來,所以這樣作會造成保存的資料庫會很快被塞到很大,
甚至可能塞爆 Server 的硬碟空間。</para>
</listitem>
<listitem>
<para>文章是要讓人看得懂,所以請注意版面編排的可讀性,還有..
千 萬 不 要 大 聲 嚷 叫!!!!! 這點可不只 &os; mailing lists 才需如此注意,
請勿低估文章『基本編排』的重要性、連鎖效應。
信中的表達方式通常就代表著別人眼中的你,若文章讓人看了很吃力(霧煞煞)、拼字錯誤百出、
充滿語意或邏輯錯誤、或是文內充滿一堆驚嘆號,這會讓人對你印象觀感極差。</para>
</listitem>
<listitem>
<para>在一些特定的 list 場合請用適當的語言來溝通。許多非英語系的mailing
lists 可以到
<link xlink:href="&url.base;/community/mailinglists.html">
這邊</link> 查看看。</para>
<para>對於許多母語不是英語的人,我們都能諒解他們的苦楚,並且試著儘量多多包涵。
英文非母語的人,我們會儘量不惡意批評拼字或文法錯誤之處。
&os; 在這方面,一直有相當優秀的紀錄,請讓我們繼續保持這傳統吧。</para>
</listitem>
<listitem>
<para>寫信時,請用相容標準的 Mail User Agent (MUA)程式。
<link xlink:href="http://www.lemis.com/email.html">不良的(或設定錯誤的)寄信程式</link>
這裡列有許多信件格式的錯誤示範。以下是一些已知的寄信程式的不良示範:</para>
<itemizedlist>
<listitem>
<para>cc:Mail</para>
</listitem>
<listitem>
<para>(舊版的)&eudora;</para>
</listitem>
<listitem>
<para>exmh</para>
</listitem>
<listitem>
<para>&microsoft; Exchange</para>
</listitem>
<listitem>
<para>&microsoft; Internet Mail</para>
</listitem>
<listitem>
<para>&microsoft; &outlook;</para>
</listitem>
<listitem>
<para>(舊版的)&netscape;</para>
</listitem>
</itemizedlist>
<para>如同上述所見Microsoft 出的一堆寄信程式通常都是不相容標準格式的。
請儘量改用 &unix; 上的寄信程式。若必須在 Microsoft 環境下使用寄信程式的話,
請記得確認設定是否正確。請儘量不要用 <acronym>MIME</acronym> 格式:
因為有一堆人都在濫用 <acronym>MIME</acronym> 信件格式。</para>
</listitem>
<listitem>
<para>請確認:時間與時區設定是否正確。
這問題看起來有點蠢,因為你寄出的信還是會到達 mailing list 上,
但是呢,每位 mailing lists 上的訂戶每天都會看數百封的信,
他們通常會把信件以標題跟時間作為排序依據。
若你的信沒有在第一篇正解之前就先出現的話,他們就會假設可能是漏收你這封信,
然後就沒再去看你那封信了。</para>
</listitem>
<listitem>
<para>請提供程式出現的相關訊息,像是 &man.dmesg.8; 或者 console
messages 也就是通常會出現在 <filename>/var/log/messages</filename> 出現的。
請不要用手打,因為這不僅很苦,而且也可能打錯字或亂掉原有格式。請直接把相關的 log 檔丟出來,
或是用編輯器來剪裁、或是用滑鼠複製/貼上來完成。舉個例子,如果是要把像是 <command>dmesg</command>
的程式訊息倒入到某個檔案去的話,那麼作法如下:</para>
<screen>&prompt.user; <userinput>dmesg &gt; /tmp/dmesg.out</userinput></screen>
<para>這樣子會把訊息送到 <filename>/tmp/dmesg.out</filename> 檔內。</para>
</listitem>
<listitem>
<para>在用滑鼠剪貼時,請注意是否有犯一些細節的剪貼壞習慣。
尤其是像貼 <filename>Makefiles</filename> 之類檔案時,由於 <literal>tab</literal>
鍵所打出來的分格,是屬於特殊字元。因此,在 <link xlink:href="&url.base;/support.html#gnats">
GNATS PR 資料庫</link> 上很常看到這類很常見的惱人問題:
<filename>Makefiles</filename> 內的 tab 經過剪貼後,變成『空白(white space)』
或是困擾的 <literal>=3B</literal> escape sequence這些會讓 committers 們十分不爽。</para>
</listitem>
</itemizedlist>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="etiquette-replying">
<para>在 mailing lists 上回文的話,有什麼要特別注意的嗎?</para>
</question>
<answer>
<itemizedlist>
<listitem>
<para>請適當調整文章引言長度。回文時,引言部份請引『有談到的』部分為主,但請不要過與不及。
應該保留涉及討論範圍的原文,這樣子才能讓沒看過前面文章的人知道是在講什麼,而非一頭霧水。</para>
<para>還有一點也很重要,原文若是幅度相當長的話,記得註明 "yes, I see this too"。</para>
</listitem>
<listitem>
<para>善用技巧來確認原文與自己寫的部份:
通常會在原文的每行前面加上 <quote><literal>&gt; </literal></quote> 以作記號。
請記得保留 <quote><literal>&gt; </literal></quote> 符號後面的空白,並且在原文以及你所寫的段落之間加上空行,
以便閱讀。</para>
</listitem>
<listitem>
<para>請不要斷章取義、穿鑿附會:通常對原始文章『斷章取義』、『穿鑿附會』會讓大家很不爽,因為他們原意並非如此,卻被曲解。</para>
</listitem>
<listitem>
<para>回文時,不要寫在原文上面(<literal>top post</literal>)。
這個意思是:若要回文時,請寫在原文下方,不要寫在原文上面,以免讓人有時空錯置的錯亂混淆。</para>
<!-- 注意:下面這是故意幽默效果的問答 -->
<itemizedlist>
<listitem>
<para>答: Because it reverses the logical flow of
conversation.</para>
</listitem>
<listitem>
<para>問: Why is top posting frowned upon?</para>
</listitem>
</itemizedlist>
<para>(感謝 Randy Bush 提供笑話)</para>
</listitem>
</itemizedlist>
</answer>
</qandaentry>
</qandaset>
</sect1>
<sect1 xml:id="recurring">
<title>Mailing Lists 上的重複性問題</title>
<para>在 mailing lists 上參與討論,就像在其他社群一樣,我們都需要一些溝通上的共識。
許多 mailing lists 都會假設參與討論者都大致知道 FreeBSD 計劃的一些歷史淵源。
尤其是社群的新手總是定期會不斷重複問類似問題。
每個發文的人,都有責任來避免掉入這樣的惡性循環輪迴內。
因此,應儘可能讓 mailing list 上能正常討論,而避免讓自己陷入筆戰泥沼。</para>
<para>要怎麼避免呢?最好的方法就是善用這些 <link xlink:href="http://docs.FreeBSD.org/mail/">
mailing list 舊信資料庫(archives)</link>,來瞭解相關背景。
正由於這原因,所以 <link xlink:href="http://www.FreeBSD.org/search/search.html#mailinglists">
mailing list 搜尋介面</link> 就顯得非常好用。
(若這方法仍無法找到有用的答案,那麼請改用自己愛用的搜尋引擎吧)</para>
<para>透過這些舊信資料庫,不只可瞭解先前討論過哪些話題,也可以知道:是怎麼討論的、
哪些人參與討論過、主要看的人又是哪些人。
入境隨俗這些原則不只是 &os; mailing list 上才這樣,一樣可以適合其他地方。</para>
<para>archives 的內容無疑地相當廣泛,而且會有些問題不斷反覆出現,
有時討論到後面總會離題。無論如何,在發問前的義務就是先做好功課,
以避免這類的月經文惡性循環,尤其是令人反感的 <literal>bikeshed打嘴砲)</literal></para>
</sect1>
<sect1 xml:id="bikeshed">
<title>什麼是 "Bikeshed" 呀?</title>
<para>單就字面上意思解釋的話,<literal>bikeshed</literal> 是指專門給腳踏車、機車之類的兩輪交通工具使用的遮雨棚,
然而呢,在 &os; 這邊的說法卻有其他意思(帶有貶抑)指的是:
某些特定話題的重複討論,尤其是指在 &os; 社群內絕不會有共識,且有爭議的話題。
(這字彙的起源在 <link xlink:href="&url.books.faq;/misc.html#BIKESHED-PAINTING">
這份文件</link> 內有更多說明)。你只要在發信到任一 &os; mailing lists 之前,知道這個基本概念就行了。</para>
<para>一般來講『bikeshed』是很容易產生許多波的筆戰與額外討論的爭議話題如果事先不知道這些背景的話。</para>
<para>拜託,請幫個忙讓討論回歸正常,而不要只是到處打嘴砲而已。感恩!</para>
</sect1>
<sect1 xml:id="acknowledgments">
<title>致謝</title>
<variablelist>
<varlistentry>
<term>&a.grog;</term>
<listitem>
<para><link xlink:href="&url.articles.freebsd-questions;/article.html">
How to get best results from the FreeBSD-questions mailing list</link> 一文的原作者,
我們從他這文內獲得許多 mailing list 上的禮儀(或默契)寫作題材。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>&a.linimon;</term>
<listitem>
<para>本 FAQ 雛形的原作</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</article>

@ -1,434 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!--
The FreeBSD Documentation Project
The FreeBSD Chinese (Traditional) Documentation Project
Original Revision: 1.1
-->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
<info><title>NanoBSD 簡介</title>
<authorgroup>
<author><personname><firstname>Daniel</firstname><surname>Gerzo</surname></personname></author>
</authorgroup>
<copyright>
<year>2006</year>
<holder>The FreeBSD Documentation Project</holder>
</copyright>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
</legalnotice>
<abstract>
<para>這篇文件提供了關於 <application>NanoBSD</application> 工具的情報介紹,
這工具可用來建立用於嵌入式環境應用程式的 &os; 系統映像檔,
以便存放到 Compact Flash 卡(或隨身碟)。</para>
</abstract>
</info>
<sect1 xml:id="intro">
<title>NanoBSD 簡介</title>
<indexterm><primary>NanoBSD</primary></indexterm>
<para><application>NanoBSD</application>&a.phk; 目前正在開發的一項工具。
它可用來建立用於嵌入式環境應用程式的 &os; 系統映像檔,
以便存放到 Compact Flash 卡(或隨身碟mass storage medium)。</para>
<para>這一工具也可以用來自製安裝映像檔,
以簡化俗稱為 <quote>嵌入式系統(computer appliances)</quote> 的系統安裝、維護工作。
通常,每個嵌入式系統產品都有限定硬體和軟體,
或者換言之,所有的應用程式都是預先裝好的。
這些設備可以直接放到現有的網路中,而且(幾乎是)立即使用。</para>
<para><application>NanoBSD</application> 提供的功能包括:</para>
<itemizedlist>
<listitem>
<para>可以和 &os; 一樣使用 Ports 和 Packages &mdash;
所有的應用程序都可以在 <application>NanoBSD</application> 中直接使用,
而方式與 &os; 完全一樣。</para>
</listitem>
<listitem>
<para>功能絲毫未損 &mdash;&os; 做的任何工作,都可以在
<application>NanoBSD</application> 中使用,
除非您在建立 <application>NanoBSD</application> 映像檔時,
有指定要拿掉它們。</para>
</listitem>
<listitem>
<para>所有東西在運行時都是唯讀的 &mdash; 可以安全地拔掉電源插頭。
系統不正常關機的話,不用再跑 &man.fsck.8; 了。</para>
</listitem>
<listitem>
<para>可輕鬆編譯、自行打造 &mdash; 只需使用一個 shell script 和一個設定檔,
您可以輕鬆依需求來量身訂做適用的映像檔。</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="howto">
<title>如何使用 NanoBSD</title>
<sect2 xml:id="design">
<title>NanoBSD 的設計</title>
<para>一旦將映像檔存入嵌入式硬體,就可以用它來引導 <application>NanoBSD</application>
了。 預設情況下,隨身碟會劃分為三部分:</para>
<itemizedlist>
<listitem>
<para>兩個映像檔分割區: <literal>code#1</literal>
<literal>code#2</literal></para>
</listitem>
<listitem>
<para>一個設定檔分割區,在運行環境中,
可以將其掛載(mount)到 <filename>/cfg</filename> 目錄下。</para>
</listitem>
</itemizedlist>
<para>這些分割區,在預設情況下是以唯讀方式掛載。</para>
<para><filename>/etc</filename>
<filename>/var</filename> 目錄均為
&man.md.4;(malloc)磁碟。</para>
<para>設定檔的分割區則是在
<filename>/cfg</filename> 目錄。
它包含了用於 <filename>/etc</filename>
目錄的檔案,在啟動之後暫時以唯讀方式掛載。 因此,若想要重開機保留新的設定,
那麼要記得從 <filename>/etc</filename> 把改過的檔案複製回
<filename>/cfg</filename> 目錄才行。</para>
<example>
<title>把修改過 <filename>/etc/resolv.conf</filename> 設定保存起來</title>
<screen>&prompt.root; <userinput>vi /etc/resolv.conf</userinput>
[...]
&prompt.root; <userinput>mount /cfg</userinput>
&prompt.root; <userinput>cp /etc/resolv.conf /cfg</userinput>
&prompt.root; <userinput>umount /cfg</userinput></screen>
</example>
<note>
<para>只有在系統啟動過程中,以及需要修改設定檔的時候,才需要掛載含有
<filename>/cfg</filename> 的那個分割區。</para>
<para>一直都掛載 <filename>/cfg</filename>
不是一個好主意,特別是當您把 <application>NanoBSD</application>
放在不適合進行大量寫入動作的分割區時
(比如:由於檔案系統的同步化會定期在系統碟內寫入資料)。</para>
</note>
</sect2>
<sect2>
<title>打造 NanoBSD 映像檔</title>
<para><application>NanoBSD</application> 映像檔是透過使用非常簡單的
<filename>nanobsd.sh</filename> shell script 來打造的,這個 script 可以在
<filename>/usr/src/tools/tools/nanobsd</filename>
目錄中找到。 這個 script 建立的映像檔,可以用 &man.dd.1; 工具來複製到隨身碟上。</para>
<para>打造
<application>NanoBSD</application> 映像檔所需的指令是:</para>
<screen>&prompt.root; <userinput>cd /usr/src/tools/tools/nanobsd</userinput> <co xml:id="nbsd-cd"/>
&prompt.root; <userinput>sh nanobsd.sh</userinput> <co xml:id="nbsd-sh"/>
&prompt.root; <userinput>cd /usr/obj/nanobsd.full</userinput> <co xml:id="nbsd-cd2"/>
&prompt.root; <userinput>dd if=_.disk.full of=/dev/da0 bs=64k</userinput> <co xml:id="nbsd-dd"/></screen>
<calloutlist>
<callout arearefs="nbsd-cd">
<para>進入 <application>NanoBSD</application> 打造 script 的主目錄。</para>
</callout>
<callout arearefs="nbsd-sh">
<para>開始打造過程。</para>
</callout>
<callout arearefs="nbsd-cd2">
<para>進入打造好的映像檔所在的目錄。</para>
</callout>
<callout arearefs="nbsd-dd">
<para>在隨身碟上安裝 <application>NanoBSD</application></para>
</callout>
</calloutlist>
</sect2>
<sect2>
<title>自行打造 NanoBSD 映像檔</title>
<para>這可能是 <application>NanoBSD</application> 最為重要,
同時也是您最感興趣的功能。 同時,在開發
<application>NanoBSD</application> 應用程式時,這也是相當耗時的過程。</para>
<para>執行下面的指令將會
<filename>nanobsd.sh</filename> 讀取目前所在目錄的
<filename>myconf.nano</filename> 檔的設定:</para>
<screen>&prompt.root; <userinput>sh nanobsd.sh -c myconf.nano</userinput></screen>
<para>自行打造的流程,只需兩個步驟:</para>
<itemizedlist>
<listitem>
<para>自訂選項</para>
</listitem>
<listitem>
<para>自訂功能</para>
</listitem>
</itemizedlist>
<sect3>
<title>自訂選項</title>
<para>透過修改設定,可以設定用於
<application>NanoBSD</application> 打造過程中 <literal>buildworld</literal>
<literal>installworld</literal> 階段的編譯、安裝選項,以及
<application>NanoBSD</application> 主要打造過程中的選項。
透過使用這些選項可以削減系統的尺寸,使之能夠放入
64 MB 的隨身碟。 您還可以進一步透過這些選項來削減 &os;
直到它只包含 kernel 以及兩三個 userland 檔案為止。</para>
<para>設定檔案中包含用以代替預設值的設定選項。簡介最重要的幾項設定如下:</para>
<itemizedlist>
<listitem>
<para><literal>NANO_NAME</literal> &mdash; 本次打造的名稱(所建立工作目錄的名稱)。</para>
</listitem>
<listitem>
<para><literal>NANO_SRC</literal> &mdash; 用以編譯、打造映像檔的 source tree 的位置。</para>
</listitem>
<listitem>
<para><literal>NANO_KERNEL</literal> &mdash; 設定用來編譯的 kernel 設定檔檔名。</para>
</listitem>
<listitem>
<para><literal>CONF_BUILD</literal> &mdash; 用於
<literal>buildworld</literal> 打造階段的選項。</para>
</listitem>
<listitem>
<para><literal>CONF_INSTALL</literal> &mdash; 用於
<literal>installworld</literal> 打造階段的選項。</para>
</listitem>
<listitem>
<para><literal>CONF_WORLD</literal> &mdash; 用於
<literal>buildworld</literal>
<literal>installworld</literal> 這兩個打造階段的選項。</para>
</listitem>
<listitem>
<para><literal>FlashDevice</literal> &mdash; 定義所用的嵌入式硬體類型。
詳情請參考 <filename>FlashDevice.sub</filename> 檔。</para>
</listitem>
</itemizedlist>
</sect3>
<sect3>
<title>自訂功能</title>
<para>透過在設定檔案中使用 shell 函數,可以進一步微調
<application>NanoBSD</application>。 舉例說明一下自行打造函數的基本方式:</para>
<programlisting>cust_foo()(
echo "bar=topless" &gt; \
&dollar;{NANO_WORLDDIR}/etc/foo
)
customize_cmd cust_foo</programlisting>
<para>下面舉更實際點的例子,它會把預設的
<filename>/etc</filename> 目錄大小,從 5MB 調整為 30MB</para>
<programlisting>cust_etc_size()(
cd &dollar;{NANO_WORLDDIR}/conf
echo 30000 &gt; default/etc/md_size
)
customize_cmd cust_etc_size</programlisting>
<para>除此之外,還有幾個預設的功能定義可以用來自訂:</para>
<itemizedlist>
<listitem>
<para><literal>cust_comconsole</literal> &mdash; 在預設 VGA 顯示卡上停用 &man.getty.8;
(<filename>/dev/ttyv*</filename>)並啟用 serial port 的 COM1 以作為系統 console。</para>
</listitem>
<listitem>
<para><literal>cust_allow_ssh_root</literal> &mdash; 允許 &man.sshd.8;
可以用 <systemitem class="username">root</systemitem> 帳號登入。</para>
</listitem>
<listitem>
<para><literal>cust_install_files</literal> &mdash;
<filename>nanobsd/Files</filename>
目錄中安裝檔案,這包含一些實用的系統管理 script 。</para>
</listitem>
</itemizedlist>
</sect3>
<sect3>
<title>設定檔案舉例</title>
<para>下面是用於自行打造的 <application>NanoBSD</application> 映像檔的完整例子:</para>
<programlisting>NANO_NAME=custom
NANO_SRC=/usr/src
NANO_KERNEL=MYKERNEL
NANO_IMAGES=2
CONF_BUILD='
NO_KLDLOAD=YES
NO_NETGRAPH=YES
NO_PAM=YES
'
CONF_INSTALL='
NO_ACPI=YES
NO_BLUETOOTH=YES
NO_CVS=YES
NO_FORTRAN=YES
NO_HTML=YES
NO_LPR=YES
NO_MAN=YES
NO_SENDMAIL=YES
NO_SHAREDOCS=YES
NO_EXAMPLES=YES
NO_INSTALLLIB=YES
NO_CALENDAR=YES
NO_MISC=YES
NO_SHARE=YES
'
CONF_WORLD='
NO_BIND=YES
NO_MODULES=YES
NO_KERBEROS=YES
NO_GAMES=YES
NO_RESCUE=YES
NO_LOCALES=YES
NO_SYSCONS=YES
NO_INFO=YES
'
FlashDevice SanDisk 1G
cust_nobeastie()(
touch &dollar;{NANO_WORLDDIR}/boot/loader.conf
echo "beastie_disable=\"YES\"" &gt;&gt; &dollar;{NANO_WORLDDIR}/boot/loader.conf
)
customize_cmd cust_comconsole
customize_cmd cust_install_files
customize_cmd cust_allow_ssh_root
customize_cmd cust_nobeastie</programlisting>
</sect3>
</sect2>
<sect2>
<title>更新 NanoBSD</title>
<para>更新 <application>NanoBSD</application> 相對 &os; 而言較為簡單:</para>
<procedure>
<step>
<para>和之前一樣打造新的 <application>NanoBSD</application> 映像檔。</para>
</step>
<step>
<para>將新的映像檔放入正運行的
<application>NanoBSD</application> 中未用的分割區之一。</para>
<para>與之前最初安裝 <application>NanoBSD</application> 的步驟相比,
這一步驟最重要的區別在於:這次不用 <filename>_.disk.full</filename> 檔(它包含整個磁碟的映像檔)
而應安裝 <filename>_.disk.image</filename> 映像檔(這個檔案中,只包含一個系統分割區)。</para>
</step>
<step>
<para>重新啟動,並從新安裝的分割區中啟動系統。</para>
</step>
<step>
<para>如果一切順利的話,升級工作就完成了。</para>
</step>
<step>
<para>如果發生了任何問題,則可以從先前的分割區啟動
(其中包含了舊的、 可用的映像檔),來盡快恢復系統功能。
接下來可以修正新編譯的版本中存在的問題,並重複前述步驟。</para>
</step>
</procedure>
<para>要在正在運行的
<application>NanoBSD</application> 系統中安裝新的映像檔,可以使用位於
<filename>/root</filename> 目錄的
<filename>updatep1</filename>
<filename>updatep2</filename> script
實際上要用哪一個 script則取決於正在運行的系統是位於哪個分割區而定。</para>
<para>隨時提供新 <application>NanoBSD</application> 映像檔所提供的服務,
以及採用的傳輸方法的不同,您可以參考並使用下列三種方式之一:</para>
<sect3>
<title>使用 &man.ftp.1;</title>
<para>如果傳輸速度是第一要求的話,請採用下面例子:</para>
<screen>&prompt.root; <userinput>ftp myhost
get _.disk.image "| sh updatep1"</userinput></screen>
</sect3>
<sect3>
<title>使用 &man.ssh.1;</title>
<para>如果想更安全的話,應參考下面例子:</para>
<screen>&prompt.root; <userinput>ssh myhost cat _.disk.image.gz | zcat | sh updatep1</userinput></screen>
</sect3>
<sect3>
<title>使用 &man.nc.1;</title>
<para>如果遠程主機既不提供 &man.ftp.1; 服務,也不提供 &man.sshd.8; 服務的話:</para>
<procedure>
<step>
<para>首先,在提供映像檔的主機上開啟 TCP listen並讓它把映像檔傳給 client</para>
<screen>myhost&prompt.root; <userinput>nc -l 2222 &lt; _.disk.image</userinput></screen>
<note>
<para>請確認您所使用的 port 沒有被防火牆阻止來自
<application>NanoBSD</application> client 的連線請求。</para>
</note>
</step>
<step>
<para>連到提供新映像檔服務的主機,並執行 <filename>updatep1</filename> 這支 script</para>
<screen>&prompt.root; <userinput>nc myhost 2222 | sh updatep1</userinput></screen>
</step>
</procedure>
</sect3>
</sect2>
</sect1>
<index/>
</article>

@ -1,475 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!--
The FreeBSD Documentation Project
The FreeBSD Chinese (Traditional) Documentation Project
Original Revision: 1.5
-->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
<info><title>遠端安裝 &os; 作業系統而不必接 Remote Console</title>
<author><personname><firstname>Daniel</firstname><surname>Gerzo</surname></personname><affiliation>
<address><email>danger@FreeBSD.org</email></address>
</affiliation></author>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
</legalnotice>
<copyright>
<year>2008</year>
<holder>The &os; Documentation Project</holder>
</copyright>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
<abstract>
<para>本文介紹如何在沒辦法連到遠端 console 的機器做 &os; 遠端安裝。
本文構想來自於作者與 &a.mm; 的合作成果,
以及 &a.pjd; 所投注的諸多心血。</para>
</abstract>
</info>
<sect1 xml:id="background">
<title>緣起</title>
<para>世上有許多 server hosting provider但其中有官方支援 &os;
則不是相當多。 他們通常會在所提供的機器上有 &linux; distribution
的安裝支援。</para>
<para>有些會讓您可選擇喜好的 &linux; distribution 來裝,
像這種情況就可以試著安裝 &os;。 而有些則是會提供救急用的系統,
這種也可以用來安裝 &os;</para>
<para>本文介紹這些遠端基本安裝 &os; 的方式,以及 RAID-1 與
<application>ZFS</application> 設定步驟。</para>
</sect1>
<sect1 xml:id="intro">
<title>介紹</title>
<para>茲摘錄一下本文的目的以及闡述這邊所涵蓋的東西。
對於無官方支援 &os; 的代管服務(colocation)用戶而言,
本文中所介紹到的指令會相當有用。</para>
<procedure>
<step>
<para>正如先前 <link linkend="background">緣起</link> 所提到的,許多名聲還不賴的
server hosting 公司會提供一些救急用系統,可以透過
<acronym>LAN</acronym> 方式開機,也可以透過
<application>SSH</application> 方式進行管理。 通常會有該加值服務,
以讓他們的客戶可以連進來修復有問題的作業系統。
本節之後將介紹如何透過救急系統來安裝 &os;</para>
<!-- XXXTR: Solaris has a restore command, something like
sysrestore, FreeBSD Should have one too. -->
</step>
<step>
<para>下一節會介紹如何在本機設定以及打造最小巧的 &os; ——
該版最後會在遠端機器上透過 ramdisk 方式啟動,並以
<application>sysinstall</application><acronym>FTP</acronym>
mirror 站來安裝完整的 &os; 作業系統。</para>
</step>
<step>
<para>本文其餘部分將介紹安裝程序,以及 <application>ZFS</application>
檔案系統的設定。</para>
</step>
</procedure>
<sect2 xml:id="requirements">
<title>需求</title>
<para>為了成功完成遠端安裝,必須要有:</para>
<itemizedlist>
<listitem>
<para>要有可以上網的作業系統,並且 <application>SSH</application>
可以連線。</para>
</listitem>
<listitem>
<para>瞭解 &os; 的安裝程序</para>
</listitem>
<listitem>
<para>熟悉如何使用 &man.sysinstall.8;</para>
</listitem>
<listitem>
<para>&os; 安裝光碟片或者 <acronym>ISO</acronym> image 檔</para>
</listitem>
</itemizedlist>
</sect2>
</sect1>
<sect1 xml:id="preparation">
<title>準備 - <application>mfsBSD</application></title>
<para>在裝 &os; 之前,要先打造最小化的 &os; 作業系統 image 檔,
以便可以從硬碟上開機。 如此一來,新的系統就可以透過網路來操作,
而剩下來的安裝部分即可不必透過 console。</para>
<para><application>mfsBSD</application> 這套工具就是用來打造小型的
&os; image 檔。 <application>mfsBSD</application> (名字其中
<quote>mfs</quote> 就是 <quote>memory file system</quote>)所建造出來的
整套系統會透過 ramdisk 方式來運作。 由於此一特色,硬碟的部分就不受限,
因此可以用來安裝完整的 &os; 作業系統。 <application>mfsBSD</application>
的首頁位於 <uri xlink:href="http://people.freebsd.org/~mm/mfsbsd/">http://people.freebsd.org/~mm/mfsbsd/</uri>
其中連結有該工具的最新 release 部分。</para>
<para>請注意:<application>mfsBSD</application> 內部運作方式的細節,不
在本文介紹範圍之內。 若對這方面有興趣的讀者,可至
<application>mfsBSD</application> 官網查閱相關文件。</para>
<para>首先下載最新的 <application>mfsBSD</application> 並解壓縮之,
然後切到解壓縮後的工作目錄,也就是 <application>mfsBSD</application>
script 檔所在處:</para>
<screen>&prompt.root; <userinput>fetch http://people.freebsd.org/~mm/mfsbsd/mfsbsd-latest.tar.gz</userinput>
&prompt.root; <userinput>tar xvzf mfsbsd-1.0-beta1.tar.gz</userinput>
&prompt.root; <userinput>cd mfsbsd-1.0-beta1/</userinput></screen>
<sect2 xml:id="mfsbsd-config">
<title>設定 <application>mfsBSD</application></title>
<para>在將 <application>mfsBSD</application> 開機之前,
有幾個重要設定要先設妥。 此時最重要的設定,很明顯就是網路設定。
到底網路怎麼設最好,則取決於所處的網路環境,
以及該網路卡會以哪一種驅動程式載入而定。 我們將會看到
<application>mfsBSD</application> 如何在任何網路情況下進行設定。</para>
<para>另一件重要事就是設定 <systemitem class="username">root</systemitem> 密碼。
這點可以透過 <filename>conf/rootpw.conf</filename> 來完成。
請切記:該檔密碼是以明文方式存放,因此不建議放真正平常有在用的密碼。
然而這密碼只是臨時密碼而已,可以在之後開機時再做更換。</para>
<sect3>
<title>設定網路(<filename>conf/interfaces.conf</filename> 方式)</title>
<para>若對要裝的機器網卡為何還不知道是哪一款,但可以善加利用
<application>mfsBSD</application> 的自動偵測功能。
<application>mfsBSD</application> 的開機 script 會根據網卡的 MAC
位址範圍來偵測正確的驅動程式,像是下列的
<filename>conf/interfaces.conf</filename> 設定內容:</para>
<programlisting>initconf_interfaces="ext1"
initconf_mac_ext1="00:00:00:00:00:00"
initconf_ip_ext1="192.168.0.2"
initconf_netmask_ext1="255.255.255.0"</programlisting>
<para>別忘了在 <filename>conf/rc.conf</filename> 內要加上
<literal>defaultrouter</literal> 的相關設定:</para>
<programlisting>defaultrouter="192.168.0.1"</programlisting>
</sect3>
<sect3>
<title>設定網路(<filename>conf/rc.conf</filename> 方式)</title>
<para>若已經知道網卡是哪一種,那麼要設定網路的話直接改
<filename>conf/rc.conf</filename> 會比較方便。
該檔設定語法與 &os; 標準的 &man.rc.conf.5; 是一致的。</para>
<para>舉個例子,若知道該機器網卡是用 &man.re.4;,那麼就在
<filename>conf/rc.conf</filename> 做下列類似設定:</para>
<programlisting>defaultrouter="192.168.0.1"
ifconfig_re0="inet 192.168.0.2 netmask 255.255.255.0"</programlisting>
</sect3>
</sect2>
<sect2 xml:id="mfsbsd-build">
<title>打造 <application>mfsBSD</application> image</title>
<para>打造 <application>mfsBSD</application>
image 檔的過程相當簡單。</para>
<para>首先是把 &os; 安裝光碟或者安裝用的 <acronym>ISO</acronym> image
檔丟到 <filename>/cdrom</filename>
為維持所有例子的一致,本文假設都是用 &os; 7.0-RELEASE
<acronym>ISO</acronym>。 而把 ISO image 檔掛載到 <filename>/cdrom</filename> 目錄相當簡單,
就是用 &man.mdconfig.8;</para>
<screen>&prompt.root; <userinput>mdconfig -a -t vnode -u 10 -f 7.0-RELEASE-amd64-disc1.iso</userinput>
&prompt.root; <userinput>mount_cd9660 /dev/md10 /cdrom</userinput></screen>
<para>接著就開始打造可開機的 <application>mfsBSD</application>
image</para>
<screen>&prompt.root; <userinput>make BASE=/cdrom/7.0-RELEASE</userinput></screen>
<note>
<para>上述的 <command>make</command> 指令要在
<application>mfsBSD</application> 的最上層目錄執行,比方說 <filename>~/mfsbsd-1.0-beta1/</filename></para>
</note>
</sect2>
<sect2>
<title><application>mfsBSD</application> 開動</title>
<para>現在 <application>mfsBSD</application> image 已經備妥,
要上傳到遠端機器的救急系統或者預先安裝的 &linux; distribution。
要完成這工作最適合的工具就是 <application>scp</application></para>
<screen>&prompt.root; <userinput>scp disk.img root@192.168.0.2:.</userinput></screen>
<para>為了能順利啟動 <application>mfsBSD</application> image
要把檔案放在欲安裝機器的第一顆(可開機)硬碟上。
假設例子的第一顆開機硬碟代號為 <filename>sda</filename>
那麼作法就類似下面這樣:</para>
<screen>&prompt.root; <userinput>dd if=/root/disk.img of=/dev/sda bs=1m</userinput></screen>
<para>若一切順利,該 image 檔現在應該會在第一顆硬碟的
<acronym>MBR</acronym> 磁區並可以開始進行重開機了。 可以用
&man.ping.8; 工具來檢測該機器開機完畢與否。 一旦 ping 到之後,
就可以透過 &man.ssh.1; 連進去,並且用 <systemitem class="username">root</systemitem>
以及剛設定的密碼登入。</para>
</sect2>
</sect1>
<sect1 xml:id="installation">
<title>&os; 作業系統的安裝</title>
<para>現在 <application>mfsBSD</application> 已順利啟動,並且應該可以透過
&man.ssh.1; 方式來連。 本節將介紹如何建立 slice 分割、設定
<application>gmirror</application> 以作 RAID-1、如何以
<application>sysinstall</application> 來安裝 &os;
作業系統的最小化安裝。</para>
<sect2>
<title>準備硬碟</title>
<para>首先要作的是配置硬碟空間給 &os;,像是建立 slice 跟分割區。
很明顯地,目前在跑的作業系統是載入到系統記憶體內執行,
因此要對硬碟配置並無任何問題。 這些工作可以用
<application>sysinstall</application> 或者以 &man.fdisk.8; 搭配
&man.bsdlabel.8; 來完成。</para>
<para>首先先把各硬碟都先清空。 請對各硬碟作下列指令:</para>
<screen>&prompt.root; <userinput>dd if=/dev/zero of=/dev/ad0 count=2</userinput></screen>
<para>接著,以您慣用的工具來建立 slice 以及設定 label。 通常會建議以
<application>sysinstall</application> 工具來作會比較輕鬆,
或者是強而又不太會出槌的文字介面 &unix; 標準工具(像是 &man.fdisk.8;,
&man.bsdlabel.8;),這部分稍後也會一併介紹。 前者部分在 &os; Handbook
<link xlink:href="&url.books.handbook;/install-steps.html">安裝
&os;</link> 章節有相當詳盡的介紹,所以這邊主要要介紹的是如何建立
RAID-1 系統以及 <application>ZFS</application>
這邊會介紹建立以 &man.gmirror.8; 做成的小型 mirrored 檔案系統:
<filename>/</filename> (根目錄), <filename>/usr</filename> 以及 <filename>/var</filename>,而硬碟的其餘剩餘空間則通通以
&man.zpool.8; 做成 <application>ZFS</application> 的 mirrored 檔案系統
。 請注意:必須要先把 &os; 作業系統裝好並開完機後,才能進行設定
<application>ZFS</application> 檔案系統。</para>
<para>下面的例子會介紹如何建立 slice 以及 label、在每個分割區上啟用
&man.gmirror.8;、如何在每個 mirrored 分割區上建立
<application>UFS2</application> 檔案系統:</para>
<screen>&prompt.root; <userinput>fdisk -BI /dev/ad0</userinput> <co xml:id="fdisk"/>
&prompt.root; <userinput>fdisk -BI /dev/ad1</userinput>
&prompt.root; <userinput>bsdlabel -wB /dev/ad0s1</userinput> <co xml:id="bsdlabel-writing"/>
&prompt.root; <userinput>bsdlabel -wB /dev/ad1s1</userinput>
&prompt.root; <userinput>bsdlabel -e /dev/ad0s1</userinput> <co xml:id="bsdlabel-editing"/>
&prompt.root; <userinput>bsdlabel /dev/ad0s1 &gt; /tmp/bsdlabel.txt &amp;&amp; bsdlabel -R /dev/ad1s1 /tmp/bsdlabel.txt</userinput> <co xml:id="bsdlabel-restore"/>
&prompt.root; <userinput>gmirror label root /dev/ad[01]s1a</userinput> <co xml:id="gmirror1"/>
&prompt.root; <userinput>gmirror label var /dev/ad[01]s1d</userinput>
&prompt.root; <userinput>gmirror label usr /dev/ad[01]s1e</userinput>
&prompt.root; <userinput>gmirror label -F swap /dev/ad[01]s1b</userinput> <co xml:id="gmirror2"/>
&prompt.root; <userinput>newfs /dev/mirror/root</userinput> <co xml:id="newfs"/>
&prompt.root; <userinput>newfs /dev/mirror/var</userinput>
&prompt.root; <userinput>newfs /dev/mirror/usr</userinput></screen>
<calloutlist>
<callout arearefs="fdisk">
<para>對該硬碟建立 slice 並且在第零軌處將開機表作初始。
請對該機器所有硬碟都作此一動作。</para>
</callout>
<callout arearefs="bsdlabel-writing">
<para>對各硬碟寫入 label 以及 bootstrap 碼。</para>
</callout>
<callout arearefs="bsdlabel-editing">
<para>現在手動修改該硬碟的 label至於如何建立分割區(partitions)
請參閱 &man.bsdlabel.8; 說明。
分割區分別建立:<literal>a</literal> 是給 <filename>/</filename> (根目錄)
<literal>b</literal> 給 swap
<literal>d</literal><filename>/var</filename>
<literal>e</literal><filename>/usr</filename>
最後,會在稍後步驟把 <literal>f</literal>
<application>ZFS</application> 使用。</para>
</callout>
<callout arearefs="bsdlabel-restore">
<para>把剛剛的 label 設定先匯出,再匯入到第二顆硬碟上,
如此一來兩邊的硬碟 label 設定就會同樣。</para>
</callout>
<callout arearefs="gmirror1">
<para>在各分割區上啟用 &man.gmirror.8;</para>
</callout>
<callout arearefs="gmirror2">
<para>請注意:<option>-F</option> 選項是用在 swap 上。
這參數會讓 &man.gmirror.8; 認為該硬體是處於可靠狀態,
即使發生電源故障或系統當掉,也不會去同步。</para>
</callout>
<callout arearefs="newfs">
<para>在各個有做 mirror 的分割區上建立 <application>UFS2</application>
檔案系統</para>
</callout>
</calloutlist>
</sect2>
<sect2>
<title>系統安裝</title>
<para>這裡是最重要的一環,
本節介紹實際上如何在先前一節所做好的硬碟安裝最小化的 &os;
為了完成此一目標,所有檔案系統都必須掛載妥當,才能讓
<application>sysinstall</application> 可以把 &os; 裝到硬碟內:</para>
<screen>&prompt.root; <userinput>mount /dev/mirror/root /mnt</userinput>
&prompt.root; <userinput>mkdir /mnt/var /mnt/usr</userinput>
&prompt.root; <userinput>mount /dev/mirror/var /mnt/var</userinput>
&prompt.root; <userinput>mount /dev/mirror/usr /mnt/usr</userinput></screen>
<para>做完上述動作之後,請執行 &man.sysinstall.8;。 請從主選單中選擇
<guimenuitem>Custom</guimenuitem> 安裝,選
<guimenuitem>Options</guimenuitem><keycap>Enter</keycap>
然後以方向鍵移動到 <literal>Install Root</literal> 處,按
<keycap>Space</keycap> 鍵然後改為 <filename>/mnt</filename>,再按 <keycap>Enter</keycap>
鍵以將修改值存起來,然後按 <keycap>q</keycap> 鍵即可離開這個
<guimenuitem>Options</guimenuitem> 畫面。</para>
<warning>
<para>請注意:本步驟極為重要,若忽略的話那麼
<application>sysinstall</application> 就沒辦法安裝 &os;</para>
</warning>
<para>接著選 <guimenuitem>Distributions</guimenuitem>,然後移動游標到
<option>Minimal</option> 處,按 <keycap>Space</keycap> 鍵。
本文之所以介紹最小化安裝是為了要節省網路流量,因為系統安裝是透過
<application>ftp</application> 方式來進行。 要離開本畫面,請選
<option>Exit</option> 即可。</para>
<note>
<para>至於 <guimenuitem>Partition</guimenuitem>
<guimenuitem>Label</guimenuitem> 步驟則可略過,
因為這些目前已經都設定完畢了。</para>
</note>
<para><guimenuitem>Media</guimenuitem> 選單中請選
<option>FTP</option>。 請選最近的 mirror 站,並且讓
<application>sysinstall</application> 假設網路已經設妥。
接下來就會回到 <guimenuitem>Custom</guimenuitem> 選單。</para>
<para>最後,按下 <guimenuitem>Commit</guimenuitem> 即可開始進行安裝。
完成安裝後,即可離開 <application>sysinstall</application></para>
</sect2>
<sect2>
<title>後續安裝步驟</title>
<para>此時 &os; 作業系統應該已經裝完,然而還有些後續流程要做。
必須要做一些後續設定,才能讓 &os; 可以開機跟登入。</para>
<para>現在必須要用 &man.chroot.8; 以切到剛剛新裝好的系統內。
指令如下:</para>
<screen>&prompt.root; <userinput>chroot /mnt</userinput></screen>
<para>然後再打下列指令以繼續完成:</para>
<itemizedlist>
<listitem>
<para><literal>GENERIC</literal> kernel 複製到
<filename>/boot/kernel</filename>
目錄:</para>
<screen>&prompt.root; <userinput>cp -Rp /boot/GENERIC/* /boot/kernel</userinput></screen>
</listitem>
<listitem>
<para>建立 <filename>/etc/rc.conf</filename>,
<filename>/etc/resolv.conf</filename>
<filename>/etc/fstab</filename> 檔案。 別忘了,要記得在
<filename>/etc/rc.conf</filename> 檔設相關網路設定,以及把
<application>sshd</application> 啟用。 此外,
<filename>/etc/fstab</filename> 檔應該會長像下面這樣:</para>
<programlisting># Device Mountpoint FStype Options Dump Pass#
/dev/mirror/swap none swap sw 0 0
/dev/mirror/root / ufs rw 1 1
/dev/mirror/usr /usr ufs rw 2 2
/dev/mirror/var /var ufs rw 2 2
/dev/cd0 /cdrom cd9660 ro,noauto 0 0</programlisting>
</listitem>
<listitem>
<para>新增 <filename>/boot/loader.conf</filename> 檔,
並且內容填入下列:</para>
<programlisting>geom_mirror_load="YES"
zfs_load="YES"</programlisting>
</listitem>
<listitem>
<para>執行下列指令,以在下次開機時啟用 <application>ZFS</application>
</para>
<screen>&prompt.root; <userinput>echo 'zfs_enable="YES"' &gt;&gt; /etc/rc.conf </userinput></screen>
</listitem>
<listitem>
<para>使用 &man.adduser.8; 工具來新增其他使用者帳號。 別忘了,
至少要有一個帳號得加入 <systemitem class="groupname">wheel</systemitem> 群組,
才能在重開機後以該帳號切換為 root。</para>
</listitem>
<listitem>
<para>再次檢查上述相關的設定,是否有遺漏或打錯。</para>
</listitem>
</itemizedlist>
<para>現在該系統終於可以重開機了,請用 &man.reboot.8;
指令以重開機。</para>
</sect2>
</sect1>
<sect1 xml:id="zfs">
<title>ZFS</title>
<para>系統重開機完畢之後,應該就可以登入了。 歡迎使用全新的 &os; 安裝方式,
完全透過遠端而不必接上 remote console</para>
<para>接下來只剩要調整 &man.zpool.8; 以及建立 &man.zfs.8; 檔案系統而已。
<application>ZFS</application> 的建立及管理是相當淺顯易懂。 首先,
建立 mirrored pool</para>
<screen>&prompt.root; <userinput>zpool create tank mirror /dev/ad[01]s1f</userinput></screen>
<para>接著,建立檔案系統:</para>
<screen>&prompt.root; <userinput>zfs create tank/ports</userinput>
&prompt.root; <userinput>zfs create tank/src</userinput>
&prompt.root; <userinput>zfs set compression=gzip tank/ports</userinput>
&prompt.root; <userinput>zfs set compression=on tank/src</userinput>
&prompt.root; <userinput>zfs set mountpoint=/usr/ports tank/ports</userinput>
&prompt.root; <userinput>zfs set mountpoint=/usr/src tank/src</userinput></screen>
<para>一切就是這樣簡單。 若對 &os; 上的 <application>ZFS</application>
細節部分有興趣,請參閱 &os; Wiki 上的 <link xlink:href="http://wiki.freebsd.org/ZFS">ZFS</link> 一節說明。</para>
</sect1>
</article>

@ -1,5 +0,0 @@
#
# $FreeBSD$
#
DESTDIR?= ${DOCDIR}/zh_TW.Big5/books/${.CURDIR:T}

File diff suppressed because it is too large Load Diff

@ -1,241 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms
(SGML HTML, PDF, PostScript, RTF and so forth) with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code (SGML DocBook) must retain the above
copyright notice, this list of conditions and the following
disclaimer as the first lines of this file unmodified.
2. Redistributions in compiled form (transformed to other DTDs,
converted to PDF, PostScript, RTF and other formats) must reproduce
the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials
provided with the distribution.
THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
$FreeBSD$
Original revision: 1.23
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="overview">
<title>概論</title>
<para>歡迎參與 FreeBSD 文件計劃。維持優秀質量的文件對 FreeBSD 的成功來說十分重要,
而 FreeBSD 文件計劃(以下皆以 FDP 來代表 FreeBSD Documentation Project
的縮寫) 則與這些文件撰寫、更新息息相關,因此您的點滴貢獻都是十分寶貴的。</para>
<para>本文件最主要的目的就是清楚告訴您『FDP 的架構有哪些』、『如何撰寫並提交文件給 FDP』、
『如何有效運用工具來協助撰稿』。</para>
<para><indexterm>
<primary>Membership</primary>
</indexterm>
我們歡迎每個熱心的志士來加入 FDP 行列。FDP 並不限定每月必須交出多少稿量,才能加入。
您唯一須要作的就是訂閱 &a.doc;</para>
<para>讀完本份文件,您將會:</para>
<itemizedlist>
<listitem>
<para>瞭解有哪些文件是由 FDP 所維護的。</para>
</listitem>
<listitem>
<para>可以看懂 FDP 所維護的 SGML 原始文件。</para>
</listitem>
<listitem>
<para>知道如何來對文件作修改。</para>
</listitem>
<listitem>
<para>知道如何投稿自己的修改部份,並最後正式進入 FreeBSD 文件內。</para>
</listitem>
</itemizedlist>
<sect1 xml:id="overview-doc">
<title>FreeBSD 文件的組成部分</title>
<para>FDP 總共負責 FreeBSD 的 4 種類別的文件:</para>
<variablelist>
<varlistentry>
<term>線上手冊(manual)</term>
<listitem>
<para>英文版的系統 manual 並不是由 FDP 所撰寫的,因為它們是屬於 base system 的部份。
然而FDP 可以(也曾這麼做過)修改這些文件,來讓這些文件寫得更清楚,甚至是勘正錯誤的地方。</para>
<para>翻譯團隊負責將系統的線上手冊翻譯為不同的語言。 這些譯本都由 FDP 維護。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>FAQ</term>
<listitem>
<para>FAQ 主要是收集在各論壇或 newsgroup 會常問到或有可能會問到的 FreeBSD 相關問題與答案 。
(簡單講,就是『問答集』格式) 通常會擺在這裡面的問答格式,不會放太長的詳細內容。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>使用手冊(Handbook)</term>
<listitem>
<para>使用手冊主要是給 FreeBSD 使用者提供詳盡的線上參考資料。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Web site</term>
<listitem>
<para>FreeBSD 主要各項介紹方面的 WWW 部份,歡迎逛逛 <link xlink:href="&url.base;/index.html">http://www.FreeBSD.org/</link>
以及許多其他 mirror 站。這網站是許多人第一次接觸 FreeBSD 的地方。</para>
</listitem>
</varlistentry>
</variablelist>
<para>這四個文件組成部分都可透過 FreeBSD CVS tree 來取得。也就是說,這些文件的修改記錄對於任何人都是公開的,
而且無論是誰都可以用像是 <application>CSup</application>, <application>CVSup</application>
<application>CTM</application> 將文件取出來(checkout)並放在自己機器上做備份或副本參考等用途。</para>
<para>此外,許多人會寫些教學文件或維護有關 FreeBSD 內容的網站。(若作者同意的話)其中有些資料會保存在 FreeBSD 正式
CVS repository 內。而其他的文件,可能作者不希望被放在 FreeBSD repository 內而另存他處。
總之FDP 會盡力提供這些文件的連結。</para>
</sect1>
<sect1 xml:id="overview-before">
<title>在開工之前...</title>
<para>本文假設您已經瞭解:</para>
<itemizedlist>
<listitem>
<para>如何從 FreeBSD CVS repository 更新自己電腦上的 FreeBSD 文件部份(以 <application>CVS</application>
<application>CSup</application><application>CVSup</application> 或是
<application>CTM</application>) 或是用
<application>CVSup</application> 來下載 <emphasis>checked-out</emphasis> 的副本</para>
</listitem>
<listitem>
<para>如何用 FreeBSD Ports 套件管理機制或 &man.pkg.add.1; 來下載、安裝軟體。</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="overview-quick-start">
<title>快速上手篇</title>
<para>若想先自行試試看,並有信心可以作得到,那麼就照下面步驟吧。</para>
<procedure>
<step>
<para>安裝 <package>textproc/docproj</package> 這個組合型 port(meta-port)。</para>
<screen>&prompt.root; <userinput>cd /usr/ports/textproc/docproj</userinput>
&prompt.root; <userinput>make JADETEX=no install</userinput></screen>
</step>
<step>
<para>下載 FreeBSD <filename>doc</filename> tree 到本機上:
無論是用 CSup 或 CVSup 的 <literal>checkout</literal> 模式,
或是複製完整的 CVS repository 到本機上都可以。</para>
<para>若想在本機上只跑最低限度的 CVS repository 就好,那麼必須要
checkout 出 <filename>doc/share</filename> 以及 <filename>doc/en_US.ISO8859-1/share</filename>
這兩個目錄才行。</para>
<screen>&prompt.user; <userinput>cvs checkout doc/share</userinput>
&prompt.user; <userinput>cvs checkout doc/en_US.ISO8859-1/share</userinput></screen>
<para>若硬碟空間還算可以的話,那可以把所有語系的 doc 都 check out 出來:</para>
<screen>&prompt.user; <userinput>cvs checkout doc</userinput></screen>
</step>
<step>
<para>可依需要從 repository 中 checkout 出來你想修改某份現有的書籍或文章內容。
若打算撰寫新書或新文章的話,可以參考現有的部分作為實例來做。</para>
<para>舉例來說,若想寫篇新文章,內容是有關在 FreeBSD 與 Windows 2000 之間建立 VPN 連線,
那麼可以照類似下面這樣的作法:</para>
<procedure>
<step>
<para>Check out <filename>articles</filename> 目錄:</para>
<screen>&prompt.user; <userinput>cvs checkout doc/en_US.ISO8859-1/articles</userinput></screen>
</step>
<step>
<para>複製現有的文章作為範本。在這個例子中,您打算決定把新文章放在
<filename>vpn-w2k</filename> 的目錄下。</para>
<screen>&prompt.user; <userinput>cd doc/en_US.ISO8859-1/articles</userinput>
&prompt.user; <userinput>cp -R committers-guide vpn-w2k</userinput></screen>
</step>
</procedure>
<para>若是要修改現有文章,像是 FAQ(擺在 <filename>doc/en_US.ISO8859-1/books/faq</filename>)
,那麼要從 repository 中取出來(check out)</para>
<screen>&prompt.user; <userinput>cvs checkout doc/en_US.ISO8859-1/books/faq</userinput></screen>
</step>
<step>
<para>以編輯器來編寫 <filename>.xml</filename> 檔。</para>
</step>
<step>
<para><buildtarget>lint</buildtarget> 當輔助參數,來快速檢測文件結構及連結有無錯誤,
以下這個指令,實際上不會進行耗時的編書過程,只是先測試文件有無錯誤。</para>
<screen>&prompt.user; <userinput>make lint</userinput></screen>
<para>當編書的一切都就緒時,這時你可以用 <varname>FORMATS</varname>
變數來指定產生的格式為哪一種。 目前支援的格式共有:
<literal>html</literal>, <literal>html-split</literal>,
<literal>txt</literal>, <literal>ps</literal>,
<literal>pdf</literal>, <literal>rtf</literal>
所支援的格式列表最新版,可參考
<filename>doc/share/mk/doc.docbook.mk</filename> 檔。 請記得:
在單一指令中,若要同時產生多種格式的話,應使用引號(quotes)來將這些格式括起來。</para>
<para>舉例來說,若只要產生
<literal>html</literal> 格式就好,那麼就打:</para>
<screen>&prompt.user; <userinput>make FORMATS=html</userinput></screen>
<para>但若希望有 <literal>html</literal><literal>txt</literal> 格式的話,
你可能要打兩次 &man.make.1; 指令才能完成:</para>
<screen>&prompt.user; <userinput>make FORMATS=html</userinput>
&prompt.user; <userinput>make FORMATS=txt</userinput></screen>
<para>其實,也可以用單一指令來完成:</para>
<screen>&prompt.user; <userinput>make FORMATS="html txt"</userinput></screen>
</step>
<step>
<para>最後,以 &man.send-pr.1; 來提交修改的部份。</para>
</step>
</procedure>
</sect1>
</chapter>

@ -1,235 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms
(SGML, HTML, PDF, PostScript, RTF and so forth) with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code (SGML DocBook) must retain the above
copyright notice, this list of conditions and the following
disclaimer as the first lines of this file unmodified.
2. Redistributions in compiled form (transformed to other DTDs,
converted to PDF, PostScript, RTF and other formats) must reproduce
the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials
provided with the distribution.
THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
$FreeBSD$
Original revision: 1.32
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="tools">
<title>工具</title>
<para>FDP 使用一堆工具來協助管理 FreeBSD 文件、轉換文件格式等等。
因此,若要進行 FDP 工作的話,必須要學會這些工具才行。</para>
<para>這些工具都可以用 Ports 或 Packages 來安裝,以節省許多安裝的工夫。</para>
<para>您必須安裝這些工具,才能使用接下來各章節會介紹到的例子。 這些工具的用法,會在後續相關章節談到。 </para>
<tip>
<title>建議安裝 <package>textproc/docproj</package></title>
<para>裝了
<package>textproc/docproj</package> 可以更省時省力,它是個
組合型的 port(meta-port),本身並非軟體,只是將一些常用工具組合起來而已。
裝了這個 port 之後,『應該』就會自動下載、安裝本章所會介紹到的工具了。
若要處理中文的話,建議再裝 <package>chinese/docproj</package> 會比較好。</para>
<para>在這些 packages 當中,你可能會需要使用 JadeTeX 這個 macro 設定,
一旦選擇使用該 macro 的話,它會接著去裝 &tex;。由於 &tex; 算是個蠻大的套件,
除非你需要輸出 Postscript 或 PDF 格式,否則就不必裝了。</para>
<para>所以請考慮是否要節省編譯時間、硬碟空間,以判定要不要裝 JadeTeX (以及 &tex;)
了。若要一併裝起來的話:</para>
<screen>&prompt.root; <userinput>make JADETEX=yes install</userinput></screen>
<para>或是,不裝的話:</para>
<screen>&prompt.root; <userinput>make JADETEX=no install</userinput></screen>
<para>或者,也可以選擇 <package>textproc/docproj-jadetex</package> 或是 <package>textproc/docproj-nojadetex</package> 這兩個之一來裝,
它們都是已事先設定 <varname>JADETEX</varname> 變數的 slave ports
都一樣會裝 docproj 差別僅在於有沒有 JadeTeX 而已。
請注意:若只要輸出 HTML 或 ASCII 格式文件,那就不用裝 <application>JadeTeX</application>
而若要輸出 PostScript、PDF 格式,就需要裝 &tex; 才行。</para>
</tip>
<sect1 xml:id="tools-mandatory">
<title>必備工具</title>
<sect2>
<title>軟體</title>
<para>這些都是在進行 FreeeBSD 文件計劃時所會需要用上的工具程式,
而且可以用來轉換文件為 HTML、plain text以及 RTF 格式。這些相關套件在
<package>textproc/docproj</package> 都已經全部收錄了。</para>
<variablelist>
<varlistentry>
<term><application>Jade</application>
(<package>textproc/jade</package>)</term>
<listitem>
<para>DSSSL 規格的實作程式,可用來把標記語言的文件(marked up)轉換為其他格式像是HTML 及 &tex;</para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>Tidy</application>
(<package>www/tidy</package>)</term>
<listitem>
<para>HTML <quote>pretty printer</quote>,可用來把自動產生的 HTML 內容整理得更易閱讀、以便日後維護。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>Links</application>
(<package>www/links</package>)</term>
<listitem>
<para>文字操作模式的 WWW 瀏覽器(browser)可以把 HTML 檔轉為 plain text 格式。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>peps</application>
(<package>graphics/peps</package>)</term>
<listitem>
<para>文件中有些圖是存成 EPS 格式的,這些必須要轉為 PNG 格式,
才能讓一般瀏覽器可以正常觀看。</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>DTD 及 Entity</title>
<para>由於 FDP 有用到許多 DTD 跟 Entity因此在開工前要裝上這些才行。</para>
<variablelist>
<varlistentry>
<term>HTML DTD (<package>textproc/html</package>)</term>
<listitem>
<para>HTML 是用於 WWW 的標記語言,且也是 FreeBSD 網頁所使用的格式。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>DocBook DTD (<package>textproc/docbook</package>)</term>
<listitem>
<para>DocBook 是專門用來製作技術文件的標示語言版本,
FreeBSD 全部文件都是以 DocBook 所寫成的。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>ISO 8879 entities
(<package>textproc/iso8879</package>)</term>
<listitem>
<para>在 ISO 8879:1986 之中有 19 個 entity 被許多 DTD 所大量使用,
包括了數學符號、拉丁字母符號(尖重音等音節符號也是)以及希臘符號。</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>樣式表(Stylesheets)</title>
<para>這些樣式表都是用來轉換、重排文件的螢幕顯示、列印等效果處理</para>
<variablelist>
<varlistentry>
<term>Modular DocBook 樣式表
(<package>textproc/dsssl-docbook-modular</package>)</term>
<listitem>
<para>Modular DocBook 樣式表,是用來把 DocBook 的標記語言文件轉換為其他格式,像是:
HTML 或 RTF。</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
<sect1 xml:id="tools-optional">
<title>輔助工具</title>
<para>不一定得裝下列的工具才行,但是,裝了之後會更容易進行各項工作,
而且可輸出的格式也更具彈性。</para>
<sect2>
<title>軟體</title>
<variablelist>
<varlistentry>
<term><application>JadeTeX</application>
<application>teTeX</application>
(<package>print/jadetex</package>
<package>print/teTeX</package>)</term>
<listitem>
<para><application>Jade</application>
<application>teTeX</application> 可用來把 DocBook 格式文件轉為
DVI, Postscript 及 PDF 格式。安裝時請記得加上
<application>JadeTeX</application> 這個 macro這樣才會順便裝上這兩個套件。</para>
<para>若無意把文件轉換更多格式的話(舉例:只要 HTML, plain text, RTF 這些格式就夠的話)
,那麼就不用裝
<application>JadeTeX</application>
<application>teTeX</application>。 如此一來可省下一些的編譯時間、安裝空間,
因為 <application>teTeX</application> 大約要至少 30MB 空間。</para>
<important>
<para>若決定要裝
<application>JadeTeX</application> 以及
<application>teTeX</application> 的話,那麼在裝完 <application>JadeTeX</application> 之後,
要記得設定 <application>teTeX</application> 才行。
<filename>print/jadetex/pkg-message</filename> 內有詳細介紹相關步驟。</para>
</important>
</listitem>
</varlistentry>
<varlistentry>
<term><application>Emacs</application>
<application>XEmacs</application>
(<package>editors/emacs</package>
<package>editors/xemacs</package>)</term>
<listitem>
<para>這兩者編輯器都具有處理 SGML DTD 標記文件的特殊模式。
該模式提供一些指令,來簡化所需的打字次數,而且可以減少可能發生的錯誤。</para>
<para>不過,這些編輯器並不是必備的;任何文字編輯器都可以用來編輯標記語言文件。
不過,你可以透過類似上述這樣的編輯器,來讓這些繁瑣作業更輕鬆有效率些。</para>
</listitem>
</varlistentry>
</variablelist>
<para>若有推薦其他好用的處理 SGML 文件程式,請來信讓 &a.doceng; 知道,
如此一來,該軟體就會列入這裡介紹了。</para>
</sect2>
</sect1>
</chapter>

@ -1,383 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!-- Copyright (c) 1999 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms
(SGML HTML, PDF, PostScript, RTF and so forth) with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code (SGML DocBook) must retain the above
copyright notice, this list of conditions and the following
disclaimer as the first lines of this file unmodified.
2. Redistributions in compiled form (transformed to other DTDs,
converted to PDF, PostScript, RTF and other formats) must reproduce
the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials
provided with the distribution.
THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
$FreeBSD$
Original revision: 1.29
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="translations">
<title>翻譯時的常見問題</title>
<para>本章是翻譯 FreeBSD 文件(包含FAQ, Handbook, tutorials, manual pages等)的常見問題(FAQ)。</para>
<para>本文件 <emphasis>主要</emphasis> 是以 FreeBSD 德文翻譯計劃的翻譯 FAQ 為母本而來的,
原始撰稿者為 Frank Gr&uuml;nder <email>elwood@mc5sys.in-berlin.de</email> ,並由
Bernd Warken <email>bwarken@mayn.de</email> 再翻譯回英文版。</para>
<para>The FAQ is maintained by the &a.doceng;.</para>
<qandaset>
<qandaentry>
<question>
<para>FAQ 的目的是?</para>
</question>
<answer>
<para>隨著越來越多人參與 freebsd-doc 郵遞論壇,而且希望將 FreeBSD 文件翻譯為各種語言版本。
我們希望這份 FAQ 能儘可能為這些參與翻譯者提供快速的解惑。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para><phrase>i18n</phrase><phrase>l10n</phrase> 是什麼呢?</para>
</question>
<answer>
<para><phrase>i18n</phrase>
<phrase>internationalization</phrase> 的簡寫,而 <phrase>l10n</phrase>
則是 <phrase>localization</phrase> 的簡寫。這些都是為了書寫方便而用的簡寫。</para>
<para><phrase>i18n</phrase> 就是開頭為 <quote>i</quote> 後面有 18 個字母,最後接 <quote>n</quote>
同理,
<phrase>l10n</phrase> 則是開頭為 <quote>l</quote> 後面有 10 個字母,最後接 <quote>n</quote></para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>有專門給譯者參與討論的 mailing list 嗎?</para>
</question>
<answer>
<para>有啊,不同的語系翻譯者都各自有自屬的 mailing lists。這份 <link xlink:href="http://www.freebsd.org/docproj/translations.html">翻譯計劃清單</link>
有列出各翻譯計劃的詳細 mailing lists 及相關網站。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>需要更多人一起參與翻譯嗎?</para>
</question>
<answer>
<para>當然囉,越多人參與翻譯,那麼就能夠越快翻完,而且英文版文件若有增減、更新的話,
各翻譯版也可以儘快同步囉。</para>
<para>不一定得是專業譯者,才能參與翻譯的。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>有要求哪些語言能力呢?</para>
</question>
<answer>
<para>理論上,必須要對英文非常熟稔,而且很明顯地,對想翻譯的語言必須要能運用自如。</para>
<para>英文並非一定要會的。比如說,可以把西班牙文(Spanish)的 FAQ 翻譯為匈牙利文(Hungarian)。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>該學會哪些程式的使用呢?</para>
</question>
<answer>
<para>強烈建議在自己機器上也建立 FreeBSD CVS repository 的備份(至少文件部分),可以用
<application>CTM</application>
<application>CVSup</application> 都可以。Handbook 中的 "更新、升級 FreeBSD"
一章內有提到如何使用這些程式。</para>
<para>此外,需要熟悉 <application>CVS</application> 用法。
如此一來,你可以查閱不同版本之間的差異處。</para>
<para>[XXX To Do(尚未撰稿,仍待補充) -- 寫份上手說明(tutorial)來介紹如何以 CVSup
取得文件部分,以及察看不同版本之間的差異。]</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>要怎麼找出來還有誰要跟我一起翻譯的呢?</para>
</question>
<answer>
<para><link xlink:href="http://www.FreeBSD.org/docproj/translations.html">文件計劃的翻譯</link> 這列了目前已知的各翻譯者成果
,如果已經有其他人也在做跟你一樣的翻譯工作,那麼請不要重複浪費人力,
請與他們聯繫看看還有哪些地方可以幫上忙的。</para>
<para>若上面並未列出你母語的翻譯,或是也有人要翻譯但還未公開宣布的話,那麼就寄信到 &a.doc; 吧。
</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>都沒人翻譯為我所使用的語言,該怎麼辦?</para>
</question>
<answer>
<para>恭喜啊,你剛好踏上 <quote>FreeBSD
<replaceable>你的母語</replaceable> 文件翻譯計劃</quote> 的啟程之路,歡迎上船。</para>
<para>首先呢,先判斷是否有妥善規劃時間,因為你只有一個人在翻而已,
因此,相關翻譯成果的公布、與其他可能會幫忙的志工們聯繫這些工作都是你的職責所在。</para>
<para>寫信到 &a.doc; 向大家宣布你正準備要翻譯,然後文件計劃的翻譯部分就會更新相關資料</para>
<para>若你的國家已經有人提供 FreeBSD 的 mirror(映設) 服務的話,那麼就先跟他們聯繫,
並詢問你是否在上面可以有網頁空間來放相關計劃資料,
以及是否可以有提供 email 帳號或 mailing list 服務。</para>
<para>然後,就開始翻文件囉,一開始翻譯的時候,先找些篇幅較短的文件會比較容易些
&mdash; 像是 FAQ 啦,或是如何上手之類的說明文章。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>已經翻好一些文件了,該寄到哪呢?</para>
</question>
<answer>
<para>這要看情況而定。 若你是在翻譯團隊內做的話(像是日本、德國)
他們會有自己內部流程來決定翻譯文件怎麼送,這些大致流程會在他們網頁上面有寫。</para>
<para>若你是某語系的唯一翻譯者(或你是負責某翻譯計劃,並想把成果回饋給 FreeBSD 計劃)
,那麼你就應該把自己的翻譯成果寄給 FreeBSD 計劃。(細節請看下個問題)</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>我是該語系的唯一翻譯者,該怎麼把翻譯成果寄出去呢?</para>
<para>或者</para>
<para>我們是翻譯團隊,該怎麼把我們成員翻譯成果寄出去呢?</para>
</question>
<answer>
<para>首先,請先確定你的翻譯成果組織條理分明,並可正確編譯,也就是說:
把它擺到現有文件架構內是可以正確編譯成功的。</para>
<para>目前FreeBSD 文件都是放在最上層的 <filename>doc/</filename> 目錄內。
而該目錄下的則依其語系來做分類命名的,依照 ISO639 定義(<filename>/usr/share/misc/iso639</filename>
的這個 FreeBSD 版本比 1999/01/20 還新)。</para>
<para>若你這個語系可能會有不同編碼方式(像是:中文)
那麼就應該會像下面這樣,來依你所使用的編碼方式細分。</para>
<para>最後,你應該建立好各文件的目錄了。</para>
<para>舉例來說,假設有瑞典文(Swedish)版的翻譯,那麼應該會長像:</para>
<programlisting>doc/
sv_SE.ISO8859-1/
Makefile
books/
faq/
Makefile
book.xml</programlisting>
<para><literal>sv_SE.ISO8859-1</literal> 是依照
<filename>語系(lang).編碼(encoding)</filename>
的規則來建立的譯名。
請注意:其中有兩個 <filename>Makefiles</filename> 檔,它們是用來編書的。</para>
<para>然後請用 &man.tar.1;&man.gzip.1; 來把你的翻譯文件壓縮起來,並寄到本計劃來。</para>
<screen>&prompt.user; <userinput>cd doc</userinput>
&prompt.user; <userinput>tar cf swedish-docs.tar sv_SE.ISO8859-1</userinput>
&prompt.user; <userinput>gzip -9 swedish-docs.tar</userinput></screen>
<para>接著,把 <filename>swedish-docs.tar.gz</filename> 放到網頁空間上,若你沒有自己網頁空間的話(ISP不提供)
,那麼可以該檔寄到 &a.doceng; 來。</para>
<para>還有,記得用 &man.send-pr.1; 以正式通知大家;你已經寄出翻譯文件了,
還有,若有人可以幫忙檢閱、複審文件的話,對翻譯品質較好,
因為這也有助於提升翻譯品質的流暢度。</para>
<para>最後,會有人(可能是文件計劃總管,或是 &a.doceng; 成員)
會檢閱你的翻譯文件,並確認是否可正常編譯。此外,他們會特別注意下列幾點:</para>
<orderedlist>
<listitem>
<para>你的檔案是否都有用 RCS tag (像是 "ID" 之類的)</para>
</listitem>
<listitem>
<para><filename>sv_SE.ISO8859-1</filename> 是否可以順利 <command>make all</command> 編譯呢?</para>
</listitem>
<listitem>
<para><command>make install</command> 是否結果有正確?</para>
</listitem>
</orderedlist>
<para>若有問題的話,那麼檢閱者會叮嚀你,來讓這些翻譯成果可以正確使用。</para>
<para>若沒問題的話,那麼就會很快把你的翻譯成果 commit 進去了。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>可以加入某語系或某國家才有的東西到翻譯內容內嗎?</para>
</question>
<answer>
<para>我們希望不要這麼做。</para>
<para>舉例來說,假設你正準備把 Handbook 翻譯為韓文版,
並希望把韓國零售處也加到你翻譯的 Handbook 韓文版內。</para>
<para>我們想不出來有啥原因,為什麼不把這些資訊提供給英文版呢?(或是德文、西班牙文、日文等 &hellip;)
因為,有可能英語讀者跑去韓國時,會想買 FreeBSD 相關產品。
此外,這也可以提升 FreeBSD 的可見度,很顯然的,這並不是件壞事啊。</para>
<para>若你有某國才有的資料,請(用 &man.send-pr.1; )提供給英文版 Handbook 以作為修訂
,然後再把英文版的修訂部分,翻為你要翻譯的 Handbook 吧。</para>
<para>感恩,謝謝。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>要怎麼把該語系特有的字元寫進去翻譯內容呢?</para>
</question>
<answer>
<para>文件內所有的非 ASCII(Non-ASCII) 字元,都要使用 SGML entities 才能寫進去。</para>
<para>簡單來說,長相一開頭會是 &amp; 符號(&amp;),然後是該 entity 名稱,最後接上分號(;)。</para>
<para>這些 entity 名稱都是 ISO8879 所制訂的,而 port tree 內則在
<package>textproc/iso8879</package></para>
<para>以下舉一些例子:</para>
<segmentedlist>
<segtitle>Entity名稱</segtitle>
<segtitle>實際樣子</segtitle>
<segtitle>介紹</segtitle>
<seglistitem>
<seg>&amp;eacute;</seg>
<seg>&eacute;</seg>
<seg><quote>e</quote>,並帶尖、重音(acute accent)</seg>
</seglistitem>
<seglistitem>
<seg>&amp;Eacute;</seg>
<seg>&Eacute;</seg>
<seg><quote>E</quote>,並帶尖、重音(acute accent)</seg>
</seglistitem>
<seglistitem>
<seg>&amp;uuml;</seg>
<seg>&uuml;</seg>
<seg><quote>u</quote>,並帶日耳曼語系中的母音變化(umlaut)</seg>
</seglistitem>
</segmentedlist>
<para>在裝了 iso8879 這個 port 之後,就可以在
<filename>/usr/local/share/xml/iso8879</filename> 找到這些的詳細列表。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>如何稱呼讀者呢?</para>
</question>
<answer>
<para>在英文文件內,讀者都是以 <quote>you</quote> 來稱呼,而有些語言並沒有正式/非正式的區隔。</para>
<para>若你所要翻的語言可以區別這些差異,那麼請用該語系在一般技術文件上所使用的稱呼吧。
如果容易造成困惑的話,那麼請改用較中性的稱呼來取代。</para>
<!--
摘自 http://fatpipi.cirx.org/~vanilla/rules.txt
如非必要,翻譯文章內盡量少用直接稱呼你我他的用字。
如果真的得用,就採用第三人稱(用【他】而非【你】),還有就是用複數(用【你們】而非【你】)
當然這還是得配合原文的上下語意。如果他是寫 "I" 而翻譯成 "我",則無可厚非。
但是對於文內絕大多數的"You..... you ...etc"
其實都可以把【你】簡化或是避免掉,這對閱讀時候的順暢感應該有幫助。
-->
</answer>
</qandaentry>
<qandaentry>
<question>
<para>翻譯成果內要不要附上一些其他訊息呢?</para>
</question>
<answer>
<para>當然要。</para>
<para>每份英文版原稿的開頭,通常會有像下面的內容:</para>
<programlisting>&lt;!--
The FreeBSD Documentation Project
&dollar;FreeBSD: doc/en_US.ISO8859-1/books/fdp-primer/translations/chapter.xml,v 1.5 2000/07/07 18:38:38 dannyboy Exp &dollar;
--&gt;</programlisting>
<para>實際上的內容可能稍有不同,但每份原稿都會附上 &dollar;FreeBSD&dollar; 這一行以及
<literal>The FreeBSD Documentation Project</literal> 宣告。
請注意:&dollar;FreeBSD 開頭的這行是會由 CVS 隨著每次異動而自動更改的,
所以,新檔案的話請保持原狀(也就是只要寫 <literal>&dollar;FreeBSD&dollar;</literal> 就好了)。</para>
<para>翻譯文件中,必須都要有 &dollar;FreeBSD&dollar; 這行,並且把
<literal>FreeBSD Documentation Project</literal> 這行改為
<literal>The FreeBSD 你的語系
Documentation Project</literal></para>
<para>此外,還必須加上第三行來指出你所翻譯的,到底是以英文版原稿的哪一版本為母本所做的翻譯。</para>
<para>因此呢,西班牙文版(Spanish)的檔案開頭應該是長像這樣:</para>
<programlisting>&lt;!--
The FreeBSD Spanish Documentation Project
&dollar;FreeBSD: doc/es_ES.ISO8859-1/books/fdp-primer/translations/chapter.xml,v 1.3 1999/06/24 19:12:32 jesusr Exp &dollar;
Original revision: 1.11
--&gt;</programlisting>
</answer>
</qandaentry>
</qandaset>
</chapter>

@ -1,440 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!-- Copyright (c) 1998 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms
(SGML HTML, PDF, PostScript, RTF and so forth) with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code (SGML DocBook) must retain the above
copyright notice, this list of conditions and the following
disclaimer as the first lines of this file unmodified.
2. Redistributions in compiled form (transformed to other DTDs,
converted to PDF, PostScript, RTF and other formats) must reproduce
the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials
provided with the distribution.
THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
$FreeBSD$
Original revision: 1.48
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="writing-style">
<title>文件的撰寫風格</title>
<para>由於 FreeBSD 文件是由眾多作者所維護的,為了保持寫作風格的一貫性,
於是就產生較有共識的寫作規則,請各位記得要遵守。</para>
<variablelist>
<varlistentry>
<term>使用美式英語</term>
<listitem>
<para>同一個字在不同種類的英語會有著不同的拼法。
遇到拼字不同的情況,請採用美式英語拼法。 像是:
請改用 <quote>color</quote>,而非 <quote>colour</quote>
請改用 <quote>rationalize</quote>,而非 <quote>rationalise</quote>
等等類似字彙。</para>
<note>
<para>若文章採用英式英語也可以接受,但必須全篇文章都採用同一拼法才行
。 而文件的其他部份,像是書、網頁、 manual
說明等則必須採用美式英語。</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term>不要用簡寫</term>
<listitem>
<para>請不要簡寫(contraction)。 請務必將完整的字寫出來。 比如:
<quote>Don't use contractions</quote> 這句有用到簡寫,就要避免。</para>
<para>正式書面寫法避免簡寫的原因,乃是因為如此一來字句意思較精準,
且對譯者會比較輕鬆些。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>正確使用 serial comma 以及頓號</term>
<listitem>
<para>英文段落通常會逗號(,)作為該句所提到的各項目的語氣區隔。
並且會在最後一個提到的項目時,先加上逗號再接上 <quote>and</quote>
最後才是最後的項目。</para>
<para>舉個例子,看看下面這句:</para>
<blockquote>
<para>This is a list of one, two and three items.</para>
</blockquote>
<para>那麼這一句到底是有三個項目(<quote>one</quote><quote>two</quote>
<quote>three</quote>)呢?或者是只有兩個項目(<quote>one</quote>
<quote>two and three</quote>)呢?</para>
<para>因此較妥的方式是以 serial comma 的方式,才能正確表達語意:</para>
<blockquote>
<para>This is a list of one, two, and three items.</para>
</blockquote>
<para>然而,在翻譯過程中,建議把逗號(,)部份改為頓號(、),並且
<quote>and</quote> 的部份可略而不翻,以免語意頓塞。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>避免使用贅詞</term>
<listitem>
<para>請試著避免使用贅詞(redundant phrase)。 尤其是
<quote>這個指令</quote><quote>這個檔案</quote><quote>man
指令</quote> 這幾個通常都是不必要的贅詞。</para>
<para>以指令(command)方面舉例,比較妥當的用法是第二句的例子:</para>
<informalexample>
<para>使用 <command>cvsup</command> 指令來更新原始碼。</para>
</informalexample>
<informalexample>
<para>使用 <command>cvsup</command> 來更新原始碼。</para>
</informalexample>
<para>以檔案(filename)方面舉例,比較妥當的用法是第二句的例子:</para>
<informalexample>
<para>&hellip; 在這個
<filename>/etc/rc.local</filename> 檔案 &hellip;</para>
</informalexample>
<informalexample>
<para>&hellip;
<filename>/etc/rc.local</filename>&hellip;</para>
</informalexample>
<para>以 man(manual)方面舉例,比較妥當的用法是第二句(有用到 SGML
<tag>citerefentry</tag> 標籤)</para>
<informalexample>
<para>請打 <command>man csh</command> 指令以參閱詳情說明。</para>
</informalexample>
<informalexample>
<para>詳情請參閱 &man.csh.1;</para>
</informalexample>
</listitem>
</varlistentry>
<varlistentry>
<term>每句後面加上兩個空白</term>
<listitem>
<para>為了使文章更易閱讀,以及讓 <application>Emacs</application>
之類的工具容易運用,請在每一完整句子後面加上兩個空白。</para>
<para>不過,句號(.)後面有接大寫字母,
並不一定表示前一個句點所在處就是完整句子,
尤其是名字部份常常會有這現象。 像是 <quote>Jordan K. Hubbard</quote>
這人名就是很好的例證:句號後面接空白,然後是大寫的
<literal>H</literal>,然而這肯定並不是兩段句子。</para>
</listitem>
</varlistentry>
</variablelist>
<para>撰寫風格的相關細節,可參閱 William Strunk 所寫的 <link xlink:href="http://www.bartleby.com/141/">Elements of Style</link></para>
<sect1 xml:id="writing-style-guide">
<title>Style guide</title>
<para>由於 Handbook 是由眾多作者所維護,為了保持寫作風格的一貫性,
請遵守下列撰寫風格。</para>
<sect2>
<title>大小寫</title>
<para>Tag 的部份都是用小寫字母,譬如是用 <literal>&lt;para&gt;</literal>
<emphasis>而非</emphasis> <literal>&lt;PARA&gt;</literal></para>
<para>而 SGML 內文則是用大寫字母表示,像是:
<literal>&lt;!ENTITY&hellip;&gt;</literal>
<literal>&lt;!DOCTYPE&hellip;&gt;</literal>
<emphasis>而不是</emphasis>
<literal>&lt;!entity&hellip;&gt;</literal>
<literal>&lt;!doctype&hellip;&gt;</literal></para>
</sect2>
<sect2>
<title>縮寫字</title>
<para>縮寫字(acronym)通常在書中第一次提到時,必須同時列出完整拼法,
比如:"Network Time Protocol (<acronym role="Network Time Protocol">NTP</acronym>)"。
定義縮寫字之後,應該儘量只使用該縮寫字(而非完整詞彙,
除非使用完整詞彙可以更能表達語意)來表達即可。
通常每本書只會第一次提到時,才會列出完整詞彙,
但若您高興也可以在每章第一次提到時又列出完整詞彙。</para>
<para>此外,同一縮寫字在前三次使用時,須使用 &lt;acronym&gt; 標籤,
並把完整詞彙附在 <literal>role</literal> 屬性內做說明。
如此一來就會建立詞彙表,並且當滑鼠移至該縮寫字上方時,
就會顯示完整詞彙。</para>
</sect2>
<sect2>
<title>縮排</title>
<para><emphasis>無論</emphasis> 檔案縮排設定為何,
每個檔案一開始的縮排(indentation)都是從 0 縱列開始</para>
<para>未完的標籤會以多兩個空白來增加縮排,
結尾的標籤則少兩個空白來縮減縮排。 若已達 8 個空白,則以 tab 取代之。
此外,在 tab 前面不要再用空白,也不要在每行後面加上空白。
每個 tag 的內文若超過一行的話,則接下來的就多兩個空白以做縮排。</para>
<para>舉個例子,這節所用的寫法大致是下面這樣:</para>
<programlisting><![CDATA[+--- 這是 0 縱列
V
<chapter>
<title>...</title>
<sect1>
<title>...</title>
<sect2>
<title>縮排</title>
<para><emphasis>無論</emphasis> 檔案縮排設定為何,
每個檔案一開始的縮排(indentation)都是從 0 縱列開始。</para>
...
</sect2>
</sect1>
</chapter>]]></programlisting>
<para>若用 <application>Emacs</application>
<application>XEmacs</application> 來編輯這檔,那麼會自動進入
<literal>sgml-mode</literal> 模式,
然後就會強制使用每個檔案最下方的環境設定。</para>
<para><application>Vim</application> 愛用者也可以用下列設定來調整:</para>
<programlisting>augroup sgmledit
autocmd FileType sgml set formatoptions=cq2l " 特殊格式選項
autocmd FileType sgml set textwidth=70 " 在 70 縱列處即自動換行
autocmd FileType sgml set shiftwidth=2 " 自動縮排 2 個空白
autocmd FileType sgml set softtabstop=2 " 按 Tab 會自動轉為兩個空白縮排
autocmd FileType sgml set tabstop=8 " 把 8 個空白轉為 tab
autocmd FileType sgml set autoindent " 自動縮排
augroup END</programlisting>
</sect2>
<sect2>
<title>Tag 風格</title>
<sect3>
<title>Tag 空行</title>
<para>同一縮排等級的標籤要以空一行來做區隔,而不同縮排等級的則不必。
比如:</para>
<informalexample>
<programlisting><![CDATA[<article lang='zh_tw'>
<articleinfo>
<title>NIS</title>
<pubdate>October 1999</pubdate>
<abstract>
<para>...
...
...</para>
</abstract>
</articleinfo>
<sect1>
<title>...</title>
<para>...</para>
</sect1>
<sect1>
<title>...</title>
<para>...</para>
</sect1>
</article>]]></programlisting>
</informalexample>
</sect3>
<sect3>
<title>標籤的分行</title>
<para>像是 <tag>itemizedlist</tag>
這類的標籤事實上本身不含任何文字資料,必須得由其他標籤來補充內文。
這類的標籤會獨用一整行。</para>
<para>另外,像是 <tag>para</tag>
<tag>term</tag> 這類的標籤並不需搭配其他標籤,
就可附上文字資料,並且在標籤後面的<emphasis>同一行</emphasis>
內即可立即寫上這些內文。</para>
<para>當然,這兩類的標籤結尾時也是跟上面道理相同。</para>
<para>不過,當上述這兩種標籤混用時,會有很明顯的困擾。</para>
<para>當第一類標籤的後面接上第二類標籤的話,
那麼要把這兩類標籤各自分行來寫。 後者標籤的段落,
也是需要做適當縮排調整。</para>
<para>而第二類標籤結尾時,可以與第一類標籤的結尾放在同一行。</para>
</sect3>
</sect2>
<sect2>
<title>空白的更改</title>
<para>在 commit 修改時,<emphasis>請別在修改內容的同時,
也一起更改編排格式</emphasis></para>
<para>如此一來,像是 Handbook 翻譯團隊才能迅速找出你改了哪些內容,
而不用費心思去判斷該行的改變,是由於格式重排或者內容異動。</para>
<para>舉例說明,若要在某段加上兩個句子,如此一來該段落的某行勢必會超出 80
縱列,這時請先 commmit 修改。 接著,再修飾過長行落的換行,然後再次
commit 之。 而第二次的 commit 紀錄,請明確說明這只是 whitespace-only
(修改空白而已) 的更改,如此一來,翻譯團隊就可以忽略第二次 commit 了
</para>
</sect2>
<sect2>
<title>Nonbreaking space</title>
<para>請避免一些情況下的斷行:造成版面醜醜的、或是須連貫表達的同一句子。
斷行的情況會隨所閱讀的工具不同而有所不同。 尤其是透過純文字瀏覽器來看
HTML 時會更明顯看到類似下面這樣不好的編排段落:</para>
<literallayout class="monospaced">Data capacity ranges from 40 MB to 15
GB. Hardware compression &hellip;</literallayout>
<para>請使用 <literal>&amp;nbsp;</literal> 以避免同句子之間的斷行,
以下示範如何使用 nonbreaking spaces</para>
<itemizedlist>
<listitem>
<para>在數字與單位之間:</para>
<programlisting><![CDATA[57600&nbsp;bps]]></programlisting>
</listitem>
<listitem>
<para>在程式名稱與版號之間:</para>
<programlisting><![CDATA[FreeBSD&nbsp;4.7]]></programlisting>
</listitem>
<listitem>
<para>multiword 之間 (使用時請小心,像是 <quote>The FreeBSD Brazilian
Portuguese Documentation Project</quote> 這類由三到四個字所組成的,
則不用加。)</para>
<programlisting><![CDATA[Sun&nbsp;Microsystems]]></programlisting>
</listitem>
</itemizedlist>
</sect2>
</sect1>
<sect1 xml:id="writing-style-word-list">
<title>詞彙表</title>
<para>以下為 FreeBSD 文件計劃編排時所採用的小型詞彙表。
若找不到要找的詞彙,請參閱 <link xlink:href="http://www.oreilly.com/oreilly/author/stylesheet.html">O'Reilly
word list</link></para>
<itemizedlist>
<listitem>
<para>2.2.X</para>
</listitem>
<listitem>
<para>4.X-STABLE</para>
</listitem>
<listitem>
<para>CD-ROM</para>
</listitem>
<listitem>
<para>DoS <emphasis>(Denial of Service)</emphasis> </para>
</listitem>
<listitem>
<para>Ports Collection</para>
</listitem>
<listitem>
<para>IPsec</para>
</listitem>
<listitem>
<para>Internet</para>
</listitem>
<listitem>
<para>MHz</para>
</listitem>
<listitem>
<para>Soft Updates</para>
</listitem>
<listitem>
<para>Unix</para>
</listitem>
<listitem>
<para>disk label</para>
</listitem>
<listitem>
<para>email</para>
</listitem>
<listitem>
<para>file system</para>
</listitem>
<listitem>
<para>manual page</para>
</listitem>
<listitem>
<para>mail server</para>
</listitem>
<listitem>
<para>name server</para>
</listitem>
<listitem>
<para>null-modem</para>
</listitem>
<listitem>
<para>web server</para>
</listitem>
</itemizedlist>
</sect1>
</chapter>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,356 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!--
The FreeBSD Documentation Project
$FreeBSD$
Original revision: 1.21
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="GEOM">
<info><title>GEOM: Modular Disk Transformation Framework</title>
<authorgroup>
<author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Written by </contrib></author>
</authorgroup>
</info>
<sect1 xml:id="GEOM-synopsis">
<title>概述</title>
<indexterm>
<primary>GEOM</primary>
</indexterm>
<indexterm>
<primary>GEOM Disk Framework</primary>
<see>GEOM</see>
</indexterm>
<para>本章涵蓋如何在 &os; 的 GEOM 架構下使用磁碟,
包含用來設定幾種常用的 <acronym role="Redundant Array of Inexpensive Disks磁碟陣列系統">RAID</acronym>
的控制工具。本章不會深入探討 GEOM 如何處理底層的 I/O這類資訊請參考
&man.geom.4; 及相關的 SEE ALSO 部份。本章也非 <acronym>RAID</acronym>
設定指南,在這裡只會討論目前 GEOM 支援的 <acronym>RAID</acronym> 模式。
</para>
<para>讀完這章,您將了解︰</para>
<itemizedlist>
<listitem>
<para>透過 GEOM 可支援哪些模式的 <acronym>RAID</acronym></para>
</listitem>
<listitem>
<para>如何使用基本工具來配置、操作、維護不同模式的
<acronym>RAID</acronym></para>
</listitem>
<listitem>
<para>如何透過 GEOM 來完成鏡射(mirror)、分散連結(stripe)、加密(encrypt)
、遠端連接磁碟等。</para>
</listitem>
<listitem>
<para>當 GEOM 架構下的磁碟發生問題,如何排除。</para>
</listitem>
</itemizedlist>
<para>在開始閱讀這章之前,您需要︰</para>
<itemizedlist>
<listitem>
<para>了解 &os; 如何看待磁碟(<xref linkend="disks"/>) 。</para>
</listitem>
<listitem>
<para>知道如何設定、安裝新的 &os; 核心
(<xref linkend="kernelconfig"/>) 。</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="GEOM-intro">
<title>GEOM 導論</title>
<para>GEOM 透過 privoder(即 <filename>/dev/</filename>
下的特殊裝置檔案) 來操控 classes(如 Master Boot Records、
<acronym>BSD</acronym> labels 等) 。GEOM 支援多種軟體
<acronym>RAID</acronym> 配置,透過 GEOM 存取時,
作業系統和應用程式不會意識到 GEOM 存在。</para>
</sect1>
<sect1 xml:id="GEOM-striping">
<info><title>RAID0 - 分散連結(striping)</title>
<authorgroup>
<author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Written by </contrib></author>
<author><personname><firstname>Murray</firstname><surname>Stokely</surname></personname></author>
</authorgroup>
</info>
<indexterm>
<primary>GEOM</primary>
</indexterm>
<indexterm>
<primary>分散連結(Striping)</primary>
</indexterm>
<para>分散連結(striping) 可用來連結多個磁碟成為一大塊空間。
很多時候硬體控制器可以完成這件事,不過 GEOM 也提供了軟體版本的
<acronym>RAID</acronym>0也就是分散連結(striping)。</para>
<para><acronym>RAID</acronym>0 裡,資料會被切分成很多塊,
再分散寫入全部的磁碟。例如要寫入 256k 的資料到單一磁碟,在
四個磁碟的 <acronym>RAID</acronym>0 中可同時寫入 64k 到四個磁碟裡,
因此可大幅提升 I/O 效能。如果使用更多的磁碟控制器,
I/O 效能可再提升。</para>
<para>由於讀或寫時會同步交錯對許多磁碟進行 I/O 處理,因此
<acronym>RAID</acronym>0 的每個磁碟必須大小一樣。</para>
<mediaobject>
<imageobject>
<imagedata fileref="geom/striping" align="center"/>
</imageobject>
<textobject>
<phrase>Disk Striping Illustration</phrase>
</textobject>
</mediaobject>
<procedure>
<title>用未格式化的 ATA 磁碟來建立分散連結(striping)</title>
<step><para>載入 <filename>geom_stripe</filename>
kernel module</para>
<screen>&prompt.root; <userinput>kldload geom_stripe.ko</userinput></screen>
</step>
<step><para>確定掛載點(mount point)存在。
如果想用分散連結(striping)的空間做為根目錄(root partition<filename>/</filename> )
則先用個暫時的掛載點,如
<filename>/mnt</filename></para>
<screen>&prompt.root; <userinput>mkdir /mnt</userinput></screen>
</step>
<step><para>確認要用來分散連結(striping)的裝置名稱,接著建立新的分散連結(striping)。
例如下面的指令會分散連結(striping)兩個未使用、尚未分割區的 <acronym>ATA</acronym>
磁碟(<filename>/dev/ad2</filename>
<filename>/dev/ad3</filename>) </para>
<screen>&prompt.root; <userinput>
gstripe label -v st0 /dev/ad2 /dev/ad3</userinput></screen>
<screen>&prompt.root; <userinput>gstripe label -v st0 /dev/ad2 /dev/ad3</userinput></screen>
<!--
<para>A message should be returned explaining that meta data has
been stored on the devices.
XXX: What message? Put it inside the screen output above.
-->
</step>
<step><para>用下面的指令來建立分割區表(partition table)</para>
<screen>&prompt.root; <userinput>bsdlabel -wB /dev/stripe/st0</userinput></screen>
</step>
<step><para>除了先前建立的 <filename>st0</filename> ,這個步驟還會在
<filename>/dev/stripe</filename> 下新增兩個裝置:
<filename>st0a</filename><filename>st0c</filename>
利用 <command>newfs</command> 指令可以在
<filename>st0a</filename> 建立檔案系統:</para>
<screen>&prompt.root; <userinput>newfs -U /dev/stripe/st0a</userinput></screen>
<para>螢幕上會有一堆數字傾瀉而過,幾秒鐘後就會完成。此時空間已建立,
可用來掛載使用了。</para>
</step>
</procedure>
<para>下面指令可用來手動掛載分散連結(striping)空間:</para>
<screen>&prompt.root; <userinput>mount /dev/stripe/st0a /mnt</userinput></screen>
<para>如果要在開機時自動掛載,在 <filename>/etc/fstab</filename>
加入這塊空間的資訊:</para>
<screen>&prompt.root; <userinput>echo "/dev/stripe/st0a /mnt ufs rw 2 2" \</userinput>
<userinput>&gt;&gt; /etc/fstab</userinput></screen>
<para><filename>geom</filename> kernel module 必須在系統初始化時自動載入,
因此在 <filename>/boot/lodaer.conf</filename> 加入一行:</para>
<screen>&prompt.root; <userinput>echo 'geom_stripe_load="YES"' &gt;&gt; /boot/loader.conf</userinput></screen>
</sect1>
<sect1 xml:id="GEOM-mirror">
<title>RAID1 - 鏡射(Mirroring)</title>
<indexterm>
<primary>GEOM</primary>
</indexterm>
<indexterm>
<primary>磁碟鏡射(Disk Mirroring)</primary>
</indexterm>
<para>許多企業或個人用戶用鏡射(mirroring) 來不中斷系統進行備份。
鏡射簡單來說就是在 B 磁碟上重覆一份 A 磁碟的資料,
或者 C+D 磁碟重覆 A+B 磁碟的資料。不論設定如何,
最重要的是所有磁碟或分割區(partition) 上的資料都會被複製,
之後可在不中斷服務的情況下復原、備份資料,使儲存的資料更安全。</para>
<para>開始之前,請先確定系統上有兩個容量相同的磁碟,
後面的範例假設這兩顆磁碟是 direct access(&man.da.4;)
<acronym>SCSI</acronym> 磁碟。</para>
<para>首先我們假設 &os; 安裝在第一個磁碟上,且只有兩個分割區(partition)。
其中一個是交換分割區(swap partition大小為 <acronym>RAM</acronym>
的兩倍),而剩下的全用於根目錄(即 <filename>/</filename>
root file system)。當然要在不同掛載點(mount point) 切出更多分割區
(partition) 也可以,不過難度會大幅提升,因為必須手動操作 &man.bsdlabel.8;
&man.fdisk.8; 工具。</para>
<para>重開機並等到系統完全初始化完畢,用 <systemitem class="username">root</systemitem>
登入。</para>
<para>建立 <filename>/dev/mirror/gm</filename> 裝置並以
<filename>/dev/da1</filename> 連結:</para>
<screen>&prompt.root; <userinput>gmirror label -vnb round-robin gm0 /dev/da1</userinput></screen>
<para>這時系統應該會回應:</para>
<screen>
Metadata value stored on /dev/da1.
Done.</screen>
<para>初始化 GEOM這動作會自動載入
<filename>/boot/kernel/geom_mirror.ko</filename> kernel module</para>
<screen>&prompt.root; <userinput>gmirror load</userinput></screen>
<note>
<para>這動作應該會在 <filename>/dev/mirror</filename>
下建立 <filename>gm0</filename> 裝置結點(device node)。</para>
</note>
<para>在這個新建的 <filename>gm0</filename> 裝置上安置一般的
<command>fdisk</command> label 和開機磁區:</para>
<screen>&prompt.root; <userinput>fdisk -vBI /dev/mirror/gm0</userinput></screen>
<para>接著安置 <command>bsdlabel</command> 資訊:</para>
<screen>&prompt.root; <userinput>bsdlabel -wB /dev/mirror/gm0s1</userinput></screen>
<note>
<para>如果存在多個 slice 和分割區(partition)
記得修改上兩指令的參數,且另一個磁碟上的 slice 和分割區(partition)
大小必須相同。</para>
</note>
<para>&man.newfs.8; 工具在 <filename>gm0s1a</filename>
裝置結點建立預設的檔案系統:</para>
<screen>&prompt.root; <userinput>newfs -U /dev/mirror/gm0s1a</userinput></screen>
<para>系統會印出許多資訊和一大堆數字,這是正常的。
確認是否有認何錯誤,接著就可以將這個裝置掛載到
<filename>/mnt</filename> 掛載點(mount mount)</para>
<screen>&prompt.root; <userinput>mount /dev/mirror/gm0s1a /mnt</userinput></screen>
<para>接著將原本開機磁碟的資料搬移到新的檔案系統
(<filename>/mnt</filename>)。範例是用
&man.dump.8;&man.restore.8; ,不過用 &man.dd.1; 也可以。</para>
<screen>&prompt.root; <userinput>dump -L -0 -f- / |(cd /mnt &amp;&amp; restore -r -v -f-)</userinput></screen>
<para>執行上述指令時,只要將恰當的檔案系統掛在正確的位置,應該就能成功。
</para>
<para>接著編輯 <filename>/mnt/etc/fstab</filename>
檔將 swap file 那行移除或註解起來。
<footnote>
<para>請注意,將 <filename>fstab</filename> 的 swap file
那行註解起來,通常表示:您得用別的方法來重建 swap。詳情請參考
<xref linkend="adding-swap-space"/></para>
</footnote>請參考下面範例,並根據新磁碟修改其它的檔案系統資訊:</para>
<programlisting># Device Mountpoint FStype Options Dump Pass#
#/dev/da0s2b none swap sw 0 0
/dev/mirror/gm0s1a / ufs rw 1 1</programlisting>
<para>在目前的根目錄及新的根目錄建立 <filename>boot.conf</filename> 檔案,
這個檔案可以『幫助』系統 <acronym>BIOS</acronym> 開機:</para>
<screen>&prompt.root; <userinput>echo "1:da(1,a)/boot/loader" &gt; /boot.config</userinput></screen>
<screen>&prompt.root; <userinput>echo "1:da(1,a)/boot/loader" &gt; /mnt/boot.config</userinput></screen>
<note>
<para>在兩個根目錄上都新增檔案是為了安全起見,
如果因為某些原因新的根目錄無法開機,至少還可用原本的根目錄。</para>
</note>
<para>接著在 <filename>/boot/loader.conf</filename> 新增兩行:</para>
<screen>&prompt.root; <userinput>echo 'geom_mirror_load="YES"' &gt;&gt; /mnt/boot/loader.conf</userinput></screen>
<para>這會指示 &man.loader.8; 在開機時載入
<filename>geom_mirror.ko</filename> kernel module。</para>
<para>重開機:</para>
<screen>&prompt.root; <userinput>shutdown -r now</userinput></screen>
<para>如果一切順利,系統應該會從 <filename>gm0s1a</filename> 裝置開機,
接下來出現 <command>login</command> 提示畫面。如果出錯了,
請參閱下面 Troubleshooting 那一節。 現在可以將
<filename>da0</filename> 磁碟加入 <filename>gm0</filename>
裝置:</para>
<screen>&prompt.root; <userinput>gmirror configure -a gm0</userinput>
&prompt.root; <userinput>gmirror insert gm0 /dev/da0</userinput></screen>
<para>其中 <option>-a</option> 旗標告訴 &man.gmirror.8;
使用「自動同步(automatic synchronization)」,例如自動同步寫入磁碟的動作。
manual 說明了如何重建、取代磁碟等,不過 manual 裡的範例是用
<filename>data</filename> 而不是 <filename>gm0</filename></para>
<sect2>
<title>Troubleshooting</title>
<sect3>
<title>系統無法開機</title>
<para>如果開機提示類似這樣:</para>
<programlisting>ffs_mountroot: can't find rootvp
Root mount failed: 6
mountroot&gt;</programlisting>
<para>請用機器面板上的 Power 按鈕或 reset 按鈕來重開機,並在開機選單選 (6)
這樣子,系統就會進入 &man.loader.8;
交談模式。這時候,請照下面指令來手動載入所需的 kernel module
,也就是 <filename>geom_mirror.ko</filename></para>
<screen>OK? <userinput>load geom_mirror.ko</userinput>
OK? <userinput>boot</userinput></screen>
<para>如果這樣成功了的話,表示因為某些原因無法自動載入 kernel module。
請將:</para>
<programlisting>options GEOM_MIRROR</programlisting>
<para>加入到核心設定檔(kernel configuration file),重編並安裝核心。
這應該能解決這個問題。</para>
</sect3>
</sect2>
</sect1>
</chapter>

@ -1,842 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!--
The FreeBSD Documentation Project
$FreeBSD$
Original revision: 1.125
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="introduction">
<info><title>簡介</title>
<authorgroup>
<author><personname><firstname>Jim</firstname><surname>Mock</surname></personname><contrib>Restructured, reorganized, and parts
rewritten by </contrib></author>
</authorgroup>
</info>
<sect1 xml:id="introduction-synopsis">
<title>概述</title>
<para>非常感謝您對 &os; 感興趣!以下章節涵蓋 &os;
計劃的各方面:比如它的歷史、目標、開發模式等等。</para>
<para>讀完這章,您將了解︰</para>
<itemizedlist>
<listitem>
<para>&os; 與其他 OS 之間的關係;</para>
</listitem>
<listitem>
<para>&os; 計劃的歷史源流;</para>
</listitem>
<listitem>
<para>&os; 計劃的目標;</para>
</listitem>
<listitem>
<para>&os; open-source 開發模式的基礎概念;</para>
</listitem>
<listitem>
<para>當然囉,還有 <quote>&os;</quote> 這名字的由來。</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="nutshell">
<title>Welcome to &os;!</title>
<indexterm><primary>4.4BSD-Lite</primary></indexterm>
<para>&os; 是一個從 4.4BSD-Lite 衍生出而能在以 Intel (x86 and &itanium;),
AMD64, <trademark>Alpha</trademark>, Sun &ultrasparc;
為基礎的電腦上執行的作業系統。同時,移植到其他平台的工作也在進行中。
對於本計劃歷史的介紹,請看 <link linkend="history">&os; 歷史源流</link>
對於 &os; 的最新版本介紹,請看 <link linkend="relnotes">current release
</link>。若打算對於 &os; 計劃有所貢獻的話(像是程式碼硬體設備、基金)
請看 <link xlink:href="&url.articles.contributing;/index.html">如何對 &os;
有貢獻</link></para>
<sect2 xml:id="os-overview">
<title>&os; 能做什麼?</title>
<para>&os; 提供給你許多先進功能。這些功能包括:</para>
<itemizedlist>
<listitem>
<indexterm><primary>先佔式多工(preemptive multitasking)</primary></indexterm>
<para>動態優先權調整的『先佔式多工』能夠確保,即使在系統負擔很重的情況下,
程式執行平順並且應用程式與使用者公平地共享資源。</para>
</listitem>
<listitem>
<indexterm><primary>支援多人共用</primary></indexterm>
<para>『多人共用(multi-user)』代表著許多人可以同時使用一個 &os; 系統來處理各自的事務。
系統的硬體周邊(如印表機及磁帶機)也可以讓所有的使用者適當地分享。
也可以針對各別使用者或一群使用者的系統資源,予以設限,
以保護系統不致被過度使用。</para>
</listitem>
<listitem>
<indexterm><primary>TCP/IP 網路功能</primary></indexterm>
<para>好用的『TCP/IP 網路功能』可支援許多業界標準,比如:
SCTP、DHCP、NFS、NIS、PPP、SLIP、IPSec、IPv6 的支援,也就是說 &os;
可以容易地跟其他作業系統透過網路共同運作,或是當作企業的伺服器用途
,例如提供遠端檔案共享(NFS)及電子郵件(email)等服務,
或是讓您的企業連上網際網路(Internet)並提供 WWW、FTP、
路由(routing)、及防火牆(firewall、security) 等必備服務。</para>
</listitem>
<listitem>
<indexterm><primary>記憶體保護</primary></indexterm>
<para>『記憶體保護(Memory protection)』能確保程式(或是使用者)不會互相干擾,
即使任何程式有不正常的運作,都不會影響其他程式的執行。</para>
</listitem>
<listitem>
<para>&os; 是『32位元(32-bit)』的作業系統
(在 Alpha、&itanium;、 AMD64 及 &ultrasparc; 上則是『64位元(64-bit)』)
— 打從一開始便是這樣設計的。</para>
</listitem>
<listitem>
<indexterm>
<primary>X Window System</primary>
<seealso>XFree86</seealso>
</indexterm>
<para>業界標準的『X Window 系統』(X11R7)可以在常見的便宜 VGA 顯示卡/螢幕,
提供了圖形化的使用者介面(GUI),並且包括了完整的原始程式碼。</para>
</listitem>
<listitem>
<indexterm>
<primary>binary compatibility</primary>
<secondary>Linux</secondary>
</indexterm>
<indexterm>
<primary>binary compatibility</primary>
<secondary>SCO</secondary>
</indexterm>
<indexterm>
<primary>binary compatibility</primary>
<secondary>SVR4</secondary>
</indexterm>
<indexterm>
<primary>binary compatibility</primary>
<secondary>BSD/OS</secondary>
</indexterm>
<indexterm>
<primary>binary compatibility</primary>
<secondary>NetBSD</secondary>
</indexterm>
<para>能『直接執行』許多其他作業系統(比如: Linux、SCO、SVR4、BSDI 和 NetBSD)
的可執行檔。</para>
</listitem>
<listitem>
<para>數以萬計的立即可以執行的應用程式,這些都可透過 &os;
的『ports』及『packages』軟體管理機制來取得。
不再需要費心到網路上到處搜尋所需要的軟體。</para>
</listitem>
<listitem>
<para>此外,網路上尚有可非常容易移植的數以萬計應用程式。
&os; 的原始程式碼與許多常見的商業版 &unix; 系統都相容,
所以大部分的程式都只需要很少的修改(或根本不用修改)
,就可以編譯執行。</para>
</listitem>
<listitem>
<indexterm><primary>virtual memory</primary></indexterm>
<para>需要時才置換(demand paged) <emphasis>virtual memory</emphasis>
<quote>merged VM/buffer cache</quote> 的設計,
這點在系統中有用去大量記憶體的程式執行時,仍然有不錯的效率表現。</para>
</listitem>
<listitem>
<indexterm>
<primary>Symmetric Multi-Processing (SMP)</primary>
</indexterm>
<para>支援 CPU 的對稱多工處理(SMP):可以支援多 CPU
的電腦系統。</para>
</listitem>
<listitem>
<indexterm>
<primary>compilers</primary>
<secondary>C</secondary>
</indexterm>
<indexterm>
<primary>compilers</primary>
<secondary>C++</secondary>
</indexterm>
<indexterm>
<primary>compilers</primary>
<secondary>FORTRAN</secondary>
</indexterm>
<para>完全相容的 <emphasis>C</emphasis><emphasis>C++</emphasis> 以及
<emphasis>Fortran</emphasis> 的環境和其他開發工具。
以及其他許多可供進階研發的程式語言也收集在 ports 和 packages。
</para>
</listitem>
<listitem>
<indexterm><primary>source code</primary></indexterm>
<para>整個系統都有『原始程式碼』,
這讓你對作業環境擁有最完全的掌握度。
既然能擁有完全開放的系統,何苦被特定封閉軟體所約束,任廠商擺佈呢?
</para>
</listitem>
<listitem>
<para>廣泛且豐富的『線上文件』。</para>
</listitem>
<listitem>
<para><emphasis>當然囉,還不止如此!</emphasis></para>
</listitem>
</itemizedlist>
<indexterm><primary>4.4BSD-Lite</primary></indexterm>
<indexterm>
<primary>Computer Systems Research Group (CSRG)</primary>
</indexterm>
<indexterm><primary>U.C. Berkeley</primary></indexterm>
<para>&os; 系統乃是基於美國加州大學柏克萊分校的電腦系統研究群
(Computer Systems Research Group 也就是 CSRG) 所發行的
4.4BSD-Lite以及基於 BSD 系統開發的優良傳統。
除了由 CSRG 所提供的高品質的成果,
為了提供可處理真正具負荷的工作,
&os; 計劃也投入了數千小時以上的細部調整,
以能獲得最好的執行效率以及系統的穩定度。
正當許多商業上的巨人正努力地希望能提供效能及穩定時,
&os; 已經具備這樣的特質 -- <emphasis>就是現在</emphasis>
</para>
<para>&os; 的運用範圍無限,其實完全限制在你的想像力上。
從軟體的開發到工廠自動化,或是人造衛星上面的天線的方位角度的遠端控制;
這些功能若可以用商用的 Unix 產品來達成,
那麼極有可能使用 &os; 也能辦到!
&os; 也受益於來自於全球各研究中心及大學所開發的數千個高品質的軟體
,這些通常只需要花費很少的費用或根本就是免費的。
當然也有商業軟體,而且出現的數目是與日俱增。</para>
<para>由於每個人都可以取得 &os; 的原始程式碼,
這個系統可以被調整而能執行任何原本完全無法想像的功能或計劃,
而對於從各廠商取得的作業系統通常沒有辦法這樣地被修改。
以下提供一些人們使用 &os; 的例子:</para>
<itemizedlist>
<listitem>
<para><emphasis>網路服務:</emphasis> &os;
內建強勁的網路功能使它成為網路服務(如下例)的理想平台:</para>
<itemizedlist>
<listitem>
<indexterm><primary>FTP servers</primary></indexterm>
<para>檔案伺服器(FTP servers)</para>
</listitem>
<listitem>
<indexterm><primary>web servers</primary></indexterm>
<para>全球資訊網伺服器(WWW servers)
(標準的或更安全的 [SSL] 連線)</para>
</listitem>
<listitem>
<para>IPv4 及 IPv6 routing</para>
</listitem>
<listitem>
<indexterm><primary>firewall</primary></indexterm>
<indexterm><primary>IP masquerading</primary></indexterm>
<para>防火牆以及 NAT (<quote>IP masquerading</quote>)
gateways。</para>
</listitem>
<listitem>
<indexterm><primary>electronic mail</primary></indexterm>
<para>電子郵件伺服器(Electronic Mail servers)</para>
</listitem>
<listitem>
<indexterm><primary>USENET</primary></indexterm>
<para>網路新聞伺服器(USENET News)
或是電子佈告欄系統(BBS)</para>
</listitem>
<listitem>
<para>還有更多...</para>
</listitem>
</itemizedlist>
<para>有了 &os;,您可以容易地先用便宜的 386 PC
再逐步升級您的機器到四個 CPU 的 Xeon
並使用磁碟陣列(RAID)來滿足您企業運用上的需求。</para>
</listitem>
<listitem>
<para><emphasis>教育:</emphasis>
若您是資工相關領域的學生,再也沒有比使用 &os;
能學到更多作業系統、計算機結構、及網路的方法了。
另外如果你想利用電腦來處理一些<emphasis>其他的</emphasis>
工作,還有一些如 CAD、
數學運算以及圖形處理軟體等可以免費地取得使用。</para>
</listitem>
<listitem>
<para><emphasis>研究:</emphasis>有了完整的原始程式碼,&os;
是研究作業系統及電腦科學的極佳環境。
具有免費且自由取得特性的 &os;
也使得一個分置兩地的合作計劃,不必擔心版權及系統開放性的問題,
而能自在的交流。</para>
</listitem>
<listitem>
<indexterm><primary>router</primary></indexterm>
<indexterm><primary>DNS Server</primary></indexterm>
<para><emphasis>網路:</emphasis>
你如果需要 router、Name Server (DNS) 或安全的防火牆(Firewall)
&os; 可以輕易的將你沒有用到的 386 或 486 PC
變身成為絕佳的伺服器,甚至具有過濾封包(packet-filter) 的功能。
</para>
</listitem>
<listitem>
<indexterm>
<primary>X Window System</primary>
<secondary>XFree86</secondary>
</indexterm>
<indexterm>
<primary>X Window System</primary>
<secondary>Accelerated-X</secondary>
</indexterm>
<para><emphasis>X 視窗工作站:</emphasis> &os; 是 X
終端機的良策,你可以使用免費的 X11 Server。
&os; 不但可以充當遠端 X 程式終端機,
也可以執行本地的 X 程式而減輕大型工作站的負荷。
如果有一台中央伺服器的話,&os; 甚至可以經由網路開機
(不需硬碟,也就是<quote>diskless</quote>)
,而變成更便宜且易於管理的工作站。</para>
</listitem>
<listitem>
<indexterm><primary>GNU Compiler Collection</primary></indexterm>
<para><emphasis>軟體開發:</emphasis>
基本安裝的 &os; 就包含了完整的程式開發工具,如 GNU C/C++
編譯器及除錯器。</para>
</listitem>
</itemizedlist>
<para>你可以經由燒錄 CD-ROM、DVD 或是從 FTP 站上抓回 &os; --
包括立即可執行的系統以及系統的完整程式碼。
詳情請參閱 <xref linkend="mirrors"/> 取得 &os;</para>
</sect2>
<sect2>
<title>誰在用 &os;</title>
<indexterm>
<primary>users</primary>
<secondary>large sites running &os;</secondary>
</indexterm>
<para>許多 Internet 上的大型網站都是以 &os; 作為它的作業系統,例如:</para>
<itemizedlist>
<listitem>
<indexterm><primary>Yahoo!</primary></indexterm>
<para><link xlink:href="http://www.yahoo.com/">Yahoo!</link></para>
</listitem>
<listitem>
<indexterm><primary>Apache</primary></indexterm>
<para><link xlink:href="http://www.apache.org/">Apache</link></para>
</listitem>
<listitem>
<indexterm><primary>Blue Mountain Arts</primary></indexterm>
<para><link xlink:href="http://www.bluemountain.com/">Blue Mountain
Arts</link></para>
</listitem>
<listitem>
<indexterm><primary>Pair Networks</primary></indexterm>
<para><link xlink:href="http://www.pair.com/">Pair
Networks</link></para>
</listitem>
<listitem>
<indexterm><primary>Sony Japan</primary></indexterm>
<para><link xlink:href="http://www.sony.co.jp/">Sony
Japan</link></para>
</listitem>
<listitem>
<indexterm><primary>Netcraft</primary></indexterm>
<para><link xlink:href="http://www.netcraft.com/">Netcraft</link>
</para>
</listitem>
<listitem>
<indexterm><primary>Weathernews</primary></indexterm>
<para><link xlink:href="http://www.wni.com/">Weathernews</link>
</para></listitem>
<listitem>
<indexterm><primary>Supervalu</primary></indexterm>
<para><link xlink:href="http://www.supervalu.com/">Supervalu</link></para>
</listitem>
<listitem>
<indexterm><primary>TELEHOUSE America</primary></indexterm>
<para><link xlink:href="http://www.telehouse.com/">TELEHOUSE
America</link></para>
</listitem>
<listitem>
<indexterm><primary>Sophos Anti-Virus</primary></indexterm>
<para><link xlink:href="http://www.sophos.com/">Sophos
Anti-Virus</link></para>
</listitem>
<listitem>
<indexterm><primary>JMA Wired</primary></indexterm>
<para><link xlink:href="http://www.jmawired.com/">JMA Wired</link></para>
</listitem>
</itemizedlist>
<para>以及許多其他的網站。</para>
</sect2>
</sect1>
<sect1 xml:id="history">
<title>關於 &os; 計劃</title>
<para>接下來講的是 &os; 計劃的背景,包含歷史源流的簡介、計劃的目標,以及開發的模式。</para>
<sect2 xml:id="intro-history">
<info role="firstperson"><title>&os; 歷史源流的簡介</title>
<authorgroup>
<author><personname><firstname>Jordan</firstname><surname>Hubbard</surname></personname><contrib>Contributed by </contrib></author>
</authorgroup>
</info>
<indexterm><primary>386BSD Patchkit</primary></indexterm>
<indexterm><primary>Hubbard, Jordan</primary></indexterm>
<indexterm><primary>Williams, Nate</primary></indexterm>
<indexterm><primary>Grimes, Rod</primary></indexterm>
<indexterm>
<primary>&os; Project</primary>
<secondary>history</secondary>
</indexterm>
<para>&os; 計畫的想法是在 1993 年初所形成的,
那是源自於維護一組 『非官方 386BSD 的 patchkit(修正工具)』計劃的三個協調維護人
Nate WilliamsRod Grimes 和我(Jordan Hubbard)。</para>
<indexterm><primary>386BSD</primary></indexterm>
<para>我們最初的目標是做出一份 386BSD 綜合修正的 snapshot 版,以便修正當時一堆
patchkit 都不容易解決的問題。有些人可能還記得早期的計劃名稱叫做
<quote>386BSD 0.5</quote><quote>386BSD Interim</quote> 就是這個原因。</para>
<indexterm><primary>Jolitz, Bill</primary></indexterm>
<para>386BSD 是 Bill Jolitz 的作業系統,在當時就已有約一年的分裂討論。
當該修正工具 (patchkit) 日漸龐雜得令人不舒服,我們無異議地同意要作一些事了,
並決定提供一份臨時性的 <quote>淨化版(cleanup)</quote> 來幫助 Bill。
然而,由於 Bill Jolitz 忽然決定取消其對該計劃的認可,且沒有明確指出未來的打算,
所以該計劃便突然面臨斷炊危機。</para>
<indexterm><primary>Greenman, David</primary></indexterm>
<indexterm><primary>Walnut Creek CD-ROM</primary></indexterm>
<para>不久我們便決定在即使沒有 Bill 的支持下,讓該計劃仍然繼續下去,
最後我們採用 David Greenman 丟銅板決定的名字,也就是『&os;』。
在詢問了當時的一些使用者意見之後,就開始決定了最初的目標,
當該計劃開始實施一切就要成真時,一切就變得更清楚了。
我跟 Walnut Creek CD-ROM 討論發行 CD-ROM
這樣子不便上網的人就可以用比較簡單的方式取得 &os;
Walnut Creek CD-ROM 不只贊成以 CD-ROM 來發行 &os;
的想法,同時提供了一台機器以及快速的網際網路的頻寬。
如果不是 Walnut Creek CD-ROM 幾乎是空前的信任這個剛開始還是完全默默無聞的計劃,
那麼很可能 &os; 不會如此快速的成長到今日這樣的規模。</para>
<indexterm><primary>4.3BSD-Lite</primary></indexterm>
<indexterm><primary>Net/2</primary></indexterm>
<indexterm><primary>U.C. Berkeley</primary></indexterm>
<indexterm><primary>386BSD</primary></indexterm>
<indexterm><primary>Free Software Foundation</primary></indexterm>
<para>第一張以 CD-ROM (及網路)發行的 &os;&nbsp;1.0 是在 1993 年十二月。
該版本是基於由 U.C. Berkeley 以磁帶方式發行的
4.3BSD-Lite (<quote>Net/2</quote>)以及許多來自於 386BSD
和自由軟體基金會的軟體。對於第一次發行而言還算成功,
我們又接著於 1994 年 5 月發行了相當成功的 &os; 1.1。</para>
<indexterm><primary>Novell</primary></indexterm>
<indexterm><primary>U.C. Berkeley</primary></indexterm>
<indexterm><primary>Net/2</primary></indexterm>
<indexterm><primary>AT&amp;T</primary></indexterm>
<para>然而此後不久,另一個意外的風暴在 Novell 和 U.C. Berkeley 關於
Berkeley Net/2 磁帶之法律地位的訴訟確定之後形成。
U.C. Berkeley 接受大部份的 Net/2 的程式碼都是『侵佔來的』且是屬於 Novell 的財產
-- 事實上是當時不久前從 AT&amp;T 取得的。
Berkeley 得到的是 Novell 對於 4.4BSD-Lite 的『祝福』,最後當 4.4BSD-Lite
終於發行之後,便不再是侵佔行為。
而所有現有 Net/2 使用者都被強烈建議更換新版本,這包括了 &os;
於是,我們被要求於 1994 年 6 月底前停止散佈基於 Net/2
的產品。在此前提之下,本計劃被允許在期限以前作最後一次發行,也就是
&os;&nbsp;1.1.5.1。</para>
<para>&os; 便開始了這宛如『重新發明輪子』的艱鉅工作 -- 從全新的且不完整的
4.4BSD-Lite 重新整合。
這個 <quote>Lite</quote> 版本是不完整的,因為
Berkeley 的 CSRG 已經刪除了大量在建立一個可以開機執行的系統所需要的程式碼
(基於若干法律上的要求),且該版本在 Intel 平台的移植是非常不完整的。
直到 1994 年 11 月本計劃才完成了這個轉移,
同時在該年 12 月底以 CD-ROM 以及網路的形式發行了 &os;&nbsp;2.0。
雖然該份版本在當時有點匆促粗糙,但仍是富有意義的成功。
隨之於 1995 年 6 月又發行了更容易安裝,更好的 &os;&nbsp;2.0.5。</para>
<para>我們在 1996 年 8 月發行了 &os;&nbsp;2.1.5,在 ISP 和商業團體中非常流行。
隨後, 2.1-STABLE 分支的另一個版本應運而生,它就是在 1997 年 2 月發行 &os; 2.1.7.1
,同時也是 2.1-STABLE 分支的最後版。之後此分支便進入維護狀態,
僅僅提供安全性的加強和其他嚴重錯誤修補的維護(RELENG_2_1_0)。</para>
<para>1996 年 11 月 &os;&nbsp;2.2 從開發主軸分支 (<quote>-CURRENT</quote>)
出來成為 RELENG_2_2 分支。它的第一個完整版(2.2.1)於 1997 年 4 月發行。
2.2 分支的延續版本在 97 年夏秋之間發行的,其最後版是在 1998 年 11 月發行的 2.2.8 版。
第一個正式的 3.0 版本在 1998 年 10 月發行,亦即宣告 2.2 分支的落幕。</para>
<para>1999/01/20 日再度分支,這產生了 4.0-CURRENT 以及 3.X-STABLE 兩個分支。
3.X-STABLE 方面3.1 發行於 1999/02/153.2 發行於1999/05/153.3 發行於 1999/09/16
3.4 發行於 1999/12/203.5 發行於 2000/06/24
,接下來幾天後發佈了一些的修補檔(對 Kerberos 安全性方面的修正),就升級至 3.5.1
,這是 3.X 分支最後一個發行版本。</para>
<para>在 2000/03/13 又有了一個新的分支, 也就是 4.X-STABLE
。這個分支之後發佈了許多的發行版本︰ 4.0-RELEASE 在 2000 年 3 月發行,
而最後的 4.11-RELEASE 則在 2005 年 1 月發行。4-STABLE 分支的支援會持續到 2007/01/31
,但主要焦點在於安全方面的漏洞、臭蟲及其他嚴重問題的修補。</para>
<para>期待已久的 5.0-RELEASE 在 2003/01/19 正式發行。這是將近開發三年的巔峰之作,同時
也開始加強多顆CPU(SMPng)的支援、kernel thread(KSE) 的支援、檔案系統採用 UFS2 以及支援 snapshot
等, 並支援 &ultrasparc;
<literal>ia64</literal> 平台、支援藍芽、32 bit 的 PCMCIA 等。之後於 2003 年 6 月發行了 5.1。
而 -CURRENT 這個發展主軸分支的最後 5.X 版本是在 2004 年 2 月正式發行的 5.2.1-RELEASE在 5.X
系列進入 -STABLE (RELENG_5分支)之後,-CURRENT 就轉移為 6.X 系列。</para>
<para>RELENG_5 分支於 2004 年 8 月正式開跑,之後是 5.3-RELEASE
,它是 5-STABLE 分支的第一個發行版本。 最後的 5.5-RELEASE 是在
2006 年 5 月發行的,在此之後 RELENG_5 分支不再繼續。</para>
<para>RELENG_6 分支於 2005 年 7 月開跑,而 6.X 分支的第一個
release(6.0-RELEASE) 是在 2005 年 11 月出的。
最新的 &rel2.current;-RELEASE 是在 &rel2.current.date;
發行。 當然囉RELENG_6 分支還將有後續的發行版。</para>
<para>RELENG_7 分支於 2007 年 10 月開跑,最新的 &rel.current;-RELEASE
是在 &rel.current.date; 發行。 RELENG_7
分支還將有後續的發行版。</para>
<para>目前,長期的開發計畫繼續在 8.X-CURRENT (trunk) 分支中進行,而
8.X 的 CD-ROM (當然,也可以用網路抓) snapshot 版本可以在 <link xlink:href="ftp://current.FreeBSD.org/pub/FreeBSD/snapshots/">FreeBSD snapshot server</link>
取得。</para>
</sect2>
<sect2 xml:id="goals">
<info><title>&os; 計劃的目標</title>
<authorgroup>
<author><personname><firstname>Jordan</firstname><surname>Hubbard</surname></personname><contrib>Contributed by </contrib></author>
</authorgroup>
</info>
<indexterm>
<primary>&os; Project</primary>
<secondary>goals</secondary>
</indexterm>
<para>&os; 計劃的目標在於提供可作任意用途的軟體而不附帶任何限制條文。
我們之中許多人對程式碼 (以及計畫本身) 都有非常大的投入,
因此,當然不介意偶爾有一些資金上的補償,但我們並沒打算堅決地要求得到這類資助。
我們認為我們的首要『使命(mission)』是為任何人提供程式碼,
不管他們打算用這些程式碼做什麼, 因為這樣程式碼將能夠被更廣泛地使用,從而發揮其價值。
我認為這是自由軟體最基本的,同時也是我們所倡導的一個目標。</para>
<indexterm>
<primary>GNU General Public License (GPL)</primary>
</indexterm>
<indexterm>
<primary>GNU Lesser General Public License (LGPL)</primary>
</indexterm>
<indexterm><primary>BSD Copyright</primary></indexterm>
<para>我們程式碼樹中,有若干是以 GNU GPL 或者 LGPL
發佈的那些程式碼帶有少許的附加限制,還好只是強制性的要求開放程式碼而不是別的。
由於使用 GPL 的軟體在商業用途上會增加若干複雜性,因此,如果可以選擇的話,
我們會比較喜歡使用限制相對更寬鬆的 BSD 版權來發佈軟體。</para>
</sect2>
<sect2 xml:id="development">
<info><title>&os; 的開發模式</title>
<authorgroup>
<author><personname><firstname>Satoshi</firstname><surname>Asami</surname></personname><contrib>Contributed by </contrib></author>
</authorgroup>
</info>
<indexterm>
<primary>&os; Project</primary>
<secondary>development model</secondary>
</indexterm>
<para>&os; 的開發是一個非常開放且具彈性的過程,就像從 <link xlink:href="&url.articles.contributors;/article.html">貢獻者名單</link>
所看到的,是由全世界成千上萬的貢獻者發展起來的。
&os; 的開發基礎架構允許數以百計的開發者透過網際網路協同工作。
我們也經常關注著那些對我們的計畫感興趣的新開發者和新的創意,
那些有興趣更進一步參與計劃的人只需要在 &a.hackers; 連繫我們。
&a.announce; 對那些希望了解我們進度的人也是相當有用的。</para>
<para>無論是單獨開發者或者封閉式的團隊合作,多瞭解 &os; 計劃和它的開發過程會是不錯的︰</para>
<variablelist>
<varlistentry>
<term>The SVN and CVS repository<anchor xml:id="development-cvs-repository"/></term>
<listitem>
<indexterm>
<primary>CVS</primary>
<secondary>repository</secondary>
</indexterm>
<indexterm>
<primary>Concurrent Versions System</primary>
<see>CVS</see>
</indexterm>
<indexterm>
<primary>SVN</primary>
<secondary>repository</secondary>
</indexterm>
<indexterm>
<primary>Subversion</primary>
<see>SVN</see>
</indexterm>
<para>過去數年來 &os; 的中央 source tree 一直是以
<link xlink:href="http://ximbiot.com/cvs/wiki/">CVS</link>
(Concurrent Versions System) 來維護的,
它是個自由軟體,可用來做為版本控制,一裝完 &os; 內就有附了。
然而在 2008 年 6 月起, &os; 版本控制系統改用 <link xlink:href="http://subversion.tigris.org">SVN</link>(Subversion)。
這切換動作我們認為是有必要,因為 <application>CVS</application>
先天的技術限制,導致 source tree 以及歷史版本數量不斷快速擴張。
因此,主要的 repository 目前是採用 <application>SVN</application>
,而 client 端的工具像是 <application>CVSup</application>
<application>csup</application> 都是以舊式的
<application>CVS</application> 架構為基礎,仍可以繼續正常運作
&mdash; 此乃因 <application>SVN</application> repository
有 backport 回 <application>CVS</application> 才可以繼續讓 client
端相容。 目前,就只有中央 source tree 是採
<application>SVN</application> 版本控制方式。 而文件、網頁、
Ports 這些 repository 仍持續使用 <application>CVS</application>
版本控制方式。
而主要的 <link xlink:href="http://www.FreeBSD.org/cgi/cvsweb.cgi">CVS
repository</link> 是位於美國加州 Santa Clara 的某台機器上,
然後再 mirror 到世界上其他的許多機器上。
<application>SVN</application> tree 內有兩個主分支:
<link linkend="current">-CURRENT</link> 以及 <link linkend="stable">-STABLE</link> ,這些都可輕鬆複製到自己機器上。
詳情請參閱 <link linkend="synching">更新你的 source tree</link>
一節。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>The committers list<anchor xml:id="development-committers"/></term>
<listitem>
<indexterm><primary>committers</primary></indexterm>
<para>所謂的 <firstterm>committers</firstterm>
指的是對 CVS tree 有 <emphasis>write</emphasis> 權限,
並依不同授權部分,而有不同權限可修改 &os; source。
(<quote>committer</quote> 這詞源自 &man.cvs.1; 中的
<command>commit</command> 指令,該指令是用來把新的修改提交給
CVS repository。)
而提交修改給 committer 們檢查的最好方式,就是用 &man.send-pr.1;
指令。 若提交 PR 的流程系統上有壅塞現象的話,
也可以改用寄信方式,寄信到 &a.committers; 即可。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>The &os; core team<anchor xml:id="development-core"/></term>
<listitem>
<indexterm><primary>core team</primary></indexterm>
<para>如果把 &os; 看成是一家公司的話,
<firstterm>&os; core team</firstterm>
就相當於『董事會(board of directors)』。 core team
的主要職責在於確保此計劃有良好的架構,以朝著正確的方向發展。
此外,邀請熱血且負責的軟體開發者加入 committers 行列,
以在若干成員離去時得以補充新血。
目前的 core team 是在 2008 年 7 月 committers
候選人中選出來的,每兩年會舉辦一次選舉。</para>
<para>有些 core team 成員還負責某些特定範圍,
也就是說他們必須盡量確保一些子系統的穩定、效能。
關於 &os; 開發者們以及各自責任範圍,請參閱 <link xlink:href="&url.articles.contributors;/article.html">貢獻者名單
</link></para>
<note>
<para>core team 大部分成員加入 &os; 開發都是志工性質而已,
並未從本計劃中獲得任何薪酬,所以不該把
<quote>commitment</quote> 誤解為
<quote>guaranteed support</quote> 才對。
剛前面所講的『董事會』可能是不恰當的類推,或許我們應該說:
他們是一群自願放棄原本的優渥生活、個人其他領域成就,
而選擇投入 &os; 開發的熱血有為者才對!</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term>其他的貢獻者</term>
<listitem>
<indexterm><primary>contributors</primary></indexterm>
<para>最後一點,但這點絕非最不重要的,
最大的開發者團隊就是持續為我們提供回饋以及錯誤修正的使用者自己。
&os; 非核心開發者互動的主要方式,便是透過訂閱 &a.hackers;
來進行溝通,這方面可參考,請參閱 <xref linkend="eresources"/> 以瞭解各式不同的 &os;
郵遞論壇(mailing lists)。</para>
<para><citetitle><link xlink:href="&url.articles.contributors;/article.html">&os; 貢獻者名單
</link></citetitle> 相當長且不斷成長中,
只要有貢獻就會被列入其中,
要不要立即考慮貢獻 &os; 一些回饋呢?</para>
<para>然而,提供原始碼並非為這個計劃做貢獻的唯一方式;
還需要大家投入的完整工作列表、說明,請參閱 <link xlink:href="&url.base;/index.html">&os; 官網</link></para>
</listitem>
</varlistentry>
</variablelist>
<para>簡單的說,我們的開發模式就像是一組沒有拘束的同心圓。
這種集中開發模式是以 <emphasis>給使用者方便</emphasis> 為主,
同時讓他們能很容易地共同維護軟體,而不會把潛在的貢獻者排除在外!
我們的目標是提供含有大量一致性的
<link linkend="ports">應用軟體(ports/packages)</link>
,以便讓使用者輕鬆安裝、使用的作業系統 ——
而這開發模式相當符合此一目標。</para>
<para>我們對於那些想要加入 &os; 開發者的期待是:
請保持如同前人一樣的投入,以確保繼續成功!</para>
</sect2>
<sect2 xml:id="relnotes">
<title>最新的 &os; 發行版本</title>
<indexterm><primary>NetBSD</primary></indexterm>
<indexterm><primary>OpenBSD</primary></indexterm>
<indexterm><primary>386BSD</primary></indexterm>
<indexterm><primary>Free Software Foundation</primary></indexterm>
<indexterm><primary>U.C. Berkeley</primary></indexterm>
<indexterm>
<primary>Computer Systems Research Group (CSRG)</primary>
</indexterm>
<para>&os; 是免費使用且帶有完整原始程式碼的以 4.4BSD-Lite
為基礎的系統,可以在
Intel &i386;, &i486;, &pentium;,
&pentium;&nbsp;Pro,
&celeron;,
&pentium;&nbsp;II,
&pentium;&nbsp;III,
&pentium;&nbsp;4 (或者相容型號),
&xeon;, DEC <trademark>Alpha</trademark>
和 Sun &ultrasparc; 為基礎的電腦上執行的作業系統。
它主要以加州大學巴爾克利分校 的 CSRG 研究小組的軟體為基礎,並加入了
NetBSD、OpenBSD、386BSD 以及自由軟體基金會的一些東西。</para>
<para>自從 1994 年末,我們發佈了 &os;&nbsp;2.0 之後,系統的執行效率、
功能、穩定性都有了令人注目的提升。
<!-- XXX is the rest of this paragraph still true ? -->
最大的改變就是我們將記憶體與檔案系統的 cache 機制結合在一起。
這不只使得系統的表現變得更好, 並且使得 &os;
系統最少的記憶體需求減少到 5&nbsp;MB。
其它的改進包括完整的 NIS cilent and server 功能支援,
支援 transaction TCP、PPP 撥接連線、整合的 DHCP 支援、
SCSI 子系統的改進、ISDN 的支援ATM、FDDI 以及乙太網路 (Ethernet、包括
100&nbsp;Mbit 和 Gigabit) 的支援,提升了最新的 Adaptec
控制卡驅動程式的改善,以及數以千計的 bug 修正。</para>
<para>除了最基本的系統軟體,&os; 還提供了廣受歡迎的套件軟體管理機制:
Ports Collection。
到本書付印時,已有超過 &os.numports; 個 ports這範疇涵蓋從 http(WWW)
伺服器到遊戲、程式語言、編輯器以及您能想到的幾乎所有的東西。
完整的 Ports Collection 需要約 &ports.size; 的硬碟空間,除了
port 基本架構檔案外,都只儲存與該 port
軟體的原始碼有『須要變更』的部份。
如此一來,我們可以更容易更新這些 ports也大量的減少如舊的 1.0 版
Ports Collection 對於硬碟空間的需求。
要安裝一個 port 的話,只需要進入該 port 的目錄,輸入
<command>make install</command>,這樣子系統就會幫你裝好了。
您要編譯的每個程式的完整原始程式,
都可從 FTP 或 CD-ROM 中獲得,所以您只需準備足夠的硬碟空間來編譯你要的
port 軟體。
幾乎每一個 port 都有已事先編譯好的 <quote>package</quote>以方便安裝,
如果不想從編譯 port 的人,只要用個簡單指令
(<command>pkg_add</command>)就可以安裝。
有關 packages 和 ports 的細節,可以參閱 <xref linkend="ports"/></para>
<para>&os; 主機的 <filename>/usr/share/doc</filename>
目錄下找到許多有用的文件,
來幫助您安裝、使用 &os;
也可以使用下面的網址,以瀏覽器來翻閱本機上安裝的手冊︰</para>
<variablelist>
<varlistentry>
<term>&os; 使用手冊</term>
<listitem>
<para><link xlink:href="file://localhost/usr/share/doc/handbook/index.html"><filename>/usr/share/doc/handbook/index.html</filename></link></para>
</listitem>
</varlistentry>
<varlistentry>
<term>&os; 常見問答集</term>
<listitem>
<para><link xlink:href="file://localhost/usr/share/doc/faq/index.html"><filename>/usr/share/doc/faq/index.html</filename></link></para>
</listitem>
</varlistentry>
</variablelist>
<para>此外,可在下列網址找到最新版 (也是更新最頻繁的版本)<uri xlink:href="http://www.FreeBSD.org/">http://www.FreeBSD.org/</uri></para>
</sect2>
</sect1>
</chapter>

@ -1,793 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!--
The FreeBSD Documentation Project
$FreeBSD$
Original revision: 1.15
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="jails">
<info><title>Jails</title>
<authorgroup>
<author><personname><firstname>Matteo</firstname><surname>Riondato</surname></personname><contrib>Contributed by </contrib></author>
</authorgroup>
</info>
<indexterm><primary>jails</primary></indexterm>
<sect1 xml:id="jails-synopsis">
<title>概述</title>
<para>本章將介紹 &os; jail 為何,以及如何運用之法。
Jails 有時也常被認為是 <emphasis>chroot 環境</emphasis>
的加強型替代品之一,它對系統管理者而言是非常好用的工具,
此外,它的一些基本用法對進階使用者而言,也是相當有用。</para>
<para>讀完這章,您將了解︰</para>
<itemizedlist>
<listitem>
<para>jail 是什麼,以及它在 &os; 上可以發揮的作用。</para>
</listitem>
<listitem>
<para>如何編譯、啟動、停止 jail。</para>
</listitem>
<listitem>
<para>jail 管理的基本概念:包括從 jail 內部或主機本身。</para>
</listitem>
</itemizedlist>
<para>其他有用的 jail 相關資源還有:</para>
<itemizedlist>
<listitem>
<para>&man.jail.8; 線上說明。 這是有關 <command>jail</command>
的完整說明 &mdash; &os; 內的啟動、停止、控制 &os; jail
相關管理工具。</para>
</listitem>
<listitem>
<para>郵遞論壇(mailing lists)及舊信檔案館(archives)。
&a.mailman.lists; 所提供的 &a.questions; 及其他郵遞論壇的舊信
,已有包括一堆 jail 的有用資料。 通常,搜尋舊信或者在
&a.questions.name; 上發問,也相當有效。</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="jails-terms">
<title>Jail 相關術語</title>
<para>為協助更容易理解 &os; 系統的 jail 相關部分,
以及它們與 &os; 其他部分的相互作用關係,
以下列出本章將使用的術語:</para>
<variablelist>
<varlistentry>
<term>&man.chroot.2; (指令)</term>
<listitem>
<para>&os; 的 system call 之一,其作用為改變 process
及其衍生 process 所能運用的根目錄 (<filename>/</filename>
dir)。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>&man.chroot.2; (環境)</term>
<listitem>
<para>指在 <quote>chroot</quote> 中運行的 process 環境。
這包括了類似檔案系統的可見部分、可用的 UID、GID、網路卡及其他 IPC
機制等資源。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>&man.jail.8; (command)</term>
<listitem>
<para>允許程式在 jail 環境下執行的系統管理工具。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>host (系統、process、帳號等等)</term>
<listitem>
<para>jail 環境的控制系統。 host 系統可以使用全部可用的硬體資源,
並能控制 jail 環境內外的 process。 host 系統與 jail 最大的差別在於
:在 host 系統中的 superuser processes 並不像在 jail
環境那樣處處受到一堆限制。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>hosted (系統、process、帳號等等)</term>
<listitem>
<para>可用資源受到 &os; jail 限制的 process、帳號、或其他設備資源
</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 xml:id="jails-intro">
<title>背景故事</title>
<para>由於系統管理是困難又繁瑣的工作,因此人們開發許多好用工具,
以讓管理工作更加簡單輕鬆。 這些改善通常是讓系統能夠以更簡單的方式安裝、
設定、維護,而有些改善目標則是系統安全的正確設定,使其能真正發揮原本用途,
而非陷入安全風險之中。</para>
<para>&os; 系統所提供的一種用於強化安全的工具就是 <emphasis>jail</emphasis>
。 Jail 是由 &a.phk;&os;&nbsp;4.X 開始導入,而在 &os;&nbsp;5.X
受到許多重大改良而集大成,成為強大而靈活的子系統,目前仍在持續開發、
以提高其可用性、效能與安全。</para>
<sect2 xml:id="jails-what">
<title>何為 Jail</title>
<para>BSD-like 作業系統自 4.2BSD 起即提供 &man.chroot.2;
&man.chroot.8; 可用來變更一組 process 的根目錄位置,
藉此建立與實體系統中相隔離的安全環境。 處於 chrooted 環境的
process 會無法不能存取世外的檔案或資源。 由於此因素,
故即使攻擊者攻破某個處於 chroot 環境的 service也不能攻破整個系統。
&man.chroot.8; 對於那些不太需要彈性或複雜又高級的簡單應用而言相當好用。
另外,在引入 chroot 概念的過程中,曾經發現許多可脫逃 chroot 環境的方式,
儘管這些問題在較新版本的 &os; kernel 均已修正,但很明顯地 &man.chroot.2;
絕非用於強化安全的理想解決方案。 因此,
勢必得實作新的子系統來解決這些問題。</para>
<para>這就是為何要開發 <emphasis>jail</emphasis> 的最主要原因。</para>
<para>Jail 在各種方式分進合擊,改進傳統 &man.chroot.2; 環境的概念。
在傳統的 &man.chroot.2; 環境中,只限制 process 對於檔案系統的存取部分,
而系統資源的其他部分(例如系統帳號、執行中的 process、網路子系統)則是由
chroot process 與 host 系統的其他 process 一起共享。
Jail 以『虛擬化』來擴展這模型,不單只有檔案系統的存取,還延伸到
系統帳號、&os; kernel 的網路子系統及其他系統資源的虛擬化。
關於這些 jail 環境存取的細微調控,請參閱 <xref linkend="jails-tuning"/></para>
<para>jail 具有下列四項特色:</para>
<itemizedlist>
<listitem>
<para>目錄子樹(directory subtree) &mdash; 也就是進入 jail 的起點。
一旦進入 jail 之後process 就不再被允許跳到 subtree 以外。
&amp;傳統會影響到 &man.chroot.2; 最初設計的安全問題,就不會再影響
&os; jail。</para>
</listitem>
<listitem>
<para>主機名稱(hostname) &mdash; 用於 jail 的 hostname。 由於
jail 主要用於網路服務,因此若各 jail 皆有名稱,
對於系統管理工作的簡化會相當有效。</para>
</listitem>
<listitem>
<para><acronym>IP</acronym> address &mdash; 是用來給 jail 使用,
並且在 jail 生命週期內都無法變更。 通常 jail 的 IP address
是現有網卡的 alias address但這並不是必須的。</para>
</listitem>
<listitem>
<para>指令(Command) &mdash; 準備在 jail 內執行的完整路徑。 這指令是相對於
jail 環境的根目錄,視 jail 環境的類型不同,而有所差異。</para>
</listitem>
</itemizedlist>
<para>除了上述之外jail 也可擁有自己的帳號及 <systemitem class="username">root</systemitem>
帳號。 當然,這裡的<systemitem class="username">root</systemitem> 權力會受制於 jail 環境內。
並且從 host 系統的角度來看jail 的 <systemitem class="username">root</systemitem>
並非無所不能的帳號。 此外 jail 的 <systemitem class="username">root</systemitem>
並不能執行其對於 &man.jail.8; 環境以外的一些關鍵性操作。
關於 <systemitem class="username">root</systemitem> 的能力與限制,將於稍後的
<xref linkend="jails-tuning"/> 介紹之。</para>
</sect2>
</sect1>
<sect1 xml:id="jails-build">
<title>建立和控制 Jail</title>
<para>有些系統管理者把 jail 分為下列兩種:<quote>complete(完全)</quote>
jail &mdash; 通常包括完整的 &os; 系統;另一種則為
<quote>service(服務)</quote> jail &mdash;
專門只跑某單一可能要用特殊權限的程式或 service。 這只是一種概念上的區分
,並不影響如何建立 jail 的過程。 至於如何建立 jail 在 &man.jail.8;
內有更詳細的說明:</para>
<screen>&prompt.root; <userinput>setenv D /here/is/the/jail</userinput>
&prompt.root; <userinput>mkdir -p $D</userinput> <co xml:id="jailpath"/>
&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make world DESTDIR=$D</userinput> <co xml:id="jailworld"/>
&prompt.root; <userinput>cd etc/</userinput> <footnote><para>&os; 6.0(含)
之後就不需這步驟。</para></footnote>
&prompt.root; <userinput>make distribution DESTDIR=$D</userinput> <co xml:id="jaildistrib"/>
&prompt.root; <userinput>mount -t devfs $D/dev</userinput> <co xml:id="jaildevfs"/></screen>
<calloutlist>
<callout arearefs="jailpath">
<para>首先就是先為 jail 找個家。 該路徑是在 host 系統中的 jail
實體位置。 習慣是放在 <filename>/usr/jail/jailname</filename>
<replaceable>jailname</replaceable> 請替換為該 jail 的 hostname
以便辨別。 通常 <filename>/usr</filename>
會有足夠空間來存放 jail 檔案系統,對於 <quote>complete</quote> jail
而言,它通常包括了 &os; 預設安裝 base system 所有檔案的拷貝檔。</para>
</callout>
<callout arearefs="jailworld">
<para>該指令將會在 jail 目錄中安裝所需的 binary、library、manual 說明等
。 這些是以傳統的 &os; 方式完成 &mdash; 即首先先編譯所有檔案,
接著再裝到目的地。</para>
</callout>
<callout arearefs="jaildistrib">
<para>使用 <buildtarget>distribution</buildtarget> 這個
<application>make</application> target 來裝所有會用到的設定檔。
簡單來說該動作就是把 <filename>/usr/src/etc/</filename> 複製到 jail 環境內的
<filename>/etc</filename>,也就是
<filename>$D/etc/</filename></para>
</callout>
<callout arearefs="jaildevfs">
<para>對於 jail 環境而言,&man.devfs.8; 檔案系統的掛載並非必須,
但另一方面,幾乎所有應用程式都會需要存取至少一個設備(device)
這主要取決於該程式目的而定。 控制 jail 所能存取的設備非常重要,
因為不正確的設定,會讓攻擊者對 jail 有機可趁。 至於如何透過
&man.devfs.8; 來控制的規則,可以參閱 &man.devfs.8;
&man.devfs.conf.5; 說明。</para>
</callout>
</calloutlist>
<para>裝好 jail 之後,就可以用 &man.jail.8; 工具。 &man.jail.8;
需要四項必填參數,這些參數在 <xref linkend="jails-what"/> 有介紹過。
除了這四個參數之外,還可以指定其他參數,像是以特定帳號在 jail 中執行
process。 <option><replaceable>command</replaceable></option>
參數取決於 jail 類型而定;對於 <emphasis>virtual system(虛擬系統)
</emphasis>,那麼就選擇 <filename>/etc/rc</filename>
因為它會完成真正 &os; 系統啟動所需的操作。 對於 <emphasis>service(服務)
</emphasis> jail 而言,執行的指令取決於將在 jail 內執行的 service
或應用程式而定。</para>
<para>Jail 通常要在系統開機時啟動,因此 &os;<filename>rc</filename>
機制提供一些便利的方式來簡化這些工作:</para>
<procedure>
<step>
<para>開機時要啟動的 jail 清單要加到 &man.rc.conf.5; 設定檔:</para>
<programlisting>jail_enable="YES" # 若設為 NO 則表示不自動啟動 jail
jail_list="<replaceable>www</replaceable>" # 若有許多 jail 則請以空白隔開來寫</programlisting>
</step>
<step>
<para>對於每一筆在 <varname>jail_list</varname> 所列出的 jail
也要在 &man.rc.conf.5; 做出相對應的設定:</para>
<programlisting>jail_<replaceable>www</replaceable>_rootdir="/usr/jail/www" # jail 的根目錄
jail_<replaceable>www</replaceable>_hostname="<replaceable>www</replaceable>.example.org" # jail 的 hostname
jail_<replaceable>www</replaceable>_ip="192.168.0.10" # jail 的 IP address
jail_<replaceable>www</replaceable>_devfs_enable="YES" # 在 jail 內 mount devfs
jail_<replaceable>www</replaceable>_devfs_ruleset="<replaceable>www_ruleset</replaceable>" # jail 內所用的 devfs 規則表</programlisting>
<para>&man.rc.conf.5; 所預設的 jail 啟動設定會跑
<filename>/etc/rc</filename> 內的 jail script也就是說會假設 jail
是完整的虛擬系統。 若要用 service jail 類型,則要另外指定啟動指令,
方法是設定對應的
<varname>jail_<replaceable>jailname</replaceable>_exec_start</varname>
設定。</para>
<note>
<para>若欲知道所有可用的選項清單,請參閱 &man.rc.conf.5; 說明。</para>
</note>
</step>
</procedure>
<para>也可以透過手動執行 <filename>/etc/rc.d/jail</filename> script
來啟動或停止 <filename>rc.conf</filename> 所設定的 jail</para>
<screen>&prompt.root; <userinput>/etc/rc.d/jail start www</userinput>
&prompt.root; <userinput>/etc/rc.d/jail stop www</userinput></screen>
<para>目前尚無任何方法來很乾淨地關閉 &man.jail.8;
此乃因為正常用來關閉系統的指令,目前尚不能在 jail 中使用。 目前關閉 jail
最佳的方式,是在 jail 內執行下列指令,或者 jail 外面透過 &man.jexec.8;
執行下列指令:</para>
<screen>&prompt.root; <userinput>sh /etc/rc.shutdown</userinput></screen>
<para>詳情請參閱 &man.jail.8; 說明。</para>
</sect1>
<sect1 xml:id="jails-tuning">
<title>微調與管理</title>
<para>可以為 jail 設定許多不同選項,並讓 &os; 的 host 系統與 jail
以各種不同方式組合搭配,以符合更多的應用用途。 本節要介紹的是:</para>
<itemizedlist>
<listitem>
<para>用以微調 jail 行為與安全限制的選項。</para>
</listitem>
<listitem>
<para>可透過 &os; Ports Collection 安裝的高階 jail 管理程式,
搭配這些程式可以達到一些 jail-based 解決方案。</para>
</listitem>
</itemizedlist>
<sect2 xml:id="jails-tuning-utilities">
<title>&os; 所提供的 jail tuning 工具</title>
<para>對於 jail 設定的微調,基本上都是透過設定 &man.sysctl.8; 變數來完成。
系統提供一組 sysctl 的特殊子樹,全部相關的選項都在該子樹內,也就是
&os; kernel 中的 <varname>security.jail.*</varname> 子樹。
下面則是與 jail 相關的主要 sysctl 設定及預設值,這些名稱都相當容易理解,
如欲更進一步的資訊,請參閱 &man.jail.8;&man.sysctl.8; 說明:</para>
<itemizedlist>
<listitem>
<para><varname>security.jail.set_hostname_allowed:
1</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.socket_unixiproute_only:
1</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.sysvipc_allowed:
0</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.enforce_statfs:
2</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.allow_raw_sockets:
0</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.chflags_allowed:
0</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.jailed: 0</varname></para>
</listitem>
</itemizedlist>
<para>系統管理者可在 <emphasis>host system</emphasis>
透過修改這些設定值來增加、取消 Jail 內 <systemitem class="username">root</systemitem>
帳號的預設限制。 請注意:有些限制是不能取消,在 &man.jail.8; 環境的
<systemitem class="username">root</systemitem> 不能掛載或卸載檔案系統。 此外亦不能載入、
卸載 &man.devfs.8; 規則、設定防火牆規則,或執行其他需修改 kernel
資料的管理作業,例如設定 kernel 的 <varname>securelevel</varname>
值。</para>
<para>&os; base system 內附一些基本工具,可用來查閱目前使用中的 jail、
並接上(attach) jail 以執行管理指令。 &man.jls.8;&man.jexec.8;
均屬於 &os; base system 之一,可用來執行一些簡單工作:</para>
<itemizedlist>
<listitem>
<para>列出有在使用的 jail 及其相對應的 jail identifier
(<acronym>JID</acronym>)、<acronym>IP</acronym> address、
hostname、路徑。</para>
</listitem>
<listitem>
<para>接上(Attach)正在運作中的 jail並在其中執行指令以進行管理工作。
這點在當 <systemitem class="username">root</systemitem> 想乾淨關閉 jail 時相當有用,
&man.jexec.8; 也可用在 jail 中啟動 shell 以便對其進行管理,
比如:</para>
<screen>&prompt.root; <userinput>jexec 1 tcsh</userinput></screen>
</listitem>
</itemizedlist>
</sect2>
<sect2 xml:id="jails-tuning-admintools">
<title>&os; Ports Collection 所提供的高階管理工具</title>
<para>在諸多 third-party 所提供的 jail 管理工具當中,<package>sysutils/jailutils</package> 是最完整也最好用的。
該套件是由一系列 &man.jail.8; 管理小工具所組成的。 詳情請參閱其網站介紹
</para>
</sect2>
</sect1>
<sect1 xml:id="jails-application">
<title>Jail 的應用</title>
<sect2 xml:id="jails-service-jails">
<info><title>Service Jails</title>
<authorgroup>
<author><personname><firstname>Daniel</firstname><surname>Gerzo</surname></personname><contrib>Contributed by </contrib></author>
</authorgroup>
</info>
<para>本節主要以 &a.simon; 寫的 <uri xlink:href="http://simon.nitro.dk/service-jails.html">http://simon.nitro.dk/service-jails.html</uri> 為主,加上
Ken Tom <email>locals@gmail.com</email> 所更新的文章。
本節介紹如何設定 &os;&man.jail.8; 功能來增加額外的安全層面。
這部分假設您系統跑的是 RELENG_6_0 或更新的版本,
並且對本章先前部分均能理解。</para>
<sect3 xml:id="jails-service-jails-design">
<title>Design</title>
<para>Jail 的主要問題之一在於如何對其進行更新、升級和管理。
由於每個 jail 都是從頭重新編譯,對於單一 jail 而言,
升級也許還不是很嚴重的問題,因為更新、升級並不會太麻煩。
但對於一堆 jail 而言,升級不僅會耗費太多時間,並相當枯燥乏味。</para>
<warning>
<para>這些設定的前提是您對 &os; 使用、功能運用上有相當的經驗,
若下面的設定對您來說太過複雜,建議您該考慮用較簡易的系統,像是
<package>sysutils/ezjail</package>,其提供更簡單的
&os; jail 管理方式。</para>
</warning>
<para>基本的想法是在不同的 jail 中儘量以安全的方式來共用資源
&mdash; 採用唯讀的 &man.mount.nullfs.8; 掛載,來讓升級更簡單,
並把各個 service 放到不同的 jail 的作法會更加可行。 此外,
其也提供對於如何增加、刪除、升級 jail 的簡便方式。</para>
<note>
<para>service 常見的例子包括:
<acronym>HTTP</acronym> server、<acronym>DNS</acronym>
server、<acronym>SMTP</acronym> server 等等。</para>
</note>
<para>本節介紹的設定目的在於:</para>
<itemizedlist>
<listitem>
<para>建立簡易且容易理解的 jail 架構。 也就是說
<emphasis>不必</emphasis>為每個 jail 都執行完整的 installworld
</para>
</listitem>
<listitem>
<para>讓 jail 的新增、移除更簡單。</para>
</listitem>
<listitem>
<para>讓 jail 的更新、升級更輕鬆。</para>
</listitem>
<listitem>
<para>可以跑自行打造的 &os; 分支。</para>
</listitem>
<listitem>
<para>對安全有更偏執狂的追求,儘可能降低被攻陷的可能。</para>
</listitem>
<listitem>
<para>儘量節省空間與 inode。</para>
</listitem>
</itemizedlist>
<para>如同先前所提到的,這設計主要是靠把唯讀的主要模版
(也就是大家所熟知的 <application>nullfs</application>)掛載到每個
jail並且讓每個 jail 有個可讀、寫的設備,這設備可以是獨立實體硬碟、
、分割區、或以 vnode 為後端的 &man.md.4; 設備。 在本例當中,
我們採用可讀寫的 <application>nullfs</application> 掛載。</para>
<para>下面的表則介紹檔案系統的配置:</para>
<itemizedlist>
<listitem>
<para>每個 jail 都會掛載到 <filename>/home/j</filename> 底下的其中一個目錄。</para>
</listitem>
<listitem>
<para><filename>/home/j/mroot</filename> 則是每個
jail 共用的模版,並對於所有 jail 而言都是唯讀。</para>
</listitem>
<listitem>
<para>每個 jail 在 <filename>/home/j</filename>
底下都有一個相對應的空目錄。</para>
</listitem>
<listitem>
<para>每個 jail 都會有 <filename>/s</filename> 目錄,
該目錄會連到系統的可讀寫部分。</para>
</listitem>
<listitem>
<para>每個 jail 都會在 <filename>/home/j/skel</filename> 目錄建立自屬的可讀寫空間
</para>
</listitem>
<listitem>
<para>每個 jailspace (各 jail 可讀寫的部分) 都建在 <filename>/home/js</filename>&gt;</para>
</listitem>
</itemizedlist>
<note>
<para>這邊假設所有 jail 都放在
<filename>/home</filename> 分割區。 當然,
也可以依自身需求更改,但接下來的例子中,
也要記得修改相對應的地方。</para>
</note>
<!-- Insert an image or drawing here to illustrate the example. -->
</sect3>
<sect3 xml:id="jails-service-jails-template">
<title>建立模版</title>
<para>本節將逐步介紹如何建立 jail 要用的唯讀主模版。</para>
<para>建議先把 &os; 系統升級到最新的 -RELEASE 分支,至於如何做請參閱
Handbook 的
<link xlink:href="&url.books.handbook;/makeworld.html">相關章節</link>
當更新完成之後,就要進行 buildworld 程序,此外還要裝 <package>sysutils/cpdup</package> 套件。
我們將用 &man.portsnap.8; 來下載 &os; Ports Collection
在 Handbook 中對 <link xlink:href="&url.books.handbook;/portsnap.html">Portsnap 章節</link>
中有相關介紹,初學者可以看看。</para>
<procedure>
<step>
<para>首先,先建立唯讀的目錄結構給 jail 放 &os; binary
接著到 &os; source tree 目錄,並安裝 jail 模版:</para>
<screen>&prompt.root; <userinput>mkdir -p /home/j/mroot</userinput>
&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make installworld DESTDIR=/home/j/mroot</userinput></screen>
</step>
<step>
<para>接著跟 &os; source tree 一樣,也把 &os; Ports Collection
放一份供 jail 使用,以備 <application>mergemaster</application>
</para>
<screen>&prompt.root; <userinput>cd /home/j/mroot</userinput>
&prompt.root; <userinput>mkdir usr/ports</userinput>
&prompt.root; <userinput>portsnap -p /home/j/mroot/usr/ports fetch extract</userinput>
&prompt.root; <userinput>cpdup /usr/src /home/j/mroot/usr/src</userinput></screen>
</step>
<step>
<para>建立可讀寫部分的骨架:</para>
<screen>&prompt.root; <userinput>mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles</userinput>
&prompt.root; <userinput>mv etc /home/j/skel</userinput>
&prompt.root; <userinput>mv usr/local /home/j/skel/usr-local</userinput>
&prompt.root; <userinput>mv tmp /home/j/skel</userinput>
&prompt.root; <userinput>mv var /home/j/skel</userinput>
&prompt.root; <userinput>mv root /home/j/skel</userinput></screen>
</step>
<step>
<para><application>mergemaster</application> 來裝漏掉的設定檔。
接下來刪除 <application>mergemaster</application>
所建立的多餘目錄:</para>
<screen>&prompt.root; <userinput>mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i</userinput>
&prompt.root; <userinput>cd /home/j/skel</userinput>
&prompt.root; <userinput>rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev</userinput></screen>
</step>
<step>
<para>現在把可讀寫的檔案系統以 symlink 方式連到唯讀的檔案系統。
請確認 symbolic link 是否有正確連到 <filename>s/</filename> 目錄,若目錄建立方式不對,
或指向位置不對,可能會導致安裝失敗。</para>
<screen>&prompt.root; <userinput>cd /home/j/mroot</userinput>
&prompt.root; <userinput>mkdir s</userinput>
&prompt.root; <userinput>ln -s s/etc etc</userinput>
&prompt.root; <userinput>ln -s s/home home</userinput>
&prompt.root; <userinput>ln -s s/root root</userinput>
&prompt.root; <userinput>ln -s ../s/usr-local usr/local</userinput>
&prompt.root; <userinput>ln -s ../s/usr-X11R6 usr/X11R6</userinput>
&prompt.root; <userinput>ln -s ../../s/distfiles usr/ports/distfiles</userinput>
&prompt.root; <userinput>ln -s s/tmp tmp</userinput>
&prompt.root; <userinput>ln -s s/var var</userinput></screen>
</step>
<step>
<para>最後則是新增 <filename>/home/j/skel/etc/make.conf</filename>
,並填入以下內容:</para>
<programlisting>WRKDIRPREFIX?= /s/portbuild</programlisting>
<para>要設定 <literal>WRKDIRPREFIX</literal> 才可以讓各 jail
得以順利編譯 &os; ports。請記住 ports 目錄是屬唯讀檔案系統。
而搭配自訂的 <literal>WRKDIRPREFIX</literal> 才可以讓各 jail
在可讀寫空間進行編譯。</para>
</step>
</procedure>
</sect3>
<sect3 xml:id="jails-service-jails-creating">
<title>建立 Jail</title>
<para>現在已經有完整的 &os; jail 模版,可以在
<filename>/etc/rc.conf</filename> 內做相關設定。
下面這例子則示範如何建立 3 個 jail<quote>NS</quote>
<quote>MAIL</quote><quote>WWW</quote></para>
<procedure>
<step>
<para><filename>/etc/fstab</filename> 加上下列設定,
以便讓系統自動掛載各 jail 所需的唯讀模版與讀寫空間:</para>
<programlisting>/home/j/mroot /home/j/ns nullfs ro 0 0
/home/j/mroot /home/j/mail nullfs ro 0 0
/home/j/mroot /home/j/www nullfs ro 0 0
/home/js/ns /home/j/ns/s nullfs rw 0 0
/home/js/mail /home/j/mail/s nullfs rw 0 0
/home/js/www /home/j/www/s nullfs rw 0 0</programlisting>
<note>
<para>分割區的 pass number 標示為 0 就不會在開機時做 &man.fsck.8;
檢查;而分割區的 dump number 標示為 0 則不會被 &man.dump.8;
所備份。
我們並不希望
<application>fsck</application> 檢查
<application>nullfs</application> 的掛載,或者讓
<application>dump</application> 備份 jail 內唯讀的 nullfs 掛載。
這也就是為何上述 <filename>fstab</filename>
每行設定後面都有兩欄為 <quote>0&nbsp;0</quote></para>
</note>
</step>
<step>
<para><filename>/etc/rc.conf</filename> 內設定 jail</para>
<programlisting>jail_enable="YES"
jail_set_hostname_allow="NO"
jail_list="ns mail www"
jail_ns_hostname="ns.example.org"
jail_ns_ip="192.168.3.17"
jail_ns_rootdir="/usr/home/j/ns"
jail_ns_devfs_enable="YES"
jail_mail_hostname="mail.example.org"
jail_mail_ip="192.168.3.18"
jail_mail_rootdir="/usr/home/j/mail"
jail_mail_devfs_enable="YES"
jail_www_hostname="www.example.org"
jail_www_ip="62.123.43.14"
jail_www_rootdir="/usr/home/j/www"
jail_www_devfs_enable="YES"</programlisting>
<warning>
<para>之所以要把
<varname>jail_<replaceable>name</replaceable>_rootdir</varname>
<filename>/home</filename> 改為 <filename>/usr/home</filename> 的原因在於 &os;
預設安裝的 <filename>/home</filename> 目錄其實只是指向 <filename>/usr/home</filename> 的 symbolic link。 而
<varname>jail_<replaceable>name</replaceable>_rootdir</varname>
變數須為 <emphasis>實體目錄</emphasis> 而非 symbolic link
否則 jail 會拒絕啟動。 可以用 &man.realpath.1;
來決定該變數。 詳情請參閱 &os;-SA-07:01.jail 安全通告。</para>
</warning>
</step>
<step>
<para>替每個 jail 建立必須的唯讀檔案系統掛載點:</para>
<screen>&prompt.root; <userinput>mkdir /home/j/ns /home/j/mail /home/j/www</userinput></screen>
</step>
<step>
<para>為每個 jail 安裝可讀寫的模版。 請注意這時要用 <package>sysutils/cpdup</package>
,它能確保每個目錄都有正確複製。</para>
<!-- keramida: Why is cpdup required here? Doesn't cpio(1)
already include adequate functionality for performing this
job *and* have the advantage of being part of the base
system of FreeBSD? -->
<screen>&prompt.root; <userinput>mkdir /home/js</userinput>
&prompt.root; <userinput>cpdup /home/j/skel /home/js/ns</userinput>
&prompt.root; <userinput>cpdup /home/j/skel /home/js/mail</userinput>
&prompt.root; <userinput>cpdup /home/j/skel /home/js/www</userinput></screen>
</step>
<step>
<para>如此一來就已完成 jail 環境建立,可以準備好要用了。
請先為各 jail 掛載所須的檔案系統,再用
<filename>/etc/rc.d/jail</filename> script 來啟動:</para>
<screen>&prompt.root; <userinput>mount -a</userinput>
&prompt.root; <userinput>/etc/rc.d/jail start</userinput></screen>
</step>
</procedure>
<para>現在 jail 應該就會啟動了。 若要檢查是否有正常啟動,可以用
&man.jls.8; 指令來看,該指令的執行結果應該類似下面:</para>
<screen>&prompt.root; <userinput>jls</userinput>
JID IP Address Hostname Path
3 192.168.3.17 ns.example.org /home/j/ns
2 192.168.3.18 mail.example.org /home/j/mail
1 62.123.43.14 www.example.org /home/j/www</screen>
<para>此時就可以登入各 jail 並新增帳號與設定相關 service 要用的 daemon
。 上面的 <literal>JID</literal> 欄代表正在運作中的 jail 編號。
可用下列指令以在 <literal>JID</literal> 編號 3 的 jail
執行管理工作:</para>
<screen>&prompt.root; <userinput>jexec 3 tcsh</userinput></screen>
</sect3>
<sect3 xml:id="jails-service-jails-upgrading">
<title>升級</title>
<para>有時由於安全問題或者 jail 內要用新功能,而需要把 &os;
系統升級到更新。 這種安裝設計方式讓既有的 jail 升級變得更加容易。
jail 也可以把 service 停機時間(downtime)降到最低,因為 jail
只需在最後關鍵才需要重開。 此外,萬一新版有問題的話,
它也提供輕鬆回溯到舊版的功能。</para>
<procedure>
<step>
<para>首先是照一般方式來升級 host system再新增臨時的唯讀模版
<filename>/home/j/mroot2</filename></para>
<screen>&prompt.root; <userinput>mkdir /home/j/mroot2</userinput>
&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make installworld DESTDIR=/home/j/mroot2</userinput>
&prompt.root; <userinput>cd /home/j/mroot2</userinput>
&prompt.root; <userinput>cpdup /usr/src usr/src</userinput>
&prompt.root; <userinput>mkdir s</userinput></screen>
<para>同樣地,在執行 <buildtarget>installworld</buildtarget>
時會建立一些用不著的目錄,請把這些砍掉:</para>
<screen>&prompt.root; <userinput>chflags -R 0 var</userinput>
&prompt.root; <userinput>rm -R etc var root usr/local tmp</userinput></screen>
</step>
<step>
<para>重新建立到主系統的可讀寫空間 symlink</para>
<screen>&prompt.root; <userinput>ln -s s/etc etc</userinput>
&prompt.root; <userinput>ln -s s/root root</userinput>
&prompt.root; <userinput>ln -s s/home home</userinput>
&prompt.root; <userinput>ln -s ../s/usr-local usr/local</userinput>
&prompt.root; <userinput>ln -s ../s/usr-X11R6 usr/X11R6</userinput>
&prompt.root; <userinput>ln -s s/tmp tmp</userinput>
&prompt.root; <userinput>ln -s s/var var</userinput></screen>
</step>
<step>
<para>現在可以關閉 jail</para>
<screen>&prompt.root; <userinput>/etc/rc.d/jail stop</userinput></screen>
</step>
<step>
<para>卸載原先的檔案系統:</para>
<!-- keramida: Shouldn't we suggest a short script-based
loop here, instead of tediously copying the same commands
multiple times? -->
<screen>&prompt.root; <userinput>umount /home/j/ns/s</userinput>
&prompt.root; <userinput>umount /home/j/ns</userinput>
&prompt.root; <userinput>umount /home/j/mail/s</userinput>
&prompt.root; <userinput>umount /home/j/mail</userinput>
&prompt.root; <userinput>umount /home/j/www/s</userinput>
&prompt.root; <userinput>umount /home/j/www</userinput></screen>
<note>
<para>可讀寫空間(<filename>/s</filename>)
是掛載在唯讀檔案系統底下,故要先卸載。</para>
</note>
</step>
<step>
<para>把舊的唯讀系統搬走,換成新的。 如此一來,
可同時保留先前系統的備份,以備萬一升級後有問題可回復。
這邊的命名方式採新唯讀檔案系統的建立時間,此外原先 &os;
Ports Collection 直接搬到新的檔案系統,以節省硬碟空間與 inode
</para>
<screen>&prompt.root; <userinput>cd /home/j</userinput>
&prompt.root; <userinput>mv mroot mroot.20060601</userinput>
&prompt.root; <userinput>mv mroot2 mroot</userinput>
&prompt.root; <userinput>mv mroot.20060601/usr/ports mroot/usr</userinput></screen>
</step>
<step>
<para>現在新的唯讀模版準備好了,只剩下重新掛載以及啟動 jail</para>
<screen>&prompt.root; <userinput>mount -a</userinput>
&prompt.root; <userinput>/etc/rc.d/jail start</userinput></screen>
</step>
</procedure>
<para>最後以 &man.jls.8; 來檢查 jail 是否均正常啟動。
別忘了要在各 jail 內執行 mergemaster還有相關設定檔以及
rc.d scripts 均要更新。</para>
</sect3>
</sect2>
</sect1>
</chapter>

File diff suppressed because it is too large Load Diff

@ -1,99 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!DOCTYPE html PUBLIC "-//FreeBSD//DTD XHTML 1.0 Transitional-Based Extension//EN"
"http://www.FreeBSD.org/XML/doc/share/xml/xhtml10-freebsd.dtd" [
<!ENTITY title "關於 FreeBSD">
]>
<!-- The FreeBSD Traditional Chinese Documentation Project -->
<!-- Original Revision: 1.11 -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>&title;</title>
<cvs:keyword xmlns:cvs="http://www.FreeBSD.org/XML/CVS">$FreeBSD$</cvs:keyword>
</head>
<body class="navinclude.about">
<h2>FreeBSD 是什麼?</h2>
<p>FreeBSD 是一種先進的作業系統,可支援 x86
相容(包括 Pentium&reg; 和 Athlon&trade;)、amd64
相容(包括 Opteron&trade;、Athlon&trade;64 和 EM64T)、
ARM、IA-64、PC-98以及 UltraSPARC&reg;
架構的電腦。其源自於 BSD ──美國加州大學伯克利分校開發
&unix; 版本,它是由來自世界各地的 <a
href="&enbase;/doc/en_US.ISO8859-1/articles/contributors/staff-committers.html">
志願者</a> 共同開發和維護。 FreeBSD 為不同架構的電腦系統提供了不同程度的支援,
詳情請參閱 <a href="&base;/platforms/index.html">系統平台</a> 這一頁。</p>
<h2>先進特性</h2>
<p>FreeBSD 提供了網路、性能、安全以及相容性等多方面的
<a href="&base;/features.html">先進特性</a>
這些特性即使是在當今最優秀的商業作業系統中亦有所欠缺。</p>
<h2>優異的 Internet 解決方案</h2>
<p>FreeBSD 是理想的
<a href="&base;/internet.html">Internet 和 Intranet</a>
服務器。即使是在超重負載下,它仍然能夠有效地使用記憶體,
為同時運行的數以千計的用戶進程提供良好的反應時間。</p>
<h2>能夠運行大量可供選擇的應用</h2>
<p>FreeBSD 的卓越品質,配合當今廉價而高速的 PC 硬體,
使 FreeBSD 成為足可代替商業 &unix;
工作站的絕佳系統。另外FreeBSD 還廣泛收錄許多桌面
和各類 Server 的 <a href="&base;/applications.html">應用程式</a>
使它能夠很好的符合您的各種需求。</p>
<h2>易於安裝</h2>
<p>FreeBSD 能通過多種媒體材質進行安裝,包括普通光碟、
DVD、軟碟、磁帶以及 MS-DOS&reg; 分區等,
如果您有網路連線,您甚至可以 <i>直接</i>
通過 anonymous FTP或者 NFS Server 來裝 FreeBSD。
您只需按照我們為您準備的 <a
href="&enbase;/doc/zh_TW.Big5/books/handbook/install.html">
安裝指導</a> 操作就可以了。</p>
<h2>FreeBSD 是 <i>free</i></h2>
<a href="&base;/copyright/daemon.html"><img src="&enbase;/gifs/dae_up3.gif"
alt="The BSD Daemon"
height="81" width="72"
align="right"
border="0"/></a>
<p>您或許認為如此優秀的作業系統必定需要花費大筆金錢來購買,
而 FreeBSD 卻從發行版本到它的全部 source code 都
<a href="&base;/copyright/index.html">免費</a> 提供!
如果您願意購買或下載來體驗一下 FreeBSD 所能帶給您的驚喜,
可以從 <a href="&enbase;/doc/zh_TW.Big5/books/handbook/mirrors.html">這裡</a>
了解更多資訊。</p>
<h2>幫助 FreeBSD</h2>
<p>幫助 FreeBSD 並不是一件困難的事情。 您需要做的,
就是找出 FreeBSD 需要改進的地方,並將您
(經過精心編寫和整理過) 的改進透過 send-pr 發回 FreeBSD 計劃,
或者直接把它們轉交給您認識的 FreeBSD committer。
我們歡迎包括從文件到藝術作品,乃至 source code 在內的任何改進。
此外,您還可以透過 <a
href="&enbase;/doc/zh_CN.GB2312/articles/contributing/index.html">
幫助 FreeBSD</a>這篇文章了解更多的資訊。</p>
<p>即使您不是開發人員,也仍然可以通過其他途徑幫助 FreeBSD。
<a href="http://www.FreeBSDFoundation.org">FreeBSD 基金會</a>
是個非營利組織,對其捐款可以完全減免課稅。
要了解更多有關 FreeBSD 基金會的信息,
請和 <a
href="mailto:board&#64;FreeBSDFoundation.org">board&#64;FreeBSDFoundation.org</a>
聯繫,或致信:
The FreeBSD Foundation, 7321 Brockway Dr.
Boulder, CO 80303, USA.</p>
</body>
</html>

@ -1,129 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!DOCTYPE html PUBLIC "-//FreeBSD//DTD XHTML 1.0 Transitional-Based Extension//EN"
"http://www.FreeBSD.org/XML/doc/share/xml/xhtml10-freebsd.dtd" [
<!ENTITY title "關於 FreeBSD 的應用">
]>
<!-- The FreeBSD Traditional Chinese Project -->
<!-- Original revision: 1.33 -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>&title;</title>
<cvs:keyword xmlns:cvs="http://www.FreeBSD.org/XML/CVS">$FreeBSD$</cvs:keyword>
</head>
<body class="navinclude.about">
<h2>感受 FreeBSD 的無窮潛能</h2>
<p>FreeBSD 幾乎能夠處理任何 &unix;
工作站所能完成的任務,而且還包括您可能沒有想過的:</p>
<h2>FreeBSD 是個真正提供了完整的原始碼的開放系統。</h2>
<p>沒有人會懷疑開放系統 <b></b>
現代計算應用的前提條件。 然而,有哪一個商業發行機構提供的解決方案,
能夠比提供了包括 kernel 以及全部系統服務、
程式、管理工具原始碼的作業系統更為開放呢? 您可以修改 FreeBSD
的任何部分,來適應個人、組織、公司的需要。</p>
<p>由於採用了寬鬆的 <a
href="&base;/copyright/freebsd-license.html">授權策略</a>
您可以幾乎不受任何限制地將 FreeBSD 作為運行任意免費 <i>或商業</i>
應用的基礎。</p>
<h2>FreeBSD 能夠運行上萬種的應用軟體。</h2>
<p>由於 FreeBSD 基於業界 UNIX 標準之一的 4.4BSD
在其上編譯和運行程式易如反掌。 此外FreeBSD 還提供了包含豐富應用程式的
<a href="&base;/where.html">packages collection</a> 以及 <a
href="&enbase;/ports/index.html">ports collection</a>
用以向用戶提供預先編譯好的,以及便於自行構建的各類軟體,
以期滿足從桌面到企業Server的種種需求。 此外,為 FreeBSD 編寫的 <a
href="&enbase;/commercial/software.html">商業應用</a>
也在與日俱增。</p>
<p>以下是一些典型的 FreeBSD 應用環境:</p>
<ul>
<li><b>Internet 服務。 </b>許多 Internet 服務提供業者(ISP)
把 FreeBSD 視為運行 WWW、 Usenet news、 FTP、 Email以及其他服務的理想平台。
眾多可以立即投入使用的軟體,例如 <a
href="http://www.apache.org/">Apache</a> web Server以及 <a href="http://proftpd.org/">ProFTPD</a>
FTP&nbsp;Server使得構建商業或社區中心的 ISP 變得易如反掌。
當然,配合 FreeBSD 無與倫比的 <a
href="&base;/internet.html">網路子系統</a>,您的用戶將享受到高速的、
可靠的服務。</li>
<li><b>X Window 工作站。 </b>從便宜的 X terminal
到高檔的 X 顯示器FreeBSD 都能游刃有餘。 免費的 X 軟體 (<a
href="http://x.org/">X.Org</a>&trade;) 隨系統提供。
另外,<a href="http://www.nvidia.com/">nVidia</a>
也提供了用於他們的高性能圖形硬體的 native 驅動程式,
並加入了業界標準的 <a href="http://www.opengroup.org/motif/">Motif</a>&reg;
<a href="http://www.opengl.org/">OpenGL</a>&reg;
函數庫支援。 對於 <a
href="http://www.kde.org">KDE</a><a
href="http://www.gnome.org">GNOME</a> 桌面環境,
都提供了全面支援,並提供了辦公套件的功能,
以及功能更為強大的 <a
href="http://www.openoffice.org/">OpenOffice.Org</a>
<a href="http://www.softmaker.de/tml_en.htm">TextMaker</a>
產品。</li>
<li><b>網路。</b> 無論是過濾封包、routing、name service
FreeBSD 都能夠讓任何一台 PC 成為 Internet 防火牆、
電子郵件主機印表機伺服器PC/NFS Server
甚至提供各式各樣的其他服務。</li>
<li><b>軟體開發。</b> FreeBSD 提供了一整套開發工具,
這其中包括了 GNU C/C++ 編譯器和除錯器(debugger)。
舉例而言,您還可以使用 &java; 或 Tcl/Tk
,以及一些更深奧的開發語言如 Icon 來進行開發。
此外FreeBSD 還提供了易於構建和使用的各種 shared libraries。
您可以從眾多流行的強大的文字編輯器,例如
XEmacs 和 vim 中選擇自己喜歡來使用。</li>
<li><b>網路衝浪。</b> 真正的 UNIX 工作站,是絕佳的 Internet
衝浪板。 FreeBSD 版本的 <a
href="http://www.mozilla.org/products/firefox/">Firefox</a>
<a href="http://www.opera.com/">Opera</a>
都為嚴肅的 web 用戶提供了非常優秀的選擇。 網上衝浪,
發表自己的網頁,閱讀 Usenet news、 收發電子郵件,
都可以通過您桌面上的 FreeBSD 系統來輕鬆實現。</li>
<li><b>教育和研究。</b> 由於提供了完整的原始碼FreeBSD
是一個非常優秀的研究平台。 作業系統或其他 Computer Science
領域的學生和研究人員,都能夠從這一開放而且文件豐富的系統中受益。</li>
<li><b>還有更多。 </b>金融、動作遊戲、
MIS&nbsp;資料庫、視覺化科學研究、視訊會議、
網路聊天室(IRC)、家庭自動化、多用戶主機、
電子公告板系統(BBS)、圖形掃描,以及更多的其他應用,
都已經在 FreeBSD 上開花結果。</li>
</ul>
<h2>FreeBSD 是隨您需要而成長的作業系統。</h2>
<p>儘管 FreeBSD 是自由軟體,它同時也是一個 <i>由用戶支援的
</i> 軟體。 您只需簡單地將問題,透過電子郵件發到 <a
href="mailto:freebsd-questions@FreeBSD.org">freebsd-questions@FreeBSD.org</a>
郵件論壇,就可以向數百名開發人員和眾多的 FreeBSD 用戶提問。</p>
<p>FreeBSD 還有一個包括世界各地的開發人員團隊,他們在不斷地修正系統中的問題,
增加新特性以及撰寫文件。 支援新的硬體和功能一直是開發過程的重要部分,
而開發團隊在這一過程中,一直非常重視可能會影響到系統穩定性的問題。
FreeBSD 的愛用者也因其系統的高性能和高穩定性而感到自豪。</p>
<h2>專家們說 . . .</h2>
<p><i>“FreeBSD 對 [我們的] 高負荷應用總是游刃有餘,
而且經常能夠給人驚喜。不得不向 FreeBSD 開發團隊致敬!”</i></p>
<div align="right"><p>---Mark Hittinger, WinNet
Communications, Inc. 管理員</p></div>
</body>
</html>

@ -1,111 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!DOCTYPE html PUBLIC "-//FreeBSD//DTD XHTML 1.0 Transitional-Based Extension//EN"
"http://www.FreeBSD.org/XML/doc/share/xml/xhtml10-freebsd.dtd" [
<!ENTITY title "網頁資源">
]>
<!--
The FreeBSD Traditional Chinese Documentation Project
Original Revision 1.7
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>&title;</title>
<cvs:keyword xmlns:cvs="http://www.FreeBSD.org/XML/CVS">$FreeBSD$</cvs:keyword>
</head>
<body class="navinclude.docs">
<h2>連結</h2>
<ul>
<li>
<p><a href="http://dmoz.org/Computers/Software/Operating_Systems/Unix/BSD/FreeBSD/">Open
Directory 計劃</a> 有列出一堆不錯的 FreeBSD 連結,
包括一些有助於推廣市場的
<a href="http://dmoz.org/Computers/Software/Operating_Systems/Unix/BSD/FreeBSD/Prominent_Users/">知名用戶</a></p></li>
</ul>
<h2>現實生活中...</h2>
<h3><a name="press" href="../news/press.html">FreeBSD 相關報導</a></h3>
<p>FreeBSD 的相關報導。</p>
<h2>Newsgroups</h2>
<p>以下是 FreeBSD 使用者較常參與的討論區:</p>
<ul>
<li>
<p><a
href="news:comp.unix.bsd.freebsd.announce">comp.unix.bsd.freebsd.announce</a>
(有管制)</p>
</li>
<li>
<p><a
href="news:comp.unix.bsd.freebsd.misc">comp.unix.bsd.freebsd.misc</a></p>
</li>
<li>
<p><a
href="news:comp.unix.bsd.misc">comp.unix.bsd.misc</a></p>
</li>
</ul>
<h2>額外資源</h2>
<h3><a href="http://fxr.watson.org/">The
Source Code</a></h3>
<p>若想挖掘原始碼來看的話,這邊有現成的 FreeBSD <em>kernel</em>
原始碼的網頁版。 這是由 Robert Watson 所製作的。</p>
<h3><a href="http://www.daemonnews.org/">Daemon News</a></h3>
<p>BSD 新聞網站的龍頭</p>
<p>就像 FreeBSD每篇文章都是志工所提供的。
該計劃目標就是矢志成為BSD 新聞網站的龍頭,
並也提供發佈更正稿、新聞來源的管道。</p>
<h3><a name="diary" href="http://www.freebsddiary.org/">The FreeBSD
Diary</a></h3>
<p>The FreeBSD Diary 收錄許多初學者必讀的 how-to 優良文件,
該站矢志成為提供 step-by-step 文件(說明如何安裝、設定各種 port
軟體)的匯集地。</p>
<h3><a href="http://www.OnLamp.com/bsd/">The O'Reilly Network BSD
Dev Center</a></h3>
<p>The BSD Dev Center 有兩個 FreeBSD 專欄,
著重於各類技巧以及上手說明。</p>
<h3><a href="http://www.BSDForums.org">BSDForums.org</a></h3>
<p>BSDForums.org 有活躍的討論區以及 FreeBSD 及各類 BSD 的新聞、
社群網站。</p>
<h3><a href="http://www.bsdguides.org">BSD Guides</a></h3>
<p>BSDGuides.org 有放許多 BSD 相關的上手說明文件。</p>
<h2>其他文件</h2>
<p><a href="http://docs.FreeBSD.org/44doc/">4.4BSD Documents</a>: 乃是
4.4BSD 文件的 HTML 版,也可以在每台 FreeBSD 機器上的 <a
href="file://localhost/usr/share/doc">/usr/share/doc</a> 目錄內瀏覽(
若有裝 doc 套件的話)。</p>
<p><a href="http://docs.FreeBSD.org/info/">Info Documents</a>: 乃是
Info 文件的 HTML 版,也可以在每台 FreeBSD 機器上的 <a
href="file://localhost/usr/share/info">/usr/share/info</a> 目錄內瀏覽(
若有裝 info 套件的話)。</p>
</body>
</html>

@ -1,162 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!DOCTYPE html PUBLIC "-//FreeBSD//DTD XHTML 1.0 Transitional-Based Extension//EN"
"http://www.FreeBSD.org/XML/doc/share/xml/xhtml10-freebsd.dtd" [
<!ENTITY title "提交 FreeBSD 問題報告(problem report)">
<!ENTITY copyright "This gnats pr-submission mechanism Copyright &copy; 1996
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.">
<!ENTITY bugbusters "bugbusters@FreeBSD.org">
]>
<!-- The FreeBSD Traditional Chinese Documentation Project -->
<!-- Original Revision 1.58 -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>&title;</title>
<cvs:keyword xmlns:cvs="http://www.FreeBSD.org/XML/CVS">$FreeBSD$</cvs:keyword>
</head>
<body class="navinclude.support">
<!-- Copyright (c) 1996 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED. -->
<img src="&enbase;/gifs/bug.jpg" alt="Bugs" align="right" border="0" width="200" height="233"/>
<p>感謝您花費時間讓我們了解 FreeBSD 中所存在的問題。</p>
<p>透過這個表格,您可以提交在 source code、文件、網頁的問題回報。
如果您在安裝 FreeBSD 時遇到問題,或者想提出類似『為什麼
<b>○○</b> 不能用』或『FreeBSD 是否能與 <b>某樣軟體</b> 一起使用』,
請在相關的論壇提出問題。 由於問題的各情況不同,請參閱
<a href="support.html">支援</a></p>
<p>在填寫這個表格之前,請花些時間閱讀
<a href="&enbase;/doc/en_US.ISO8859-1/articles/problem-reports/article.html">
如何撰寫 FreeBSD 問題報告</a> 的事前準備。 這將為您省下時間,
並儘可能降低獲得與問題有關幫助時的失敗機率。 在提交問題報告之前請檢查是否
<a href="&cgibase;/query-pr-summary.cgi?query">已經有人提交過同樣的報告</a> 或者在
<a href="&enbase;/doc/zh_TW.Big5/books/faq/">FAQ</a> 中是否已經有所記錄。</p>
<p>請盡可能詳細地填寫表格所要求的資料。 特別注意,
您所填寫的 "Environment" (環境) 這段是指有問題的那一台機器環境。</p>
<p><b>注意</b> 由於 web 本身缺陷,您所做的複製、貼上將會破壞原先的 Tab 和空格,
因此這一 web 表格不該用來以複製、貼上的方式提交代碼。</p>
<p>需要注意的是,除非您明確說明,提交到 FreeBSD Project 的任何變動,
都將被認為是以 FreeBSD 相同的授權提供的。 此外,
您所使用來提交問題報告的電子郵件地址,將通過 web 界面公諸於眾,
因此您應使用有效的垃圾郵件過濾器。</p>
<p>如果您正提交 patch 檔案,請注意我們只接受純文字(text/*) 以及 shar
這兩種格式,因此您的瀏覽器必須能夠送出正確的檔案類型。
如果您的瀏覽器做這項工作時有問題,比較簡單的辦法是把檔案改名,
使其以 '.txt' 結尾。</p>
<p>最後,就是使用這一頁面時,您必須要能看辨識用的圖形,
這是我們用以阻止對這一系統進行濫用的一項措施。 我們非常遺憾不得不這樣做,
但這種做法是無法避免的。 如果您由於任何原因無法看到圖片,
請接受我們造成您不方便的歉意,並將您的問題報告,
發送給 <a href="mailto:&bugbusters;">bugbusters 團隊</a>
將提交內容送入問題追蹤系統。</p>
<p><b>注意</b> 在按下 '提交' 之前,請<b>先記得,儲存您所輸入的內容</b>
如果您的瀏覽器會把圖片 cache 起來,或者您花了超過 45 分鐘來填寫表格,
則在頁面上看到就有可能是過時的圖片,
進而導致系統拒絕您提交的內容。 隨您的瀏覽器的不同,
您可能會在這種情況下 <b>遺失所填的內容</b>
請儘量避免出現這種情況。</p>
<form action="http://www.FreeBSD.org/cgi/dosendpr.cgi" method="post"
enctype="multipart/form-data">
<input type="hidden" name="submitterid" value="current-users"/>
<input type="hidden" name="confidential" value="no"/>
<label for="email">您的電子郵件地址</label><br/>
<input type="text" name="email" id="email" size="40"/>
<br/><br/><label for="originator">您的名字</label><br/>
<input type="text" name="originator" id="originator" size="40"/>
<br/><br/><label for="organization">所屬團體或公司</label><br/>
<input type="text" name="organization" id="organization" size="40"/>
<br/><br/><label for="synopsis">對問題癥狀的扼要描述:</label> <br/>
<input type="text" name="synopsis" id="synopsis" size="60"/>
<br/><br/><label for="category">分類</label><select name="category" id="category">
<option> advocacy</option>
<option> alpha</option>
<option> amd64</option>
<option> bin</option>
<option> conf</option>
<option> docs</option>
<option> gnu</option>
<option> i386</option>
<option> ia64</option>
<option> java</option>
<option> kern</option>
<option selected="selected"> misc</option>
<option> ports</option>
<option> powerpc</option>
<option> sparc64</option>
<option> standards</option>
<option> threads</option>
<option> usb</option>
<option> www</option>
</select>
<br/><br/><label for="severity">嚴重程度</label><select name="severity" id="severity">
<option> non-critical</option>
<option> serious</option>
<option> critical</option>
</select>
<br/><br/><label for="priority">優先級</label><select name="priority" id="priority">
<option> low</option>
<option> medium</option>
<option> high</option>
</select>
<br/><br/><label for="class">提交種類:</label> <select name="class" id="class">
<option> sw-bug</option>
<option> doc-bug</option>
<option> change-request</option>
<option> update</option>
<option> maintainer-update</option>
</select>
<br/><br/><label for="release">您使用的是哪個 FreeBSD 版本</label><br/>
<input type="text" name="release" id="release" size="40"/>
<br/><br/><label for="environment">環境 (有問題的那台機器上的 "uname -a" 結果)</label>
<br/>
<textarea name="environment" id="environment" rows="3" cols="80"></textarea><br/><br/>
<label for="description">完整描述</label><br/>
<textarea name="description" id="description" rows="20" cols="80"></textarea><br/><br/>
<label for="howtorepeat">如何重現問題</label><br/>
<textarea name="howtorepeat" id="howtorepeat" rows="10" cols="80"></textarea><br/><br/>
<label for="fix">(如果你知道)如何修正問題</label><br/>
<textarea name="fix" id="fix" rows="20" cols="80"></textarea><br/><br/>
<label for="patch">和/或 patch 檔案 (最大 100KB)</label>:
<input type="file" name="patch" id="patch" maxlength="102400"
accept="text/*"/><br/>
<label for="code-confirm">最後,請輸入下面圖片中的文字,
以証明您不是機器人:<br/><br/>
<img src="http://www.FreeBSD.org/cgi/confirm-code.cgi?db=sendpr"
alt="隨機的文字; 如果您無法察看圖片,請發送郵件給 &bugbusters;"
border="0" height="24"/></label>
<input type="text" name="code-confirm" id="code-confirm" size="8"/><br/><br/>
<input type="submit" value="提交"/>
<input type="reset" value="重填"/>
</form>
</body>
</html>

@ -1,40 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!DOCTYPE html PUBLIC "-//FreeBSD//DTD XHTML 1.0 Transitional-Based Extension//EN"
"http://www.FreeBSD.org/XML/doc/share/xml/xhtml10-freebsd.dtd" [
<!ENTITY title "FreeBSD 支援">
]>
<!-- The FreeBSD Traditional Chinese Documentation Project -->
<!-- Original Revision 1.352 -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>&title;</title>
<cvs:keyword xmlns:cvs="http://www.FreeBSD.org/XML/CVS">$FreeBSD$</cvs:keyword>
</head>
<body class="navinclude.support">
<p>FreeBSD 擁有為數眾多的社群和商業支援,可供其用戶選擇。
本站的 <a href="&base;/community.html">社群</a> 部份,
也介紹到用戶可從 FreeBSD 社群,
包括眾多 <a href="&base;/community/mailinglists.html">郵件論壇</a>
所得到的支援。</p>
<p>許多 <a href="&base;/commercial/">廠商</a>
也提供了包括商業產品、 服務, 以及顧問咨詢在內的 FreeBSD
商業服務。</p>
<h2>反映問題</h2>
<p>您在 FreeBSD 中發現了 bug 或者發現文件中存在紕漏?
請閱讀我們的 <a href="&enbase;/support/bugreports.html">問題報告指引</a>
並使用 <a href="&enbase;/send-pr.html">問題報告表格</a>
來提交報告。</p>
<p>您也可以在本站 <a href="&enbase;/cgi/query-pr-summary.cgi">察看未解決問題報告</a>
<a href="&base;/cgi/query-pr-summary.cgi?query">搜索問題報告</a></p>
</body>
</html>

@ -1,94 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!--
The FreeBSD Documentation Project
The FreeBSD Traditional Chinese Documentation Project
$FreeBSD$
Names and email address of contributing authors and CVS committers.
Entity names for committers should be the same as their login names on
freefall.FreeBSD.org.
Use these entities when referencing people.
Please keep this list in alphabetical order by entity names.
IMPORTANT: If you delete names from this file you *must* ensure that
all references to them have been removed from the handbook's
translations. If they haven't then you *will* break the
builds for the other languages, and we will poke fun of you
in public.
-->
<!--
Chinese Names delphij is aware of. Please contact delphij@FreeBSD.org
if you know more.
-->
<!ENTITY a.avatar "梁泰華 <email xmlns='http://docbook.org/ns/docbook'>avatar@FreeBSD.org</email>">
<!ENTITY a.bmah "馬源浩 <email xmlns='http://docbook.org/ns/docbook'>bmah@FreeBSD.org</email>">
<!ENTITY a.chinsan "黃青山 <email xmlns='http://docbook.org/ns/docbook'>chinsan@FreeBSD.org</email>">
<!ENTITY a.clive "林東毅 <email xmlns='http://docbook.org/ns/docbook'>clive@FreeBSD.org</email>">
<!ENTITY a.clsung "宋政隆 <email xmlns='http://docbook.org/ns/docbook'>clsung@FreeBSD.org</email>">
<!ENTITY a.davidxu "徐逸鋒 <email xmlns='http://docbook.org/ns/docbook'>davidxu@FreeBSD.org</email>">
<!ENTITY a.delphij "李鑫 <email xmlns='http://docbook.org/ns/docbook'>delphij@FreeBSD.org</email>">
<!ENTITY a.dryice "劉棟 <email xmlns='http://docbook.org/ns/docbook'>dryice@FreeBSD.org</email>">
<!ENTITY a.foxfair "胡庭豪 <email xmlns='http://docbook.org/ns/docbook'>foxfair@FreeBSD.org</email>">
<!ENTITY a.hsu "徐敏傑 <email xmlns='http://docbook.org/ns/docbook'>hsu@FreeBSD.org</email>">
<!ENTITY a.ijliao "廖英傑 <email xmlns='http://docbook.org/ns/docbook'>ijliao@FreeBSD.org</email>">
<!ENTITY a.kaiw "王楷 <email xmlns='http://docbook.org/ns/docbook'>kaiw@FreeBSD.org</email>">
<!ENTITY a.keichii "吳敬元 <email xmlns='http://docbook.org/ns/docbook'>keichii@FreeBSD.org</email>">
<!ENTITY a.kevlo "羅謝家偉 <email xmlns='http://docbook.org/ns/docbook'>kevlo@FreeBSD.org</email>">
<!ENTITY a.leeym "李彥明 <email xmlns='http://docbook.org/ns/docbook'>leeym@FreeBSD.org</email>">
<!ENTITY a.loader "陳福康 <email xmlns='http://docbook.org/ns/docbook'>loader@FreeBSD.org</email>">
<!ENTITY a.luoqi "陳洛祁 <email xmlns='http://docbook.org/ns/docbook'>luoqi@FreeBSD.org</email>">
<!ENTITY a.lwhsu "許立文 <email xmlns='http://docbook.org/ns/docbook'>lwhsu@FreeBSD.org</email>">
<!ENTITY a.nemoliu "劉彤 <email xmlns='http://docbook.org/ns/docbook'>nemoliu@FreeBSD.org</email>">
<!ENTITY a.pat "李雲玖 <email xmlns='http://docbook.org/ns/docbook'>pat@FreeBSD.org</email>">
<!ENTITY a.rafan "范榮恩 <email xmlns='http://docbook.org/ns/docbook'>rafan@FreeBSD.org</email>">
<!ENTITY a.sephe "喬彥(王民) <email xmlns='http://docbook.org/ns/docbook'>sephe@FreeBSD.org</email>">
<!--
由於 Big5 中文並無該字,只得以 王民 兩字暫代。
該字完整寫法請參閱 http://www.zdic.net/zd/zi/ZdicE7Zdic8FZdic89.htm
或 http://www.cns11643.gov.tw/web/show_font.jsp?page_n=3&number=11642
-->
<!ENTITY a.vanilla "徐三泰 <email xmlns='http://docbook.org/ns/docbook'>vanilla@FreeBSD.org</email>">
<!--
Names and email address of Traditional Chinese local contributing authors
-->
<!ENTITY a.tw.cwlin "林建瑋 <email xmlns='http://docbook.org/ns/docbook'>cwlin0416@gmail.com</email>">
<!ENTITY a.tw.gaod "陳宏益 <email xmlns='http://docbook.org/ns/docbook'>gaod.chen@gmail.com</email>">
<!ENTITY a.tw.psilotum "林政道 <email xmlns='http://docbook.org/ns/docbook'>b89605222@ntu.edu.tw</email>">
<!ENTITY a.tw.tzhuan "黃子桓 <email xmlns='http://docbook.org/ns/docbook'>tzhuan@gmail.com</email>">
<!ENTITY a.tw.whsyu "徐偉浩 <email xmlns='http://docbook.org/ns/docbook'>whsyu@arbor.ee.ntu.edu.tw</email>">
<!ENTITY a.tw.yzlin "林宜政 <email xmlns='http://docbook.org/ns/docbook'>yzlin1985@gmail.com</email>">

@ -1,41 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!-- $FreeBSD$ -->
<!-- The FreeBSD Traditional Chinese Documentation Project -->
<!-- Original revision: www/share/xml/header.ent,v 1.6 -->
<!ENTITY copyright '<span xmlns="http://www.w3.org/1999/xhtml"><a href="&base;/search/index-site.html">Site Map</a> |
<a href="&base;/copyright/">Legal Notices</a> | &copy; 1995-2007 The FreeBSD Project.
保留所有權利。</span>'>
<!ENTITY author '<a href="&base;/index.html">首頁</a> &nbsp; | &nbsp; <a href="&base;/mailto.html">聯絡</a> &nbsp; | &nbsp; <a href="&base;/copyright/index.html">版權</a> &nbsp; | &nbsp; &copyright;'>
<!ENTITY home '<a href="&base;/index.html"><img src="&enbase;/gifs/home.gif"
alt="FreeBSD 首頁" border="0" align="right" width="101" height="33"></a>'>
<!ENTITY header2.word.search '搜尋'>
<!ENTITY header2.word.donate '捐贈'>
<!ENTITY header2.word.contact '聯絡'>
<!ENTITY stylesheet '&base;/layout/css/fixed.css'>
<!ENTITY stylesheetlarge '&base;/layout/css/fixed_large.css'>
<!ENTITY nav ''>
<!ENTITY header2.topnav '
<div xmlns="http://www.w3.org/1999/xhtml" id="topnav">
<ul id="topnavlist">
<li><a href="&base;/" title="首頁">首頁</a></li>
<li><a href="&base;/about.html" title="關於">關於</a></li>
<li><a href="&base;/where.html" title="取得 FreeBSD">取得 FreeBSD</a></li>
<li><a href="&base;/docs.html" title="文件">文件</a></li>
<li><a href="&base;/community.html" title="社群">社群</a></li>
<li><a href="&enbase;/projects/index.html" title="開發">開發</a></li>
<li><a href="&base;/support.html" title="支援">支援</a></li>
<li><a href="http://www.freebsdfoundation.org/" title="FreeBSD 基金會">基金會</a></li>
</ul>
</div> <!-- TOPNAV -->
'>
<!-- macro for webbuild paper -->
<!ENTITY webbuild '
<p xmlns="http://www.w3.org/1999/xhtml">介紹如何手動透過 CVS repository 更新,
以及如何編譯 FreeBSD 網頁。</p>'>

@ -1,167 +0,0 @@
<?xml version="1.0" encoding="big5"?>
<!-- $FreeBSD$
The FreeBSD Traditional Chinese Project
Original Revision: 1.11
-->
<!ENTITY nav.about '
<div xmlns="http://www.w3.org/1999/xhtml" id="sidenav">
<h2 class="blockhide">Section Navigation</h2>
<ul>
<li><a href="&base;/about.html">關於</a></li>
<li><a href="&base;/features.html">特色</a></li>
<li><a href="&base;/applications.html">應用程式</a></li>
<li><a href="&base;/internet.html">Internet</a></li>
<li><a href="&base;/advocacy/">提倡</a></li>
<li><a href="&enbase;/marketing/">市場</a></li>
<li><a href="&base;/news/newsflash.html">新聞</a></li>
<li><a href="&enbase;/events/events.html">近期活動</a></li>
<li><a href="&base;/news/press.html">媒體報導</a></li>
<li><a href="&base;/art.html">插圖</a></li>
<li><a href="&base;/logo.html">Logo</a></li>
<li><a href="&base;/donations/">捐贈</a></li>
<li><a href="&base;/copyright/">法律須知</a></li>
</ul>
</div> <!-- sidenav -->
'>
<!ENTITY nav.community '
<div xmlns="http://www.w3.org/1999/xhtml" id="sidenav">
<h2 class="blockhide">Section Navigation</h2>
<ul>
<li><a href="&base;/community.html">社群</a></li>
<li><a href="&enbase;/community/mailinglists.html">郵件論壇</a></li>
<li><a href="&enbase;/community/irc.html">IRC</a></li>
<li><a href="&enbase;/community/newsgroups.html">newsgroup</a></li>
<li><a href="&enbase;/usergroups.html">愛用者組織</a></li>
<li><a href="&enbase;/community/webresources.html">Web 資源</a></li>
</ul>
</div> <!-- sidenav -->
'>
<!ENTITY nav.developers '
<div xmlns="http://www.w3.org/1999/xhtml" id="sidenav">
<h2 class="blockhide">Section Navigation</h2>
<ul>
<li><a href="&enbase;/projects/index.html">開發</a></li>
<li><a href="&enbase;/doc/zh_TW.Big5/books/developers-handbook">開發手冊</a></li>
<li><a href="&enbase;/doc/zh_TW.Big5/books/porters-handbook">Porter 手冊</a></li>
<li><a href="&enbase;/developers/cvs.html">CVS 代碼庫</a></li>
<li><a href="&enbase;/releng/index.html">Release Engineering</a></li>
<li><a href="&base;/platforms/">平台</a>
<ul>
<li><a href="&base;/platforms/alpha.html">alpha</a></li>
<li><a href="&base;/platforms/amd64.html">amd64</a></li>
<li><a href="&base;/platforms/arm.html">ARM</a></li>
<li><a href="&base;/platforms/i386.html">i386</a></li>
<li><a href="&base;/platforms/ia64/index.html">ia64</a></li>
<li><a href="&base;/platforms/mips.html">MIPS</a></li>
<li><a href="&base;/platforms/pc98.html">pc98</a></li>
<li><a href="&base;/platforms/ppc.html">ppc</a></li>
<li><a href="&base;/platforms/sparc.html">sparc64</a></li>
<li><a href="&base;/platforms/xbox.html">xbox</a></li>
</ul>
</li>
<li><a href="&base;/projects/ideas/">新點子計劃</a></li>
<li><a href="&enbase;/doc/zh_TW.Big5/articles/contributing/index.html">為 FreeBSD 提供幫助</a></li>
</ul>
</div> <!-- sidenav -->
'>
<!ENTITY nav.docs '
<div xmlns="http://www.w3.org/1999/xhtml" id="sidenav">
<h2 class="blockhide">Section Navigation</h2>
<ul>
<li><a href="&base;/docs.html">文件</a></li>
<li><a href="&enbase;/doc/zh_TW.Big5/books/faq/">FAQ</a></li>
<li><a href="&enbase;/doc/zh_TW.Big5/books/handbook/">使用手冊</a></li>
<li><a href="&cgibase;/man.cgi">Manual 查閱</a></li>
<li><a href="&base;/docs/books.html">網路文章</a></li>
<li><a href="&enbase;/marketing/">市場文宣</a></li>
<li><a href="&enbase;/publish.html">實體書本</a></li>
<li><a href="&base;/docs/webresources.html">Web 資源</a></li>
<li><a href="&enbase;/projects/newbies.html">新手上路</a></li>
<li><a href="&enbase;/docproj/">FreeBSD 文件計劃</a></li>
</ul>
</div> <!-- sidenav -->
'>
<![ %beta.testing; [
<!ENTITY beta.listitem '
<li xmlns="http://www.w3.org/1999/xhtml"><a href="&enbase;/&u.betarel.schedule;">即將發佈: &betarel.current;</a></li>
'>
]]>
<!ENTITY beta.listitem ''>
<![ %beta2.testing; [
<!ENTITY beta2.listitem '
<li xmlns="http://www.w3.org/1999/xhtml"><a href="&u.betarel2.schedule;">即將發佈: &betarel2.current;</a></li>
'>
]]>
<!ENTITY beta2.listitem ''>
<!ENTITY nav.download '
<div xmlns="http://www.w3.org/1999/xhtml" id="sidenav">
<h2 class="blockhide">Section Navigation</h2>
<ul>
<li><a href="&base;/where.html">取得 FreeBSD</a></li>
<li><a href="&enbase;/releases/">發行資訊</a>
<ul>
<li><a href="&enbase;/&u.rel.announce;">Production Release: &rel.current;</a></li>
<li><a href="&enbase;/&u.rel2.announce;">Production Release(舊式): &rel2.current;</a></li>
<li><a href="&enbase;/snapshots/">Snapshot Releases</a></li>
&beta.listitem;
&beta2.listitem;
</ul>
</li>
<li><a href="&enbase;/ports/">移植的應用程式(ports)</a></li>
</ul>
</div> <!-- sidenav -->
'>
<!ENTITY nav.ports '
<div xmlns="http://www.w3.org/1999/xhtml" id="sidenav">
<h2 class="blockhide">Section Navigation</h2>
<ul>
<li><a href="&enbase;/ports/index.html">關於 ports</a></li>
<li><a href="&enbase;/ports/installing.html">安裝</a></li>
<li><a href="&enbase;/ports/updating.html">更新</a></li>
<li><a href="&enbase;/ports/searching.html">搜尋</a></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;目錄
<ul>
<li><a href="&enbase;/ports/categories-alpha.html">按字母序</a></li>
<li><a href="&enbase;/ports/categories-grouped.html">按邏輯分類序</a></li>
</ul>
</li>
<li><a href="&enbase;/ports/master-index.html">全部 Ports</a></li>
<li><a href="&enbase;/ports/references.html">更多資訊</a></li>
</ul>
</div> <!-- sidenav -->
'>
<!ENTITY nav.support '
<div xmlns="http://www.w3.org/1999/xhtml" id="sidenav">
<h2 class="blockhide">Section Navigation</h2>
<ul>
<li><a href="&enbase;/support.html">支援</a></li>
<li><a href="&enbase;/commercial/">商業產品</a>
<ul>
<li><a href="&enbase;/commercial/software_bycat.html">軟體</a></li>
<li><a href="&enbase;/commercial/hardware.html">硬體</a></li>
<li><a href="&enbase;/commercial/consult_bycat.html">咨詢</a></li>
<li><a href="&enbase;/commercial/isp.html">Internet 服務</a></li>
<li><a href="&enbase;/commercial/misc.html">其它</a></li>
</ul>
</li>
<li><a href="&base;/security/">安全資訊</a></li>
<li><a href="&enbase;/support/bugreports.html">Bug 報告</a>
<ul>
<li><a href="&base;/send-pr.html">提交問題報告</a></li>
</ul>
</li>
<li><a href="&enbase;/support/webresources.html">Web 資源</a></li>
</ul>
</div> <!-- sidenav -->
'>

File diff suppressed because it is too large Load Diff

@ -0,0 +1,5 @@
#
# $FreeBSD$
#
DESTDIR?= ${DOCDIR}/zh_TW.UTF-8/articles/${.CURDIR:T}

@ -0,0 +1,465 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!--
The FreeBSD Documentation Project
The FreeBSD Chinese (Traditional) Documentation Project
Original Revision: 1.506
Chased Revision: 1.508
-->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
<info><title>幫助 FreeBSD</title>
<abstract>
<para>無論是個人或是各種組織,如果希望為 FreeBSD 提供幫助,都可以在本文中找到合適的方法。</para>
</abstract>
<authorgroup>
<author><personname><firstname>Jordan</firstname><surname>Hubbard</surname></personname><contrib>原著: </contrib></author>
</authorgroup>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.ieee;
&tm-attrib.general;
</legalnotice>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
</info>
<indexterm><primary>貢獻</primary></indexterm>
<para>你希望替 FreeBSD 做點什麼嗎太好了我們歡迎你。FreeBSD
正是有賴於廣大使用者的貢獻才得以發展壯大的。我們不僅非常感謝您所做的貢獻,而且,這些工作對於 FreeBSD 的持續發展也至關重要。</para>
<para>也許與您想像的不同,您既不必得是一名出色的 Programmer也無須和
FreeBSD core team 成員有很好的私交,我們會一視同仁的對待您的工作。
FreeBSD 的開發人員遍布全球,大家技術專長各異,年齡分布也非常廣泛。
然而,每天我們都在面對持續增加的工作,而苦於沒有足夠的人手,因此我們隨時歡迎您的幫助。</para>
<para>FreeBSD 計劃所處理的是一個完整的作業系統環境,而不只是一個 kernel 或是一些零散的工具包。
因此,我們的 <filename>TODO</filename> 待辦任務列表裡包含各式各樣的工作:
從文件、使用者測試、demo到系統安裝程式和更專業的 kernel 開發。
因此無論您的技術水準如何,從事何種領域,都可以幫助這個計劃。</para>
<para>我們鼓勵從事和 FreeBSD 相關工作的企業和我們聯繫。
您需要一些特殊的擴展來使您的產品運轉起來嗎?
您會發現我們很樂意答應您的請求,除非是特別稀奇古怪的。
您是否正從事相關的增值業務? 讓我們來幫助您吧,
我們也許可以在某些方面相互合作。
自由軟體界正在努力打破舊有的框框(像是關於軟體開發、銷售和維護)
我們希望懇請您至少能給它一次機會。</para>
<sect1 xml:id="contrib-what">
<title>我們的需求</title>
<para>下面列出了一些需要完成的任務和子計劃,
它們代表 <filename>TODO</filename>(待辦任務列表)
列表的意思,以及使用者的要求。</para>
<sect2 xml:id="non-programmer-tasks">
<title>正在進行中的任務(非程式開發人員)</title>
<para>很多參加 FreeBSD 計劃的人不是 Programmer。
這個計劃裡有文件撰寫者、網頁設計師、以及技術支援人員。
對於這些義工來說,他們只需要貢獻一些時間,並且具有學習的意願。</para>
<orderedlist>
<listitem>
<para>您可以時常翻閱 FAQ 和手冊(Handbook)
,如果發現有解釋不清楚的地方,或是不合時宜的文件,甚至完全不正確的地方,
都請告訴我們。當然,若能順手把他們修正,並把勘誤寄給我們,那就更好了。:)
(SGML 其實並不難學,但我們也不反對您直接提交一般 ASCII 的純文字版本)。</para>
</listitem>
<listitem>
<para>幫助我們把 FreeBSD 文件翻譯成你的母語。
如果你的母語版本已經存在了,
也可以翻譯一些額外的文件,或者檢查那些已有的文件是否為最新版。
您可以先簡單看看 FreeBSD 文件計劃中有關 <link xlink:href="&url.books.fdp-primer;/translations.html">翻譯時的常見問題</link>
參加翻譯工作,並不是說您要孤軍奮戰翻譯所有 FreeBSD 文件。
身為義工,要做多少工作完全取決於您的意願。一旦某個人開始翻譯了,
之後幾乎一定會有其他人參與到這些工作中來。
如果時間有限,或者精力不夠去翻譯整份文件,那可以首先去翻譯安裝指南。</para>
</listitem>
<listitem>
<para>閱讀 &a.questions; 並偶爾翻閱(甚至有規律地這樣做) &ng.misc;
。與別人分享您的專業知識,
並幫助他們解決問題,是件令人愉悅的事情;
有時候,您甚至可以在這個過程中學到一些新東西!
這些論壇有時也會為您激發出一些不錯的想法。</para>
</listitem>
</orderedlist>
</sect2>
<sect2 xml:id="ongoing-programmer-tasks">
<title>正在進行中的任務(程式開發人員)</title>
<para>列在這裡的大部分任務都需要您投入可觀的時間,或者需要您在 FreeBSD kernel
方面有豐富的知識,或者兩者都要。當然這裡也有很多重要的任務,適合像是
<quote>weekend hackers</quote> 這類只用週末就可以搞定的 Hacker。</para>
<orderedlist>
<listitem>
<para>如果您正在跑的是 FreeBSD -CURRENT 版本,並且網路速度還不錯,
那麼可以到 <systemitem class="fqdomainname">current.FreeBSD.org</systemitem>
這台每天會有一個新版本 &mdash; 如果您有空,
您可以三不五時下載並安裝,
其間如果出了什麼問題,請告訴我們。</para>
</listitem>
<listitem>
<para>閱讀 &a.bugs;。這些問題,或許您能提供有建設性意義的意見,
或者幫忙測試一些 patch 。此外,甚至可以嘗試修正其中的一些問題。</para>
</listitem>
<listitem>
<para>如果您知道有一些修正已經在 -CURRENT 上成功地使用,
但在經過一段時間(通常是 2 週左右)之後,仍未合併到 -STABLE
(這步驟就是 MFC -- Merged From Current),那麼可以給相關的 committer 人員發封禮貌的提醒信。</para>
</listitem>
<listitem>
<para>將第三方(3rd party)軟體加入到原始碼中的
<filename>src/contrib</filename> 目錄。</para>
</listitem>
<listitem>
<para>確保 <filename>src/contrib</filename> 中的原始碼是最新的。</para>
</listitem>
<listitem>
<para>編譯原始碼(或是部分原始碼)時,請改用更高的警告等級(warning level)
以便偵錯(debug)用,並在完成測試、確認正常完畢之後,清除這些編譯的警告等級。</para>
</listitem>
<listitem>
<para>更新那些在 ports 中使用過時的東西,
例如 <function>gets()</function> 或包含
<filename>malloc.h</filename> 所產生的警告。</para>
</listitem>
<listitem>
<para>如果有為 ports 作了任何修正,
請記得將您的 patch 發給原作者 (這樣下次升級時,您的工作會變得輕鬆一些)。</para>
</listitem>
<listitem>
<para>先取得正式的標準,如 &posix; 的副本。
<link xlink:href="&url.base;/projects/c99/index.html">FreeBSD
C99 &amp; POSIX 標準相容計劃</link> 網站上,可以得到相關鏈接。
請將 FreeBSD 的行為與上述的標準進行比較,若所得結果與 C99 &amp; POSIX 標準不同的話,
特別是那些細節地方的微小差異,請發一個關於它的 PR (問題報告)。
如果可能,請指出如何修正它,並隨 PR 提交 patch 。
如果您認為標準有問題,請向這些規格標準的相關團體,請求對其進行重新的考慮。</para>
</listitem>
<listitem>
<para>為這份列表提供更多建議!</para>
</listitem>
</orderedlist>
</sect2>
<sect2>
<title>查閱整個 PR 資料庫</title>
<indexterm><primary>問題報告資料庫</primary></indexterm>
<para><link xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi">FreeBSD
PR 列表</link> 這裡會顯示目前所有 PR 的問題狀態,以及由
FreeBSD 使用者提交的改進建議。
PR 資料庫同時包括了開發人員和非開發人員的任務。
查看那些尚未解決的 PR並看看是否有您感興趣的任務。
這其中可能有一些是非常簡單的問題,只需要看一看並確認 PR 是正確的。
另外一些可能會非常複雜,或者完全未附任何修正。</para>
<para>首先看一看那些還沒有人接手的 PR。
如果 PR 已經分配給了其它人,但看起來是您能夠處理的,
您可以寄信給那個人,並詢問您是否可以提供幫助 &mdash;
他們可能已經有可供測試的 patch ,或有一些可供討論的意見。</para>
</sect2>
<sect2>
<title><quote>Ideas</quote> 中選一項</title>
<para><link xlink:href="&url.base;/projects/ideas/">&os; list of
projects and ideas for volunteers</link> 同樣地開放給有意願參與
&os; 計劃的人。
這份清單將持續地更新,同時提供各個項目的資訊給所有人
(不論是否為程式設計人員)。</para>
</sect2>
</sect1>
<sect1 xml:id="contrib-how">
<title>如何提供幫助</title>
<para>基本上可以分為以下 5 種方式:</para>
<sect2 xml:id="contrib-general">
<title>錯誤報告和意見發表</title>
<para>通常,<emphasis>一般</emphasis>
的技術想法和建議應該發到 &a.hackers;
同樣地,對於這些東西有興趣的人 (當然,
他們同時還要能夠容忍 <emphasis>大量的</emphasis> 郵件!)
可以考慮訂閱 &a.hackers;
請參閱 <link xlink:href="&url.books.handbook;/eresources.html#ERESOURCES-MAIL">FreeBSD
使用手冊</link> 以了解關於這個郵遞論壇,
以及其它郵遞論壇的詳細情況。</para>
<para>如果您發現了 bug 或者想要提交某些修改,
請透過 &man.send-pr.1; 程式或使用
<link xlink:href="&url.base;/send-pr.html">網頁介面
的回報</link> 來提交。請試著填寫 PR 的每個項目。
一般來說,除非 patch 檔超過 65 KB我們建議在 PR 中直接附上 patch 就可以了。
若可直接套用 patch 到原始碼的話,那麼建議在 PR 的
Synopsis 欄位註明 <literal>[PATCH]</literal>
對了,在附上 patch 時,請 <emphasis>不要</emphasis>
透過滑鼠的『複製、貼上』來進行,因為這樣做會把 Tab 變成空格,
會導致 patch 就不能用了。如果 patch 超過 20KB
請考慮壓縮它並使用 &man.uuencode.1; 來進行編碼。</para>
<para>在寫完 PR 之後,您會收到一封確認郵件以及事件追蹤編號。
請保留這個編號,因為事後可以用這編號發信到 &a.bugfollowup;
來回覆、提供關於該事件的後續資料。您需要做的是將編號放到郵件的標題中,
例如 <literal>"Re:
kern/3377"</literal>
若是同一問題的回覆方面,應該透過這種方式來進行。</para>
<para>如果您在一段時間 (超過 3 天甚至 1 週,這取決於您的郵件服務)之後仍然沒有收到確認信
或者由於一些原因無法使用 &man.send-pr.1; 程式,
則可以發信到 &a.bugs; 來請別人幫你代寄。</para>
<para>請參閱 <link xlink:href="&url.articles.problem-reports;/article.html">這篇文章</link>
了解如何撰寫好的問題報告。</para>
</sect2>
<sect2>
<title>對於文件的修訂</title>
<indexterm><primary>提交文件</primary></indexterm>
<para>文件的修改方面,是由 &a.doc; 來審查。
請參閱 <link xlink:href="&url.books.fdp-primer;/index.html">FreeBSD Documentation Project Primer</link>
來獲得完整的教學細節。
請按照 <xref linkend="contrib-general"/> 中介紹的方法使用 &man.send-pr.1;
來提交新的文件,或者改善現有的文件 (哪怕是很小的改進也是歡迎的!)。</para>
</sect2>
<sect2>
<title>對於現有原始碼的修改</title>
<indexterm><primary>FreeBSD-CURRENT</primary></indexterm>
<para>在現有原始碼上進行修改或增加功能,在某種程度上是需要更多技巧的事,
並且還跟您對於目前 FreeBSD 的開發現狀了解程度有關。
有多種方式可以得到被稱作 <quote>FreeBSD-CURRENT</quote>
的 FreeBSD 開發版本。
請參閱 FreeBSD 使用手冊的 <link xlink:href=" &url.books.handbook;/current-stable.html">相關部份</link> ,來了解使用 FreeBSD-CURRENT 的詳情。</para>
<para>在舊的原始碼上進行修改,則通常可能原始碼已過時,
或與新的版本差異太大而無法被重新整合到 FreeBSD 中。
如果您有訂 &a.announce; 以及 &a.current; 的話,
則可以透過它們來大致了解目前的開發狀態。</para>
<para>若您能夠儘量以最新的原始碼來進行您的修改,
則下一步要做的事情就是產生您所修改的 diff 檔,
並將它發給 FreeBSD 的維護人員。這項工作可以透過 &man.diff.1;
命令來完成。</para>
<para>提交 patch 時,建議 &man.diff.1; 格式採用 unified diff (可以用 <command>diff
-u</command> 來產生)。不過,如果您修改了大量的原始碼,
則使用 <command>diff -c</command> 來生成的 context diff
的 diff 可能更容易閱讀,因而推薦使用。一般而言,大都是採用 <command>diff -ruN</command> 即可。</para>
<indexterm>
<primary><command>diff</command></primary>
</indexterm>
<para>例如:</para>
<para>
<screen>&prompt.user; <userinput>diff -c oldfile newfile</userinput></screen>
<screen>&prompt.user; <userinput>diff -c -r olddir newdir</userinput></screen>
將會對特定目錄,產生 context 的 diff 檔。</para>
<para>或者像是...
<screen>&prompt.user; <userinput>diff -u oldfile newfile</userinput></screen>
<screen>&prompt.user; <userinput>diff -u -r olddir newdir</userinput></screen>
將產生一樣的 diff ,但是格式為 unified 。</para>
<para>更多的細節部份,請參閱 &man.diff.1;</para>
<para>一旦您使用 &man.diff.1; 來產生 diff 檔 (可以使用
&man.patch.1; 命令來測試一下),就可以提交它們,以便被 FreeBSD 收錄。
透過使用 <xref linkend="contrib-general"/>
中所介紹的 &man.send-pr.1; 程式就可以完成這項工作。
請注意:不要只把 diff 檔發到 &a.hackers;
否則它們可能會被遺忘! 我們會非常感激您提交的修改
(這是一個義工計劃!) 因為我們都很忙,
因此有時不一定能夠立即修正問題,但 PR 資料庫將一直保持著這些記錄,
因此只要有人有了時間它們就能被改正了。
如果您的問題報告中包括 patch ,不要忘了在標題加上
<literal>[PATCH]</literal> 來強調一下。</para>
<indexterm>
<primary><command>uuencode</command></primary>
</indexterm>
<para>如果您認為合適 (例如增、刪檔案或更改檔名)
還可以考慮使用
<command>tar</command> 來將檔案打包,然後用 &man.uuencode.1;
來編碼。此外,也可以用 &man.shar.1; 產生的方式。</para>
<para>如果您的修改可能存在潛在的爭議,例如,
您不確定相關的版權問題,或者感覺需要經過更嚴格的復審才可以發佈它們,
則應直接發給 &a.core;,而不是透過 &man.send-pr.1; 來發送。
&a.core; 這小組成員大多從事 FreeBSD 的日常工作。
需要注意的是,這個小組也因此十分忙碌,
因此只有在非常必要的時候,才應寫信給他們。</para>
<para>請參考 &man.intro.9;&man.style.9; 以了解關於撰寫程式碼的風格偏好。
若能在送出相關程式碼之前,先了解這些,那對大家來說將是極大的幫助。</para>
</sect2>
<sect2>
<title>新原始碼或重要的加值軟體包</title>
<para>如果您打算提供規模較大的原始碼,或者為 FreeBSD 增加重要的新功能,
則可能必須將它們透過 uuencode 進行編碼,或傳到某個 Web 或
FTP 站點,以便更多的人能夠得到它。如果您沒有這樣的主機,
請到相關的 FreeBSD 郵遞論壇提出,看看是否有人願意幫您放置它們。</para>
<para>對於大量的原始碼而言,關於版權的問題肯定會被提出。
FreeBSD 基本系統中能夠使用的版權聲明包括:</para>
<orderedlist>
<listitem>
<para>BSD<indexterm><primary>BSD 版權聲明</primary></indexterm> 版權。我們傾向於使用這類授權的原始碼,
因為它『不附加多餘的條件』,因而更能夠吸引商業企業使用。
FreeBSD 並不反對商業公司使用它的原始碼,相反,
我們積極地鼓勵商業公司使用我們的原始碼,
當然,如果它們若最終能把部分原始碼,重新捐贈給 FreeBSD 就更好了。</para>
</listitem>
<listitem>
<para>GNU General Public License或簡稱 <quote>GPL</quote><indexterm><primary>GPL</primary><see>GNU General Public License</see></indexterm><indexterm><primary>GNU General Public License</primary></indexterm>
我們並不很歡迎使用這樣授權的原始碼,
因為商業公司使用它需要做更多的工作。不過,由於很多使用
GPL 授權的原始碼目前是無法避免的 (compiler, assembler, text formatter等等)
,拒絕使用所有採用這樣授權的軟體是很不明智的。
採用 GPL 授權的原始碼會被放到原始碼的一些特定的位置,例如
<filename>/sys/gnu</filename>
<filename>/usr/src/gnu</filename>,以便那些認為 GPL
可能會造成麻煩的人能夠作出適當的判斷。</para>
</listitem>
</orderedlist>
<para>使用其它授權的原始碼在進入 FreeBSD 之前必須經過慎重的復審和考慮。
採用包含嚴厲限制的商業授權的原始碼,一般來說會被拒絕,
但我們鼓勵這些原始碼的作者,透過自己的管道來發布它們。</para>
<para>若要在您的成果上加入 <quote>BSD-based</quote> 版權的話,
請把下列文字放到每份原始碼的最開始部分,
並用適當的文字替換 <literal>%%</literal> 之間的文字。</para>
<programlisting>Copyright (c) %%proper_years_here%%
%%your_name_here%%, %%your_state%% %%your_zip%%.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer as
the first lines of this file unmodified.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY %%your_name_here%% ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL %%your_name_here%% BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&#36;Id&#36;</programlisting>
<para>為了方便您的使用,在
<filename>/usr/share/examples/etc/bsd-style-copyright</filename>
也可以找到此授權的副本。</para>
</sect2>
<sect2>
<title>贊助資金、硬體或 Internet mirror</title>
<para>我們非常願意接受各種形式的捐贈,以進一步拓展 FreeBSD 計劃
,因為有您的支持,像我們這樣的義工努力才能夠有更大的成就!
捐贈硬體也非常重要,因為這樣能夠幫助我們增加可支援的硬體種類,
而我們中的很多人並沒有足夠的資金來購置這些硬體。</para>
<sect3 xml:id="donations">
<title>捐款</title>
<para>FreeBSD 基金會是一個非營利的、有課稅豁免權的基金會,
之所以會建立這個基金會,是為了讓 FreeBSD 計劃能夠可長可久。
因為該基金會屬 501(c)3 實體,一般而言捐款給基金會的話,可以免繳美國聯邦收入稅,
以及科羅拉多州收入稅。通常對於有課稅豁免權的實體進行捐贈的話,
可以折抵聯邦收入中應課稅部分的金額。</para>
<para>您可以把支票寄往:
<address>
The FreeBSD Foundation
<street>7321 Brockway Dr.</street>
<city>Boulder</city>, <state>CO</state> <postcode>80303</postcode>
<country>USA</country>
</address>
</para>
<para>FreeBSD 基金會現在可以透過 PayPal 從網上接受捐款。
如果您想向基金會捐款,請參閱 <link xlink:href="http://www.freebsdfoundation.org">FreeBSD 基金會</link> 網站。</para>
<para>關於 FreeBSD 基金會的更多詳情,可以在 <link xlink:href="http://people.FreeBSD.org/~jdp/foundation/announcement.html">FreeBSD
基金會 -- 介紹</link> 找到。要聯絡基金會,
請發送電子郵件到
<email>bod@FreeBSDFoundation.org</email></para>
</sect3>
<sect3>
<title>捐贈硬體</title>
<indexterm><primary>捐贈</primary></indexterm>
<para>FreeBSD 計劃歡迎任何人捐贈可以使用的硬體。
如果您有興趣捐贈硬體,請聯繫 <link xlink:href="&url.base;/donations/">捐贈聯絡人辦公室</link></para>
</sect3>
<sect3>
<title>成為 FreeBSD mirror 的網站</title>
<para>我們歡迎新的 FTP、WWW 或
<command>cvsup</command> mirror 站。如果您希望成為這樣的 mirror 站,
請參閱 <link xlink:href="&url.articles.hubs;/index.html">如何架設 FreeBSD mirror</link>
一文,以了解進一步的情況。</para>
</sect3>
</sect2>
</sect1>
<index/>
</article>

@ -0,0 +1,570 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!-- $FreeBSD$ -->
<!-- The FreeBSD Documentation Project -->
<!-- Setting up a CVS repository - the FreeBSD way -->
<!-- Translate into Chinese by jose@jose.idv.tw -->
<!-- English Version: 1.15 -->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
<info><title>建立 CVS 儲存庫(repository) - 使用 FreeBSD 的方式</title>
<author><personname><firstname>Stijn</firstname><surname>Hoop</surname></personname><affiliation>
<address><email>stijn@win.tue.nl</email></address>
</affiliation></author>
<pubdate>$FreeBSD$</pubdate>
<copyright>
<year>2001</year>
<year>2002</year>
<year>2003</year>
<holder role="mailto:stijn@win.tue.nl">Stijn Hoop</holder>
</copyright>
<releaseinfo>$FreeBSD$</releaseinfo>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
</legalnotice>
<abstract>
<para>這份文件描述了使用和 FreeBSD 專案相同的命令稿來建立 CVS 儲存庫的步驟
。這和標準 CVS 建立的儲存庫相較之下有許多優點,包含了更多對於原始碼樹的
granular access 控制,以及為每一次的提交產生易讀的電子郵件。</para>
</abstract>
</info>
<sect1 xml:id="introduction">
<title>簡介</title>
<para>大多數的開放原始碼軟體專案都使用 <application>CVS</application> 作為
他們的原始碼控制系統。當 <application>CVS</application> 有這樣的優點存在
時,它也有部份的瑕疵和缺點。其中之一的原因是和其他的開發者分享原始碼樹能
夠快速地導致系統管理的惡夢,特別是如果其中一人希望保護部份的原始碼樹免受
於一般的存取。</para>
<para>FreeBSD 是其中一個使用 <application>CVS</application> 的專案,同時也
是基於它的開發者遍佈於全世界。他們撰寫了一些命令稿使得管理儲存庫變得更加
容易。最近這些命令稿由 &a.joe; 重新整理過且更標準化,使得在其他的專案上再
次使用這些命令稿會更加容易。本文件將描述使用這些新的命令稿的方法。</para>
<para>為了使本文件中的訊息有用,你需要熟悉 <application>CVS</application>
基本的操作方式。</para>
</sect1>
<sect1 xml:id="first-setup">
<title>基本設定</title>
<warning>
<para>最好的方式是在一個全新的儲存庫中執行這些步驟,並確定你了解所有的後
果。同時,請確定你有最新且可讀的資料備份!</para>
</warning>
<sect2>
<title>初始化儲存庫</title>
<para>首先要做的是建立一個新的儲存庫,執行下列命令告訴
<application>CVS</application> 建立並初始化:</para>
<screen>&prompt.user; <userinput>cvs -d path-to-repository init</userinput></screen>
<para>這命令告訴 <application>CVS</application> 建立
<filename>CVSROOT</filename> 的目錄,這個目錄裡放置了所有的組態檔。</para>
</sect2>
<sect2>
<title>設定儲存庫的群組</title>
<para>現在我們將建立一個擁有該儲存庫的群組,所有的開發者必須加入這個群組
,這樣他們才能夠存取該儲存庫。我們假設群組名稱是以 FreeBSD 內定的
<literal>ncvs</literal></para>
<screen>&prompt.root; <userinput>pw groupadd ncvs</userinput></screen>
<para>接者你需要使用 &man.chown.8; 將目錄所有者指定給剛剛新增的群組:</para>
<screen>&prompt.root; <userinput>chown -R :ncvs path-to-your-repository</userinput></screen>
<para>如此一來沒有適當的群組許可將沒有其他人可以寫入該儲存庫。</para>
</sect2>
<sect2>
<title>取回原始檔案</title>
<para>現在你需要從 FreeBSD 儲存庫中取回 <filename>CVSROOT</filename> 目錄,
從 FreeBSD 匿名的 CVS 映射站來取回會是最簡單的方法。請查閱 <link xlink:href="&url.books.handbook;/anoncvs.html">在 handbook 中的相關章節</link>
獲得更多資訊。我們假設取回的檔案存放在相同目錄下的
<filename>CVSROOT-freebsd</filename> 目錄中。</para>
</sect2>
<sect2>
<title>複製 FreeBSD 的命令稿</title>
<para>接下來我們要複製 FreeBSD <filename>CVSROOT</filename> 裡的檔案到你
的儲存庫中。如果你是孰悉於 <application>CVS</application>,你也許會想你
可以直接匯入這些命令稿,試圖更容易的同時和更新的版本同步;不過,事實是
<application>CVS</application> 在這個部份有缺點:當匯入檔案到
<filename>CVSROOT</filename> 時,它並不會更新組態檔。為了要認出這些檔案
,你還需要在匯入它們後一一重新提交,這就失去了
<literal>cvs import</literal> 的價值。因此,建議的方法是僅複製這些命令
稿過去。</para>
<para>若上述內容對你沒有意義是不重要的&mdash;因為最後的結果都是一樣的。
首先匯出你的 <filename>CVSROOT</filename>,然後複製剛剛取回的 FreeBSD
檔案到本地的目錄中(尚未變動過):</para>
<screen>&prompt.user; <userinput>cvs -d path-to-your-repository checkout CVSROOT</userinput>
&prompt.user; <userinput>cd CVSROOT</userinput>
&prompt.user; <userinput>cp ../CVSROOT-freebsd/* .</userinput>
&prompt.user; <userinput>cvs add *</userinput></screen>
<para>注意:你很可能會得到一段關於某些目錄沒有被複製的警告,這是正常的,
你並不需要用到這些目錄。</para>
</sect2>
<sect2>
<title>命令稿說明</title>
<para>現在你的工作目錄中有了完整 FreeBSD 專案在它們的儲存庫中使用的命令稿
的複本,以下是每個檔案簡單的介紹。</para>
<itemizedlist>
<listitem>
<para><filename>access</filename> - 此檔案在預設的安裝中沒有被用到。
這是使用在<link linkend="freebsdspecific">FreeBSD 的特殊設定</link>
,用來控制儲存庫的存取。如果你不希望使用這個設定的話你可以刪除這個檔案。</para>
</listitem>
<listitem>
<para><filename>avail</filename> - 此檔案控制儲存庫的存取。在此檔案中
你可以指定允許存取儲存庫的群組,也可以針對目錄或檔案來拒絕提交。你應該
調整為在你的儲存庫中將包含的群組和目錄。</para>
</listitem>
<listitem>
<para><filename>cfg.pm</filename> - 此檔案說明了設定內容,並提供預設的設定。
<emphasis></emphasis>該修改此檔案,而該將修改的設定放到
<filename>cfg_local.pm</filename></para>
</listitem>
<listitem>
<para><filename>cfg_local.pm</filename> - 此檔案包含所有的系統設定值
。你應該設定所有列在此的設定,例如提交的郵件要寄到哪、在哪些主機上
的使用者可以提交等等。更多的相關資訊在稍後會提到。</para>
</listitem>
<listitem>
<para><filename>checkoutlist</filename> - 此檔案列出所有在
<application>CVS</application> 控制下此目錄中的檔案,除了標準在
<literal>cvs init</literal> 建立出的檔案。你可以刪除某些不需要的
FreeBSD 特殊的檔案。</para>
</listitem>
<listitem>
<para><filename>commit_prep.pl</filename> - 此命令稿執行各種提交前的檢查,
基於你是否在 <filename>cfg_local.pm</filename> 中啟用。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>commitcheck</filename> - 此命令稿會直接影響
<application>CVS</application>。首先它會使用
<filename>cvs_acls.pl</filename> 來檢查提交者是否可以存取指定的原始碼樹,
然後執行 <filename>commit_prep.pl</filename> 來確認各種提交前的檢查。
如果一切正常,<application>CVS</application> 將允許此次提交繼續執行。
你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>commitinfo</filename> - 此檔案是
<application>CVS</application> 用來定義在提交前所要執行的程式&mdash;
此例中是 <filename>commitcheck</filename>。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>config</filename> - 儲存庫的設定選項。你可以修改為你
想要的,但大多數的管理者可能會保留預設值。更多關於可以在此設定的選項
資訊可以查閱 <application>CVS</application> 手冊。</para>
</listitem>
<listitem>
<para><filename>cvs_acls.pl</filename> - 此命令稿定義提交者的身分,以
及他/她是否允許存取原始碼樹,它是基於 <filename>avail</filename>
的設定。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>cvsignore</filename> - 此檔案列出哪些檔案
<application>CVS</application> 不用處理到儲存庫中,你可以修改成你想
要的。更多關於可以此檔案的說明可以查閱 <application>CVS</application>
手冊。</para>
</listitem>
<listitem>
<para><filename>cvswrappers</filename> - 此檔案是
<application>CVS</application> 用來啟用或停用關鍵字展開,或者是否檔
案該被視為二進位檔。你可以修改成你想要的。更多關於可以此檔案的說明
可以查閱 <application>CVS</application> 手冊。注意 <literal>-t</literal>
<literal>-f</literal> 選項在 <application>CVS</application>
client/server 並不能夠正確的運作。</para>
</listitem>
<listitem>
<para><filename>edithook</filename> - 此檔案已經沒有在使用了,留著只
是為了某些有意義的原因。你可以安全地刪除此檔案。</para>
</listitem>
<listitem>
<para><filename>editinfo</filename> - <application>CVS</application>
使用這個檔案來強迫你使用特定的編輯器。FreeBSD 沒有使用這個功能,因
為輸入日誌訊息已經由 <filename>verifymsg</filename>
<filename>logcheck</filename> 來完成。這是因為
<filename>editinfo</filename> 功能在從遠端提交或是使用
<literal>-m</literal><literal>-F</literal> 選項時不會執行。你不
該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>exclude</filename> - 此檔案列出被
<filename>commit_prep.pl</filename> 定義不能包含修正版標頭的檔案。
在 FreeBSD 版本的設定中,所有在修正版控制下的檔案需有一個修正版標頭
,(像是 &dollar;FreeBSD&dollar;)。在此檔案中所有符合一行一個的檔
案名稱將不會被檢查。你可以在此檔案中為不需要修正版標頭的檔案新增一
個正規運算式。為了安裝這些命令稿,最好的方法是排除
<filename>CVSROOT/</filename> 會受到標頭的檢查。</para>
</listitem>
<listitem>
<para><filename>log_accum.pl</filename> - 此命令稿會處理由
<filename>logcheck</filename> 所提供的日誌訊息,並且將之為備份目的
附加於儲存庫中的記錄檔案。同時也執行要將郵件寄到你提供的信箱中的程
式(在 <filename>cfg_local.pm</filename> 中)。它和
<application>CVS</application> 之間是由 <filename>loginfo</filename>
負責溝通。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>logcheck</filename> - 此檔案分析提交者提供的日誌訊息
,並試圖對其作清理動作。它和 <application>CVS</application> 之間是
<filename>verifymsg</filename> 負責溝通。你不該更動此檔案。</para>
<note><para>此命令稿依附於本地的 FreeBSD <application>CVS</application>
處理FreeBSD 版本在此命令稿修改過後才讀取日誌訊息;標準的
<application>CVS</application> 版本雖然能夠檢查語法上是否正確,但並
不會清理日誌訊息。<application>CVS</application> 1.11.2 可以透過在
<filename>config</filename> 設定 <literal>RereadLogAfterVerify=always</literal>
來和 FreeBSD 版本有相同的作用。</para></note>
</listitem>
<listitem>
<para><filename>loginfo</filename> - 此檔案是
<application>CVS</application> 用來控制日誌訊息要寄到哪裡,而
<filename>log_accum.pl</filename> 負責處理。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>modules</filename> - 此檔案保留了
<application>CVS</application> 原始的意義。你應該刪除新增的 FreeBSD
模組,並修改為你想要的內容。更多關於可以此檔案的說明可以查閱
<application>CVS</application> 手冊。</para>
</listitem>
<listitem>
<para><filename>notify</filename> - 此檔案為
<application>CVS</application> 用來控制監看某個檔案。在 FreeBSD 的
儲存庫中沒有使用到此檔案,你可以修改成你想要的。更多關於可以此檔案
的說明可以查閱 <application>CVS</application> 手冊。</para>
</listitem>
<listitem>
<para><filename>options</filename> - 此檔案僅限使用於 FreeBSD 和 Debian
<application>CVS</application> 版本。它包含了需要在修正版標頭中
展開的關鍵字。你可以修改為符合你指定在 <filename>cfg_local.pm</filename>
的關鍵字。</para>
</listitem>
<listitem>
<para><filename>rcsinfo</filename> - 此檔案定義提交時儲存庫所要使用的
日誌訊息樣式範本,如 <filename>rcstemplate</filename>。FreeBSD 預設
為所有的儲存庫使用同一個樣式範本,你可以加入其他你想要的。</para>
</listitem>
<listitem>
<para><filename>rcstemplate</filename> - 此檔案是提交者在提交時會看到
的日誌訊息樣式範本,你應該修改為你定義在 <filename>cfg_local.pm</filename>
的各種參數。</para>
</listitem>
<listitem>
<para><filename>tagcheck</filename> - 此檔案控制在儲存庫中貼上標籤的
存取。標準的 FreeBSD 版本拒絕名為 RELENG* 的標籤,因為這是 release
engineering 的工作。你可以根據需要來修改此檔案。</para>
</listitem>
<listitem>
<para><filename>taginfo</filename> - 此檔案控制執行在儲存庫中貼上標籤
的存取的命令稿,如 <filename>tagcheck</filename>。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>unwrap</filename> - 此命令稿可以用來在匯出時自動<quote>解開</quote>
二進位檔(請見 <filename>cvswrappers</filename>)。現在 FreeBSD 並
沒有使用此設定,因為此功能在遠端提交時並不是執行的非常完善。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>verifymsg</filename> - 此檔案用來執行和日誌訊息相關的
命令稿,如 <filename>logcheck</filename>。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>wrap</filename> - 此命令稿可以用來在提交時自動<quote>包裹</quote>
二進位檔(請見 <filename>cvswrappers</filename>)。現在 FreeBSD 並
沒有使用此設定,因為此功能在遠端提交時並不是執行的非常完善。你不該更動此檔案。</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>自訂命令稿</title>
<para>接下來的步驟要設定這些命令稿使得它們可以在你的環境中運作。你應該檢
查所有在目錄中的檔案,並修改為符合你的設定。尤其,你會想要修改下列的檔案:</para>
<procedure>
<step>
<para>如果你不希望使用<link linkend="freebsdspecific">FreeBSD 的特殊設定</link>
你可以安全地刪除 <filename>access</filename></para>
<screen>&prompt.user; <userinput>cvs rm -f access</userinput></screen>
</step>
<step>
<para>編輯 <filename>avail</filename> 來包含你想控制存取的各種儲存庫
目錄,請確定你有保留 <literal>avail||CVSROOT</literal> 這一行,否則
你將會在下一步把你自己鎖在外面。</para>
<para>另外你可以在此檔案中新增開發者的群組FreeBSD 預設使用
<filename>access</filename> 來列出所有的開發者,但你可以使用任何你
想要用的檔案。如果你想的話也可以新增群組(請使用指定在
<filename>cvs_acls.pl</filename> 上層裡的語法)。</para>
</step>
<step>
<para>編輯 <filename>cfg_local.pm</filename> 來包含你需要的選項。尤其
你應該檢視一下下列的設定項目:</para>
<itemizedlist>
<listitem>
<para><literal>%TEMPLATE_HEADERS</literal> - 這是用來取得日誌訊
息內容的程序,並加入將呈現的郵件項目和提供非空值的訊息。你可
以刪除 <literal>PR</literal><literal>MFC after</literal>
敘述,當然也可以加入你想要的。</para>
</listitem>
<listitem>
<para><literal>$MAIL_BRANCH_HDR</literal> - 如果你想要在每一封
提交的郵件中加入描述是在哪一個分支中提交的標頭,那麼請定義為
符合你的設定。如果你不想使用這樣的標頭,那麼請設定為空值。</para>
</listitem>
<listitem>
<para><literal>@COMMIT_HOSTS</literal> - 定義使用者能夠提交的主機。</para>
</listitem>
<listitem>
<para><literal>$MAILADDRS</literal> - 設定應該收到提交郵件的郵
件位址。</para>
</listitem>
<listitem>
<para><literal>@LOG_FILE_MAP</literal> - 以你所需要的來修改這個
陣列,每個設定值應該符合被提交的目錄,而提交的日誌訊息會以
<filename>commitlogs</filename> 的名稱儲存在每個被設定的目錄下。</para>
</listitem>
<listitem>
<para><literal>$COMMITCHECK_EXTRA</literal> - 如果你不想使用
<link linkend="freebsdspecific">FreeBSD 特殊的存取控制</link>
功能,你可以在此檔案中刪除對 <literal>$COMMITCHECK_EXTRA</literal>
的定義。</para>
</listitem>
</itemizedlist>
<note><para>修改 <literal>$IDHEADER</literal> 的功能只有在 FreeBSD
平台上可以運作,它是相依在 FreeBSD 的特殊 <application>CVS</application>
設定上。</para></note>
<para>你可以檢查 <filename>cfg.pm</filename> 是否有其他的參數可以修改
,但是修改最好是有原因的。</para>
</step>
<step>
<para>刪除 <filename>exclude</filename> 中關於FreeBSD 的特殊設定的敘
述(如以 <literal>^ports/</literal> 為開頭的每一行等)。此外,註解
掉以 <literal>^CVSROOT/</literal> 為開頭的行列,然後新增一行只有
<literal>^CVSROOT/</literal>。等到關鍵字展開的命令稿安裝好後,你可
以在 <filename>CVSROOT</filename> 目錄中的檔案裡加上標頭,然後再恢
復剛剛註解的行列,但在你還沒有提交前則只保持這樣。</para>
</step>
<step>
<para>編輯 <filename>modules</filename>,並刪除所有 FreeBSD 的群組。
加入你需要的模組。</para>
</step>
<step>
<note><para>此步驟只有在你於 <filename>cfg_local.pm</filename> 中指定
<literal>$IDHEADER</literal> 才有必要設定(只有在 FreeBSD 的特殊
<application>CVS</application> 設定上才能夠執行)。</para></note>
<para>編輯 <filename>options</filename> 以符合你在
<filename>cfg_local.pm</filename> 中設定的標籤名稱。並在所有的檔案
中搜尋 <literal>FreeBSD</literal> 並替換為你設定的標籤名稱。</para>
</step>
<step>
<para>修改 <filename>rcstemplate</filename> 為和在
<filename>cfg_local.pm</filename> 中相同的設定。</para>
</step>
<step>
<para>選擇性的刪除在 <filename>tagcheck</filename> 中針對 FreeBSD 檢
查的設定。你可以僅僅在檔案的最上層加上 <literal>exit 0</literal>
取消所有標籤的檢查。</para>
</step>
<step>
<para>在你完成前的最後一件事是確認 commitlogs 可以正確儲存。預設會儲
存在儲存庫中的 <filename>commitlogs</filename> 子目錄中,而這個目錄
需要先建立:</para>
<screen>&prompt.user; <userinput>mkdir commitlogs</userinput>
&prompt.user; <userinput>cvs add commitlogs</userinput></screen>
</step>
</procedure>
<para>現在,在細心的檢視過後,你可以提交你的修改了。確定你先前有在
<filename>avail</filename> 中允許你自己存取 <filename>CVSROOT</filename>
目錄,因為如果沒有這樣做的話你會把你自己鎖在外面。完整確認過後請執行下
列命令:</para>
<screen>&prompt.user; <userinput>cvs commit -m '- Initial FreeBSD scripts commit'</userinput></screen>
</sect2>
<sect2>
<title>測試設定</title>
<para>你已經準備好做基本的測試了:強制提交 <filename>avail</filename>
以確認每件事都如預期的運作。</para>
<screen>&prompt.user; <userinput>cvs commit -f -m 'Forced commit to test the new CVSROOT scripts' avail</userinput></screen>
<para>如果一切正常,那麼恭喜了!你現在已經為你的儲存庫建立好 FreeBSD 的命
令稿了。如果 <application>CVS</application> 仍然有警告什麼,回頭檢視上
述的步驟是否有正確的執行。</para>
</sect2>
</sect1>
<sect1 xml:id="freebsdspecific">
<title>FreeBSD 的特殊設定</title>
<para>FreeBSD 專案自己使用一個有點不同的設定,那就是同時也使用 FreeBSD
<filename>CVSROOT</filename> 中的 <filename>freebsd</filename> 子目錄。因
為大量的提交者必須在相同的群組中,因此專案寫了一個簡單的 wrapper 來確認提
交者可以正確的提交,並設定儲存庫的群組名稱。</para>
<para>如果你的儲存庫也需要這樣的功能,那麼下面就會介紹如何建立,不過首先要
先來看一段複雜的概述。</para>
<sect2>
<title>FreeBSD 設定中使用的檔案</title>
<itemizedlist>
<listitem>
<para><filename>access</filename> - 此檔案用來控制儲存庫的存取。你
應該編輯並加入所有在專案中的成員。</para>
</listitem>
<listitem>
<para><filename>freebsd/commitmail.pl</filename> - 此檔案已經沒有在
使用了,留著只是為了某些有意義的原因。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>freebsd/cvswrap.c</filename> - 此 CVS wrapper 原始
碼是用來建立檢查所有存取的工作。更多的訊息在稍後會提出。你應該編
<literal>ACCESS</literal><literal>REALCVS</literal> 的路徑
以符合你的設定。</para>
</listitem>
<listitem>
<para><filename>freebsd/mailsend.c</filename> - 此檔案是 FreeBSD 設
定 mailing lists 需要的,你不該更動此檔案。</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>步驟</title>
<procedure>
<step>
<para>只有加入你的使用者名稱到 <filename>access</filename> 中。</para>
</step>
<step>
<para>編輯 <filename>cvswrap.c</filename> 的路徑以符合你的設定,定義
在大寫的 <literal>ACCESS</literal> 中。同時如果預設值不符合你的情況
的話也應該修改本地實際的 <command>cvs</command> 程式所在位置。原始
<filename>cvswrap.c</filename> 希望替代伺服端的 CVS 程式,例如可
能會是 <filename>/usr/bin/ncvs</filename></para>
<para>我的 <filename>cvswrap.c</filename> 是這樣:</para>
<programlisting>#define ACCESS "/local/cvsroot/CVSROOT/access"
#define REALCVS "/usr/bin/ncvs"</programlisting>
</step>
<step>
<para>接下來是建立 wrapper 來確認你在提交時是在正確的群組中。
在你的 <filename>CVSROOT</filename> 中的
<filename>cvswrap.c</filename> 要能夠使用。</para>
<para>在你完成編輯並加入正確的路徑後我們要來編譯原始碼:</para>
<screen>&prompt.user; <userinput>cc -o cvs cvswrap.c</userinput></screen>
<para>然後進行需要設定(此步驟需要 root 權限):</para>
<screen>&prompt.root; <userinput>mv /usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>mv cvs /usr/bin/cvs</userinput>
&prompt.root; <userinput>chown root:ncvs /usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod o-rx /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod u-w,g+s /usr/bin/cvs</userinput></screen>
<para>這會將 wrapper 安裝成預設的 <command>cvs</command> 程式,請確定
任何要使用儲存庫的人應該有正確的存取權限。</para>
</step>
<step>
<para>現在你可以刪除所有在儲存庫群組中的使用者,所有的存取控制會經由
wrapper 完成,同時 wrapper 會設定存取的正確群組。</para>
</step>
</procedure>
</sect2>
<sect2>
<title>測試設定</title>
<para>你的 wrapper 現在應該已經安裝好了,你當然也可以強制提交
<filename>access</filename> 來測試是否正常:</para>
<screen>&prompt.user; <userinput>cvs commit -f -m 'Forced commit to test the new CVSROOT scripts' access</userinput></screen>
<para>同樣地,如果有錯誤,檢查是否上述所有步驟都有正確的執行。</para>
</sect2>
</sect1>
</article>

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!--
Original revision: 1.24
-->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
<info><title>如何在 FreeBSD-questions mailing list 上得到正解</title>
<info><title>如何在 FreeBSD-questions mailing list 上得到正解</title>
<author><personname><firstname>Greg</firstname><surname>Lehey</surname></personname><affiliation>
@ -26,15 +26,15 @@
<releaseinfo>$FreeBSD$</releaseinfo>
<abstract>
<para>本文主要是給準備寫信到 FreeBSD-questions mailing list 的人提供一些參考。
我們會給你一些發問的技巧與建議,以便讓你的答案得到更有用的答覆。</para>
<para>本文主要是給準備寫信到 FreeBSD-questions mailing list 的人提供一些參考。
我們會給你一些發問的技巧與建議,以便讓你的答案得到更有用的答覆。</para>
<para>本文會定期發到 FreeBSD-questions mailing list 上。</para>
<para>本文會定期發到 FreeBSD-questions mailing list 上。</para>
</abstract>
</info>
<sect1>
<title xml:id="Introduction">簡介</title>
<title xml:id="Introduction">簡介</title>
<para><literal>FreeBSD-questions</literal> is a mailing list maintained by
the FreeBSD project to help people who have questions about the normal

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!-- $FreeBSD$ -->
@ -35,23 +35,23 @@
<releaseinfo>$FreeBSD$</releaseinfo>
<abstract>
<para>這是份還在草稿中的文章,主要是(尤其是給各區網中心管理者的參考)介紹如何 mirror FreeBSD。</para>
<para>這是份還在草稿中的文章,主要是(尤其是給各區網中心管理者的參考)介紹如何 mirror FreeBSD。</para>
</abstract>
</info>
<sect1 xml:id="mirror-contact">
<title>聯繫方式</title>
<title>聯繫方式</title>
<para>若要找整個 Mirror 機制的協調者,可以 email 到 <email>mirror-admin@FreeBSD.org</email>。此外,這裡也有份
&a.hubs;</para>
<para>若要找整個 Mirror 機制的協調者,可以 email 到 <email>mirror-admin@FreeBSD.org</email>。此外,這裡也有份
&a.hubs;</para>
</sect1>
<sect1 xml:id="mirror-requirements">
<title>成為 FreeBSD mirrors 的必備條件</title>
<title>成為 FreeBSD mirrors 的必備條件</title>
<sect2 xml:id="mirror-diskspace">
<title>硬碟空間</title>
<title>硬碟空間</title>
<para>
硬碟空間是最重要的必備條件之一。
硬碟空間是最重要的必備條件之一。
Depending on the set of releases, architectures,
and degree of completeness you want to mirror, a huge
amount of disk space may be consumed. Also keep in mind
@ -66,20 +66,20 @@
Here are some approximate figures:
</para>
<itemizedlist>
<listitem><para>完整 FTP Distribution: 126 GB</para></listitem>
<listitem><para>完整 FTP Distribution: 126 GB</para></listitem>
<listitem><para>CVS repository: 2.7 GB</para></listitem>
<listitem><para>CTM deltas: 1.8 GB</para></listitem>
<listitem><para>Web pages: 300 MB</para></listitem>
</itemizedlist>
</sect2>
<sect2 xml:id="mirror-bandwidth">
<title>網路頻寬</title>
<title>網路頻寬</title>
<para>
當然,你一定要能連上 Internet。
頻寬需求多少,這要看你所想要的 mirror 程度而定。
若只想要 mirror 一部份的 FreeBSD 檔案以作為網站或 intranet 的局部用途,
那麼頻寬需求會明顯比成為公共服務用途的小一些。
若想成為 official mirror 之一的話,那麼頻寬就勢必得增加才夠用。以下,我們僅列出一些估計值以做為參考:
當然,你一定要能連上 Internet。
頻寬需求多少,這要看你所想要的 mirror 程度而定。
若只想要 mirror 一部份的 FreeBSD 檔案以作為網站或 intranet 的局部用途,
那麼頻寬需求會明顯比成為公共服務用途的小一些。
若想成為 official mirror 之一的話,那麼頻寬就勢必得增加才夠用。以下,我們僅列出一些估計值以做為參考:
</para>
<itemizedlist>
<listitem><para>Local site, no public access: basically no minimum,
@ -90,7 +90,7 @@
</itemizedlist>
</sect2>
<sect2 xml:id="mirror-system">
<title>系統需求、CPU、RAM</title>
<title>系統需求、CPU、RAM</title>
<para>
One thing this depends on the expected number of clients,
which is determined by the server's policy. It is
@ -880,25 +880,25 @@ cvspserver stream tcp nowait root /usr/bin/cvs cvs -f -l -R -T /anoncvstmp --all
<sect1 xml:id="mirror-official">
<title>Official Mirrors</title>
<para>
Official mirrors 站為具有下列條件的 mirror 站
Official mirrors 站為具有下列條件的 mirror 站
<itemizedlist>
<listitem>
<para>
a) 有 <systemitem>FreeBSD.org</systemitem> DNS entry
(通常為 CNAME 紀錄)。
a) 有 <systemitem>FreeBSD.org</systemitem> DNS entry
(通常為 CNAME 紀錄)。
</para>
</listitem>
<listitem>
<para>
b) 被 FreeBSD 文件列為 offical mirror 站(像是 handbook)。
b) 被 FreeBSD 文件列為 offical mirror 站(像是 handbook)。
</para>
</listitem>
</itemizedlist>
除了以上述方式來分辨是否為 official mirrors 站之外,
Official mirrors 站不一定得為 <emphasis>Tier-1</emphasis>-mirrors 站。
然而,只要是 <emphasis>Tier-1</emphasis>-mirror 站的話,就一定會是
official mirrors 站。
除了以上述方式來分辨是否為 official mirrors 站之外,
Official mirrors 站不一定得為 <emphasis>Tier-1</emphasis>-mirrors 站。
然而,只要是 <emphasis>Tier-1</emphasis>-mirror 站的話,就一定會是
official mirrors 站。
</para>
<sect2 xml:id="mirror-official-requirements">
<title>Special Requirements for official (tier-1) mirrors</title>

@ -0,0 +1,416 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!-- $FreeBSD$ -->
<!-- The FreeBSD Documentation Project -->
<!-- FreeBSD Mailing Lists 常見問答集 -->
<!-- Translate into Chinese by chinsan.tw@gmail.com -->
<!-- English Version: 1.7 -->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
<info><title>&os; Mailing Lists 常見問答集</title>
<authorgroup>
<author><personname><surname>The &os; Documentation Project</surname></personname></author>
</authorgroup>
<copyright>
<year>2004</year>
<year>2005</year>
<year>2006</year>
<holder>&os; 文件計畫</holder>
</copyright>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
<abstract>
<para>這是有關 &os; mailing lists 的 FAQ。如果您對協助本文件/翻譯計畫
的進行有興趣的話,請寄 e-mail 到
&a.doc;。此外,隨時可從 <link xlink:href="http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/mailing-list-faq/index.html">
FreeBSD 網站</link> 拿到這份文件的最新版本。
也可以利用 HTTP 來下載 <link xlink:href="article.html">HTML</link>
文件,或是經由 <link xlink:href="ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/">
FreeBSD FTP 站</link> 下載純文字、&postscript;、或 PDF 版本的檔案。
您也可以在這裡使用
<link xlink:href="&url.base;/search/search.html">搜尋 FAQ 資料</link>
的功能。</para>
</abstract>
</info>
<sect1 xml:id="introduction">
<title>前言</title>
<para>如同其他 FAQs 一樣,本文主要目的是希望涵蓋在 &os; mailing
lists 上面的常見問題(當然,包括答案)。
雖然,原本構想是希望能降低這些重複問題的網路流量,但如今已被公認 FAQs 也是相當好用的資源之一。</para>
<para>本文主要是描述社群之間所培養的一些禮儀(或默契),但本文本身並非『聖旨』般的權威。
若發現本文內有任何技術瑕疵,或者是想建議可以增加哪些部分的話,請送 PR或是 email 到 &a.doc;。謝囉!</para>
<qandaset>
<qandaentry>
<question xml:id="purpose">
<para>&os; mailing lists 的目的為何?</para>
</question>
<answer>
<para>&os; mailing lists 主要是提供 &os; 社群間的溝通管道,這裡有各式專題領域的探討,以及興趣交流。</para>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="audience">
<para>&os; mailing lists 的參與者有哪些?</para>
</question>
<answer>
<para>這個問題,要看各個 list 的『版規(charter)』定位而有所不同。有些 lists 主要是 developers 在參與討論的;
而有些則主要是幾乎整體 &os; 社群都可以隨意參與討論的。請看 <link xlink:href="http://lists.FreeBSD.org/mailman/listinfo">這份清單</link> 上面有目前所有 list 的摘要說明。</para>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="participation-who">
<para>&os; mailing lists 對任何人都是開放參與的嗎?</para>
</question>
<answer>
<para>再重複一次,這要看各個 list 的『版規(charter)』定位而有所不同。
請在發文前,先注意閱讀該 list 的『版規(charter)』,並遵守相關原則。
如此一來,才會讓大家都能溝通更無礙。</para>
<para>如果看了上一個問答內的清單之後,還是不清楚要到哪個 list 去發問的話,
那麼可以試著把問題丟到 freebsd-questions 看看(但請先看下面講的補充)。</para>
<para>請注意:習慣上所有 mailing lists 都是開放發表討論的,也不必得先成為訂閱會員才行。
這是相當審慎的選擇,來讓參與 &os; 社群更輕鬆容易,並鼓勵互相分享彼此的想法。
然而,由於過去有些人的濫用,有些 lists 現在開始限制參與討論的部分,以避免不必要的困擾。</para>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="subscribe">
<para>要怎麼訂閱呢?</para>
</question>
<answer>
<para>可以用 <link xlink:href="http://lists.FreeBSD.org/mailman/listinfo">
Mailman 網頁介面</link> 來訂閱任何公開的 lists。</para>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="unsubscribe">
<para>要怎麼退訂?</para>
</question>
<answer>
<para>一樣請用剛上面說的網頁介面,或者 mailing list 上面每封信結尾處都會有相關 URL 連結的指示說明。</para>
<para>千萬請不要直接寫信到這些公開的 mailing lists 說你要退訂。
首先呢..因為本來就不是這樣退訂的,其次你會惹來眾怒而招來圍剿、筆戰。
這是很典型的退訂錯誤示範,請不要這樣做。</para>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="archives">
<para>可以找到舊信的資料庫嗎?</para>
</question>
<answer>
<para>嗯,有!可以在 <link xlink:href="http://docs.FreeBSD.org/mail/">這邊</link>
找到相關的舊信資料庫(archive)。</para>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="digest">
<para>mailing lists 可有摘要版呢?</para>
</question>
<answer>
<para>當然也有,請看 <link xlink:href="http://lists.FreeBSD.org/mailman/listinfo">
Mailman 網頁介面</link></para>
</answer>
</qandaentry>
</qandaset>
</sect1>
<sect1 xml:id="etiquette">
<title>Mailing List 的參與禮儀</title>
<para>在 mailing lists 上參與討論,就像在其他社群一樣,我們都需要一些溝通上的共識。
發言請注重禮儀(或默契),切勿無的放矢。</para>
<qandaset>
<qandaentry>
<question xml:id="before-posting">
<para>在發文之前,有什麼注意事項呢?</para>
</question>
<answer>
<para>最重要的是你已經看了這篇文章,然而,若您對 &os; 不熟的話,
可能需要先廣泛閱讀
<link xlink:href="&url.base;/docs/books.html">相關書籍及文章</link>
來先熟悉這套作業系統和一些典故,尤其是其中的 <link xlink:href="&url.books.faq;/index.html">
&os; 常見問答集 (FAQ)</link> 文件,
<link xlink:href="&url.books.handbook;/index.html">
&os; 使用手冊(Handbook)</link>
以及相關文章:<link xlink:href="&url.articles.freebsd-questions;/article.html">
How to get best results from the FreeBSD-questions mailing list</link>
<link xlink:href="&url.articles.explaining-bsd;/article.html">
Explaining BSD</link>、以及 <link xlink:href="&url.articles.new-users;/article.html">
&os; First Steps</link></para>
<para>此外,對上述文件內已有解答的部份又提出來問的話,會被認為是相當不禮貌的。
這並不是因為這群志工是相當吝於回答的,而是一再被相同的問題不斷疲勞轟炸之後,所產生的挫折感很重。
尤其是現成答案明明就在眼前,卻仍同樣問題滿天飛,這實在是...。
請注意:這些 &os; 相關文件幾乎都是由一群無薪志工的好心成果,而他們也是人。</para>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="inappropriate">
<para>如何避免不當發文呢?</para>
</question>
<answer>
<itemizedlist>
<listitem>
<para>發文時,請務必遵守該 mailing list 的遊戲規則。</para>
</listitem>
<listitem>
<para>不要作人身攻擊。好的網路公民,應該要有更高的言行標準。</para>
</listitem>
<listitem>
<para>請不要試圖作 Spam 行為(廣告、轉貼多處等不請自來行為)。
所有 mailing lists 都會積極禁止這些違規者,一旦有的話,那麼後果請自行負責。</para>
</listitem>
</itemizedlist>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="etiquette-posting">
<para>發文時,有什麼該注意的嗎?</para>
</question>
<answer>
<itemizedlist>
<listitem>
<para>發文時,請保持一行約 75 個字元就自動斷行,因為並不是每個看的人都有很炫的圖形介面(GUI)看信軟體。</para>
</listitem>
<listitem>
<para>請注意:事實上,網路頻寬並不是無限的。
並非每個讀者的頻寬都很大,所以若想貼一些像是 <filename>config.log</filename>
之類的設定檔內容,或是大量的 stack trace 紀錄,那麼請把它放在自己網站上,然後貼出該網址 URL 就行了。
還有一件事,請記住,這些信件都會被舊信資料庫保存下來,所以這樣作會造成保存的資料庫會很快被塞到很大,
甚至可能塞爆 Server 的硬碟空間。</para>
</listitem>
<listitem>
<para>文章是要讓人看得懂,所以請注意版面編排的可讀性,還有..
千 萬 不 要 大 聲 嚷 叫!!!!! 這點可不只 &os; mailing lists 才需如此注意,
請勿低估文章『基本編排』的重要性、連鎖效應。
信中的表達方式通常就代表著別人眼中的你,若文章讓人看了很吃力(霧煞煞)、拼字錯誤百出、
充滿語意或邏輯錯誤、或是文內充滿一堆驚嘆號,這會讓人對你印象觀感極差。</para>
</listitem>
<listitem>
<para>在一些特定的 list 場合請用適當的語言來溝通。許多非英語系的mailing
lists 可以到
<link xlink:href="&url.base;/community/mailinglists.html">
這邊</link> 查看看。</para>
<para>對於許多母語不是英語的人,我們都能諒解他們的苦楚,並且試著儘量多多包涵。
英文非母語的人,我們會儘量不惡意批評拼字或文法錯誤之處。
&os; 在這方面,一直有相當優秀的紀錄,請讓我們繼續保持這傳統吧。</para>
</listitem>
<listitem>
<para>寫信時,請用相容標準的 Mail User Agent (MUA)程式。
<link xlink:href="http://www.lemis.com/email.html">不良的(或設定錯誤的)寄信程式</link>
這裡列有許多信件格式的錯誤示範。以下是一些已知的寄信程式的不良示範:</para>
<itemizedlist>
<listitem>
<para>cc:Mail</para>
</listitem>
<listitem>
<para>(舊版的)&eudora;</para>
</listitem>
<listitem>
<para>exmh</para>
</listitem>
<listitem>
<para>&microsoft; Exchange</para>
</listitem>
<listitem>
<para>&microsoft; Internet Mail</para>
</listitem>
<listitem>
<para>&microsoft; &outlook;</para>
</listitem>
<listitem>
<para>(舊版的)&netscape;</para>
</listitem>
</itemizedlist>
<para>如同上述所見Microsoft 出的一堆寄信程式通常都是不相容標準格式的。
請儘量改用 &unix; 上的寄信程式。若必須在 Microsoft 環境下使用寄信程式的話,
請記得確認設定是否正確。請儘量不要用 <acronym>MIME</acronym> 格式:
因為有一堆人都在濫用 <acronym>MIME</acronym> 信件格式。</para>
</listitem>
<listitem>
<para>請確認:時間與時區設定是否正確。
這問題看起來有點蠢,因為你寄出的信還是會到達 mailing list 上,
但是呢,每位 mailing lists 上的訂戶每天都會看數百封的信,
他們通常會把信件以標題跟時間作為排序依據。
若你的信沒有在第一篇正解之前就先出現的話,他們就會假設可能是漏收你這封信,
然後就沒再去看你那封信了。</para>
</listitem>
<listitem>
<para>請提供程式出現的相關訊息,像是 &man.dmesg.8; 或者 console
messages 也就是通常會出現在 <filename>/var/log/messages</filename> 出現的。
請不要用手打,因為這不僅很苦,而且也可能打錯字或亂掉原有格式。請直接把相關的 log 檔丟出來,
或是用編輯器來剪裁、或是用滑鼠複製/貼上來完成。舉個例子,如果是要把像是 <command>dmesg</command>
的程式訊息倒入到某個檔案去的話,那麼作法如下:</para>
<screen>&prompt.user; <userinput>dmesg &gt; /tmp/dmesg.out</userinput></screen>
<para>這樣子會把訊息送到 <filename>/tmp/dmesg.out</filename> 檔內。</para>
</listitem>
<listitem>
<para>在用滑鼠剪貼時,請注意是否有犯一些細節的剪貼壞習慣。
尤其是像貼 <filename>Makefiles</filename> 之類檔案時,由於 <literal>tab</literal>
鍵所打出來的分格,是屬於特殊字元。因此,在 <link xlink:href="&url.base;/support.html#gnats">
GNATS PR 資料庫</link> 上很常看到這類很常見的惱人問題:
<filename>Makefiles</filename> 內的 tab 經過剪貼後,變成『空白(white space)』
或是困擾的 <literal>=3B</literal> escape sequence這些會讓 committers 們十分不爽。</para>
</listitem>
</itemizedlist>
</answer>
</qandaentry>
<qandaentry>
<question xml:id="etiquette-replying">
<para>在 mailing lists 上回文的話,有什麼要特別注意的嗎?</para>
</question>
<answer>
<itemizedlist>
<listitem>
<para>請適當調整文章引言長度。回文時,引言部份請引『有談到的』部分為主,但請不要過與不及。
應該保留涉及討論範圍的原文,這樣子才能讓沒看過前面文章的人知道是在講什麼,而非一頭霧水。</para>
<para>還有一點也很重要,原文若是幅度相當長的話,記得註明 "yes, I see this too"。</para>
</listitem>
<listitem>
<para>善用技巧來確認原文與自己寫的部份:
通常會在原文的每行前面加上 <quote><literal>&gt; </literal></quote> 以作記號。
請記得保留 <quote><literal>&gt; </literal></quote> 符號後面的空白,並且在原文以及你所寫的段落之間加上空行,
以便閱讀。</para>
</listitem>
<listitem>
<para>請不要斷章取義、穿鑿附會:通常對原始文章『斷章取義』、『穿鑿附會』會讓大家很不爽,因為他們原意並非如此,卻被曲解。</para>
</listitem>
<listitem>
<para>回文時,不要寫在原文上面(<literal>top post</literal>)。
這個意思是:若要回文時,請寫在原文下方,不要寫在原文上面,以免讓人有時空錯置的錯亂混淆。</para>
<!-- 注意:下面這是故意幽默效果的問答 -->
<itemizedlist>
<listitem>
<para>答: Because it reverses the logical flow of
conversation.</para>
</listitem>
<listitem>
<para>問: Why is top posting frowned upon?</para>
</listitem>
</itemizedlist>
<para>(感謝 Randy Bush 提供笑話)</para>
</listitem>
</itemizedlist>
</answer>
</qandaentry>
</qandaset>
</sect1>
<sect1 xml:id="recurring">
<title>Mailing Lists 上的重複性問題</title>
<para>在 mailing lists 上參與討論,就像在其他社群一樣,我們都需要一些溝通上的共識。
許多 mailing lists 都會假設參與討論者都大致知道 FreeBSD 計劃的一些歷史淵源。
尤其是社群的新手總是定期會不斷重複問類似問題。
每個發文的人,都有責任來避免掉入這樣的惡性循環輪迴內。
因此,應儘可能讓 mailing list 上能正常討論,而避免讓自己陷入筆戰泥沼。</para>
<para>要怎麼避免呢?最好的方法就是善用這些 <link xlink:href="http://docs.FreeBSD.org/mail/">
mailing list 舊信資料庫(archives)</link>,來瞭解相關背景。
正由於這原因,所以 <link xlink:href="http://www.FreeBSD.org/search/search.html#mailinglists">
mailing list 搜尋介面</link> 就顯得非常好用。
(若這方法仍無法找到有用的答案,那麼請改用自己愛用的搜尋引擎吧)</para>
<para>透過這些舊信資料庫,不只可瞭解先前討論過哪些話題,也可以知道:是怎麼討論的、
哪些人參與討論過、主要看的人又是哪些人。
入境隨俗這些原則不只是 &os; mailing list 上才這樣,一樣可以適合其他地方。</para>
<para>archives 的內容無疑地相當廣泛,而且會有些問題不斷反覆出現,
有時討論到後面總會離題。無論如何,在發問前的義務就是先做好功課,
以避免這類的月經文惡性循環,尤其是令人反感的 <literal>bikeshed打嘴砲)</literal></para>
</sect1>
<sect1 xml:id="bikeshed">
<title>什麼是 "Bikeshed" 呀?</title>
<para>單就字面上意思解釋的話,<literal>bikeshed</literal> 是指專門給腳踏車、機車之類的兩輪交通工具使用的遮雨棚,
然而呢,在 &os; 這邊的說法卻有其他意思(帶有貶抑)指的是:
某些特定話題的重複討論,尤其是指在 &os; 社群內絕不會有共識,且有爭議的話題。
(這字彙的起源在 <link xlink:href="&url.books.faq;/misc.html#BIKESHED-PAINTING">
這份文件</link> 內有更多說明)。你只要在發信到任一 &os; mailing lists 之前,知道這個基本概念就行了。</para>
<para>一般來講『bikeshed』是很容易產生許多波的筆戰與額外討論的爭議話題如果事先不知道這些背景的話。</para>
<para>拜託,請幫個忙讓討論回歸正常,而不要只是到處打嘴砲而已。感恩!</para>
</sect1>
<sect1 xml:id="acknowledgments">
<title>致謝</title>
<variablelist>
<varlistentry>
<term>&a.grog;</term>
<listitem>
<para><link xlink:href="&url.articles.freebsd-questions;/article.html">
How to get best results from the FreeBSD-questions mailing list</link> 一文的原作者,
我們從他這文內獲得許多 mailing list 上的禮儀(或默契)寫作題材。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>&a.linimon;</term>
<listitem>
<para>本 FAQ 雛形的原作</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</article>

@ -0,0 +1,434 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!--
The FreeBSD Documentation Project
The FreeBSD Chinese (Traditional) Documentation Project
Original Revision: 1.1
-->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
<info><title>NanoBSD 簡介</title>
<authorgroup>
<author><personname><firstname>Daniel</firstname><surname>Gerzo</surname></personname></author>
</authorgroup>
<copyright>
<year>2006</year>
<holder>The FreeBSD Documentation Project</holder>
</copyright>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
</legalnotice>
<abstract>
<para>這篇文件提供了關於 <application>NanoBSD</application> 工具的情報介紹,
這工具可用來建立用於嵌入式環境應用程式的 &os; 系統映像檔,
以便存放到 Compact Flash 卡(或隨身碟)。</para>
</abstract>
</info>
<sect1 xml:id="intro">
<title>NanoBSD 簡介</title>
<indexterm><primary>NanoBSD</primary></indexterm>
<para><application>NanoBSD</application>&a.phk; 目前正在開發的一項工具。
它可用來建立用於嵌入式環境應用程式的 &os; 系統映像檔,
以便存放到 Compact Flash 卡(或隨身碟mass storage medium)。</para>
<para>這一工具也可以用來自製安裝映像檔,
以簡化俗稱為 <quote>嵌入式系統(computer appliances)</quote> 的系統安裝、維護工作。
通常,每個嵌入式系統產品都有限定硬體和軟體,
或者換言之,所有的應用程式都是預先裝好的。
這些設備可以直接放到現有的網路中,而且(幾乎是)立即使用。</para>
<para><application>NanoBSD</application> 提供的功能包括:</para>
<itemizedlist>
<listitem>
<para>可以和 &os; 一樣使用 Ports 和 Packages &mdash;
所有的應用程序都可以在 <application>NanoBSD</application> 中直接使用,
而方式與 &os; 完全一樣。</para>
</listitem>
<listitem>
<para>功能絲毫未損 &mdash;&os; 做的任何工作,都可以在
<application>NanoBSD</application> 中使用,
除非您在建立 <application>NanoBSD</application> 映像檔時,
有指定要拿掉它們。</para>
</listitem>
<listitem>
<para>所有東西在運行時都是唯讀的 &mdash; 可以安全地拔掉電源插頭。
系統不正常關機的話,不用再跑 &man.fsck.8; 了。</para>
</listitem>
<listitem>
<para>可輕鬆編譯、自行打造 &mdash; 只需使用一個 shell script 和一個設定檔,
您可以輕鬆依需求來量身訂做適用的映像檔。</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="howto">
<title>如何使用 NanoBSD</title>
<sect2 xml:id="design">
<title>NanoBSD 的設計</title>
<para>一旦將映像檔存入嵌入式硬體,就可以用它來引導 <application>NanoBSD</application>
了。 預設情況下,隨身碟會劃分為三部分:</para>
<itemizedlist>
<listitem>
<para>兩個映像檔分割區: <literal>code#1</literal>
<literal>code#2</literal></para>
</listitem>
<listitem>
<para>一個設定檔分割區,在運行環境中,
可以將其掛載(mount)到 <filename>/cfg</filename> 目錄下。</para>
</listitem>
</itemizedlist>
<para>這些分割區,在預設情況下是以唯讀方式掛載。</para>
<para><filename>/etc</filename>
<filename>/var</filename> 目錄均為
&man.md.4;(malloc)磁碟。</para>
<para>設定檔的分割區則是在
<filename>/cfg</filename> 目錄。
它包含了用於 <filename>/etc</filename>
目錄的檔案,在啟動之後暫時以唯讀方式掛載。 因此,若想要重開機保留新的設定,
那麼要記得從 <filename>/etc</filename> 把改過的檔案複製回
<filename>/cfg</filename> 目錄才行。</para>
<example>
<title>把修改過 <filename>/etc/resolv.conf</filename> 設定保存起來</title>
<screen>&prompt.root; <userinput>vi /etc/resolv.conf</userinput>
[...]
&prompt.root; <userinput>mount /cfg</userinput>
&prompt.root; <userinput>cp /etc/resolv.conf /cfg</userinput>
&prompt.root; <userinput>umount /cfg</userinput></screen>
</example>
<note>
<para>只有在系統啟動過程中,以及需要修改設定檔的時候,才需要掛載含有
<filename>/cfg</filename> 的那個分割區。</para>
<para>一直都掛載 <filename>/cfg</filename>
不是一個好主意,特別是當您把 <application>NanoBSD</application>
放在不適合進行大量寫入動作的分割區時
(比如:由於檔案系統的同步化會定期在系統碟內寫入資料)。</para>
</note>
</sect2>
<sect2>
<title>打造 NanoBSD 映像檔</title>
<para><application>NanoBSD</application> 映像檔是透過使用非常簡單的
<filename>nanobsd.sh</filename> shell script 來打造的,這個 script 可以在
<filename>/usr/src/tools/tools/nanobsd</filename>
目錄中找到。 這個 script 建立的映像檔,可以用 &man.dd.1; 工具來複製到隨身碟上。</para>
<para>打造
<application>NanoBSD</application> 映像檔所需的指令是:</para>
<screen>&prompt.root; <userinput>cd /usr/src/tools/tools/nanobsd</userinput> <co xml:id="nbsd-cd"/>
&prompt.root; <userinput>sh nanobsd.sh</userinput> <co xml:id="nbsd-sh"/>
&prompt.root; <userinput>cd /usr/obj/nanobsd.full</userinput> <co xml:id="nbsd-cd2"/>
&prompt.root; <userinput>dd if=_.disk.full of=/dev/da0 bs=64k</userinput> <co xml:id="nbsd-dd"/></screen>
<calloutlist>
<callout arearefs="nbsd-cd">
<para>進入 <application>NanoBSD</application> 打造 script 的主目錄。</para>
</callout>
<callout arearefs="nbsd-sh">
<para>開始打造過程。</para>
</callout>
<callout arearefs="nbsd-cd2">
<para>進入打造好的映像檔所在的目錄。</para>
</callout>
<callout arearefs="nbsd-dd">
<para>在隨身碟上安裝 <application>NanoBSD</application></para>
</callout>
</calloutlist>
</sect2>
<sect2>
<title>自行打造 NanoBSD 映像檔</title>
<para>這可能是 <application>NanoBSD</application> 最為重要,
同時也是您最感興趣的功能。 同時,在開發
<application>NanoBSD</application> 應用程式時,這也是相當耗時的過程。</para>
<para>執行下面的指令將會
<filename>nanobsd.sh</filename> 讀取目前所在目錄的
<filename>myconf.nano</filename> 檔的設定:</para>
<screen>&prompt.root; <userinput>sh nanobsd.sh -c myconf.nano</userinput></screen>
<para>自行打造的流程,只需兩個步驟:</para>
<itemizedlist>
<listitem>
<para>自訂選項</para>
</listitem>
<listitem>
<para>自訂功能</para>
</listitem>
</itemizedlist>
<sect3>
<title>自訂選項</title>
<para>透過修改設定,可以設定用於
<application>NanoBSD</application> 打造過程中 <literal>buildworld</literal>
<literal>installworld</literal> 階段的編譯、安裝選項,以及
<application>NanoBSD</application> 主要打造過程中的選項。
透過使用這些選項可以削減系統的尺寸,使之能夠放入
64 MB 的隨身碟。 您還可以進一步透過這些選項來削減 &os;
直到它只包含 kernel 以及兩三個 userland 檔案為止。</para>
<para>設定檔案中包含用以代替預設值的設定選項。簡介最重要的幾項設定如下:</para>
<itemizedlist>
<listitem>
<para><literal>NANO_NAME</literal> &mdash; 本次打造的名稱(所建立工作目錄的名稱)。</para>
</listitem>
<listitem>
<para><literal>NANO_SRC</literal> &mdash; 用以編譯、打造映像檔的 source tree 的位置。</para>
</listitem>
<listitem>
<para><literal>NANO_KERNEL</literal> &mdash; 設定用來編譯的 kernel 設定檔檔名。</para>
</listitem>
<listitem>
<para><literal>CONF_BUILD</literal> &mdash; 用於
<literal>buildworld</literal> 打造階段的選項。</para>
</listitem>
<listitem>
<para><literal>CONF_INSTALL</literal> &mdash; 用於
<literal>installworld</literal> 打造階段的選項。</para>
</listitem>
<listitem>
<para><literal>CONF_WORLD</literal> &mdash; 用於
<literal>buildworld</literal>
<literal>installworld</literal> 這兩個打造階段的選項。</para>
</listitem>
<listitem>
<para><literal>FlashDevice</literal> &mdash; 定義所用的嵌入式硬體類型。
詳情請參考 <filename>FlashDevice.sub</filename> 檔。</para>
</listitem>
</itemizedlist>
</sect3>
<sect3>
<title>自訂功能</title>
<para>透過在設定檔案中使用 shell 函數,可以進一步微調
<application>NanoBSD</application>。 舉例說明一下自行打造函數的基本方式:</para>
<programlisting>cust_foo()(
echo "bar=topless" &gt; \
&dollar;{NANO_WORLDDIR}/etc/foo
)
customize_cmd cust_foo</programlisting>
<para>下面舉更實際點的例子,它會把預設的
<filename>/etc</filename> 目錄大小,從 5MB 調整為 30MB</para>
<programlisting>cust_etc_size()(
cd &dollar;{NANO_WORLDDIR}/conf
echo 30000 &gt; default/etc/md_size
)
customize_cmd cust_etc_size</programlisting>
<para>除此之外,還有幾個預設的功能定義可以用來自訂:</para>
<itemizedlist>
<listitem>
<para><literal>cust_comconsole</literal> &mdash; 在預設 VGA 顯示卡上停用 &man.getty.8;
(<filename>/dev/ttyv*</filename>)並啟用 serial port 的 COM1 以作為系統 console。</para>
</listitem>
<listitem>
<para><literal>cust_allow_ssh_root</literal> &mdash; 允許 &man.sshd.8;
可以用 <systemitem class="username">root</systemitem> 帳號登入。</para>
</listitem>
<listitem>
<para><literal>cust_install_files</literal> &mdash;
<filename>nanobsd/Files</filename>
目錄中安裝檔案,這包含一些實用的系統管理 script 。</para>
</listitem>
</itemizedlist>
</sect3>
<sect3>
<title>設定檔案舉例</title>
<para>下面是用於自行打造的 <application>NanoBSD</application> 映像檔的完整例子:</para>
<programlisting>NANO_NAME=custom
NANO_SRC=/usr/src
NANO_KERNEL=MYKERNEL
NANO_IMAGES=2
CONF_BUILD='
NO_KLDLOAD=YES
NO_NETGRAPH=YES
NO_PAM=YES
'
CONF_INSTALL='
NO_ACPI=YES
NO_BLUETOOTH=YES
NO_CVS=YES
NO_FORTRAN=YES
NO_HTML=YES
NO_LPR=YES
NO_MAN=YES
NO_SENDMAIL=YES
NO_SHAREDOCS=YES
NO_EXAMPLES=YES
NO_INSTALLLIB=YES
NO_CALENDAR=YES
NO_MISC=YES
NO_SHARE=YES
'
CONF_WORLD='
NO_BIND=YES
NO_MODULES=YES
NO_KERBEROS=YES
NO_GAMES=YES
NO_RESCUE=YES
NO_LOCALES=YES
NO_SYSCONS=YES
NO_INFO=YES
'
FlashDevice SanDisk 1G
cust_nobeastie()(
touch &dollar;{NANO_WORLDDIR}/boot/loader.conf
echo "beastie_disable=\"YES\"" &gt;&gt; &dollar;{NANO_WORLDDIR}/boot/loader.conf
)
customize_cmd cust_comconsole
customize_cmd cust_install_files
customize_cmd cust_allow_ssh_root
customize_cmd cust_nobeastie</programlisting>
</sect3>
</sect2>
<sect2>
<title>更新 NanoBSD</title>
<para>更新 <application>NanoBSD</application> 相對 &os; 而言較為簡單:</para>
<procedure>
<step>
<para>和之前一樣打造新的 <application>NanoBSD</application> 映像檔。</para>
</step>
<step>
<para>將新的映像檔放入正運行的
<application>NanoBSD</application> 中未用的分割區之一。</para>
<para>與之前最初安裝 <application>NanoBSD</application> 的步驟相比,
這一步驟最重要的區別在於:這次不用 <filename>_.disk.full</filename> 檔(它包含整個磁碟的映像檔)
而應安裝 <filename>_.disk.image</filename> 映像檔(這個檔案中,只包含一個系統分割區)。</para>
</step>
<step>
<para>重新啟動,並從新安裝的分割區中啟動系統。</para>
</step>
<step>
<para>如果一切順利的話,升級工作就完成了。</para>
</step>
<step>
<para>如果發生了任何問題,則可以從先前的分割區啟動
(其中包含了舊的、 可用的映像檔),來盡快恢復系統功能。
接下來可以修正新編譯的版本中存在的問題,並重複前述步驟。</para>
</step>
</procedure>
<para>要在正在運行的
<application>NanoBSD</application> 系統中安裝新的映像檔,可以使用位於
<filename>/root</filename> 目錄的
<filename>updatep1</filename>
<filename>updatep2</filename> script
實際上要用哪一個 script則取決於正在運行的系統是位於哪個分割區而定。</para>
<para>隨時提供新 <application>NanoBSD</application> 映像檔所提供的服務,
以及採用的傳輸方法的不同,您可以參考並使用下列三種方式之一:</para>
<sect3>
<title>使用 &man.ftp.1;</title>
<para>如果傳輸速度是第一要求的話,請採用下面例子:</para>
<screen>&prompt.root; <userinput>ftp myhost
get _.disk.image "| sh updatep1"</userinput></screen>
</sect3>
<sect3>
<title>使用 &man.ssh.1;</title>
<para>如果想更安全的話,應參考下面例子:</para>
<screen>&prompt.root; <userinput>ssh myhost cat _.disk.image.gz | zcat | sh updatep1</userinput></screen>
</sect3>
<sect3>
<title>使用 &man.nc.1;</title>
<para>如果遠程主機既不提供 &man.ftp.1; 服務,也不提供 &man.sshd.8; 服務的話:</para>
<procedure>
<step>
<para>首先,在提供映像檔的主機上開啟 TCP listen並讓它把映像檔傳給 client</para>
<screen>myhost&prompt.root; <userinput>nc -l 2222 &lt; _.disk.image</userinput></screen>
<note>
<para>請確認您所使用的 port 沒有被防火牆阻止來自
<application>NanoBSD</application> client 的連線請求。</para>
</note>
</step>
<step>
<para>連到提供新映像檔服務的主機,並執行 <filename>updatep1</filename> 這支 script</para>
<screen>&prompt.root; <userinput>nc myhost 2222 | sh updatep1</userinput></screen>
</step>
</procedure>
</sect3>
</sect2>
</sect1>
<index/>
</article>

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!-- $FreeBSD$ -->
@ -6,12 +6,12 @@
<!-- Translate into Chinese by chinsan.tw@gmail.com -->
<!-- English Version: 1.24 -->
<!--
問題回報(PR)的處理原則
問題回報(PR)的處理原則
The FreeBSD Project - http://www.FreeBSD.org
-->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
<!-- :START of Article Metadata -->
<info><title>問題回報(PR)的處理原則</title>
<info><title>問題回報(PR)的處理原則</title>
<pubdate>$FreeBSD$</pubdate>
@ -23,8 +23,8 @@
</legalnotice>
<abstract>
<para>這篇文章主要在講:由 FreeBSD PR 維護小組所提出的一些 FreeBSD 問題回報(PR)
建議,希望大家在弄 PR 時都能遵守。</para>
<para>這篇文章主要在講:由 FreeBSD PR 維護小組所提出的一些 FreeBSD 問題回報(PR)
建議,希望大家在弄 PR 時都能遵守。</para>
</abstract>
<authorgroup>
@ -38,121 +38,121 @@
<!-- :END of Article Metadata-->
<section xml:id="intro">
<title>前言</title>
<title>前言</title>
<para>GNATS 是 FReeBSD 計劃所採用的一套專門管理錯誤(回報bug) 系統。
由於對 FreeBSD 品質保證而言,是否能準確掌握各項錯誤回報與進度是十分重要的,
因此,如何正確有效使用 GNATS 也就必須注意。</para>
<para>GNATS 是 FReeBSD 計劃所採用的一套專門管理錯誤(回報bug) 系統。
由於對 FreeBSD 品質保證而言,是否能準確掌握各項錯誤回報與進度是十分重要的,
因此,如何正確有效使用 GNATS 也就必須注意。</para>
<para>Access to GNATS is available to FreeBSD developers, as well as
to the wider community. 為了讓 GNATS 資料庫使用上儘量一致於是就產生了怎麼處理像是followup(回文)、關閉PR等的參考原則。</para>
to the wider community. 為了讓 GNATS 資料庫使用上儘量一致於是就產生了怎麼處理像是followup(回文)、關閉PR等的參考原則。</para>
</section>
<section xml:id="pr-lifecycle">
<title>問題回報(PR)的生命週期</title>
<title>問題回報(PR)的生命週期</title>
<itemizedlist>
<listitem>
<para>首先,回報者(originator)以 &man.send-pr.1; 送出 PR然後會收到一封確認信。</para>
<para>首先,回報者(originator)以 &man.send-pr.1; 送出 PR然後會收到一封確認信。</para>
</listitem>
<listitem>
<para>然後committer 們就會有人(假設叫做 Joe)發掘有興趣的 PR 並將該 PR 指派給自己來處理。
或者 bugbuster 會有人(假設叫做 Jane) 就會下決定:她覺得 Joe 比較適合處理,就將該 PR 指派(assign)給他</para>
<para>然後committer 們就會有人(假設叫做 Joe)發掘有興趣的 PR 並將該 PR 指派給自己來處理。
或者 bugbuster 會有人(假設叫做 Jane) 就會下決定:她覺得 Joe 比較適合處理,就將該 PR 指派(assign)給他</para>
</listitem>
<listitem>
<para>Joe 會先與有問題的回報者作些意見交流(以確定這問題有進入 audit 追蹤流程內)
以及判斷問題點。
然後再確定問題點有寫入 audit 追蹤流程之後,然後把該 PR 狀態設為
<quote>analyzed(已分析)</quote></para>
<para>Joe 會先與有問題的回報者作些意見交流(以確定這問題有進入 audit 追蹤流程內)
以及判斷問題點。
然後再確定問題點有寫入 audit 追蹤流程之後,然後把該 PR 狀態設為
<quote>analyzed(已分析)</quote></para>
</listitem>
<listitem>
<para>Joe 開始徹夜找出問題解法,然後將 patch 送到 follow-up(回文用),並請回報者協助測試是否正常。
然後,他就會將 PR 狀態設為 <quote>feedback</quote> 囉。</para>
<para>Joe 開始徹夜找出問題解法,然後將 patch 送到 follow-up(回文用),並請回報者協助測試是否正常。
然後,他就會將 PR 狀態設為 <quote>feedback</quote> 囉。</para>
</listitem>
<listitem>
<para>如此重複 analyzed、feedback 幾趟之後,直到 Joe 與回報者雙方都相當滿意 patch 結果,
於是就會將 patch 給 commits 進入 <literal>-CURRENT</literal> (或者若 <literal>-CURRENT</literal>
上面沒這問題的話,就直接送到 <literal>-STABLE</literal>),在 commit log 內要把相關 PR 寫上去
(同時回報者若有送完整或部分 patch 的話,就順便記載),然後,若沒什麼事的話,就開始準備 MFC 哩。
(譯註MFC意指 Merged From CURRENT ,也就是把 <literal>-CURRENT</literal> 上的東西併入 <literal>-STABLE</literal></para>
<para>如此重複 analyzed、feedback 幾趟之後,直到 Joe 與回報者雙方都相當滿意 patch 結果,
於是就會將 patch 給 commits 進入 <literal>-CURRENT</literal> (或者若 <literal>-CURRENT</literal>
上面沒這問題的話,就直接送到 <literal>-STABLE</literal>),在 commit log 內要把相關 PR 寫上去
(同時回報者若有送完整或部分 patch 的話,就順便記載),然後,若沒什麼事的話,就開始準備 MFC 哩。
(譯註MFC意指 Merged From CURRENT ,也就是把 <literal>-CURRENT</literal> 上的東西併入 <literal>-STABLE</literal></para>
</listitem>
<listitem>
<para>若該 patch 不需要 MFC 的話Joe 就會關掉(close)該 PR 了。</para>
<para>若該 patch 不需要 MFC 的話Joe 就會關掉(close)該 PR 了。</para>
</listitem>
<listitem>
<para>若該 patch 需要 MFC 的話Joe 會把 PR 狀態改為 <quote>patched(已修正)</quote>
直到已經 MFC 完畢,才會 close(關掉)。</para>
<para>若該 patch 需要 MFC 的話Joe 會把 PR 狀態改為 <quote>patched(已修正)</quote>
直到已經 MFC 完畢,才會 close(關掉)。</para>
</listitem>
</itemizedlist>
<note>
<para>很多送出來的 PR 都很少附上問題的相關訊息,而有些則是相當複雜難搞,
或只是提到部分表面問題而已;
遇到這種情況時,是非常需要得到所有相關訊息以便解決問題。
若遇到這種無解的問題或再次發生的話,就必須要 re-open(重新開啟) 該 PR以待解決。</para>
<para>很多送出來的 PR 都很少附上問題的相關訊息,而有些則是相當複雜難搞,
或只是提到部分表面問題而已;
遇到這種情況時,是非常需要得到所有相關訊息以便解決問題。
若遇到這種無解的問題或再次發生的話,就必須要 re-open(重新開啟) 該 PR以待解決。</para>
</note>
<note>
<para>PR 上所附的 <quote>email address</quote> 可能因某些原因而無法收信時,遇到這種狀況,通常就是
followup 該 PR ,並(在 followup 時)請回報者重新提供可正常收信的 email address。
當系統上的 mail 系統關閉或沒裝的時候,這通常是在使用 &man.send-pr.1; 的替代方案。</para>
<para>PR 上所附的 <quote>email address</quote> 可能因某些原因而無法收信時,遇到這種狀況,通常就是
followup 該 PR ,並(在 followup 時)請回報者重新提供可正常收信的 email address。
當系統上的 mail 系統關閉或沒裝的時候,這通常是在使用 &man.send-pr.1; 的替代方案。</para>
</note>
</section>
<section xml:id="pr-states">
<title>問題回報(PR)的狀態</title>
<title>問題回報(PR)的狀態</title>
<para>若 PR 有任何變化的話,請務必記得更新 PR 的『狀態(state)』。
『狀態』應該要能正確反映該 PR 的目前進度才是。</para>
<para>若 PR 有任何變化的話,請務必記得更新 PR 的『狀態(state)』。
『狀態』應該要能正確反映該 PR 的目前進度才是。</para>
<example>
<title>以下是更改 PR 狀態的小例子:</title>
<title>以下是更改 PR 狀態的小例子:</title>
<para>當有可以修正問題的 PR 出現,而相關負責的 developer(s)
也覺得這樣的修正可以接受,他們會 followup 該 PR並將其狀態改為
<quote>feedback</quote>。同時,回報者應重新評估最終的修正結果,並回應:所回報的錯誤是否已成功修正。</para>
<para>當有可以修正問題的 PR 出現,而相關負責的 developer(s)
也覺得這樣的修正可以接受,他們會 followup 該 PR並將其狀態改為
<quote>feedback</quote>。同時,回報者應重新評估最終的修正結果,並回應:所回報的錯誤是否已成功修正。</para>
</example>
<para>每份 PR 通常會有下面這幾種狀態之一:</para>
<para>每份 PR 通常會有下面這幾種狀態之一:</para>
<glosslist>
<glossentry>
<glossterm>open</glossterm>
<glossdef>
<para>PR 最初的狀態:這個問題被提出來,並在等待處理中。</para>
<para>PR 最初的狀態:這個問題被提出來,並在等待處理中。</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>analyzed</glossterm>
<glossdef>
<para>已經開始處理這問題,並且有找到疑似解決的方法。</para>
<para>已經開始處理這問題,並且有找到疑似解決的方法。</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>feedback</glossterm>
<glossdef>
<para>需要回報者提供更詳細的相關資料,正如教學要因材施教,治病也要因人下藥,越多相關訊息,才能有最佳效果。</para>
<para>需要回報者提供更詳細的相關資料,正如教學要因材施教,治病也要因人下藥,越多相關訊息,才能有最佳效果。</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>patched</glossterm>
<glossdef>
<para>已經送相關 patch 了,但仍因某些原因(MFC或來自回報者的確認結果異常)因此尚未完畢。</para>
<para>已經送相關 patch 了,但仍因某些原因(MFC或來自回報者的確認結果異常)因此尚未完畢。</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>suspended(暫緩)</glossterm>
<glossterm>suspended(暫緩)</glossterm>
<glossdef>
<para>因為沒附上相關訊息或參考資料,所以還沒辦法處理這問題。
<para>因為沒附上相關訊息或參考資料,所以還沒辦法處理這問題。
This is a prime candidate for
somebody who is looking for a project to take on. If the
problem cannot be solved at all, it will be closed, rather
@ -181,7 +181,7 @@
</section>
<section xml:id="pr-types">
<title>問題回報(PR)的種類</title>
<title>問題回報(PR)的種類</title>
<para>While handling problem reports, either as a developer who has
direct access to the GNATS database or as a contributor who
@ -197,7 +197,7 @@
<para><link linkend="pr-assigned">PRs already assigned to someone.</link></para>
</listitem>
<listitem>
<para><link linkend="pr-dups">重複的 PR</link></para>
<para><link linkend="pr-dups">重複的 PR</link></para>
</listitem>
<listitem>
<para><link linkend="pr-stale">Stale PRs</link></para>
@ -574,7 +574,7 @@
</section>
<section xml:id="pr-dups">
<title>重複的 PR</title>
<title>重複的 PR</title>
<para>If you find more than one PR that describe the same issue,
choose the one that contains the largest amount of useful
@ -861,14 +861,14 @@ This was misfiled because the subject did not have the format:
</section>
<section xml:id="references">
<title>延伸閱讀</title>
<title>延伸閱讀</title>
<para>下面這是在寫、處理 PR 時,可以參考的資料。當然很明顯,這份清單仍須補充。</para>
<para>下面這是在寫、處理 PR 時,可以參考的資料。當然很明顯,這份清單仍須補充。</para>
<itemizedlist>
<listitem>
<para><link xlink:href="&url.articles.problem-reports;/article.html">How to
Write FreeBSD Problem Reports</link>&mdash;給 PR 回報者用的參考原則。</para>
Write FreeBSD Problem Reports</link>&mdash;給 PR 回報者用的參考原則。</para>
</listitem>
</itemizedlist>
</section>

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">

@ -0,0 +1,475 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!--
The FreeBSD Documentation Project
The FreeBSD Chinese (Traditional) Documentation Project
Original Revision: 1.5
-->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
<info><title>遠端安裝 &os; 作業系統而不必接 Remote Console</title>
<author><personname><firstname>Daniel</firstname><surname>Gerzo</surname></personname><affiliation>
<address><email>danger@FreeBSD.org</email></address>
</affiliation></author>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
</legalnotice>
<copyright>
<year>2008</year>
<holder>The &os; Documentation Project</holder>
</copyright>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
<abstract>
<para>本文介紹如何在沒辦法連到遠端 console 的機器做 &os; 遠端安裝。
本文構想來自於作者與 &a.mm; 的合作成果,
以及 &a.pjd; 所投注的諸多心血。</para>
</abstract>
</info>
<sect1 xml:id="background">
<title>緣起</title>
<para>世上有許多 server hosting provider但其中有官方支援 &os;
則不是相當多。 他們通常會在所提供的機器上有 &linux; distribution
的安裝支援。</para>
<para>有些會讓您可選擇喜好的 &linux; distribution 來裝,
像這種情況就可以試著安裝 &os;。 而有些則是會提供救急用的系統,
這種也可以用來安裝 &os;</para>
<para>本文介紹這些遠端基本安裝 &os; 的方式,以及 RAID-1 與
<application>ZFS</application> 設定步驟。</para>
</sect1>
<sect1 xml:id="intro">
<title>介紹</title>
<para>茲摘錄一下本文的目的以及闡述這邊所涵蓋的東西。
對於無官方支援 &os; 的代管服務(colocation)用戶而言,
本文中所介紹到的指令會相當有用。</para>
<procedure>
<step>
<para>正如先前 <link linkend="background">緣起</link> 所提到的,許多名聲還不賴的
server hosting 公司會提供一些救急用系統,可以透過
<acronym>LAN</acronym> 方式開機,也可以透過
<application>SSH</application> 方式進行管理。 通常會有該加值服務,
以讓他們的客戶可以連進來修復有問題的作業系統。
本節之後將介紹如何透過救急系統來安裝 &os;</para>
<!-- XXXTR: Solaris has a restore command, something like
sysrestore, FreeBSD Should have one too. -->
</step>
<step>
<para>下一節會介紹如何在本機設定以及打造最小巧的 &os; ——
該版最後會在遠端機器上透過 ramdisk 方式啟動,並以
<application>sysinstall</application><acronym>FTP</acronym>
mirror 站來安裝完整的 &os; 作業系統。</para>
</step>
<step>
<para>本文其餘部分將介紹安裝程序,以及 <application>ZFS</application>
檔案系統的設定。</para>
</step>
</procedure>
<sect2 xml:id="requirements">
<title>需求</title>
<para>為了成功完成遠端安裝,必須要有:</para>
<itemizedlist>
<listitem>
<para>要有可以上網的作業系統,並且 <application>SSH</application>
可以連線。</para>
</listitem>
<listitem>
<para>瞭解 &os; 的安裝程序</para>
</listitem>
<listitem>
<para>熟悉如何使用 &man.sysinstall.8;</para>
</listitem>
<listitem>
<para>&os; 安裝光碟片或者 <acronym>ISO</acronym> image 檔</para>
</listitem>
</itemizedlist>
</sect2>
</sect1>
<sect1 xml:id="preparation">
<title>準備 - <application>mfsBSD</application></title>
<para>在裝 &os; 之前,要先打造最小化的 &os; 作業系統 image 檔,
以便可以從硬碟上開機。 如此一來,新的系統就可以透過網路來操作,
而剩下來的安裝部分即可不必透過 console。</para>
<para><application>mfsBSD</application> 這套工具就是用來打造小型的
&os; image 檔。 <application>mfsBSD</application> (名字其中
<quote>mfs</quote> 就是 <quote>memory file system</quote>)所建造出來的
整套系統會透過 ramdisk 方式來運作。 由於此一特色,硬碟的部分就不受限,
因此可以用來安裝完整的 &os; 作業系統。 <application>mfsBSD</application>
的首頁位於 <uri xlink:href="http://people.freebsd.org/~mm/mfsbsd/">http://people.freebsd.org/~mm/mfsbsd/</uri>
其中連結有該工具的最新 release 部分。</para>
<para>請注意:<application>mfsBSD</application> 內部運作方式的細節,不
在本文介紹範圍之內。 若對這方面有興趣的讀者,可至
<application>mfsBSD</application> 官網查閱相關文件。</para>
<para>首先下載最新的 <application>mfsBSD</application> 並解壓縮之,
然後切到解壓縮後的工作目錄,也就是 <application>mfsBSD</application>
script 檔所在處:</para>
<screen>&prompt.root; <userinput>fetch http://people.freebsd.org/~mm/mfsbsd/mfsbsd-latest.tar.gz</userinput>
&prompt.root; <userinput>tar xvzf mfsbsd-1.0-beta1.tar.gz</userinput>
&prompt.root; <userinput>cd mfsbsd-1.0-beta1/</userinput></screen>
<sect2 xml:id="mfsbsd-config">
<title>設定 <application>mfsBSD</application></title>
<para>在將 <application>mfsBSD</application> 開機之前,
有幾個重要設定要先設妥。 此時最重要的設定,很明顯就是網路設定。
到底網路怎麼設最好,則取決於所處的網路環境,
以及該網路卡會以哪一種驅動程式載入而定。 我們將會看到
<application>mfsBSD</application> 如何在任何網路情況下進行設定。</para>
<para>另一件重要事就是設定 <systemitem class="username">root</systemitem> 密碼。
這點可以透過 <filename>conf/rootpw.conf</filename> 來完成。
請切記:該檔密碼是以明文方式存放,因此不建議放真正平常有在用的密碼。
然而這密碼只是臨時密碼而已,可以在之後開機時再做更換。</para>
<sect3>
<title>設定網路(<filename>conf/interfaces.conf</filename> 方式)</title>
<para>若對要裝的機器網卡為何還不知道是哪一款,但可以善加利用
<application>mfsBSD</application> 的自動偵測功能。
<application>mfsBSD</application> 的開機 script 會根據網卡的 MAC
位址範圍來偵測正確的驅動程式,像是下列的
<filename>conf/interfaces.conf</filename> 設定內容:</para>
<programlisting>initconf_interfaces="ext1"
initconf_mac_ext1="00:00:00:00:00:00"
initconf_ip_ext1="192.168.0.2"
initconf_netmask_ext1="255.255.255.0"</programlisting>
<para>別忘了在 <filename>conf/rc.conf</filename> 內要加上
<literal>defaultrouter</literal> 的相關設定:</para>
<programlisting>defaultrouter="192.168.0.1"</programlisting>
</sect3>
<sect3>
<title>設定網路(<filename>conf/rc.conf</filename> 方式)</title>
<para>若已經知道網卡是哪一種,那麼要設定網路的話直接改
<filename>conf/rc.conf</filename> 會比較方便。
該檔設定語法與 &os; 標準的 &man.rc.conf.5; 是一致的。</para>
<para>舉個例子,若知道該機器網卡是用 &man.re.4;,那麼就在
<filename>conf/rc.conf</filename> 做下列類似設定:</para>
<programlisting>defaultrouter="192.168.0.1"
ifconfig_re0="inet 192.168.0.2 netmask 255.255.255.0"</programlisting>
</sect3>
</sect2>
<sect2 xml:id="mfsbsd-build">
<title>打造 <application>mfsBSD</application> image</title>
<para>打造 <application>mfsBSD</application>
image 檔的過程相當簡單。</para>
<para>首先是把 &os; 安裝光碟或者安裝用的 <acronym>ISO</acronym> image
檔丟到 <filename>/cdrom</filename>
為維持所有例子的一致,本文假設都是用 &os; 7.0-RELEASE
<acronym>ISO</acronym>。 而把 ISO image 檔掛載到 <filename>/cdrom</filename> 目錄相當簡單,
就是用 &man.mdconfig.8;</para>
<screen>&prompt.root; <userinput>mdconfig -a -t vnode -u 10 -f 7.0-RELEASE-amd64-disc1.iso</userinput>
&prompt.root; <userinput>mount_cd9660 /dev/md10 /cdrom</userinput></screen>
<para>接著就開始打造可開機的 <application>mfsBSD</application>
image</para>
<screen>&prompt.root; <userinput>make BASE=/cdrom/7.0-RELEASE</userinput></screen>
<note>
<para>上述的 <command>make</command> 指令要在
<application>mfsBSD</application> 的最上層目錄執行,比方說 <filename>~/mfsbsd-1.0-beta1/</filename></para>
</note>
</sect2>
<sect2>
<title><application>mfsBSD</application> 開動</title>
<para>現在 <application>mfsBSD</application> image 已經備妥,
要上傳到遠端機器的救急系統或者預先安裝的 &linux; distribution。
要完成這工作最適合的工具就是 <application>scp</application></para>
<screen>&prompt.root; <userinput>scp disk.img root@192.168.0.2:.</userinput></screen>
<para>為了能順利啟動 <application>mfsBSD</application> image
要把檔案放在欲安裝機器的第一顆(可開機)硬碟上。
假設例子的第一顆開機硬碟代號為 <filename>sda</filename>
那麼作法就類似下面這樣:</para>
<screen>&prompt.root; <userinput>dd if=/root/disk.img of=/dev/sda bs=1m</userinput></screen>
<para>若一切順利,該 image 檔現在應該會在第一顆硬碟的
<acronym>MBR</acronym> 磁區並可以開始進行重開機了。 可以用
&man.ping.8; 工具來檢測該機器開機完畢與否。 一旦 ping 到之後,
就可以透過 &man.ssh.1; 連進去,並且用 <systemitem class="username">root</systemitem>
以及剛設定的密碼登入。</para>
</sect2>
</sect1>
<sect1 xml:id="installation">
<title>&os; 作業系統的安裝</title>
<para>現在 <application>mfsBSD</application> 已順利啟動,並且應該可以透過
&man.ssh.1; 方式來連。 本節將介紹如何建立 slice 分割、設定
<application>gmirror</application> 以作 RAID-1、如何以
<application>sysinstall</application> 來安裝 &os;
作業系統的最小化安裝。</para>
<sect2>
<title>準備硬碟</title>
<para>首先要作的是配置硬碟空間給 &os;,像是建立 slice 跟分割區。
很明顯地,目前在跑的作業系統是載入到系統記憶體內執行,
因此要對硬碟配置並無任何問題。 這些工作可以用
<application>sysinstall</application> 或者以 &man.fdisk.8; 搭配
&man.bsdlabel.8; 來完成。</para>
<para>首先先把各硬碟都先清空。 請對各硬碟作下列指令:</para>
<screen>&prompt.root; <userinput>dd if=/dev/zero of=/dev/ad0 count=2</userinput></screen>
<para>接著,以您慣用的工具來建立 slice 以及設定 label。 通常會建議以
<application>sysinstall</application> 工具來作會比較輕鬆,
或者是強而又不太會出槌的文字介面 &unix; 標準工具(像是 &man.fdisk.8;,
&man.bsdlabel.8;),這部分稍後也會一併介紹。 前者部分在 &os; Handbook
<link xlink:href="&url.books.handbook;/install-steps.html">安裝
&os;</link> 章節有相當詳盡的介紹,所以這邊主要要介紹的是如何建立
RAID-1 系統以及 <application>ZFS</application>
這邊會介紹建立以 &man.gmirror.8; 做成的小型 mirrored 檔案系統:
<filename>/</filename> (根目錄), <filename>/usr</filename> 以及 <filename>/var</filename>,而硬碟的其餘剩餘空間則通通以
&man.zpool.8; 做成 <application>ZFS</application> 的 mirrored 檔案系統
。 請注意:必須要先把 &os; 作業系統裝好並開完機後,才能進行設定
<application>ZFS</application> 檔案系統。</para>
<para>下面的例子會介紹如何建立 slice 以及 label、在每個分割區上啟用
&man.gmirror.8;、如何在每個 mirrored 分割區上建立
<application>UFS2</application> 檔案系統:</para>
<screen>&prompt.root; <userinput>fdisk -BI /dev/ad0</userinput> <co xml:id="fdisk"/>
&prompt.root; <userinput>fdisk -BI /dev/ad1</userinput>
&prompt.root; <userinput>bsdlabel -wB /dev/ad0s1</userinput> <co xml:id="bsdlabel-writing"/>
&prompt.root; <userinput>bsdlabel -wB /dev/ad1s1</userinput>
&prompt.root; <userinput>bsdlabel -e /dev/ad0s1</userinput> <co xml:id="bsdlabel-editing"/>
&prompt.root; <userinput>bsdlabel /dev/ad0s1 &gt; /tmp/bsdlabel.txt &amp;&amp; bsdlabel -R /dev/ad1s1 /tmp/bsdlabel.txt</userinput> <co xml:id="bsdlabel-restore"/>
&prompt.root; <userinput>gmirror label root /dev/ad[01]s1a</userinput> <co xml:id="gmirror1"/>
&prompt.root; <userinput>gmirror label var /dev/ad[01]s1d</userinput>
&prompt.root; <userinput>gmirror label usr /dev/ad[01]s1e</userinput>
&prompt.root; <userinput>gmirror label -F swap /dev/ad[01]s1b</userinput> <co xml:id="gmirror2"/>
&prompt.root; <userinput>newfs /dev/mirror/root</userinput> <co xml:id="newfs"/>
&prompt.root; <userinput>newfs /dev/mirror/var</userinput>
&prompt.root; <userinput>newfs /dev/mirror/usr</userinput></screen>
<calloutlist>
<callout arearefs="fdisk">
<para>對該硬碟建立 slice 並且在第零軌處將開機表作初始。
請對該機器所有硬碟都作此一動作。</para>
</callout>
<callout arearefs="bsdlabel-writing">
<para>對各硬碟寫入 label 以及 bootstrap 碼。</para>
</callout>
<callout arearefs="bsdlabel-editing">
<para>現在手動修改該硬碟的 label至於如何建立分割區(partitions)
請參閱 &man.bsdlabel.8; 說明。
分割區分別建立:<literal>a</literal> 是給 <filename>/</filename> (根目錄)
<literal>b</literal> 給 swap
<literal>d</literal><filename>/var</filename>
<literal>e</literal><filename>/usr</filename>
最後,會在稍後步驟把 <literal>f</literal>
<application>ZFS</application> 使用。</para>
</callout>
<callout arearefs="bsdlabel-restore">
<para>把剛剛的 label 設定先匯出,再匯入到第二顆硬碟上,
如此一來兩邊的硬碟 label 設定就會同樣。</para>
</callout>
<callout arearefs="gmirror1">
<para>在各分割區上啟用 &man.gmirror.8;</para>
</callout>
<callout arearefs="gmirror2">
<para>請注意:<option>-F</option> 選項是用在 swap 上。
這參數會讓 &man.gmirror.8; 認為該硬體是處於可靠狀態,
即使發生電源故障或系統當掉,也不會去同步。</para>
</callout>
<callout arearefs="newfs">
<para>在各個有做 mirror 的分割區上建立 <application>UFS2</application>
檔案系統</para>
</callout>
</calloutlist>
</sect2>
<sect2>
<title>系統安裝</title>
<para>這裡是最重要的一環,
本節介紹實際上如何在先前一節所做好的硬碟安裝最小化的 &os;
為了完成此一目標,所有檔案系統都必須掛載妥當,才能讓
<application>sysinstall</application> 可以把 &os; 裝到硬碟內:</para>
<screen>&prompt.root; <userinput>mount /dev/mirror/root /mnt</userinput>
&prompt.root; <userinput>mkdir /mnt/var /mnt/usr</userinput>
&prompt.root; <userinput>mount /dev/mirror/var /mnt/var</userinput>
&prompt.root; <userinput>mount /dev/mirror/usr /mnt/usr</userinput></screen>
<para>做完上述動作之後,請執行 &man.sysinstall.8;。 請從主選單中選擇
<guimenuitem>Custom</guimenuitem> 安裝,選
<guimenuitem>Options</guimenuitem><keycap>Enter</keycap>
然後以方向鍵移動到 <literal>Install Root</literal> 處,按
<keycap>Space</keycap> 鍵然後改為 <filename>/mnt</filename>,再按 <keycap>Enter</keycap>
鍵以將修改值存起來,然後按 <keycap>q</keycap> 鍵即可離開這個
<guimenuitem>Options</guimenuitem> 畫面。</para>
<warning>
<para>請注意:本步驟極為重要,若忽略的話那麼
<application>sysinstall</application> 就沒辦法安裝 &os;</para>
</warning>
<para>接著選 <guimenuitem>Distributions</guimenuitem>,然後移動游標到
<option>Minimal</option> 處,按 <keycap>Space</keycap> 鍵。
本文之所以介紹最小化安裝是為了要節省網路流量,因為系統安裝是透過
<application>ftp</application> 方式來進行。 要離開本畫面,請選
<option>Exit</option> 即可。</para>
<note>
<para>至於 <guimenuitem>Partition</guimenuitem>
<guimenuitem>Label</guimenuitem> 步驟則可略過,
因為這些目前已經都設定完畢了。</para>
</note>
<para><guimenuitem>Media</guimenuitem> 選單中請選
<option>FTP</option>。 請選最近的 mirror 站,並且讓
<application>sysinstall</application> 假設網路已經設妥。
接下來就會回到 <guimenuitem>Custom</guimenuitem> 選單。</para>
<para>最後,按下 <guimenuitem>Commit</guimenuitem> 即可開始進行安裝。
完成安裝後,即可離開 <application>sysinstall</application></para>
</sect2>
<sect2>
<title>後續安裝步驟</title>
<para>此時 &os; 作業系統應該已經裝完,然而還有些後續流程要做。
必須要做一些後續設定,才能讓 &os; 可以開機跟登入。</para>
<para>現在必須要用 &man.chroot.8; 以切到剛剛新裝好的系統內。
指令如下:</para>
<screen>&prompt.root; <userinput>chroot /mnt</userinput></screen>
<para>然後再打下列指令以繼續完成:</para>
<itemizedlist>
<listitem>
<para><literal>GENERIC</literal> kernel 複製到
<filename>/boot/kernel</filename>
目錄:</para>
<screen>&prompt.root; <userinput>cp -Rp /boot/GENERIC/* /boot/kernel</userinput></screen>
</listitem>
<listitem>
<para>建立 <filename>/etc/rc.conf</filename>,
<filename>/etc/resolv.conf</filename>
<filename>/etc/fstab</filename> 檔案。 別忘了,要記得在
<filename>/etc/rc.conf</filename> 檔設相關網路設定,以及把
<application>sshd</application> 啟用。 此外,
<filename>/etc/fstab</filename> 檔應該會長像下面這樣:</para>
<programlisting># Device Mountpoint FStype Options Dump Pass#
/dev/mirror/swap none swap sw 0 0
/dev/mirror/root / ufs rw 1 1
/dev/mirror/usr /usr ufs rw 2 2
/dev/mirror/var /var ufs rw 2 2
/dev/cd0 /cdrom cd9660 ro,noauto 0 0</programlisting>
</listitem>
<listitem>
<para>新增 <filename>/boot/loader.conf</filename> 檔,
並且內容填入下列:</para>
<programlisting>geom_mirror_load="YES"
zfs_load="YES"</programlisting>
</listitem>
<listitem>
<para>執行下列指令,以在下次開機時啟用 <application>ZFS</application>
</para>
<screen>&prompt.root; <userinput>echo 'zfs_enable="YES"' &gt;&gt; /etc/rc.conf </userinput></screen>
</listitem>
<listitem>
<para>使用 &man.adduser.8; 工具來新增其他使用者帳號。 別忘了,
至少要有一個帳號得加入 <systemitem class="groupname">wheel</systemitem> 群組,
才能在重開機後以該帳號切換為 root。</para>
</listitem>
<listitem>
<para>再次檢查上述相關的設定,是否有遺漏或打錯。</para>
</listitem>
</itemizedlist>
<para>現在該系統終於可以重開機了,請用 &man.reboot.8;
指令以重開機。</para>
</sect2>
</sect1>
<sect1 xml:id="zfs">
<title>ZFS</title>
<para>系統重開機完畢之後,應該就可以登入了。 歡迎使用全新的 &os; 安裝方式,
完全透過遠端而不必接上 remote console</para>
<para>接下來只剩要調整 &man.zpool.8; 以及建立 &man.zfs.8; 檔案系統而已。
<application>ZFS</application> 的建立及管理是相當淺顯易懂。 首先,
建立 mirrored pool</para>
<screen>&prompt.root; <userinput>zpool create tank mirror /dev/ad[01]s1f</userinput></screen>
<para>接著,建立檔案系統:</para>
<screen>&prompt.root; <userinput>zfs create tank/ports</userinput>
&prompt.root; <userinput>zfs create tank/src</userinput>
&prompt.root; <userinput>zfs set compression=gzip tank/ports</userinput>
&prompt.root; <userinput>zfs set compression=on tank/src</userinput>
&prompt.root; <userinput>zfs set mountpoint=/usr/ports tank/ports</userinput>
&prompt.root; <userinput>zfs set mountpoint=/usr/src tank/src</userinput></screen>
<para>一切就是這樣簡單。 若對 &os; 上的 <application>ZFS</application>
細節部分有興趣,請參閱 &os; Wiki 上的 <link xlink:href="http://wiki.freebsd.org/ZFS">ZFS</link> 一節說明。</para>
</sect1>
</article>

@ -0,0 +1,5 @@
#
# $FreeBSD$
#
DESTDIR?= ${DOCDIR}/zh_TW.UTF-8/books/${.CURDIR:T}

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd" [
<!ENTITY % chapters SYSTEM "chapters.ent"> %chapters;
@ -13,7 +13,7 @@
<info><title>FreeBSD Developers' Handbook</title>
<author><orgname>FreeBSD 文件計畫</orgname></author>
<author><orgname>FreeBSD 文件計畫</orgname></author>
<pubdate>August 2000</pubdate>
@ -48,24 +48,24 @@
<abstract>
<para>
歡迎使用 Developers' Handbook
這份文件是由許多人 <emphasis>不斷撰寫</emphasis> 而成的,
而且許多章節仍需更新或者內容還是一片空白,
如果你想幫忙 FreeBSD 文件計劃,
請寄信到 &a.doc;
歡迎使用 Developers' Handbook
這份文件是由許多人 <emphasis>不斷撰寫</emphasis> 而成的,
而且許多章節仍需更新或者內容還是一片空白,
如果你想幫忙 FreeBSD 文件計劃,
請寄信到 &a.doc;
</para>
<para>
最新版的文件都在 <link xlink:href="&url.base;/index.html">FreeBSD 官網</link> 上面,
也可從 <link xlink:href="ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/">FreeBSD FTP server</link> 下載不同格式的資料。
當然也可以在其他的 <link xlink:href="&url.books.handbook;/mirrors-ftp.html">mirror站</link>下載。
最新版的文件都在 <link xlink:href="&url.base;/index.html">FreeBSD 官網</link> 上面,
也可從 <link xlink:href="ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/">FreeBSD FTP server</link> 下載不同格式的資料。
當然也可以在其他的 <link xlink:href="&url.books.handbook;/mirrors-ftp.html">mirror站</link>下載。
</para>
</abstract>
</info>
<part xml:id="Basics">
<title>基本概念</title>
<title>基本概念</title>
&chap.introduction;
&chap.tools;
@ -84,21 +84,21 @@
</part>
<part xml:id="kernel">
<title>Kernel(核心)</title>
<title>Kernel(核心)</title>
&chap.kerneldebug;
</part>
<part xml:id="architectures">
<title>Architectures(電腦架構)</title>
<title>Architectures(電腦架構)</title>
&chap.x86;
</part>
<part xml:id="appendices">
<title>附錄</title>
<title>附錄</title>
<bibliography>

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
Creates entities for each chapter in the FreeBSD Developer's
Handbook. Each entity is named chap.foo, where foo is the value

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project
@ -6,7 +6,7 @@
Original revision: 1.18
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="introduction">
<info><title>簡介</title>
<info><title>簡介</title>
<authorgroup>
<author><personname><firstname>Murray</firstname><surname>Stokely</surname></personname><contrib>Contributed by </contrib></author>
<author><personname><firstname>Jeroen</firstname><surname>Ruigrok van der Werven</surname></personname></author>
@ -15,60 +15,60 @@
<sect1 xml:id="introduction-devel">
<title>在 FreeBSD 開發程式</title>
<para>好了我們開始吧!我想你的 FreeBSD 已經安裝好了,而且已經準備好要用它寫點程式了吧?
但是要從哪裡開始呢?&os; 有提供寫程式的程式或環境嗎?
身為 programer 的我可以做什麼呢?</para>
<para>本章試著回答你一些問題,當然,單就 programming 程度來說可分很多種層次,
有的人只是單純當興趣,有的則是他的專業,
本章主要內容是針對程式初學者,
當然,對於那些不熟 &os; 的程式開發者而言,本文件內容也是十分實用的。</para>
<title>在 FreeBSD 開發程式</title>
<para>好了我們開始吧!我想你的 FreeBSD 已經安裝好了,而且已經準備好要用它寫點程式了吧?
但是要從哪裡開始呢?&os; 有提供寫程式的程式或環境嗎?
身為 programer 的我可以做什麼呢?</para>
<para>本章試著回答你一些問題,當然,單就 programming 程度來說可分很多種層次,
有的人只是單純當興趣,有的則是他的專業,
本章主要內容是針對程式初學者,
當然,對於那些不熟 &os; 的程式開發者而言,本文件內容也是十分實用的。</para>
</sect1>
<sect1 xml:id="introduction-bsdvision">
<title>The BSD Vision</title>
<para>為了讓你寫出來的程式在 &unix; like系統上具有良好的使用性、效能和穩定性
我們必須跟你介紹一些程式概念(original software tools ideology)。 </para>
<para>為了讓你寫出來的程式在 &unix; like系統上具有良好的使用性、效能和穩定性
我們必須跟你介紹一些程式概念(original software tools ideology)。 </para>
</sect1>
<sect1 xml:id="introduction-archguide">
<title>程式架構指南</title>
<title>程式架構指南</title>
<para>我們想介紹的概念如下</para>
<para>我們想介紹的概念如下</para>
<itemizedlist>
<listitem><para>在整個程式還沒寫完前,不要增加新的功能。</para></listitem>
<listitem><para>在整個程式還沒寫完前,不要增加新的功能。</para></listitem>
<listitem><para>另外一個重點就是,讓你自己選擇你的程式將會具有何種功能,
而不是讓別人決定,不想要去滿足全世界的需求,除非你想讓你的程式具有擴充性或相容性。</para></listitem>
<listitem><para>另外一個重點就是,讓你自己選擇你的程式將會具有何種功能,
而不是讓別人決定,不想要去滿足全世界的需求,除非你想讓你的程式具有擴充性或相容性。</para></listitem>
<listitem><para>千萬記住:在沒有相關經驗時,參考範例程式碼所寫出來的程式,
會比自己憑空寫出來的好。</para></listitem>
<listitem><para>千萬記住:在沒有相關經驗時,參考範例程式碼所寫出來的程式,
會比自己憑空寫出來的好。</para></listitem>
<listitem><para>當你寫的程式沒辦法完全解決問題時,最好的方法就是不要試著要去解決它。</para></listitem>
<listitem><para>當你寫的程式沒辦法完全解決問題時,最好的方法就是不要試著要去解決它。</para></listitem>
<listitem><para>若用 10% 的心力就能輕鬆完成 90% 的工作份量,就用這個簡單法子吧。</para></listitem>
<listitem><para>若用 10% 的心力就能輕鬆完成 90% 的工作份量,就用這個簡單法子吧。</para></listitem>
<listitem><para>盡可能地簡化問題的複雜。</para></listitem>
<listitem><para>盡可能地簡化問題的複雜。</para></listitem>
<listitem><para>提供機制(mechanism),而非原則(policy)。
比方說,把使用者介面選擇權交由使用者來決定。</para></listitem>
<listitem><para>提供機制(mechanism),而非原則(policy)。
比方說,把使用者介面選擇權交由使用者來決定。</para></listitem>
</itemizedlist>
<para>以上摘自 Scheifler &amp; Gettys 的 "X Window System" 論文</para>
<para>以上摘自 Scheifler &amp; Gettys 的 "X Window System" 論文</para>
</sect1>
<sect1 xml:id="introduction-layout">
<title><filename>/usr/src</filename> 的架構</title>
<title><filename>/usr/src</filename> 的架構</title>
<para>完整的 FreeBSD 原始碼都在公開的 CVS repository 中。
通常 FreeBSD 原始碼都會裝在 <filename>/usr/src</filename>
而且包含下列子目錄:</para>
<para>完整的 FreeBSD 原始碼都在公開的 CVS repository 中。
通常 FreeBSD 原始碼都會裝在 <filename>/usr/src</filename>
而且包含下列子目錄:</para>
<para>
<informaltable frame="none" pgwide="1">

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project

@ -1,7 +1,7 @@
#
# $FreeBSD$
#
# Build the FreeBSD Chinese-Big5 FAQ
# Build the FreeBSD Chinese FAQ
#
MAINTAINER=vanilla@FreeBSD.org ijliao@FreeBSD.org clive@FreeBSD.org \

File diff suppressed because it is too large Load Diff

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd" [
<!ENTITY % chapters SYSTEM "chapters.ent"> %chapters;
@ -36,10 +36,10 @@
Original revision: 1.27
-->
<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
<info><title>FreeBSD 文件計畫入門書</title>
<info><title>FreeBSD 文件計畫入門書</title>
<author><orgname>FreeBSD 文件計劃</orgname></author>
<author><orgname>FreeBSD 文件計劃</orgname></author>
<copyright>
<year>1998</year>
@ -62,36 +62,36 @@
&legalnotice;
<abstract>
<para>感謝您參與 FreeBSD 文件計劃(簡稱FDP, FreeBSD Documentation Project),您的點滴貢獻,都相當寶貴。</para>
<para>感謝您參與 FreeBSD 文件計劃(簡稱FDP, FreeBSD Documentation Project),您的點滴貢獻,都相當寶貴。</para>
<para>本入手書內容包括:如何開始著手翻譯的各項細節,以及會用到的一些好用工具(包括:必備工具、輔助工具)
,以及文件計畫的宗旨。</para>
<para>本入手書內容包括:如何開始著手翻譯的各項細節,以及會用到的一些好用工具(包括:必備工具、輔助工具)
,以及文件計畫的宗旨。</para>
<para>本文件還在草稿,尚未完稿。未完成的章節,我們會在章節名稱旁邊加註『<literal>*</literal> 』以作識別。</para>
<para>本文件還在草稿,尚未完稿。未完成的章節,我們會在章節名稱旁邊加註『<literal>*</literal> 』以作識別。</para>
</abstract>
</info>
<preface xml:id="preface">
<title>序言</title>
<title>序言</title>
<sect1 xml:id="preface-prompts">
<title>Shell 提示符號(Prompts)</title>
<title>Shell 提示符號(Prompts)</title>
<para>下表顯示出一般帳號與 root 的提示符號,在所有的文件例子中會用提示符號(prompt)
,來提醒您該用哪種帳號才對。</para>
<para>下表顯示出一般帳號與 root 的提示符號,在所有的文件例子中會用提示符號(prompt)
,來提醒您該用哪種帳號才對。</para>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
<thead>
<row>
<entry>帳號</entry>
<entry>提示符號(Prompt)</entry>
<entry>帳號</entry>
<entry>提示符號(Prompt)</entry>
</row>
</thead>
<tbody>
<row>
<entry>普通帳號</entry>
<entry>普通帳號</entry>
<entry>&prompt.user;</entry>
</row>
@ -105,73 +105,73 @@
</sect1>
<sect1 xml:id="preface-conventions">
<title>書中所用的編排風格</title>
<title>書中所用的編排風格</title>
<para>下表為本書中所使用編排風格方式:</para>
<para>下表為本書中所使用編排風格方式:</para>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
<thead>
<row>
<entry>代表意義</entry>
<entry>舉例</entry>
<entry>代表意義</entry>
<entry>舉例</entry>
</row>
</thead>
<tbody>
<row>
<entry>指令</entry>
<entry>使用 <command>ls -a</command> 來列出所有的檔案。</entry>
<entry>指令</entry>
<entry>使用 <command>ls -a</command> 來列出所有的檔案。</entry>
</row>
<row>
<entry>檔名</entry>
<entry>修改 <filename>.login</filename> 檔。</entry>
<entry>檔名</entry>
<entry>修改 <filename>.login</filename> 檔。</entry>
</row>
<row>
<entry>螢幕上會出現的訊息</entry>
<entry>螢幕上會出現的訊息</entry>
<entry><screen>You have mail.</screen></entry>
</row>
<row>
<entry>輸入指令後,螢幕上會出現的對應內容。</entry>
<entry>輸入指令後,螢幕上會出現的對應內容。</entry>
<entry><screen>&prompt.user; <userinput>su</userinput>
Password:</screen></entry>
</row>
<row>
<entry>要參考的線上手冊(manual)</entry>
<entry>要參考的線上手冊(manual)</entry>
<entry><citerefentry>
<entry><citerefentry>
<refentrytitle>su</refentrytitle>
<manvolnum>1</manvolnum>
</citerefentry> 來切換帳號。</entry>
</citerefentry> 來切換帳號。</entry>
</row>
<row>
<entry>在講到帳號(user)、群組(group)的名稱的時候...</entry>
<entry>在講到帳號(user)、群組(group)的名稱的時候...</entry>
<entry>只有 <systemitem class="username">root</systemitem> 才可以做這件事。</entry>
<entry>只有 <systemitem class="username">root</systemitem> 才可以做這件事。</entry>
</row>
<row>
<entry>語氣的強調</entry>
<entry>語氣的強調</entry>
<entry>你『必須』這麼做才行。</entry>
<entry>你『必須』這麼做才行。</entry>
</row>
<row>
<entry>打指令時,可替換的部份</entry>
<entry>打指令時,可替換的部份</entry>
<entry>要刪除檔案的話,請打 <command>rm 要刪除的檔名</command></entry>
<entry>要刪除檔案的話,請打 <command>rm 要刪除的檔名</command></entry>
</row>
<row>
<entry>環境變數設定</entry>
<entry>環境變數設定</entry>
<entry><envar>$HOME</envar> 是指帳號的家目錄所在處。</entry>
<entry><envar>$HOME</envar> 是指帳號的家目錄所在處。</entry>
</row>
</tbody>
</tgroup>
@ -179,39 +179,39 @@ Password:</screen></entry>
</sect1>
<sect1 xml:id="preface-notes">
<title>『Note、Tip、Important、Warning、Example』的運用</title>
<title>『Note、Tip、Important、Warning、Example』的運用</title>
<para>以下文字是『注意』、『技巧』、『重要訊息』、『警告』、『範例』的運用。</para>
<para>以下文字是『注意』、『技巧』、『重要訊息』、『警告』、『範例』的運用。</para>
<note>
<para>表示需要注意的事項,其中包括您需要注意的事情,因為這些事情可能會影響到操作結果。</para>
<para>表示需要注意的事項,其中包括您需要注意的事情,因為這些事情可能會影響到操作結果。</para>
</note>
<tip>
<para>提供可能對您有用或簡化操作方式的技巧說明。</para>
<para>提供可能對您有用或簡化操作方式的技巧說明。</para>
</tip>
<important>
<para>表示要特別注意的事情。一般來說,它們會包括操作指令時需要加的額外參數。</para>
<para>表示要特別注意的事情。一般來說,它們會包括操作指令時需要加的額外參數。</para>
</important>
<warning>
<para>表示警告事項,比如如果您不注意則可能導致的損失。這些損失可能是對您或硬體造成實際傷害,
也可能是無法估計的損害,例如一時疏忽而刪除重要檔案...。</para>
<para>表示警告事項,比如如果您不注意則可能導致的損失。這些損失可能是對您或硬體造成實際傷害,
也可能是無法估計的損害,例如一時疏忽而刪除重要檔案...。</para>
</warning>
<example>
<title>這是舉例說明</title>
<title>這是舉例說明</title>
<para>這是舉例說明而已,通常包含應遵循的指令範例,或顯示某些特定動作所可能發生的結果。</para>
<para>這是舉例說明而已,通常包含應遵循的指令範例,或顯示某些特定動作所可能發生的結果。</para>
</example>
</sect1>
<sect1 xml:id="preface-acknowledgements">
<title>感謝</title>
<title>感謝</title>
<para>在此要感謝 Sue Blake, Patrick Durusau, Jon Hamilton, Peter
Flynn, Christopher Maden 這些人的協助與閱讀初期草稿,並提供許多寶貴的潤稿意見與評論。</para>
<para>在此要感謝 Sue Blake, Patrick Durusau, Jon Hamilton, Peter
Flynn, Christopher Maden 這些人的協助與閱讀初期草稿,並提供許多寶貴的潤稿意見與評論。</para>
</sect1>
</preface>

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
Creates entities for each chapter in the Documentation Project Primer.
Each entity is named chap.foo, where foo is the value of the id

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 1999 Neil Blakey-Milner, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2000 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms
@ -32,21 +32,21 @@
Original revision: 1.17
-->
<appendix xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="examples">
<title>範例</title>
<title>範例</title>
<para>本附錄收錄一些 SGML 檔範例,以及用來轉換格式的相關指令。
若已成功安裝文件計畫工具包的話,那麼就可以直接照下面範例來使用。</para>
<para>本附錄收錄一些 SGML 檔範例,以及用來轉換格式的相關指令。
若已成功安裝文件計畫工具包的話,那麼就可以直接照下面範例來使用。</para>
<para>這些例子並不是很詳細 &mdash; 並未包括你可能想用的元件,
尤其像是你文件的前頁(正文前的書頁,包括扉頁、序言、目錄等)
若需參考更多 DocBook 標記語言文件的話,那麼可以透過 <application>CSup</application><application>CVSup</application>
程式來抓 <literal>doc</literal> tree 部分,以察看本文件或其他文件的 SGML 原稿。
或者,也可以線上瀏覽
<uri xlink:href="http://www.FreeBSD.org/cgi/cvsweb.cgi/doc/">http://www.FreeBSD.org/cgi/cvsweb.cgi/doc/</uri></para>
<para>這些例子並不是很詳細 &mdash; 並未包括你可能想用的元件,
尤其像是你文件的前頁(正文前的書頁,包括扉頁、序言、目錄等)
若需參考更多 DocBook 標記語言文件的話,那麼可以透過 <application>CSup</application><application>CVSup</application>
程式來抓 <literal>doc</literal> tree 部分,以察看本文件或其他文件的 SGML 原稿。
或者,也可以線上瀏覽
<uri xlink:href="http://www.FreeBSD.org/cgi/cvsweb.cgi/doc/">http://www.FreeBSD.org/cgi/cvsweb.cgi/doc/</uri></para>
<para>為了避免不必要的困擾,這些例子採用標準的 DocBook 4.1 DTD 而非 FreeBSD 額外的 DTD。
同時並採用 Norm Walsh 氏的樣式表(stylesheets),而非 FreeBSD 文件計劃有自行改過的樣式表。
在一般使用 DocBook 的例子,這樣子會比較簡化環境,而不會造成額外困擾。</para>
<para>為了避免不必要的困擾,這些例子採用標準的 DocBook 4.1 DTD 而非 FreeBSD 額外的 DTD。
同時並採用 Norm Walsh 氏的樣式表(stylesheets),而非 FreeBSD 文件計劃有自行改過的樣式表。
在一般使用 DocBook 的例子,這樣子會比較簡化環境,而不會造成額外困擾。</para>
<sect1 xml:id="examples-docbook-book">
<title>DocBook <tag>book</tag></title>
@ -58,11 +58,11 @@
<book lang='zh_tw'>
<bookinfo>
<title>樣本書的例子</title>
<title>樣本書的例子</title>
<author>
<firstname>名(first name)</firstname>
<surname>姓(surname)</surname>
<firstname>名(first name)</firstname>
<surname>姓(surname)</surname>
<affiliation>
<address><email>foo@example.com</email></address>
</affiliation>
@ -70,29 +70,29 @@
<copyright>
<year>2000</year>
<holder>相關版權字樣</holder>
<holder>相關版權字樣</holder>
</copyright>
<abstract>
<para>該書若有摘要,就寫在這邊。</para>
<para>該書若有摘要,就寫在這邊。</para>
</abstract>
</bookinfo>
<preface>
<title>序言</title>
<title>序言</title>
<para>該書若有序言,就放在這邊。</para>
<para>該書若有序言,就放在這邊。</para>
</preface>
<chapter>
<title>第一章</title>
<title>第一章</title>
<para>這是這本書的第一章。</para>
<para>這是這本書的第一章。</para>
<sect1>
<title>第一節</title>
<title>第一節</title>
<para>這本書的第一節。</para>
<para>這本書的第一節。</para>
</sect1>
</chapter>
</book>]]></programlisting>
@ -109,11 +109,11 @@
<article lang='zh_tw'>
<articleinfo>
<title>文章樣本</title>
<title>文章樣本</title>
<author>
<firstname>名(first name)</firstname>
<surname>姓(surname)</surname>
<firstname>名(first name)</firstname>
<surname>姓(surname)</surname>
<affiliation>
<address><email>foo@example.com</email></address>
</affiliation>
@ -121,23 +121,23 @@
<copyright>
<year>2000</year>
<holder>相關版權字樣</holder>
<holder>相關版權字樣</holder>
</copyright>
<abstract>
<para>該文章若有摘要,就寫在這邊。</para>
<para>該文章若有摘要,就寫在這邊。</para>
</abstract>
</articleinfo>
<sect1>
<title>第一節</title>
<title>第一節</title>
<para>該文章的第一節。</para>
<para>該文章的第一節。</para>
<sect2>
<title>第一小節(sub-section)</title>
<title>第一小節(sub-section)</title>
<para>該文章的第一小節(sub-section)</para>
<para>該文章的第一小節(sub-section)</para>
</sect2>
</sect1>
</article>]]></programlisting>
@ -147,17 +147,17 @@
<sect1 xml:id="examples-formatted">
<title>Producing formatted output</title>
<para>本節有些前提,假設:已經有裝 <package>textproc/docproj</package>
上面所安裝各軟體,無論它們是用 port 方式安裝或是手動安裝。
此外,假設所裝的軟體都放在 <filename>/usr/local/</filename> 下的子目錄,
並且所安裝的相關執行檔,都有裝在你的 <envar>PATH</envar> 環境變數內的目錄。
如有必要的話,請依你的系統環境而調整相關路徑。</para>
<para>本節有些前提,假設:已經有裝 <package>textproc/docproj</package>
上面所安裝各軟體,無論它們是用 port 方式安裝或是手動安裝。
此外,假設所裝的軟體都放在 <filename>/usr/local/</filename> 下的子目錄,
並且所安裝的相關執行檔,都有裝在你的 <envar>PATH</envar> 環境變數內的目錄。
如有必要的話,請依你的系統環境而調整相關路徑。</para>
<sect2>
<title>使用 Jade</title>
<title>使用 Jade</title>
<example>
<title>轉換 DocBook 為 HTML (完整模式)</title>
<title>轉換 DocBook 為 HTML (完整模式)</title>
<screen>&prompt.user; <userinput>jade -V nochunks \ <co xml:id="examples-co-jade-1-nochunks"/>
-c /usr/local/share/xml/docbook/dsssl/modular/catalog \ <co xml:id="examples-co-jade-1-catalog"/>
@ -201,7 +201,7 @@
</example>
<example>
<title>轉換 DocBook 為 HTML (章節模式)</title>
<title>轉換 DocBook 為 HTML (章節模式)</title>
<screen>&prompt.user; <userinput>jade \
-c /usr/local/share/xml/docbook/dsssl/modular/catalog \ <co xml:id="examples-co-jade-2-catalog"/>
@ -245,7 +245,7 @@
</example>
<example xml:id="examples-docbook-postscript">
<title>轉換 DocBook 為 Postscript(PS) 格式</title>
<title>轉換 DocBook 為 Postscript(PS) 格式</title>
<para>The source SGML file must be converted to a &tex; file.</para>
@ -313,7 +313,7 @@
</example>
<example>
<title>轉換 DocBook 為 PDF 格式</title>
<title>轉換 DocBook 為 PDF 格式</title>
<para>The first part of this process is identical to that when
converting DocBook to Postscript, using the same

@ -0,0 +1,241 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms
(SGML HTML, PDF, PostScript, RTF and so forth) with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code (SGML DocBook) must retain the above
copyright notice, this list of conditions and the following
disclaimer as the first lines of this file unmodified.
2. Redistributions in compiled form (transformed to other DTDs,
converted to PDF, PostScript, RTF and other formats) must reproduce
the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials
provided with the distribution.
THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
$FreeBSD$
Original revision: 1.23
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="overview">
<title>概論</title>
<para>歡迎參與 FreeBSD 文件計劃。維持優秀質量的文件對 FreeBSD 的成功來說十分重要,
而 FreeBSD 文件計劃(以下皆以 FDP 來代表 FreeBSD Documentation Project
的縮寫) 則與這些文件撰寫、更新息息相關,因此您的點滴貢獻都是十分寶貴的。</para>
<para>本文件最主要的目的就是清楚告訴您『FDP 的架構有哪些』、『如何撰寫並提交文件給 FDP』、
『如何有效運用工具來協助撰稿』。</para>
<para><indexterm>
<primary>Membership</primary>
</indexterm>
我們歡迎每個熱心的志士來加入 FDP 行列。FDP 並不限定每月必須交出多少稿量,才能加入。
您唯一須要作的就是訂閱 &a.doc;</para>
<para>讀完本份文件,您將會:</para>
<itemizedlist>
<listitem>
<para>瞭解有哪些文件是由 FDP 所維護的。</para>
</listitem>
<listitem>
<para>可以看懂 FDP 所維護的 SGML 原始文件。</para>
</listitem>
<listitem>
<para>知道如何來對文件作修改。</para>
</listitem>
<listitem>
<para>知道如何投稿自己的修改部份,並最後正式進入 FreeBSD 文件內。</para>
</listitem>
</itemizedlist>
<sect1 xml:id="overview-doc">
<title>FreeBSD 文件的組成部分</title>
<para>FDP 總共負責 FreeBSD 的 4 種類別的文件:</para>
<variablelist>
<varlistentry>
<term>線上手冊(manual)</term>
<listitem>
<para>英文版的系統 manual 並不是由 FDP 所撰寫的,因為它們是屬於 base system 的部份。
然而FDP 可以(也曾這麼做過)修改這些文件,來讓這些文件寫得更清楚,甚至是勘正錯誤的地方。</para>
<para>翻譯團隊負責將系統的線上手冊翻譯為不同的語言。 這些譯本都由 FDP 維護。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>FAQ</term>
<listitem>
<para>FAQ 主要是收集在各論壇或 newsgroup 會常問到或有可能會問到的 FreeBSD 相關問題與答案 。
(簡單講,就是『問答集』格式) 通常會擺在這裡面的問答格式,不會放太長的詳細內容。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>使用手冊(Handbook)</term>
<listitem>
<para>使用手冊主要是給 FreeBSD 使用者提供詳盡的線上參考資料。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Web site</term>
<listitem>
<para>FreeBSD 主要各項介紹方面的 WWW 部份,歡迎逛逛 <link xlink:href="&url.base;/index.html">http://www.FreeBSD.org/</link>
以及許多其他 mirror 站。這網站是許多人第一次接觸 FreeBSD 的地方。</para>
</listitem>
</varlistentry>
</variablelist>
<para>這四個文件組成部分都可透過 FreeBSD CVS tree 來取得。也就是說,這些文件的修改記錄對於任何人都是公開的,
而且無論是誰都可以用像是 <application>CSup</application>, <application>CVSup</application>
<application>CTM</application> 將文件取出來(checkout)並放在自己機器上做備份或副本參考等用途。</para>
<para>此外,許多人會寫些教學文件或維護有關 FreeBSD 內容的網站。(若作者同意的話)其中有些資料會保存在 FreeBSD 正式
CVS repository 內。而其他的文件,可能作者不希望被放在 FreeBSD repository 內而另存他處。
總之FDP 會盡力提供這些文件的連結。</para>
</sect1>
<sect1 xml:id="overview-before">
<title>在開工之前...</title>
<para>本文假設您已經瞭解:</para>
<itemizedlist>
<listitem>
<para>如何從 FreeBSD CVS repository 更新自己電腦上的 FreeBSD 文件部份(以 <application>CVS</application>
<application>CSup</application><application>CVSup</application> 或是
<application>CTM</application>) 或是用
<application>CVSup</application> 來下載 <emphasis>checked-out</emphasis> 的副本</para>
</listitem>
<listitem>
<para>如何用 FreeBSD Ports 套件管理機制或 &man.pkg.add.1; 來下載、安裝軟體。</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="overview-quick-start">
<title>快速上手篇</title>
<para>若想先自行試試看,並有信心可以作得到,那麼就照下面步驟吧。</para>
<procedure>
<step>
<para>安裝 <package>textproc/docproj</package> 這個組合型 port(meta-port)。</para>
<screen>&prompt.root; <userinput>cd /usr/ports/textproc/docproj</userinput>
&prompt.root; <userinput>make JADETEX=no install</userinput></screen>
</step>
<step>
<para>下載 FreeBSD <filename>doc</filename> tree 到本機上:
無論是用 CSup 或 CVSup 的 <literal>checkout</literal> 模式,
或是複製完整的 CVS repository 到本機上都可以。</para>
<para>若想在本機上只跑最低限度的 CVS repository 就好,那麼必須要
checkout 出 <filename>doc/share</filename> 以及 <filename>doc/en_US.ISO8859-1/share</filename>
這兩個目錄才行。</para>
<screen>&prompt.user; <userinput>cvs checkout doc/share</userinput>
&prompt.user; <userinput>cvs checkout doc/en_US.ISO8859-1/share</userinput></screen>
<para>若硬碟空間還算可以的話,那可以把所有語系的 doc 都 check out 出來:</para>
<screen>&prompt.user; <userinput>cvs checkout doc</userinput></screen>
</step>
<step>
<para>可依需要從 repository 中 checkout 出來你想修改某份現有的書籍或文章內容。
若打算撰寫新書或新文章的話,可以參考現有的部分作為實例來做。</para>
<para>舉例來說,若想寫篇新文章,內容是有關在 FreeBSD 與 Windows 2000 之間建立 VPN 連線,
那麼可以照類似下面這樣的作法:</para>
<procedure>
<step>
<para>Check out <filename>articles</filename> 目錄:</para>
<screen>&prompt.user; <userinput>cvs checkout doc/en_US.ISO8859-1/articles</userinput></screen>
</step>
<step>
<para>複製現有的文章作為範本。在這個例子中,您打算決定把新文章放在
<filename>vpn-w2k</filename> 的目錄下。</para>
<screen>&prompt.user; <userinput>cd doc/en_US.ISO8859-1/articles</userinput>
&prompt.user; <userinput>cp -R committers-guide vpn-w2k</userinput></screen>
</step>
</procedure>
<para>若是要修改現有文章,像是 FAQ(擺在 <filename>doc/en_US.ISO8859-1/books/faq</filename>)
,那麼要從 repository 中取出來(check out)</para>
<screen>&prompt.user; <userinput>cvs checkout doc/en_US.ISO8859-1/books/faq</userinput></screen>
</step>
<step>
<para>以編輯器來編寫 <filename>.xml</filename> 檔。</para>
</step>
<step>
<para><buildtarget>lint</buildtarget> 當輔助參數,來快速檢測文件結構及連結有無錯誤,
以下這個指令,實際上不會進行耗時的編書過程,只是先測試文件有無錯誤。</para>
<screen>&prompt.user; <userinput>make lint</userinput></screen>
<para>當編書的一切都就緒時,這時你可以用 <varname>FORMATS</varname>
變數來指定產生的格式為哪一種。 目前支援的格式共有:
<literal>html</literal>, <literal>html-split</literal>,
<literal>txt</literal>, <literal>ps</literal>,
<literal>pdf</literal>, <literal>rtf</literal>
所支援的格式列表最新版,可參考
<filename>doc/share/mk/doc.docbook.mk</filename> 檔。 請記得:
在單一指令中,若要同時產生多種格式的話,應使用引號(quotes)來將這些格式括起來。</para>
<para>舉例來說,若只要產生
<literal>html</literal> 格式就好,那麼就打:</para>
<screen>&prompt.user; <userinput>make FORMATS=html</userinput></screen>
<para>但若希望有 <literal>html</literal><literal>txt</literal> 格式的話,
你可能要打兩次 &man.make.1; 指令才能完成:</para>
<screen>&prompt.user; <userinput>make FORMATS=html</userinput>
&prompt.user; <userinput>make FORMATS=txt</userinput></screen>
<para>其實,也可以用單一指令來完成:</para>
<screen>&prompt.user; <userinput>make FORMATS="html txt"</userinput></screen>
</step>
<step>
<para>最後,以 &man.send-pr.1; 來提交修改的部份。</para>
</step>
</procedure>
</sect1>
</chapter>

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms
@ -32,7 +32,7 @@
Original revision: 1.13
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="see-also">
<title>他山之石</title>
<title>他山之石</title>
<para>This document is deliberately not an exhaustive discussion of SGML,
the DTDs listed, and the FreeBSD Documentation Project. For more

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms
@ -34,13 +34,13 @@
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="sgml-primer">
<title>SGML Primer</title>
<para>FDP 文件幾乎都是以 SGML 相關程式寫的。本章會介紹 SGML 是什麼、
如何閱讀、理解這些 SGML 原稿,以及本文件中所運用的各項 SGML 技巧。</para>
<para>FDP 文件幾乎都是以 SGML 相關程式寫的。本章會介紹 SGML 是什麼、
如何閱讀、理解這些 SGML 原稿,以及本文件中所運用的各項 SGML 技巧。</para>
<para>本節部分靈感啟發來自 Mark Galassi 的這篇 <link xlink:href="http://nis-www.lanl.gov/~rosalia/mydocs/docbook-intro/docbook-intro.html">Get Going With DocBook</link></para>
<para>本節部分靈感啟發來自 Mark Galassi 的這篇 <link xlink:href="http://nis-www.lanl.gov/~rosalia/mydocs/docbook-intro/docbook-intro.html">Get Going With DocBook</link></para>
<sect1 xml:id="sgml-primer-overview">
<title>簡介</title>
<title>簡介</title>
<para>Way back when, electronic text was simple to deal with. Admittedly,
you had to know which character set your document was written in (ASCII,
@ -799,7 +799,7 @@ nsgmls:example.xml:6:8:E: end tag for "HEAD" which is not finished</screen>
</sect1>
<sect1 xml:id="sgml-primer-comments">
<title>註解</title>
<title>註解</title>
<para>Comments are an SGML construction, and are normally only valid
inside a DTD. However, as <xref linkend="sgml-primer-sgml-escape"/>
@ -812,18 +812,18 @@ nsgmls:example.xml:6:8:E: end tag for "HEAD" which is not finished</screen>
<example>
<title>SGML generic comment</title>
<programlisting>&lt;!-- 測試註解 --&gt;</programlisting>
<programlisting>&lt;!-- 測試註解 --&gt;</programlisting>
<programlisting>
&lt;!&hyphen;- 這是註解 -&hyphen;&gt;
&lt;!&hyphen;- 這是註解 -&hyphen;&gt;
&lt;!&hyphen;- 這也是註解 -&hyphen;&gt;
&lt;!&hyphen;- 這也是註解 -&hyphen;&gt;
&lt;!&hyphen;- 要寫多行註解的話,
這是其中之一的方式 -&hyphen;&gt;
&lt;!&hyphen;- 要寫多行註解的話,
這是其中之一的方式 -&hyphen;&gt;
&lt;!&hyphen;- 要寫多行註解, -&hyphen;
&hyphen;- 也可以這樣子用 -&hyphen;&gt;</programlisting>
&lt;!&hyphen;- 要寫多行註解, -&hyphen;
&hyphen;- 也可以這樣子用 -&hyphen;&gt;</programlisting>
</example>
<para>If you have used HTML before you may have been shown different rules

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms
@ -90,7 +90,7 @@
<seg>One directory exists for each available translation and encoding
of the documentation, for example
<filename>en_US.ISO8859-1/</filename> and
<filename>zh_TW.Big5/</filename>. The names are long, but by fully
<filename>zh_TW.UTF-8/</filename>. The names are long, but by fully
specifying the language and encoding we prevent any future headaches
should a translation team want to provide the documentation in the
same language but in more than one encoding. This also completely

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms
@ -32,38 +32,38 @@
Original revision: 1.22
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="the-website">
<title>建構 Website</title>
<title>建構 Website</title>
<sect1 xml:id="the-website-prep">
<title>事前準備</title>
<title>事前準備</title>
<para>請先準備約 200MB 空間,這些是要用來放 SGML 工具程式、CVS tree、
臨時編譯用的空間,以及編譯好的網頁存放空間。若事先已有裝 SGML 工具程式、
CVS tree 的話,那麼只需頂多約 100MB 空間即可。</para>
<para>請先準備約 200MB 空間,這些是要用來放 SGML 工具程式、CVS tree、
臨時編譯用的空間,以及編譯好的網頁存放空間。若事先已有裝 SGML 工具程式、
CVS tree 的話,那麼只需頂多約 100MB 空間即可。</para>
<note>
<para>請確認一下你的相關文件製作所會用到的 ports 都是最新版!
若不清楚所裝的版本為何,那麼就先以 &man.pkg.delete.1; 指令來移除舊版,
接著才去裝 port。 舉例來說,若已裝的是 jade-1.1
但是我們目前需要的卻是 jade-1.2,那麼先用下列方式來移除舊版:</para>
<para>請確認一下你的相關文件製作所會用到的 ports 都是最新版!
若不清楚所裝的版本為何,那麼就先以 &man.pkg.delete.1; 指令來移除舊版,
接著才去裝 port。 舉例來說,若已裝的是 jade-1.1
但是我們目前需要的卻是 jade-1.2,那麼先用下列方式來移除舊版:</para>
<screen>&prompt.root; <userinput>pkg_delete jade-1.1</userinput></screen>
</note>
<para>接著,就是設定 CVS repository。需要至少 www, doc, ports 這三樣
CVS tree(當然還要加上 CVSROOT)。 請參閱
<link xlink:href="&url.books.handbook;/synching.html#CVSUP">CVSup 簡介</link>
以瞭解如何來 mirror a CVS tree 或部分 CVS tree。</para>
<para>接著,就是設定 CVS repository。需要至少 www, doc, ports 這三樣
CVS tree(當然還要加上 CVSROOT)。 請參閱
<link xlink:href="&url.books.handbook;/synching.html#CVSUP">CVSup 簡介</link>
以瞭解如何來 mirror a CVS tree 或部分 CVS tree。</para>
<para>最低需求的 cvsup collections 為:<literal>www</literal>,
<literal>doc-all</literal>, <literal>cvs-base</literal> 以及
<literal>ports-base</literal></para>
<para>最低需求的 cvsup collections 為:<literal>www</literal>,
<literal>doc-all</literal>, <literal>cvs-base</literal> 以及
<literal>ports-base</literal></para>
<para>剛講的這些需要約 105MB 空間。</para>
<para>剛講的這些需要約 105MB 空間。</para>
<para>而完整的 CVS tree - 包括 <literal>src</literal>,
<literal>doc</literal>, <literal>www</literal> 以及
<literal>ports</literal> - 目前約為 940MB。</para>
<para>而完整的 CVS tree - 包括 <literal>src</literal>,
<literal>doc</literal>, <literal>www</literal> 以及
<literal>ports</literal> - 目前約為 940MB。</para>
</sect1>
<sect1 xml:id="the-website-build">
@ -71,21 +71,21 @@
<procedure>
<step>
<para>先建立要編譯的目錄(至少要有 60MB 空間),並切換到該目錄。</para>
<para>先建立要編譯的目錄(至少要有 60MB 空間),並切換到該目錄。</para>
<screen>&prompt.root; <userinput>mkdir /var/tmp/webbuild</userinput>
&prompt.root; <userinput>cd /var/tmp/webbuild</userinput></screen>
</step>
<step>
<para>從 CVS tree 內 checkout 相關的 SGML 檔。</para>
<para>從 CVS tree 內 checkout 相關的 SGML 檔。</para>
<screen>&prompt.root; <userinput>cvs -R co www doc</userinput></screen>
</step>
<step>
<para>切到 <filename>www/en</filename> 目錄,然後打
&man.make.1; <buildtarget>all</buildtarget> 來產生網頁。</para>
<para>切到 <filename>www/en</filename> 目錄,然後打
&man.make.1; <buildtarget>all</buildtarget> 來產生網頁。</para>
<screen>&prompt.root; <userinput>cd en</userinput>
&prompt.root; <userinput>make all</userinput></screen>
@ -94,28 +94,28 @@
</sect1>
<sect1 xml:id="the-website-install">
<title>在你的網頁伺服器上安裝網頁</title>
<title>在你的網頁伺服器上安裝網頁</title>
<procedure>
<step>
<para>如果你已經離開 <filename>en</filename>
這個目錄,請切換回這個目錄中。</para>
<para>如果你已經離開 <filename>en</filename>
這個目錄,請切換回這個目錄中。</para>
<screen>&prompt.root; <userinput>cd path/www/en</userinput></screen>
</step>
<step>
<para>執行 &man.make.1; <buildtarget>install</buildtarget>
並將 <varname>DESTDIR</varname> 設定為你想安裝檔案的目錄名稱。</para>
<para>執行 &man.make.1; <buildtarget>install</buildtarget>
並將 <varname>DESTDIR</varname> 設定為你想安裝檔案的目錄名稱。</para>
<screen>&prompt.root; <userinput>make DESTDIR=/usr/local/www install</userinput></screen>
</step>
<step>
<para>如果你之前已經在相同的目錄中安裝了這些網頁,
安裝過程並不會刪除任何既有或過期的網頁。
舉例來說,如果你每日建構和安裝新的網頁副本,
這個指令將會搜尋並刪除在三天內沒有更新的檔案。</para>
<para>如果你之前已經在相同的目錄中安裝了這些網頁,
安裝過程並不會刪除任何既有或過期的網頁。
舉例來說,如果你每日建構和安裝新的網頁副本,
這個指令將會搜尋並刪除在三天內沒有更新的檔案。</para>
<screen>&prompt.root; <userinput>find /usr/local/www -ctime 3 -print0 | xargs -0 rm</userinput></screen>
</step>
@ -123,14 +123,14 @@
</sect1>
<sect1 xml:id="the-website-env">
<title>環境變數</title>
<title>環境變數</title>
<variablelist>
<varlistentry>
<term><envar>CVSROOT</envar></term>
<listitem>
<para>設定 CVS tree 的位置,此為必備條件。</para>
<para>設定 CVS tree 的位置,此為必備條件。</para>
<screen><userinput>&prompt.root; CVSROOT=/home/ncvs; export CVSROOT</userinput></screen>
</listitem>
@ -140,15 +140,15 @@
<term><varname>ENGLISH_ONLY</varname></term>
<listitem>
<para>如果設定這個環境變數,而且值不為空白,
makefiles 將只會建構和安裝英文文件。
所以將會略過其他的各國翻譯。例如:</para>
<para>如果設定這個環境變數,而且值不為空白,
makefiles 將只會建構和安裝英文文件。
所以將會略過其他的各國翻譯。例如:</para>
<screen>&prompt.root; <userinput>make ENGLISH_ONLY=YES all install</userinput></screen>
<para>如果你想要取消變數 <varname>ENGLISH_ONLY</varname>
以及建構所有的頁面並包括翻譯,只要將變數 <varname>ENGLISH_ONLY</varname>
的值設定成空白即可。</para>
<para>如果你想要取消變數 <varname>ENGLISH_ONLY</varname>
以及建構所有的頁面並包括翻譯,只要將變數 <varname>ENGLISH_ONLY</varname>
的值設定成空白即可。</para>
<screen>&prompt.root; <userinput>make ENGLISH_ONLY="" all install clean</userinput></screen>
</listitem>
@ -158,10 +158,10 @@
<term><varname>WEB_ONLY</varname></term>
<listitem>
<para>如果有設定這個變數的話,
makefiles 將只會從 www 目錄建構及安裝 HTML 頁面。
所有從 doc 目錄下的文件全部都會被忽略 (Handbook, FAQ, Tutorials)。
例如:</para>
<para>如果有設定這個變數的話,
makefiles 將只會從 www 目錄建構及安裝 HTML 頁面。
所有從 doc 目錄下的文件全部都會被忽略 (Handbook, FAQ, Tutorials)。
例如:</para>
<screen>&prompt.root; <userinput>make WEB_ONLY=YES all install</userinput></screen>
</listitem>
@ -171,21 +171,21 @@
<term><varname>NOPORTSCVS</varname></term>
<listitem>
<para>如果設了這個變數makefiles 就不會從 ports cvs repository
取出檔案。 取而代之會從
<filename>/usr/ports</filename> (或是 <envar>PORTSBASE</envar>
所設定的值) 內複製檔案。</para>
<para>如果設了這個變數makefiles 就不會從 ports cvs repository
取出檔案。 取而代之會從
<filename>/usr/ports</filename> (或是 <envar>PORTSBASE</envar>
所設定的值) 內複製檔案。</para>
</listitem>
</varlistentry>
</variablelist>
<para><envar>CVSROOT</envar> 是環境變數。
你必須直接使用指令或是在 dot files (如: ~/.profile) 中
設定這個環境變數。</para>
<para><envar>CVSROOT</envar> 是環境變數。
你必須直接使用指令或是在 dot files (如: ~/.profile) 中
設定這個環境變數。</para>
<para><varname>WEB_ONLY</varname><varname>ENGLISH_ONLY</varname>
<varname>NOPORTSCVS</varname> 都是 makefile 變數。
你可以在 <filename>/etc/make.conf</filename><filename>Makefile.inc</filename>
中設定這些變數,作法就像是用命令列或使用 dot files 來設定環境變數一般。</para>
<para><varname>WEB_ONLY</varname><varname>ENGLISH_ONLY</varname>
<varname>NOPORTSCVS</varname> 都是 makefile 變數。
你可以在 <filename>/etc/make.conf</filename><filename>Makefile.inc</filename>
中設定這些變數,作法就像是用命令列或使用 dot files 來設定環境變數一般。</para>
</sect1>
</chapter>

@ -0,0 +1,235 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 1998, 1999 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms
(SGML, HTML, PDF, PostScript, RTF and so forth) with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code (SGML DocBook) must retain the above
copyright notice, this list of conditions and the following
disclaimer as the first lines of this file unmodified.
2. Redistributions in compiled form (transformed to other DTDs,
converted to PDF, PostScript, RTF and other formats) must reproduce
the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials
provided with the distribution.
THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
$FreeBSD$
Original revision: 1.32
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="tools">
<title>工具</title>
<para>FDP 使用一堆工具來協助管理 FreeBSD 文件、轉換文件格式等等。
因此,若要進行 FDP 工作的話,必須要學會這些工具才行。</para>
<para>這些工具都可以用 Ports 或 Packages 來安裝,以節省許多安裝的工夫。</para>
<para>您必須安裝這些工具,才能使用接下來各章節會介紹到的例子。 這些工具的用法,會在後續相關章節談到。 </para>
<tip>
<title>建議安裝 <package>textproc/docproj</package></title>
<para>裝了
<package>textproc/docproj</package> 可以更省時省力,它是個
組合型的 port(meta-port),本身並非軟體,只是將一些常用工具組合起來而已。
裝了這個 port 之後,『應該』就會自動下載、安裝本章所會介紹到的工具了。
若要處理中文的話,建議再裝 <package>chinese/docproj</package> 會比較好。</para>
<para>在這些 packages 當中,你可能會需要使用 JadeTeX 這個 macro 設定,
一旦選擇使用該 macro 的話,它會接著去裝 &tex;。由於 &tex; 算是個蠻大的套件,
除非你需要輸出 Postscript 或 PDF 格式,否則就不必裝了。</para>
<para>所以請考慮是否要節省編譯時間、硬碟空間,以判定要不要裝 JadeTeX (以及 &tex;)
了。若要一併裝起來的話:</para>
<screen>&prompt.root; <userinput>make JADETEX=yes install</userinput></screen>
<para>或是,不裝的話:</para>
<screen>&prompt.root; <userinput>make JADETEX=no install</userinput></screen>
<para>或者,也可以選擇 <package>textproc/docproj-jadetex</package> 或是 <package>textproc/docproj-nojadetex</package> 這兩個之一來裝,
它們都是已事先設定 <varname>JADETEX</varname> 變數的 slave ports
都一樣會裝 docproj 差別僅在於有沒有 JadeTeX 而已。
請注意:若只要輸出 HTML 或 ASCII 格式文件,那就不用裝 <application>JadeTeX</application>
而若要輸出 PostScript、PDF 格式,就需要裝 &tex; 才行。</para>
</tip>
<sect1 xml:id="tools-mandatory">
<title>必備工具</title>
<sect2>
<title>軟體</title>
<para>這些都是在進行 FreeeBSD 文件計劃時所會需要用上的工具程式,
而且可以用來轉換文件為 HTML、plain text以及 RTF 格式。這些相關套件在
<package>textproc/docproj</package> 都已經全部收錄了。</para>
<variablelist>
<varlistentry>
<term><application>Jade</application>
(<package>textproc/jade</package>)</term>
<listitem>
<para>DSSSL 規格的實作程式,可用來把標記語言的文件(marked up)轉換為其他格式像是HTML 及 &tex;</para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>Tidy</application>
(<package>www/tidy</package>)</term>
<listitem>
<para>HTML <quote>pretty printer</quote>,可用來把自動產生的 HTML 內容整理得更易閱讀、以便日後維護。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>Links</application>
(<package>www/links</package>)</term>
<listitem>
<para>文字操作模式的 WWW 瀏覽器(browser)可以把 HTML 檔轉為 plain text 格式。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><application>peps</application>
(<package>graphics/peps</package>)</term>
<listitem>
<para>文件中有些圖是存成 EPS 格式的,這些必須要轉為 PNG 格式,
才能讓一般瀏覽器可以正常觀看。</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>DTD 及 Entity</title>
<para>由於 FDP 有用到許多 DTD 跟 Entity因此在開工前要裝上這些才行。</para>
<variablelist>
<varlistentry>
<term>HTML DTD (<package>textproc/html</package>)</term>
<listitem>
<para>HTML 是用於 WWW 的標記語言,且也是 FreeBSD 網頁所使用的格式。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>DocBook DTD (<package>textproc/docbook</package>)</term>
<listitem>
<para>DocBook 是專門用來製作技術文件的標示語言版本,
FreeBSD 全部文件都是以 DocBook 所寫成的。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>ISO 8879 entities
(<package>textproc/iso8879</package>)</term>
<listitem>
<para>在 ISO 8879:1986 之中有 19 個 entity 被許多 DTD 所大量使用,
包括了數學符號、拉丁字母符號(尖重音等音節符號也是)以及希臘符號。</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>樣式表(Stylesheets)</title>
<para>這些樣式表都是用來轉換、重排文件的螢幕顯示、列印等效果處理</para>
<variablelist>
<varlistentry>
<term>Modular DocBook 樣式表
(<package>textproc/dsssl-docbook-modular</package>)</term>
<listitem>
<para>Modular DocBook 樣式表,是用來把 DocBook 的標記語言文件轉換為其他格式,像是:
HTML 或 RTF。</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
<sect1 xml:id="tools-optional">
<title>輔助工具</title>
<para>不一定得裝下列的工具才行,但是,裝了之後會更容易進行各項工作,
而且可輸出的格式也更具彈性。</para>
<sect2>
<title>軟體</title>
<variablelist>
<varlistentry>
<term><application>JadeTeX</application>
<application>teTeX</application>
(<package>print/jadetex</package>
<package>print/teTeX</package>)</term>
<listitem>
<para><application>Jade</application>
<application>teTeX</application> 可用來把 DocBook 格式文件轉為
DVI, Postscript 及 PDF 格式。安裝時請記得加上
<application>JadeTeX</application> 這個 macro這樣才會順便裝上這兩個套件。</para>
<para>若無意把文件轉換更多格式的話(舉例:只要 HTML, plain text, RTF 這些格式就夠的話)
,那麼就不用裝
<application>JadeTeX</application>
<application>teTeX</application>。 如此一來可省下一些的編譯時間、安裝空間,
因為 <application>teTeX</application> 大約要至少 30MB 空間。</para>
<important>
<para>若決定要裝
<application>JadeTeX</application> 以及
<application>teTeX</application> 的話,那麼在裝完 <application>JadeTeX</application> 之後,
要記得設定 <application>teTeX</application> 才行。
<filename>print/jadetex/pkg-message</filename> 內有詳細介紹相關步驟。</para>
</important>
</listitem>
</varlistentry>
<varlistentry>
<term><application>Emacs</application>
<application>XEmacs</application>
(<package>editors/emacs</package>
<package>editors/xemacs</package>)</term>
<listitem>
<para>這兩者編輯器都具有處理 SGML DTD 標記文件的特殊模式。
該模式提供一些指令,來簡化所需的打字次數,而且可以減少可能發生的錯誤。</para>
<para>不過,這些編輯器並不是必備的;任何文字編輯器都可以用來編輯標記語言文件。
不過,你可以透過類似上述這樣的編輯器,來讓這些繁瑣作業更輕鬆有效率些。</para>
</listitem>
</varlistentry>
</variablelist>
<para>若有推薦其他好用的處理 SGML 文件程式,請來信讓 &a.doceng; 知道,
如此一來,該軟體就會列入這裡介紹了。</para>
</sect2>
</sect1>
</chapter>

@ -0,0 +1,383 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 1999 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms
(SGML HTML, PDF, PostScript, RTF and so forth) with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code (SGML DocBook) must retain the above
copyright notice, this list of conditions and the following
disclaimer as the first lines of this file unmodified.
2. Redistributions in compiled form (transformed to other DTDs,
converted to PDF, PostScript, RTF and other formats) must reproduce
the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials
provided with the distribution.
THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
$FreeBSD$
Original revision: 1.29
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="translations">
<title>翻譯時的常見問題</title>
<para>本章是翻譯 FreeBSD 文件(包含FAQ, Handbook, tutorials, manual pages等)的常見問題(FAQ)。</para>
<para>本文件 <emphasis>主要</emphasis> 是以 FreeBSD 德文翻譯計劃的翻譯 FAQ 為母本而來的,
原始撰稿者為 Frank Gr&uuml;nder <email>elwood@mc5sys.in-berlin.de</email> ,並由
Bernd Warken <email>bwarken@mayn.de</email> 再翻譯回英文版。</para>
<para>The FAQ is maintained by the &a.doceng;.</para>
<qandaset>
<qandaentry>
<question>
<para>FAQ 的目的是?</para>
</question>
<answer>
<para>隨著越來越多人參與 freebsd-doc 郵遞論壇,而且希望將 FreeBSD 文件翻譯為各種語言版本。
我們希望這份 FAQ 能儘可能為這些參與翻譯者提供快速的解惑。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para><phrase>i18n</phrase><phrase>l10n</phrase> 是什麼呢?</para>
</question>
<answer>
<para><phrase>i18n</phrase>
<phrase>internationalization</phrase> 的簡寫,而 <phrase>l10n</phrase>
則是 <phrase>localization</phrase> 的簡寫。這些都是為了書寫方便而用的簡寫。</para>
<para><phrase>i18n</phrase> 就是開頭為 <quote>i</quote> 後面有 18 個字母,最後接 <quote>n</quote>
同理,
<phrase>l10n</phrase> 則是開頭為 <quote>l</quote> 後面有 10 個字母,最後接 <quote>n</quote></para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>有專門給譯者參與討論的 mailing list 嗎?</para>
</question>
<answer>
<para>有啊,不同的語系翻譯者都各自有自屬的 mailing lists。這份 <link xlink:href="http://www.freebsd.org/docproj/translations.html">翻譯計劃清單</link>
有列出各翻譯計劃的詳細 mailing lists 及相關網站。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>需要更多人一起參與翻譯嗎?</para>
</question>
<answer>
<para>當然囉,越多人參與翻譯,那麼就能夠越快翻完,而且英文版文件若有增減、更新的話,
各翻譯版也可以儘快同步囉。</para>
<para>不一定得是專業譯者,才能參與翻譯的。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>有要求哪些語言能力呢?</para>
</question>
<answer>
<para>理論上,必須要對英文非常熟稔,而且很明顯地,對想翻譯的語言必須要能運用自如。</para>
<para>英文並非一定要會的。比如說,可以把西班牙文(Spanish)的 FAQ 翻譯為匈牙利文(Hungarian)。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>該學會哪些程式的使用呢?</para>
</question>
<answer>
<para>強烈建議在自己機器上也建立 FreeBSD CVS repository 的備份(至少文件部分),可以用
<application>CTM</application>
<application>CVSup</application> 都可以。Handbook 中的 "更新、升級 FreeBSD"
一章內有提到如何使用這些程式。</para>
<para>此外,需要熟悉 <application>CVS</application> 用法。
如此一來,你可以查閱不同版本之間的差異處。</para>
<para>[XXX To Do(尚未撰稿,仍待補充) -- 寫份上手說明(tutorial)來介紹如何以 CVSup
取得文件部分,以及察看不同版本之間的差異。]</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>要怎麼找出來還有誰要跟我一起翻譯的呢?</para>
</question>
<answer>
<para><link xlink:href="http://www.FreeBSD.org/docproj/translations.html">文件計劃的翻譯</link> 這列了目前已知的各翻譯者成果
,如果已經有其他人也在做跟你一樣的翻譯工作,那麼請不要重複浪費人力,
請與他們聯繫看看還有哪些地方可以幫上忙的。</para>
<para>若上面並未列出你母語的翻譯,或是也有人要翻譯但還未公開宣布的話,那麼就寄信到 &a.doc; 吧。
</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>都沒人翻譯為我所使用的語言,該怎麼辦?</para>
</question>
<answer>
<para>恭喜啊,你剛好踏上 <quote>FreeBSD
<replaceable>你的母語</replaceable> 文件翻譯計劃</quote> 的啟程之路,歡迎上船。</para>
<para>首先呢,先判斷是否有妥善規劃時間,因為你只有一個人在翻而已,
因此,相關翻譯成果的公布、與其他可能會幫忙的志工們聯繫這些工作都是你的職責所在。</para>
<para>寫信到 &a.doc; 向大家宣布你正準備要翻譯,然後文件計劃的翻譯部分就會更新相關資料</para>
<para>若你的國家已經有人提供 FreeBSD 的 mirror(映設) 服務的話,那麼就先跟他們聯繫,
並詢問你是否在上面可以有網頁空間來放相關計劃資料,
以及是否可以有提供 email 帳號或 mailing list 服務。</para>
<para>然後,就開始翻文件囉,一開始翻譯的時候,先找些篇幅較短的文件會比較容易些
&mdash; 像是 FAQ 啦,或是如何上手之類的說明文章。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>已經翻好一些文件了,該寄到哪呢?</para>
</question>
<answer>
<para>這要看情況而定。 若你是在翻譯團隊內做的話(像是日本、德國)
他們會有自己內部流程來決定翻譯文件怎麼送,這些大致流程會在他們網頁上面有寫。</para>
<para>若你是某語系的唯一翻譯者(或你是負責某翻譯計劃,並想把成果回饋給 FreeBSD 計劃)
,那麼你就應該把自己的翻譯成果寄給 FreeBSD 計劃。(細節請看下個問題)</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>我是該語系的唯一翻譯者,該怎麼把翻譯成果寄出去呢?</para>
<para>或者</para>
<para>我們是翻譯團隊,該怎麼把我們成員翻譯成果寄出去呢?</para>
</question>
<answer>
<para>首先,請先確定你的翻譯成果組織條理分明,並可正確編譯,也就是說:
把它擺到現有文件架構內是可以正確編譯成功的。</para>
<para>目前FreeBSD 文件都是放在最上層的 <filename>doc/</filename> 目錄內。
而該目錄下的則依其語系來做分類命名的,依照 ISO639 定義(<filename>/usr/share/misc/iso639</filename>
的這個 FreeBSD 版本比 1999/01/20 還新)。</para>
<para>若你這個語系可能會有不同編碼方式(像是:中文)
那麼就應該會像下面這樣,來依你所使用的編碼方式細分。</para>
<para>最後,你應該建立好各文件的目錄了。</para>
<para>舉例來說,假設有瑞典文(Swedish)版的翻譯,那麼應該會長像:</para>
<programlisting>doc/
sv_SE.ISO8859-1/
Makefile
books/
faq/
Makefile
book.xml</programlisting>
<para><literal>sv_SE.ISO8859-1</literal> 是依照
<filename>語系(lang).編碼(encoding)</filename>
的規則來建立的譯名。
請注意:其中有兩個 <filename>Makefiles</filename> 檔,它們是用來編書的。</para>
<para>然後請用 &man.tar.1;&man.gzip.1; 來把你的翻譯文件壓縮起來,並寄到本計劃來。</para>
<screen>&prompt.user; <userinput>cd doc</userinput>
&prompt.user; <userinput>tar cf swedish-docs.tar sv_SE.ISO8859-1</userinput>
&prompt.user; <userinput>gzip -9 swedish-docs.tar</userinput></screen>
<para>接著,把 <filename>swedish-docs.tar.gz</filename> 放到網頁空間上,若你沒有自己網頁空間的話(ISP不提供)
,那麼可以該檔寄到 &a.doceng; 來。</para>
<para>還有,記得用 &man.send-pr.1; 以正式通知大家;你已經寄出翻譯文件了,
還有,若有人可以幫忙檢閱、複審文件的話,對翻譯品質較好,
因為這也有助於提升翻譯品質的流暢度。</para>
<para>最後,會有人(可能是文件計劃總管,或是 &a.doceng; 成員)
會檢閱你的翻譯文件,並確認是否可正常編譯。此外,他們會特別注意下列幾點:</para>
<orderedlist>
<listitem>
<para>你的檔案是否都有用 RCS tag (像是 "ID" 之類的)</para>
</listitem>
<listitem>
<para><filename>sv_SE.ISO8859-1</filename> 是否可以順利 <command>make all</command> 編譯呢?</para>
</listitem>
<listitem>
<para><command>make install</command> 是否結果有正確?</para>
</listitem>
</orderedlist>
<para>若有問題的話,那麼檢閱者會叮嚀你,來讓這些翻譯成果可以正確使用。</para>
<para>若沒問題的話,那麼就會很快把你的翻譯成果 commit 進去了。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>可以加入某語系或某國家才有的東西到翻譯內容內嗎?</para>
</question>
<answer>
<para>我們希望不要這麼做。</para>
<para>舉例來說,假設你正準備把 Handbook 翻譯為韓文版,
並希望把韓國零售處也加到你翻譯的 Handbook 韓文版內。</para>
<para>我們想不出來有啥原因,為什麼不把這些資訊提供給英文版呢?(或是德文、西班牙文、日文等 &hellip;)
因為,有可能英語讀者跑去韓國時,會想買 FreeBSD 相關產品。
此外,這也可以提升 FreeBSD 的可見度,很顯然的,這並不是件壞事啊。</para>
<para>若你有某國才有的資料,請(用 &man.send-pr.1; )提供給英文版 Handbook 以作為修訂
,然後再把英文版的修訂部分,翻為你要翻譯的 Handbook 吧。</para>
<para>感恩,謝謝。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>要怎麼把該語系特有的字元寫進去翻譯內容呢?</para>
</question>
<answer>
<para>文件內所有的非 ASCII(Non-ASCII) 字元,都要使用 SGML entities 才能寫進去。</para>
<para>簡單來說,長相一開頭會是 &amp; 符號(&amp;),然後是該 entity 名稱,最後接上分號(;)。</para>
<para>這些 entity 名稱都是 ISO8879 所制訂的,而 port tree 內則在
<package>textproc/iso8879</package></para>
<para>以下舉一些例子:</para>
<segmentedlist>
<segtitle>Entity名稱</segtitle>
<segtitle>實際樣子</segtitle>
<segtitle>介紹</segtitle>
<seglistitem>
<seg>&amp;eacute;</seg>
<seg>&eacute;</seg>
<seg><quote>e</quote>,並帶尖、重音(acute accent)</seg>
</seglistitem>
<seglistitem>
<seg>&amp;Eacute;</seg>
<seg>&Eacute;</seg>
<seg><quote>E</quote>,並帶尖、重音(acute accent)</seg>
</seglistitem>
<seglistitem>
<seg>&amp;uuml;</seg>
<seg>&uuml;</seg>
<seg><quote>u</quote>,並帶日耳曼語系中的母音變化(umlaut)</seg>
</seglistitem>
</segmentedlist>
<para>在裝了 iso8879 這個 port 之後,就可以在
<filename>/usr/local/share/xml/iso8879</filename> 找到這些的詳細列表。</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>如何稱呼讀者呢?</para>
</question>
<answer>
<para>在英文文件內,讀者都是以 <quote>you</quote> 來稱呼,而有些語言並沒有正式/非正式的區隔。</para>
<para>若你所要翻的語言可以區別這些差異,那麼請用該語系在一般技術文件上所使用的稱呼吧。
如果容易造成困惑的話,那麼請改用較中性的稱呼來取代。</para>
<!--
摘自 http://fatpipi.cirx.org/~vanilla/rules.txt
如非必要,翻譯文章內盡量少用直接稱呼你我他的用字。
如果真的得用,就採用第三人稱(用【他】而非【你】),還有就是用複數(用【你們】而非【你】)
當然這還是得配合原文的上下語意。如果他是寫 "I" 而翻譯成 "我",則無可厚非。
但是對於文內絕大多數的"You..... you ...etc"
其實都可以把【你】簡化或是避免掉,這對閱讀時候的順暢感應該有幫助。
-->
</answer>
</qandaentry>
<qandaentry>
<question>
<para>翻譯成果內要不要附上一些其他訊息呢?</para>
</question>
<answer>
<para>當然要。</para>
<para>每份英文版原稿的開頭,通常會有像下面的內容:</para>
<programlisting>&lt;!--
The FreeBSD Documentation Project
&dollar;FreeBSD: doc/en_US.ISO8859-1/books/fdp-primer/translations/chapter.xml,v 1.5 2000/07/07 18:38:38 dannyboy Exp &dollar;
--&gt;</programlisting>
<para>實際上的內容可能稍有不同,但每份原稿都會附上 &dollar;FreeBSD&dollar; 這一行以及
<literal>The FreeBSD Documentation Project</literal> 宣告。
請注意:&dollar;FreeBSD 開頭的這行是會由 CVS 隨著每次異動而自動更改的,
所以,新檔案的話請保持原狀(也就是只要寫 <literal>&dollar;FreeBSD&dollar;</literal> 就好了)。</para>
<para>翻譯文件中,必須都要有 &dollar;FreeBSD&dollar; 這行,並且把
<literal>FreeBSD Documentation Project</literal> 這行改為
<literal>The FreeBSD 你的語系
Documentation Project</literal></para>
<para>此外,還必須加上第三行來指出你所翻譯的,到底是以英文版原稿的哪一版本為母本所做的翻譯。</para>
<para>因此呢,西班牙文版(Spanish)的檔案開頭應該是長像這樣:</para>
<programlisting>&lt;!--
The FreeBSD Spanish Documentation Project
&dollar;FreeBSD: doc/es_ES.ISO8859-1/books/fdp-primer/translations/chapter.xml,v 1.3 1999/06/24 19:12:32 jesusr Exp &dollar;
Original revision: 1.11
--&gt;</programlisting>
</answer>
</qandaentry>
</qandaset>
</chapter>

@ -0,0 +1,440 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 1998 Nik Clayton, All rights reserved.
Redistribution and use in source (SGML DocBook) and 'compiled' forms
(SGML HTML, PDF, PostScript, RTF and so forth) with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code (SGML DocBook) must retain the above
copyright notice, this list of conditions and the following
disclaimer as the first lines of this file unmodified.
2. Redistributions in compiled form (transformed to other DTDs,
converted to PDF, PostScript, RTF and other formats) must reproduce
the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials
provided with the distribution.
THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
$FreeBSD$
Original revision: 1.48
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="writing-style">
<title>文件的撰寫風格</title>
<para>由於 FreeBSD 文件是由眾多作者所維護的,為了保持寫作風格的一貫性,
於是就產生較有共識的寫作規則,請各位記得要遵守。</para>
<variablelist>
<varlistentry>
<term>使用美式英語</term>
<listitem>
<para>同一個字在不同種類的英語會有著不同的拼法。
遇到拼字不同的情況,請採用美式英語拼法。 像是:
請改用 <quote>color</quote>,而非 <quote>colour</quote>
請改用 <quote>rationalize</quote>,而非 <quote>rationalise</quote>
等等類似字彙。</para>
<note>
<para>若文章採用英式英語也可以接受,但必須全篇文章都採用同一拼法才行
。 而文件的其他部份,像是書、網頁、 manual
說明等則必須採用美式英語。</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term>不要用簡寫</term>
<listitem>
<para>請不要簡寫(contraction)。 請務必將完整的字寫出來。 比如:
<quote>Don't use contractions</quote> 這句有用到簡寫,就要避免。</para>
<para>正式書面寫法避免簡寫的原因,乃是因為如此一來字句意思較精準,
且對譯者會比較輕鬆些。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>正確使用 serial comma 以及頓號</term>
<listitem>
<para>英文段落通常會逗號(,)作為該句所提到的各項目的語氣區隔。
並且會在最後一個提到的項目時,先加上逗號再接上 <quote>and</quote>
最後才是最後的項目。</para>
<para>舉個例子,看看下面這句:</para>
<blockquote>
<para>This is a list of one, two and three items.</para>
</blockquote>
<para>那麼這一句到底是有三個項目(<quote>one</quote><quote>two</quote>
<quote>three</quote>)呢?或者是只有兩個項目(<quote>one</quote>
<quote>two and three</quote>)呢?</para>
<para>因此較妥的方式是以 serial comma 的方式,才能正確表達語意:</para>
<blockquote>
<para>This is a list of one, two, and three items.</para>
</blockquote>
<para>然而,在翻譯過程中,建議把逗號(,)部份改為頓號(、),並且
<quote>and</quote> 的部份可略而不翻,以免語意頓塞。</para>
</listitem>
</varlistentry>
<varlistentry>
<term>避免使用贅詞</term>
<listitem>
<para>請試著避免使用贅詞(redundant phrase)。 尤其是
<quote>這個指令</quote><quote>這個檔案</quote><quote>man
指令</quote> 這幾個通常都是不必要的贅詞。</para>
<para>以指令(command)方面舉例,比較妥當的用法是第二句的例子:</para>
<informalexample>
<para>使用 <command>cvsup</command> 指令來更新原始碼。</para>
</informalexample>
<informalexample>
<para>使用 <command>cvsup</command> 來更新原始碼。</para>
</informalexample>
<para>以檔案(filename)方面舉例,比較妥當的用法是第二句的例子:</para>
<informalexample>
<para>&hellip; 在這個
<filename>/etc/rc.local</filename> 檔案 &hellip;</para>
</informalexample>
<informalexample>
<para>&hellip;
<filename>/etc/rc.local</filename>&hellip;</para>
</informalexample>
<para>以 man(manual)方面舉例,比較妥當的用法是第二句(有用到 SGML
<tag>citerefentry</tag> 標籤)</para>
<informalexample>
<para>請打 <command>man csh</command> 指令以參閱詳情說明。</para>
</informalexample>
<informalexample>
<para>詳情請參閱 &man.csh.1;</para>
</informalexample>
</listitem>
</varlistentry>
<varlistentry>
<term>每句後面加上兩個空白</term>
<listitem>
<para>為了使文章更易閱讀,以及讓 <application>Emacs</application>
之類的工具容易運用,請在每一完整句子後面加上兩個空白。</para>
<para>不過,句號(.)後面有接大寫字母,
並不一定表示前一個句點所在處就是完整句子,
尤其是名字部份常常會有這現象。 像是 <quote>Jordan K. Hubbard</quote>
這人名就是很好的例證:句號後面接空白,然後是大寫的
<literal>H</literal>,然而這肯定並不是兩段句子。</para>
</listitem>
</varlistentry>
</variablelist>
<para>撰寫風格的相關細節,可參閱 William Strunk 所寫的 <link xlink:href="http://www.bartleby.com/141/">Elements of Style</link></para>
<sect1 xml:id="writing-style-guide">
<title>Style guide</title>
<para>由於 Handbook 是由眾多作者所維護,為了保持寫作風格的一貫性,
請遵守下列撰寫風格。</para>
<sect2>
<title>大小寫</title>
<para>Tag 的部份都是用小寫字母,譬如是用 <literal>&lt;para&gt;</literal>
<emphasis>而非</emphasis> <literal>&lt;PARA&gt;</literal></para>
<para>而 SGML 內文則是用大寫字母表示,像是:
<literal>&lt;!ENTITY&hellip;&gt;</literal>
<literal>&lt;!DOCTYPE&hellip;&gt;</literal>
<emphasis>而不是</emphasis>
<literal>&lt;!entity&hellip;&gt;</literal>
<literal>&lt;!doctype&hellip;&gt;</literal></para>
</sect2>
<sect2>
<title>縮寫字</title>
<para>縮寫字(acronym)通常在書中第一次提到時,必須同時列出完整拼法,
比如:"Network Time Protocol (<acronym role="Network Time Protocol">NTP</acronym>)"。
定義縮寫字之後,應該儘量只使用該縮寫字(而非完整詞彙,
除非使用完整詞彙可以更能表達語意)來表達即可。
通常每本書只會第一次提到時,才會列出完整詞彙,
但若您高興也可以在每章第一次提到時又列出完整詞彙。</para>
<para>此外,同一縮寫字在前三次使用時,須使用 &lt;acronym&gt; 標籤,
並把完整詞彙附在 <literal>role</literal> 屬性內做說明。
如此一來就會建立詞彙表,並且當滑鼠移至該縮寫字上方時,
就會顯示完整詞彙。</para>
</sect2>
<sect2>
<title>縮排</title>
<para><emphasis>無論</emphasis> 檔案縮排設定為何,
每個檔案一開始的縮排(indentation)都是從 0 縱列開始</para>
<para>未完的標籤會以多兩個空白來增加縮排,
結尾的標籤則少兩個空白來縮減縮排。 若已達 8 個空白,則以 tab 取代之。
此外,在 tab 前面不要再用空白,也不要在每行後面加上空白。
每個 tag 的內文若超過一行的話,則接下來的就多兩個空白以做縮排。</para>
<para>舉個例子,這節所用的寫法大致是下面這樣:</para>
<programlisting><![CDATA[+--- 這是 0 縱列
V
<chapter>
<title>...</title>
<sect1>
<title>...</title>
<sect2>
<title>縮排</title>
<para><emphasis>無論</emphasis> 檔案縮排設定為何,
每個檔案一開始的縮排(indentation)都是從 0 縱列開始。</para>
...
</sect2>
</sect1>
</chapter>]]></programlisting>
<para>若用 <application>Emacs</application>
<application>XEmacs</application> 來編輯這檔,那麼會自動進入
<literal>sgml-mode</literal> 模式,
然後就會強制使用每個檔案最下方的環境設定。</para>
<para><application>Vim</application> 愛用者也可以用下列設定來調整:</para>
<programlisting>augroup sgmledit
autocmd FileType sgml set formatoptions=cq2l " 特殊格式選項
autocmd FileType sgml set textwidth=70 " 在 70 縱列處即自動換行
autocmd FileType sgml set shiftwidth=2 " 自動縮排 2 個空白
autocmd FileType sgml set softtabstop=2 " 按 Tab 會自動轉為兩個空白縮排
autocmd FileType sgml set tabstop=8 " 把 8 個空白轉為 tab
autocmd FileType sgml set autoindent " 自動縮排
augroup END</programlisting>
</sect2>
<sect2>
<title>Tag 風格</title>
<sect3>
<title>Tag 空行</title>
<para>同一縮排等級的標籤要以空一行來做區隔,而不同縮排等級的則不必。
比如:</para>
<informalexample>
<programlisting><![CDATA[<article lang='zh_tw'>
<articleinfo>
<title>NIS</title>
<pubdate>October 1999</pubdate>
<abstract>
<para>...
...
...</para>
</abstract>
</articleinfo>
<sect1>
<title>...</title>
<para>...</para>
</sect1>
<sect1>
<title>...</title>
<para>...</para>
</sect1>
</article>]]></programlisting>
</informalexample>
</sect3>
<sect3>
<title>標籤的分行</title>
<para>像是 <tag>itemizedlist</tag>
這類的標籤事實上本身不含任何文字資料,必須得由其他標籤來補充內文。
這類的標籤會獨用一整行。</para>
<para>另外,像是 <tag>para</tag>
<tag>term</tag> 這類的標籤並不需搭配其他標籤,
就可附上文字資料,並且在標籤後面的<emphasis>同一行</emphasis>
內即可立即寫上這些內文。</para>
<para>當然,這兩類的標籤結尾時也是跟上面道理相同。</para>
<para>不過,當上述這兩種標籤混用時,會有很明顯的困擾。</para>
<para>當第一類標籤的後面接上第二類標籤的話,
那麼要把這兩類標籤各自分行來寫。 後者標籤的段落,
也是需要做適當縮排調整。</para>
<para>而第二類標籤結尾時,可以與第一類標籤的結尾放在同一行。</para>
</sect3>
</sect2>
<sect2>
<title>空白的更改</title>
<para>在 commit 修改時,<emphasis>請別在修改內容的同時,
也一起更改編排格式</emphasis></para>
<para>如此一來,像是 Handbook 翻譯團隊才能迅速找出你改了哪些內容,
而不用費心思去判斷該行的改變,是由於格式重排或者內容異動。</para>
<para>舉例說明,若要在某段加上兩個句子,如此一來該段落的某行勢必會超出 80
縱列,這時請先 commmit 修改。 接著,再修飾過長行落的換行,然後再次
commit 之。 而第二次的 commit 紀錄,請明確說明這只是 whitespace-only
(修改空白而已) 的更改,如此一來,翻譯團隊就可以忽略第二次 commit 了
</para>
</sect2>
<sect2>
<title>Nonbreaking space</title>
<para>請避免一些情況下的斷行:造成版面醜醜的、或是須連貫表達的同一句子。
斷行的情況會隨所閱讀的工具不同而有所不同。 尤其是透過純文字瀏覽器來看
HTML 時會更明顯看到類似下面這樣不好的編排段落:</para>
<literallayout class="monospaced">Data capacity ranges from 40 MB to 15
GB. Hardware compression &hellip;</literallayout>
<para>請使用 <literal>&amp;nbsp;</literal> 以避免同句子之間的斷行,
以下示範如何使用 nonbreaking spaces</para>
<itemizedlist>
<listitem>
<para>在數字與單位之間:</para>
<programlisting><![CDATA[57600&nbsp;bps]]></programlisting>
</listitem>
<listitem>
<para>在程式名稱與版號之間:</para>
<programlisting><![CDATA[FreeBSD&nbsp;4.7]]></programlisting>
</listitem>
<listitem>
<para>multiword 之間 (使用時請小心,像是 <quote>The FreeBSD Brazilian
Portuguese Documentation Project</quote> 這類由三到四個字所組成的,
則不用加。)</para>
<programlisting><![CDATA[Sun&nbsp;Microsystems]]></programlisting>
</listitem>
</itemizedlist>
</sect2>
</sect1>
<sect1 xml:id="writing-style-word-list">
<title>詞彙表</title>
<para>以下為 FreeBSD 文件計劃編排時所採用的小型詞彙表。
若找不到要找的詞彙,請參閱 <link xlink:href="http://www.oreilly.com/oreilly/author/stylesheet.html">O'Reilly
word list</link></para>
<itemizedlist>
<listitem>
<para>2.2.X</para>
</listitem>
<listitem>
<para>4.X-STABLE</para>
</listitem>
<listitem>
<para>CD-ROM</para>
</listitem>
<listitem>
<para>DoS <emphasis>(Denial of Service)</emphasis> </para>
</listitem>
<listitem>
<para>Ports Collection</para>
</listitem>
<listitem>
<para>IPsec</para>
</listitem>
<listitem>
<para>Internet</para>
</listitem>
<listitem>
<para>MHz</para>
</listitem>
<listitem>
<para>Soft Updates</para>
</listitem>
<listitem>
<para>Unix</para>
</listitem>
<listitem>
<para>disk label</para>
</listitem>
<listitem>
<para>email</para>
</listitem>
<listitem>
<para>file system</para>
</listitem>
<listitem>
<para>manual page</para>
</listitem>
<listitem>
<para>mail server</para>
</listitem>
<listitem>
<para>name server</para>
</listitem>
<listitem>
<para>null-modem</para>
</listitem>
<listitem>
<para>web server</para>
</listitem>
</itemizedlist>
</sect1>
</chapter>

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project
@ -6,72 +6,72 @@
Original revision: 1.402
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="advanced-networking">
<title>網路進階練功房</title>
<title>網路進階練功房</title>
<sect1 xml:id="advanced-networking-synopsis">
<title>概述</title>
<title>概述</title>
<para>本章將介紹一些進階的網路設定主題。</para>
<para>本章將介紹一些進階的網路設定主題。</para>
<para>讀完這章,您將了解:</para>
<para>讀完這章,您將了解:</para>
<itemizedlist>
<listitem>
<para>gateway(閘道)及 route(路由)的概念。</para>
<para>gateway(閘道)及 route(路由)的概念。</para>
</listitem>
<listitem>
<para>如何設定 IEEE 802.11 以及藍芽(&bluetooth;)設備。</para>
<para>如何設定 IEEE 802.11 以及藍芽(&bluetooth;)設備。</para>
</listitem>
<listitem>
<para>如何以 FreeBSD 作為 bridge(橋接)。</para>
<para>如何以 FreeBSD 作為 bridge(橋接)。</para>
</listitem>
<listitem>
<para>如何為無碟系統設定網路開機。</para>
<para>如何為無碟系統設定網路開機。</para>
</listitem>
<listitem>
<para>如何設定 NAT(Network Address Translation)。</para>
<para>如何設定 NAT(Network Address Translation)。</para>
</listitem>
<listitem>
<para>如何透過 PLIP 方式來連接兩台電腦。</para>
<para>如何透過 PLIP 方式來連接兩台電腦。</para>
</listitem>
<listitem>
<para>如何在 FreeBSD 內設定 IPv6。</para>
<para>如何在 FreeBSD 內設定 IPv6。</para>
</listitem>
<listitem>
<para>如何設定 ATM。</para>
<para>如何設定 ATM。</para>
</listitem>
<listitem>
<para>如何去善用 &os; 的 CARP(Common Access Redundancy Protocol)功能
</para>
<para>如何去善用 &os; 的 CARP(Common Access Redundancy Protocol)功能
</para>
</listitem>
</itemizedlist>
<para>在開始閱讀這章之前,您需要︰</para>
<para>在開始閱讀這章之前,您需要︰</para>
<itemizedlist>
<listitem>
<para>瞭解 <filename>/etc/rc</filename> 相關 script 的概念。</para>
<para>瞭解 <filename>/etc/rc</filename> 相關 script 的概念。</para>
</listitem>
<listitem>
<para>熟悉基本常用的網路術語。</para>
<para>熟悉基本常用的網路術語。</para>
</listitem>
<listitem>
<para>知道如何設定、安裝新的 FreeBSD kernel (<xref linkend="kernelconfig"/>)。</para>
<para>知道如何設定、安裝新的 FreeBSD kernel (<xref linkend="kernelconfig"/>)。</para>
</listitem>
<listitem>
<para>知道如何透過 port/package 安裝軟體 (<xref linkend="ports"/>)
</para>
<para>知道如何透過 port/package 安裝軟體 (<xref linkend="ports"/>)
</para>
</listitem>
</itemizedlist>
@ -88,25 +88,25 @@
<indexterm><primary>routing</primary></indexterm>
<indexterm><primary>gateway</primary></indexterm>
<indexterm><primary>subnet</primary></indexterm>
<para>為了讓一部電腦能找到另一部電腦,因此必需要有一種機制,
讓這部電腦知道該怎麼做,這個機制就是路由選擇
(<firstterm>routing</firstterm>)。
一條路由(<quote>route</quote>)是由一對位址所定義的:一個是
<quote>目的地(destination)</quote>以及另一個則是閘道
(<quote>gateway</quote>)。
這對位址表示要送到<emphasis>目的地</emphasis>的封包,
必須經過<emphasis>閘道</emphasis>
目的地分為三種類型:主機、子網路(subnet)、預設路由(
<quote>default route</quote>。 若都沒有其它的路由可以使用,
這時就會使用預設路由,稍後我們會對預設路由作進一步的說明。 此外,
閘道也可分為三種類型:主機、傳輸介面(interface也稱為
<quote>links</quote>)、乙太網路硬體位址(MAC addresses)。</para>
<para>為了讓一部電腦能找到另一部電腦,因此必需要有一種機制,
讓這部電腦知道該怎麼做,這個機制就是路由選擇
(<firstterm>routing</firstterm>)。
一條路由(<quote>route</quote>)是由一對位址所定義的:一個是
<quote>目的地(destination)</quote>以及另一個則是閘道
(<quote>gateway</quote>)。
這對位址表示要送到<emphasis>目的地</emphasis>的封包,
必須經過<emphasis>閘道</emphasis>
目的地分為三種類型:主機、子網路(subnet)、預設路由(
<quote>default route</quote>。 若都沒有其它的路由可以使用,
這時就會使用預設路由,稍後我們會對預設路由作進一步的說明。 此外,
閘道也可分為三種類型:主機、傳輸介面(interface也稱為
<quote>links</quote>)、乙太網路硬體位址(MAC addresses)。</para>
<sect2>
<title>範例</title>
<title>範例</title>
<para>為了方便說明不同類型的路由選擇(routing),以下使用
<command>netstat</command> 指令的結果作為介紹範例:</para>
<para>為了方便說明不同類型的路由選擇(routing),以下使用
<command>netstat</command> 指令的結果作為介紹範例:</para>
<screen>&prompt.user; <userinput>netstat -r</userinput>
Routing tables

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="big5"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project
$FreeBSD$

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save