Convert zh_TW from Big5 to UTF-8.
Approved by: bcr
This commit is contained in:
parent
536050cea8
commit
163ba6b752
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=44974
215 changed files with 31533 additions and 31532 deletions
Makefile
en_US.ISO8859-1
zh_TW.Big5
articles
books
htdocs
share/xml
zh_TW.UTF-8
MakefileMakefile.inc
articles
MakefileMakefile.inc
contributing
cvs-freebsd
freebsd-questions
hubs
mailing-list-faq
nanobsd
pr-guidelines
problem-reports
remote-install
books
MakefileMakefile.inc
developers-handbook
faq
fdp-primer
Makefilebook.xmlchapters.ent
doc-build
examples
overview
psgml-mode
see-also
sgml-markup
sgml-primer
structure
stylesheets
the-website
tools
translations
writing-style
handbook
2
Makefile
2
Makefile
|
@ -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>,
|
||||
這台每天會有一個新版本 — 如果您有空,
|
||||
您可以三不五時下載並安裝,
|
||||
其間如果出了什麼問題,請告訴我們。</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 & POSIX 標準相容計劃</link> 網站上,可以得到相關鏈接。
|
||||
請將 FreeBSD 的行為與上述的標準進行比較,若所得結果與 C99 & 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 已經分配給了其它人,但看起來是您能夠處理的,
|
||||
您可以寄信給那個人,並詢問您是否可以提供幫助 —
|
||||
他們可能已經有可供測試的 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.
|
||||
|
||||
$Id$</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>若上述內容對你沒有意義是不重要的—因為最後的結果都是一樣的。
|
||||
首先匯出你的 <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> 用來定義在提交前所要執行的程式—在
|
||||
此例中是 <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 版本的設定中,所有在修正版控制下的檔案需有一個修正版標頭
|
||||
,(像是 $FreeBSD$)。在此檔案中所有符合一行一個的檔
|
||||
案名稱將不會被檢查。你可以在此檔案中為不需要修正版標頭的檔案新增一
|
||||
個正規運算式。為了安裝這些命令稿,最好的方法是排除
|
||||
<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>µsoft; Exchange</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>µsoft; Internet Mail</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>µsoft; &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 > /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>> </literal></quote> 以作記號。
|
||||
請記得保留 <quote><literal>> </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 —
|
||||
所有的應用程序都可以在 <application>NanoBSD</application> 中直接使用,
|
||||
而方式與 &os; 完全一樣。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>功能絲毫未損 — 在 &os; 做的任何工作,都可以在
|
||||
<application>NanoBSD</application> 中使用,
|
||||
除非您在建立 <application>NanoBSD</application> 映像檔時,
|
||||
有指定要拿掉它們。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>所有東西在運行時都是唯讀的 — 可以安全地拔掉電源插頭。
|
||||
系統不正常關機的話,不用再跑 &man.fsck.8; 了。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>可輕鬆編譯、自行打造 — 只需使用一個 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> — 本次打造的名稱(所建立工作目錄的名稱)。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>NANO_SRC</literal> — 用以編譯、打造映像檔的 source tree 的位置。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>NANO_KERNEL</literal> — 設定用來編譯的 kernel 設定檔檔名。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>CONF_BUILD</literal> — 用於
|
||||
<literal>buildworld</literal> 打造階段的選項。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>CONF_INSTALL</literal> — 用於
|
||||
<literal>installworld</literal> 打造階段的選項。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>CONF_WORLD</literal> — 用於
|
||||
<literal>buildworld</literal> 和
|
||||
<literal>installworld</literal> 這兩個打造階段的選項。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>FlashDevice</literal> — 定義所用的嵌入式硬體類型。
|
||||
詳情請參考 <filename>FlashDevice.sub</filename> 檔。</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect3>
|
||||
|
||||
<sect3>
|
||||
<title>自訂功能</title>
|
||||
|
||||
<para>透過在設定檔案中使用 shell 函數,可以進一步微調
|
||||
<application>NanoBSD</application>。 舉例說明一下自行打造函數的基本方式:</para>
|
||||
|
||||
<programlisting>cust_foo()(
|
||||
echo "bar=topless" > \
|
||||
${NANO_WORLDDIR}/etc/foo
|
||||
)
|
||||
customize_cmd cust_foo</programlisting>
|
||||
|
||||
<para>下面舉更實際點的例子,它會把預設的
|
||||
<filename>/etc</filename> 目錄大小,從 5MB 調整為 30MB:</para>
|
||||
|
||||
<programlisting>cust_etc_size()(
|
||||
cd ${NANO_WORLDDIR}/conf
|
||||
echo 30000 > default/etc/md_size
|
||||
)
|
||||
customize_cmd cust_etc_size</programlisting>
|
||||
|
||||
<para>除此之外,還有幾個預設的功能定義可以用來自訂:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><literal>cust_comconsole</literal> — 在預設 VGA 顯示卡上停用 &man.getty.8;
|
||||
(<filename>/dev/ttyv*</filename>)並啟用 serial port 的 COM1 以作為系統 console。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>cust_allow_ssh_root</literal> — 允許 &man.sshd.8;
|
||||
可以用 <systemitem class="username">root</systemitem> 帳號登入。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>cust_install_files</literal> —
|
||||
從 <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 ${NANO_WORLDDIR}/boot/loader.conf
|
||||
echo "beastie_disable=\"YES\"" >> ${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 < _.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 > /tmp/bsdlabel.txt && 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"' >> /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ü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>然後,就開始翻文件囉,一開始翻譯的時候,先找些篇幅較短的文件會比較容易些
|
||||
— 像是 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>我們想不出來有啥原因,為什麼不把這些資訊提供給英文版呢?(或是德文、西班牙文、日文等 …)
|
||||
因為,有可能英語讀者跑去韓國時,會想買 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>簡單來說,長相一開頭會是 & 符號(&),然後是該 entity 名稱,最後接上分號(;)。</para>
|
||||
|
||||
<para>這些 entity 名稱都是 ISO8879 所制訂的,而 port tree 內則在
|
||||
<package>textproc/iso8879</package>。</para>
|
||||
|
||||
<para>以下舉一些例子:</para>
|
||||
|
||||
<segmentedlist>
|
||||
<segtitle>Entity名稱</segtitle>
|
||||
|
||||
<segtitle>實際樣子</segtitle>
|
||||
|
||||
<segtitle>介紹</segtitle>
|
||||
|
||||
<seglistitem>
|
||||
<seg>&eacute;</seg>
|
||||
<seg>é</seg>
|
||||
<seg>小 <quote>e</quote>,並帶尖、重音(acute accent)</seg>
|
||||
</seglistitem>
|
||||
|
||||
<seglistitem>
|
||||
<seg>&Eacute;</seg>
|
||||
<seg>É</seg>
|
||||
<seg>大 <quote>E</quote>,並帶尖、重音(acute accent)</seg>
|
||||
</seglistitem>
|
||||
|
||||
<seglistitem>
|
||||
<seg>&uuml;</seg>
|
||||
<seg>ü</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><!--
|
||||
The FreeBSD Documentation Project
|
||||
|
||||
$FreeBSD: doc/en_US.ISO8859-1/books/fdp-primer/translations/chapter.xml,v 1.5 2000/07/07 18:38:38 dannyboy Exp $
|
||||
--></programlisting>
|
||||
|
||||
<para>實際上的內容可能稍有不同,但每份原稿都會附上 $FreeBSD$ 這一行以及
|
||||
<literal>The FreeBSD Documentation Project</literal> 宣告。
|
||||
請注意:$FreeBSD 開頭的這行是會由 CVS 隨著每次異動而自動更改的,
|
||||
所以,新檔案的話請保持原狀(也就是只要寫 <literal>$FreeBSD$</literal> 就好了)。</para>
|
||||
|
||||
<para>翻譯文件中,必須都要有 $FreeBSD$ 這行,並且把
|
||||
<literal>FreeBSD Documentation Project</literal> 這行改為
|
||||
<literal>The FreeBSD 你的語系
|
||||
Documentation Project</literal>。</para>
|
||||
|
||||
<para>此外,還必須加上第三行來指出你所翻譯的,到底是以英文版原稿的哪一版本為母本所做的翻譯。</para>
|
||||
|
||||
<para>因此呢,西班牙文版(Spanish)的檔案開頭應該是長像這樣:</para>
|
||||
|
||||
<programlisting><!--
|
||||
The FreeBSD Spanish Documentation Project
|
||||
|
||||
$FreeBSD: doc/es_ES.ISO8859-1/books/fdp-primer/translations/chapter.xml,v 1.3 1999/06/24 19:12:32 jesusr Exp $
|
||||
Original revision: 1.11
|
||||
--></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>… 在這個
|
||||
<filename>/etc/rc.local</filename> 檔案 …</para>
|
||||
</informalexample>
|
||||
|
||||
<informalexample>
|
||||
<para>… 在
|
||||
<filename>/etc/rc.local</filename> 檔 …</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><para></literal>
|
||||
,<emphasis>而非</emphasis> <literal><PARA></literal>。</para>
|
||||
|
||||
<para>而 SGML 內文則是用大寫字母表示,像是:
|
||||
<literal><!ENTITY…></literal> 及
|
||||
<literal><!DOCTYPE…></literal>,
|
||||
<emphasis>而不是</emphasis>
|
||||
<literal><!entity…></literal> 及
|
||||
<literal><!doctype…></literal>。</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>縮寫字</title>
|
||||
|
||||
<para>縮寫字(acronym)通常在書中第一次提到時,必須同時列出完整拼法,
|
||||
比如:"Network Time Protocol (<acronym role="Network Time Protocol">NTP</acronym>)"。
|
||||
定義縮寫字之後,應該儘量只使用該縮寫字(而非完整詞彙,
|
||||
除非使用完整詞彙可以更能表達語意)來表達即可。
|
||||
通常每本書只會第一次提到時,才會列出完整詞彙,
|
||||
但若您高興也可以在每章第一次提到時又列出完整詞彙。</para>
|
||||
|
||||
<para>此外,同一縮寫字在前三次使用時,須使用 <acronym> 標籤,
|
||||
並把完整詞彙附在 <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 …</literallayout>
|
||||
|
||||
<para>請使用 <literal>&nbsp;</literal> 以避免同句子之間的斷行,
|
||||
以下示範如何使用 nonbreaking spaces:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>在數字與單位之間:</para>
|
||||
<programlisting><![CDATA[57600 bps]]></programlisting>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>在程式名稱與版號之間:</para>
|
||||
<programlisting><![CDATA[FreeBSD 4.7]]></programlisting>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>multiword 之間 (使用時請小心,像是 <quote>The FreeBSD Brazilian
|
||||
Portuguese Documentation Project</quote> 這類由三到四個字所組成的,
|
||||
則不用加。):</para>
|
||||
<programlisting><![CDATA[Sun 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>>> /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"' >> /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 && 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" > /boot.config</userinput></screen>
|
||||
|
||||
<screen>&prompt.root; <userinput>echo "1:da(1,a)/boot/loader" > /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"' >> /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></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 Williams,Rod 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; 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&T</primary></indexterm>
|
||||
<para>然而此後不久,另一個意外的風暴在 Novell 和 U.C. Berkeley 關於
|
||||
Berkeley Net/2 磁帶之法律地位的訴訟確定之後形成。
|
||||
U.C. Berkeley 接受大部份的 Net/2 的程式碼都是『侵佔來的』且是屬於 Novell 的財產
|
||||
-- 事實上是當時不久前從 AT&T 取得的。
|
||||
Berkeley 得到的是 Novell 對於 4.4BSD-Lite 的『祝福』,最後當 4.4BSD-Lite
|
||||
終於發行之後,便不再是侵佔行為。
|
||||
而所有現有 Net/2 使用者都被強烈建議更換新版本,這包括了 &os;。
|
||||
於是,我們被要求於 1994 年 6 月底前停止散佈基於 Net/2
|
||||
的產品。在此前提之下,本計劃被允許在期限以前作最後一次發行,也就是
|
||||
&os; 1.1.5.1。</para>
|
||||
|
||||
<para>&os; 便開始了這宛如『重新發明輪子』的艱鉅工作 -- 從全新的且不完整的
|
||||
4.4BSD-Lite 重新整合。
|
||||
這個 <quote>Lite</quote> 版本是不完整的,因為
|
||||
Berkeley 的 CSRG 已經刪除了大量在建立一個可以開機執行的系統所需要的程式碼
|
||||
(基於若干法律上的要求),且該版本在 Intel 平台的移植是非常不完整的。
|
||||
直到 1994 年 11 月本計劃才完成了這個轉移,
|
||||
同時在該年 12 月底以 CD-ROM 以及網路的形式發行了 &os; 2.0。
|
||||
雖然該份版本在當時有點匆促粗糙,但仍是富有意義的成功。
|
||||
隨之於 1995 年 6 月又發行了更容易安裝,更好的 &os; 2.0.5。</para>
|
||||
|
||||
<para>我們在 1996 年 8 月發行了 &os; 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; 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/15,3.2 發行於1999/05/15,3.3 發行於 1999/09/16,
|
||||
3.4 發行於 1999/12/20,3.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> 架構為基礎,仍可以繼續正常運作
|
||||
— 此乃因 <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; Pro,
|
||||
&celeron;,
|
||||
&pentium; II,
|
||||
&pentium; III,
|
||||
&pentium; 4 (或者相容型號),
|
||||
&xeon;, DEC <trademark>Alpha</trademark>
|
||||
和 Sun &ultrasparc; 為基礎的電腦上執行的作業系統。
|
||||
它主要以加州大學巴爾克利分校 的 CSRG 研究小組的軟體為基礎,並加入了
|
||||
NetBSD、OpenBSD、386BSD 以及自由軟體基金會的一些東西。</para>
|
||||
|
||||
<para>自從 1994 年末,我們發佈了 &os; 2.0 之後,系統的執行效率、
|
||||
功能、穩定性都有了令人注目的提升。
|
||||
<!-- XXX is the rest of this paragraph still true ? -->
|
||||
最大的改變就是我們將記憶體與檔案系統的 cache 機制結合在一起。
|
||||
這不只使得系統的表現變得更好, 並且使得 &os;
|
||||
系統最少的記憶體需求減少到 5 MB。
|
||||
其它的改進包括完整的 NIS cilent and server 功能支援,
|
||||
支援 transaction TCP、PPP 撥接連線、整合的 DHCP 支援、
|
||||
SCSI 子系統的改進、ISDN 的支援,ATM、FDDI 以及乙太網路 (Ethernet、包括
|
||||
100 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>
|
||||
的完整說明 — &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; 4.X 開始導入,而在 &os; 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) — 也就是進入 jail 的起點。
|
||||
一旦進入 jail 之後,process 就不再被允許跳到 subtree 以外。
|
||||
&傳統會影響到 &man.chroot.2; 最初設計的安全問題,就不會再影響
|
||||
&os; jail。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>主機名稱(hostname) — 用於 jail 的 hostname。 由於
|
||||
jail 主要用於網路服務,因此若各 jail 皆有名稱,
|
||||
對於系統管理工作的簡化會相當有效。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><acronym>IP</acronym> address — 是用來給 jail 使用,
|
||||
並且在 jail 生命週期內都無法變更。 通常 jail 的 IP address
|
||||
是現有網卡的 alias address,但這並不是必須的。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>指令(Command) — 準備在 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 — 通常包括完整的 &os; 系統;另一種則為
|
||||
<quote>service(服務)</quote> jail —
|
||||
專門只跑某單一可能要用特殊權限的程式或 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; 方式完成 — 即首先先編譯所有檔案,
|
||||
接著再裝到目的地。</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 中儘量以安全的方式來共用資源
|
||||
— 採用唯讀的 &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>>。</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 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® 和 Athlon™)、amd64
|
||||
相容(包括 Opteron™、Athlon™64 和 EM64T)、
|
||||
ARM、IA-64、PC-98以及 UltraSPARC®
|
||||
架構的電腦。其源自於 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® 分區等,
|
||||
如果您有網路連線,您甚至可以 <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@FreeBSDFoundation.org">board@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 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>™) 隨系統提供。
|
||||
另外,<a href="http://www.nvidia.com/">nVidia</a>
|
||||
也提供了用於他們的高性能圖形硬體的 native 驅動程式,
|
||||
並加入了業界標準的 <a href="http://www.opengroup.org/motif/">Motif</a>®
|
||||
和 <a href="http://www.opengl.org/">OpenGL</a>®
|
||||
函數庫支援。 對於 <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 資料庫、視覺化科學研究、視訊會議、
|
||||
網路聊天室(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 © 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> | © 1995-2007 The FreeBSD Project.
|
||||
保留所有權利。</span>'>
|
||||
<!ENTITY author '<a href="&base;/index.html">首頁</a> | <a href="&base;/mailto.html">聯絡</a> | <a href="&base;/copyright/index.html">版權</a> | ©right;'>
|
||||
<!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> 目錄
|
||||
<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
5
zh_TW.UTF-8/articles/Makefile.inc
Normal file
5
zh_TW.UTF-8/articles/Makefile.inc
Normal file
|
@ -0,0 +1,5 @@
|
|||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
|
||||
DESTDIR?= ${DOCDIR}/zh_TW.UTF-8/articles/${.CURDIR:T}
|
465
zh_TW.UTF-8/articles/contributing/article.xml
Normal file
465
zh_TW.UTF-8/articles/contributing/article.xml
Normal file
|
@ -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>,
|
||||
這台每天會有一個新版本 — 如果您有空,
|
||||
您可以三不五時下載並安裝,
|
||||
其間如果出了什麼問題,請告訴我們。</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 & POSIX 標準相容計劃</link> 網站上,可以得到相關鏈接。
|
||||
請將 FreeBSD 的行為與上述的標準進行比較,若所得結果與 C99 & 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 已經分配給了其它人,但看起來是您能夠處理的,
|
||||
您可以寄信給那個人,並詢問您是否可以提供幫助 —
|
||||
他們可能已經有可供測試的 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.
|
||||
|
||||
$Id$</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>
|
570
zh_TW.UTF-8/articles/cvs-freebsd/article.xml
Normal file
570
zh_TW.UTF-8/articles/cvs-freebsd/article.xml
Normal file
|
@ -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>若上述內容對你沒有意義是不重要的—因為最後的結果都是一樣的。
|
||||
首先匯出你的 <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> 用來定義在提交前所要執行的程式—在
|
||||
此例中是 <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 版本的設定中,所有在修正版控制下的檔案需有一個修正版標頭
|
||||
,(像是 $FreeBSD$)。在此檔案中所有符合一行一個的檔
|
||||
案名稱將不會被檢查。你可以在此檔案中為不需要修正版標頭的檔案新增一
|
||||
個正規運算式。為了安裝這些命令稿,最好的方法是排除
|
||||
<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>
|
416
zh_TW.UTF-8/articles/mailing-list-faq/article.xml
Normal file
416
zh_TW.UTF-8/articles/mailing-list-faq/article.xml
Normal file
|
@ -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>µsoft; Exchange</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>µsoft; Internet Mail</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>µsoft; &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 > /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>> </literal></quote> 以作記號。
|
||||
請記得保留 <quote><literal>> </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>
|
434
zh_TW.UTF-8/articles/nanobsd/article.xml
Normal file
434
zh_TW.UTF-8/articles/nanobsd/article.xml
Normal file
|
@ -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 —
|
||||
所有的應用程序都可以在 <application>NanoBSD</application> 中直接使用,
|
||||
而方式與 &os; 完全一樣。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>功能絲毫未損 — 在 &os; 做的任何工作,都可以在
|
||||
<application>NanoBSD</application> 中使用,
|
||||
除非您在建立 <application>NanoBSD</application> 映像檔時,
|
||||
有指定要拿掉它們。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>所有東西在運行時都是唯讀的 — 可以安全地拔掉電源插頭。
|
||||
系統不正常關機的話,不用再跑 &man.fsck.8; 了。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>可輕鬆編譯、自行打造 — 只需使用一個 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> — 本次打造的名稱(所建立工作目錄的名稱)。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>NANO_SRC</literal> — 用以編譯、打造映像檔的 source tree 的位置。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>NANO_KERNEL</literal> — 設定用來編譯的 kernel 設定檔檔名。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>CONF_BUILD</literal> — 用於
|
||||
<literal>buildworld</literal> 打造階段的選項。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>CONF_INSTALL</literal> — 用於
|
||||
<literal>installworld</literal> 打造階段的選項。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>CONF_WORLD</literal> — 用於
|
||||
<literal>buildworld</literal> 和
|
||||
<literal>installworld</literal> 這兩個打造階段的選項。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>FlashDevice</literal> — 定義所用的嵌入式硬體類型。
|
||||
詳情請參考 <filename>FlashDevice.sub</filename> 檔。</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect3>
|
||||
|
||||
<sect3>
|
||||
<title>自訂功能</title>
|
||||
|
||||
<para>透過在設定檔案中使用 shell 函數,可以進一步微調
|
||||
<application>NanoBSD</application>。 舉例說明一下自行打造函數的基本方式:</para>
|
||||
|
||||
<programlisting>cust_foo()(
|
||||
echo "bar=topless" > \
|
||||
${NANO_WORLDDIR}/etc/foo
|
||||
)
|
||||
customize_cmd cust_foo</programlisting>
|
||||
|
||||
<para>下面舉更實際點的例子,它會把預設的
|
||||
<filename>/etc</filename> 目錄大小,從 5MB 調整為 30MB:</para>
|
||||
|
||||
<programlisting>cust_etc_size()(
|
||||
cd ${NANO_WORLDDIR}/conf
|
||||
echo 30000 > default/etc/md_size
|
||||
)
|
||||
customize_cmd cust_etc_size</programlisting>
|
||||
|
||||
<para>除此之外,還有幾個預設的功能定義可以用來自訂:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><literal>cust_comconsole</literal> — 在預設 VGA 顯示卡上停用 &man.getty.8;
|
||||
(<filename>/dev/ttyv*</filename>)並啟用 serial port 的 COM1 以作為系統 console。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>cust_allow_ssh_root</literal> — 允許 &man.sshd.8;
|
||||
可以用 <systemitem class="username">root</systemitem> 帳號登入。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>cust_install_files</literal> —
|
||||
從 <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 ${NANO_WORLDDIR}/boot/loader.conf
|
||||
echo "beastie_disable=\"YES\"" >> ${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 < _.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>—給 PR 回報者用的參考原則。</para>
|
||||
Write FreeBSD Problem Reports</link>—給 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">
|
475
zh_TW.UTF-8/articles/remote-install/article.xml
Normal file
475
zh_TW.UTF-8/articles/remote-install/article.xml
Normal file
|
@ -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 > /tmp/bsdlabel.txt && 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"' >> /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>
|
5
zh_TW.UTF-8/books/Makefile.inc
Normal file
5
zh_TW.UTF-8/books/Makefile.inc
Normal file
|
@ -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>
|
||||
<title>在 FreeBSD 開發程式</title>
|
||||
<para>好了我們開始吧!我想你的 FreeBSD 已經安裝好了,而且已經準備好要用它寫點程式了吧?
|
||||
但是要從哪裡開始呢?&os; 有提供寫程式的程式或環境嗎?
|
||||
身為 programer 的我可以做什麼呢?</para>
|
||||
|
||||
<para>本章試著回答你一些問題,當然,單就 programming 程度來說可分很多種層次,
|
||||
有的人只是單純當興趣,有的則是他的專業,
|
||||
本章主要內容是針對程式初學者,
|
||||
當然,對於那些不熟 &os; 的程式開發者而言,本文件內容也是十分實用的。</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 & Gettys 的 "X Window System" 論文</para>
|
||||
<para>以上摘自 Scheifler & 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
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
|||
Original revision: 1.46
|
||||
-->
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="tools">
|
||||
<info><title>程式開發工具</title>
|
||||
<info><title>程式開發工具</title>
|
||||
<authorgroup>
|
||||
<author><personname><firstname>James</firstname><surname>Raynard</surname></personname><contrib>Contributed by </contrib></author>
|
||||
<author><personname><firstname>Murray</firstname><surname>Stokely</surname></personname></author>
|
||||
|
@ -14,93 +14,93 @@
|
|||
</info>
|
||||
|
||||
|
||||
<sect1 xml:id="tools-synopsis"><title>概敘</title>
|
||||
<sect1 xml:id="tools-synopsis"><title>概敘</title>
|
||||
|
||||
<para>本章將介紹如何使用一些 FreeBSD 所提供的程式開發工具(programing tools),
|
||||
本章所介紹的工具程式在其他版本的 &unix; 上也可使用,
|
||||
在此 <emphasis>並不會</emphasis> 嘗試描述寫程式時的每個細節,
|
||||
本章大部分篇幅都是假設你以前沒有或只有少數的寫程式經驗,
|
||||
不過,還是希望大多數的程式開發人員都能從中重新得到一些啟發。</para>
|
||||
<para>本章將介紹如何使用一些 FreeBSD 所提供的程式開發工具(programing tools),
|
||||
本章所介紹的工具程式在其他版本的 &unix; 上也可使用,
|
||||
在此 <emphasis>並不會</emphasis> 嘗試描述寫程式時的每個細節,
|
||||
本章大部分篇幅都是假設你以前沒有或只有少數的寫程式經驗,
|
||||
不過,還是希望大多數的程式開發人員都能從中重新得到一些啟發。</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="tools-intro"><title>簡介</title>
|
||||
<sect1 xml:id="tools-intro"><title>簡介</title>
|
||||
|
||||
<para>FreeBSD 提供一個非常棒的開發環境,
|
||||
比如說像是 C、C++、Fortran 和 assembler(組合語言)的編譯器(compiler),
|
||||
在 FreeBSD 中都已經包含在基本的系統中了
|
||||
更別提 Perl 和其他標準 &unix; 工具,像是<command>sed</command> 以及 <command>awk</command>,
|
||||
如果你還是覺得不夠,FreeBSD在 Ports collection 中還提供其他的編譯器和直譯器(interpreter),
|
||||
FreeBSD 相容許多標準,像是 <acronym>&posix;</acronym> 和 <acronym>ANSI</acronym> C,
|
||||
當然還有它所繼承的 BSD 傳統。
|
||||
所以在 FreeBSD 上寫的程式不需修改或頂多稍微修改,就可以在許多平台上編譯、執行。</para>
|
||||
<para>FreeBSD 提供一個非常棒的開發環境,
|
||||
比如說像是 C、C++、Fortran 和 assembler(組合語言)的編譯器(compiler),
|
||||
在 FreeBSD 中都已經包含在基本的系統中了
|
||||
更別提 Perl 和其他標準 &unix; 工具,像是<command>sed</command> 以及 <command>awk</command>,
|
||||
如果你還是覺得不夠,FreeBSD在 Ports collection 中還提供其他的編譯器和直譯器(interpreter),
|
||||
FreeBSD 相容許多標準,像是 <acronym>&posix;</acronym> 和 <acronym>ANSI</acronym> C,
|
||||
當然還有它所繼承的 BSD 傳統。
|
||||
所以在 FreeBSD 上寫的程式不需修改或頂多稍微修改,就可以在許多平台上編譯、執行。</para>
|
||||
|
||||
<para>無論如何,就算你從來沒在 &unix; 平台上寫過程式,也可以徹底感受到FreeBSD 令人無法抗拒的迷人魔力。
|
||||
本章的目標就是協助你快速上手,而暫時不需深入太多進階主題,
|
||||
並且講解一些基礎概念,以讓你可以瞭解我們在講些什麼。</para>
|
||||
<para>無論如何,就算你從來沒在 &unix; 平台上寫過程式,也可以徹底感受到FreeBSD 令人無法抗拒的迷人魔力。
|
||||
本章的目標就是協助你快速上手,而暫時不需深入太多進階主題,
|
||||
並且講解一些基礎概念,以讓你可以瞭解我們在講些什麼。</para>
|
||||
|
||||
<para>本章內容並不要求你得有程式開發經驗,或者你只有一點點的經驗而已。
|
||||
不過,我們假設你已經會 &unix; 系統的基本操作,
|
||||
而且更重要的是,請保持樂於學習的心態!</para>
|
||||
<para>本章內容並不要求你得有程式開發經驗,或者你只有一點點的經驗而已。
|
||||
不過,我們假設你已經會 &unix; 系統的基本操作,
|
||||
而且更重要的是,請保持樂於學習的心態!</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="tools-programming">
|
||||
<title>Programming 概念</title>
|
||||
<title>Programming 概念</title>
|
||||
|
||||
<para>簡單的說,程式只是一堆指令的集合體;而這些指令是用來告訴電腦應該要作那些事情。
|
||||
有時候,指令的執行取決於前一個指令的結果而定。
|
||||
本章將會告訴你有 2 個主要的方法,讓你可以對電腦下達這些指示(instruction) 或 <quote>命令(commands)</quote>。
|
||||
第一個方法就是 <firstterm>直譯器(interpreter)</firstterm>,
|
||||
而第二個方法是 <firstterm>編譯器(compiler)</firstterm>。
|
||||
由於對於電腦而言,人類語言的語意過於模糊而太難理解,
|
||||
因此命令(commands)就常會以一種(或多種)程式語言寫成,用來指示電腦所要執行的特定動作為何。</para>
|
||||
<para>簡單的說,程式只是一堆指令的集合體;而這些指令是用來告訴電腦應該要作那些事情。
|
||||
有時候,指令的執行取決於前一個指令的結果而定。
|
||||
本章將會告訴你有 2 個主要的方法,讓你可以對電腦下達這些指示(instruction) 或 <quote>命令(commands)</quote>。
|
||||
第一個方法就是 <firstterm>直譯器(interpreter)</firstterm>,
|
||||
而第二個方法是 <firstterm>編譯器(compiler)</firstterm>。
|
||||
由於對於電腦而言,人類語言的語意過於模糊而太難理解,
|
||||
因此命令(commands)就常會以一種(或多種)程式語言寫成,用來指示電腦所要執行的特定動作為何。</para>
|
||||
|
||||
<sect2>
|
||||
<title>直譯器</title>
|
||||
<title>直譯器</title>
|
||||
|
||||
<para>使用直譯器時,所使用的程式語言就像變成一個會和你互動的環境。
|
||||
當在命令提示列上打上命令時,直譯器會即時執行該命令。
|
||||
在比較複雜的程式中,可以把所有想下達的命令統統輸入到某檔案裡面去,
|
||||
然後呼叫直譯器去讀取該檔案,並且執行你寫在這個檔案中的指令。
|
||||
如果所下的指令有錯誤產生,大多數的直譯器會進入偵錯模式(debugger),
|
||||
並且顯示相關錯誤訊息,以便對程式除錯。</para>
|
||||
<para>使用直譯器時,所使用的程式語言就像變成一個會和你互動的環境。
|
||||
當在命令提示列上打上命令時,直譯器會即時執行該命令。
|
||||
在比較複雜的程式中,可以把所有想下達的命令統統輸入到某檔案裡面去,
|
||||
然後呼叫直譯器去讀取該檔案,並且執行你寫在這個檔案中的指令。
|
||||
如果所下的指令有錯誤產生,大多數的直譯器會進入偵錯模式(debugger),
|
||||
並且顯示相關錯誤訊息,以便對程式除錯。</para>
|
||||
|
||||
<para>這種方式好處在於:可以立刻看到指令的執行結果,以及錯誤也可迅速修正。
|
||||
相對的,最大的壞處便是當你想把你寫的程式分享給其他人時,這些人必須要有跟你一樣的直譯器。
|
||||
而且別忘了,他們也要會使用直譯器直譯程式才行。
|
||||
當然使用者也不希望不小心按錯鍵,就進入偵錯模式而不知所措。
|
||||
就執行效率而言,直譯器會使用到很多的記憶體,
|
||||
而且這類直譯式程式,通常並不會比編譯器所編譯的程式的更有效率。</para>
|
||||
<para>這種方式好處在於:可以立刻看到指令的執行結果,以及錯誤也可迅速修正。
|
||||
相對的,最大的壞處便是當你想把你寫的程式分享給其他人時,這些人必須要有跟你一樣的直譯器。
|
||||
而且別忘了,他們也要會使用直譯器直譯程式才行。
|
||||
當然使用者也不希望不小心按錯鍵,就進入偵錯模式而不知所措。
|
||||
就執行效率而言,直譯器會使用到很多的記憶體,
|
||||
而且這類直譯式程式,通常並不會比編譯器所編譯的程式的更有效率。</para>
|
||||
|
||||
<para>筆者個人認為,如果你之前沒有學過任何程式語言,最好先學學習直譯式語言(interpreted languages),
|
||||
像是 Lisp,Smalltalk,Perl 和 Basic 都是,&unix; 的 shell 像是 <command>sh</command> 和 <command>csh</command>
|
||||
它們本身就是直譯器,事實上,很多人都在它們自己機器上撰寫各式的 shell <quote>script</quote>,
|
||||
來順利完成各項 <quote>housekeeping(維護)</quote> 任務。
|
||||
&unix; 的使用哲學之一就是提供大量的小工具,
|
||||
並使用 shell script 來組合運用這些小工具,以便工作更有效率。</para>
|
||||
<para>筆者個人認為,如果你之前沒有學過任何程式語言,最好先學學習直譯式語言(interpreted languages),
|
||||
像是 Lisp,Smalltalk,Perl 和 Basic 都是,&unix; 的 shell 像是 <command>sh</command> 和 <command>csh</command>
|
||||
它們本身就是直譯器,事實上,很多人都在它們自己機器上撰寫各式的 shell <quote>script</quote>,
|
||||
來順利完成各項 <quote>housekeeping(維護)</quote> 任務。
|
||||
&unix; 的使用哲學之一就是提供大量的小工具,
|
||||
並使用 shell script 來組合運用這些小工具,以便工作更有效率。</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>FreeBSD 提供的直譯器</title>
|
||||
<title>FreeBSD 提供的直譯器</title>
|
||||
|
||||
<para>下面這邊有份 &os; Ports Collection 所提供的直譯器清單,還有討論一些比較受歡迎的直譯式語言</para>
|
||||
<para>下面這邊有份 &os; Ports Collection 所提供的直譯器清單,還有討論一些比較受歡迎的直譯式語言</para>
|
||||
|
||||
<para>至於如何使用 Ports Collection 安裝的說明,可參閱 FreeBSD Handbook 中的
|
||||
<link xlink:href="&url.books.handbook;/ports-using.html">Ports章節</link>。</para>
|
||||
<para>至於如何使用 Ports Collection 安裝的說明,可參閱 FreeBSD Handbook 中的
|
||||
<link xlink:href="&url.books.handbook;/ports-using.html">Ports章節</link>。</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><acronym>BASIC</acronym></term>
|
||||
|
||||
<listitem>
|
||||
<para>BASIC 是 Beginner's ALL-purpose Symbolic Instruction Code 的縮寫。
|
||||
BASIC 於 1950 年代開始發展,最初開發這套語言的目的是為了教導當時的大學學生如何寫程式。
|
||||
到了 1980,<acronym>BASIC</acronym>已經是很多 programmer 第一個學習的程式語言了。
|
||||
此外,BASIC 也是 Visual Basic 的基礎。</para>
|
||||
<para>BASIC 是 Beginner's ALL-purpose Symbolic Instruction Code 的縮寫。
|
||||
BASIC 於 1950 年代開始發展,最初開發這套語言的目的是為了教導當時的大學學生如何寫程式。
|
||||
到了 1980,<acronym>BASIC</acronym>已經是很多 programmer 第一個學習的程式語言了。
|
||||
此外,BASIC 也是 Visual Basic 的基礎。</para>
|
||||
|
||||
<para>FreeBSD Ports Collection 也有收錄相關的 BASIC 直譯器。
|
||||
Bywater Basic 直譯器放在 <package>lang/bwbasic</package>。
|
||||
而 Phil Cockroft's Basic 直譯器(早期也叫 Rabbit Basic)放在 <package>lang/pbasic</package>。</para>
|
||||
<para>FreeBSD Ports Collection 也有收錄相關的 BASIC 直譯器。
|
||||
Bywater Basic 直譯器放在 <package>lang/bwbasic</package>。
|
||||
而 Phil Cockroft's Basic 直譯器(早期也叫 Rabbit Basic)放在 <package>lang/pbasic</package>。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
@ -108,21 +108,21 @@
|
|||
<term>Lisp</term>
|
||||
|
||||
<listitem>
|
||||
<para>LISP 是在 1950 年代開始發展的一個直譯式語言,而且 LISP 就是一種
|
||||
<quote>number-crunching</quote> languages(迅速進行大量運算的程式語言),在當時算是一個普遍的程式語言。
|
||||
LISP 的表達不是基於數字(numbers),而是基於表(lists)。
|
||||
而最能表示出 LISP 特色的地方就在於: LISP 是 <quote>List Processing</quote> 的縮寫。
|
||||
在<acronym>人工智慧(Artificial Intelligence, AI)</acronym>領域上 LISP 的各式應用非常普遍。</para>
|
||||
<para>LISP 是在 1950 年代開始發展的一個直譯式語言,而且 LISP 就是一種
|
||||
<quote>number-crunching</quote> languages(迅速進行大量運算的程式語言),在當時算是一個普遍的程式語言。
|
||||
LISP 的表達不是基於數字(numbers),而是基於表(lists)。
|
||||
而最能表示出 LISP 特色的地方就在於: LISP 是 <quote>List Processing</quote> 的縮寫。
|
||||
在<acronym>人工智慧(Artificial Intelligence, AI)</acronym>領域上 LISP 的各式應用非常普遍。</para>
|
||||
|
||||
<para>LISP 是非常強悍且複雜的程式語言,但是缺點是程式碼會非常大而且難以操作。</para>
|
||||
<para>LISP 是非常強悍且複雜的程式語言,但是缺點是程式碼會非常大而且難以操作。</para>
|
||||
|
||||
<para>絕大部分的 LISP 直譯器都可以在 &unix; 系統上運作,當然 &os; 的 Ports Collection 也有收錄。
|
||||
GNU Common Lisp 收錄在 <package>lang/gcl</package>,
|
||||
Bruno Haible 和 Michael Stoll 的 CLISP 收錄在 <package>lang/clisp</package>
|
||||
,此外 CMUCL(包含一個已經最佳化的編譯器),
|
||||
以及其他簡化版的 LISP 直譯器(比如以 C 語言寫的 SLisp,只用幾百行程式碼就實作大多數 Common Lisp 的功能)
|
||||
則是分別收錄在 <package>lang/cmucl</package> 以及
|
||||
<package>lang/slisp</package>。</para>
|
||||
<para>絕大部分的 LISP 直譯器都可以在 &unix; 系統上運作,當然 &os; 的 Ports Collection 也有收錄。
|
||||
GNU Common Lisp 收錄在 <package>lang/gcl</package>,
|
||||
Bruno Haible 和 Michael Stoll 的 CLISP 收錄在 <package>lang/clisp</package>
|
||||
,此外 CMUCL(包含一個已經最佳化的編譯器),
|
||||
以及其他簡化版的 LISP 直譯器(比如以 C 語言寫的 SLisp,只用幾百行程式碼就實作大多數 Common Lisp 的功能)
|
||||
則是分別收錄在 <package>lang/cmucl</package> 以及
|
||||
<package>lang/slisp</package>。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
@ -130,11 +130,11 @@
|
|||
<term>Perl</term>
|
||||
|
||||
<listitem>
|
||||
<para>對系統管理者而言,最愛用 perl 來撰寫 scripts 以管理主機,
|
||||
同時也經常用來寫 WWW 主機上的 <acronym>CGI</acronym> Script 程式。</para>
|
||||
<para>對系統管理者而言,最愛用 perl 來撰寫 scripts 以管理主機,
|
||||
同時也經常用來寫 WWW 主機上的 <acronym>CGI</acronym> Script 程式。</para>
|
||||
|
||||
<para>Perl 在 Ports Collection 內的 <package>lang/perl5</package>。
|
||||
而 &os; 4.X 則是把 Perl 裝在 <command>/usr/bin/perl</command>。</para>
|
||||
<para>Perl 在 Ports Collection 內的 <package>lang/perl5</package>。
|
||||
而 &os; 4.X 則是把 Perl 裝在 <command>/usr/bin/perl</command>。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
@ -142,14 +142,14 @@
|
|||
<term>Scheme</term>
|
||||
|
||||
<listitem>
|
||||
<para>Scheme 是 LISP 的另一分支,Scheme 的特點就是比 Common LISP 還要簡潔有力。
|
||||
由於 Scheme 簡單,所以很多大學拿來當作第一堂程式語言教學教材。
|
||||
而且對於研究人員來說也可以快速的開發他們所需要的程式。</para>
|
||||
<para>Scheme 是 LISP 的另一分支,Scheme 的特點就是比 Common LISP 還要簡潔有力。
|
||||
由於 Scheme 簡單,所以很多大學拿來當作第一堂程式語言教學教材。
|
||||
而且對於研究人員來說也可以快速的開發他們所需要的程式。</para>
|
||||
|
||||
<para>Scheme 收錄在 <package>lang/elk</package>,
|
||||
Elk Scheme 直譯器(由麻省理工學院所發展的 Scheme 直譯器)收錄在
|
||||
<package>lang/mit-scheme</package>,
|
||||
SCM Scheme Interpreter 收錄在 <package>lang/scm</package>。</para>
|
||||
<para>Scheme 收錄在 <package>lang/elk</package>,
|
||||
Elk Scheme 直譯器(由麻省理工學院所發展的 Scheme 直譯器)收錄在
|
||||
<package>lang/mit-scheme</package>,
|
||||
SCM Scheme Interpreter 收錄在 <package>lang/scm</package>。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
@ -157,9 +157,9 @@
|
|||
<term>Icon</term>
|
||||
|
||||
<listitem>
|
||||
<para>Icon 屬高階程式語言,Icon 具有強大的字串(String)和結構(Structure)處理能力。
|
||||
&os; Ports Collection 所收錄的 Icon 直譯器版本則是放在
|
||||
<package>lang/icon</package>。</para>
|
||||
<para>Icon 屬高階程式語言,Icon 具有強大的字串(String)和結構(Structure)處理能力。
|
||||
&os; Ports Collection 所收錄的 Icon 直譯器版本則是放在
|
||||
<package>lang/icon</package>。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
@ -167,11 +167,11 @@
|
|||
<term>Logo</term>
|
||||
|
||||
<listitem>
|
||||
<para>Logo 是種容易學習的程式語言,最常在一些教學課程中被拿來當作開頭範例。
|
||||
如果要給小朋友開始上程式語言課的話,Logo 是相當不錯的選擇。
|
||||
因為,即使對小朋友來說,要用 Logo 來秀出複雜多邊形圖形是相當輕鬆容易的。</para>
|
||||
<para>Logo 是種容易學習的程式語言,最常在一些教學課程中被拿來當作開頭範例。
|
||||
如果要給小朋友開始上程式語言課的話,Logo 是相當不錯的選擇。
|
||||
因為,即使對小朋友來說,要用 Logo 來秀出複雜多邊形圖形是相當輕鬆容易的。</para>
|
||||
|
||||
<para>Logo 在 &os; Ports Collection 的最新版則是放在 <package>lang/logo</package>。</para>
|
||||
<para>Logo 在 &os; Ports Collection 的最新版則是放在 <package>lang/logo</package>。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
@ -179,12 +179,12 @@
|
|||
<term>Python</term>
|
||||
|
||||
<listitem>
|
||||
<para>Python 是物件導向的直譯式語言,
|
||||
Python 的擁護者總是宣稱 Python 是最好入門的程式語言。
|
||||
雖然 Python 可以很簡單的開始,但是不代表它就會輸給其他直譯式語言(像是 Perl 和 Tcl),
|
||||
事實證明 Python 也可以拿來開發大型、複雜的應用程式。</para>
|
||||
<para>Python 是物件導向的直譯式語言,
|
||||
Python 的擁護者總是宣稱 Python 是最好入門的程式語言。
|
||||
雖然 Python 可以很簡單的開始,但是不代表它就會輸給其他直譯式語言(像是 Perl 和 Tcl),
|
||||
事實證明 Python 也可以拿來開發大型、複雜的應用程式。</para>
|
||||
|
||||
<para>&os; Ports Collection 收錄在 <package>lang/python</package>。</para>
|
||||
<para>&os; Ports Collection 收錄在 <package>lang/python</package>。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
@ -192,11 +192,11 @@
|
|||
<term>Ruby</term>
|
||||
|
||||
<listitem>
|
||||
<para>Ruby 是純物件導向的直譯式語言。
|
||||
Ruby 目前非常流行,原因在於他易懂的程式語法結構,在撰寫程式時的彈性,
|
||||
以及天生具有輕易的發展維護大型專案的能力。</para>
|
||||
<para>Ruby 是純物件導向的直譯式語言。
|
||||
Ruby 目前非常流行,原因在於他易懂的程式語法結構,在撰寫程式時的彈性,
|
||||
以及天生具有輕易的發展維護大型專案的能力。</para>
|
||||
|
||||
<para>&os; Ports Collection 收錄在 <package>lang/ruby8</package>。</para>
|
||||
<para>&os; Ports Collection 收錄在 <package>lang/ruby8</package>。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
@ -204,51 +204,51 @@
|
|||
<term>Tcl and Tk</term>
|
||||
|
||||
<listitem>
|
||||
<para>Tcl 是內嵌式的直譯式語言,讓 Tcl 可以如此廣泛運用的原因是 Tcl 的移植性。
|
||||
Tcl 也可以快速發展一個簡單但是具有雛型的程式或者具有完整功能的程式。</para>
|
||||
<para>Tcl 是內嵌式的直譯式語言,讓 Tcl 可以如此廣泛運用的原因是 Tcl 的移植性。
|
||||
Tcl 也可以快速發展一個簡單但是具有雛型的程式或者具有完整功能的程式。</para>
|
||||
|
||||
<para>Tcl 許多的版本都可在 &os; 上運作,而最新的 Tcl 版本為 Tcl 8.4,
|
||||
&os; Ports Collection 收錄在 <package>lang/tcl84</package>。</para>
|
||||
<para>Tcl 許多的版本都可在 &os; 上運作,而最新的 Tcl 版本為 Tcl 8.4,
|
||||
&os; Ports Collection 收錄在 <package>lang/tcl84</package>。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>編譯器</title>
|
||||
<title>編譯器</title>
|
||||
|
||||
<para>編譯器和直譯器兩者相比的話,有些不同,首先就是必須先把程式碼統統寫入到檔案裡面,
|
||||
然後必須執行編譯器來試著編譯程式,如果編譯器不接受所寫的程式,那就必須一直修改程式,
|
||||
直到編譯器接受且把你的程式編譯成執行檔。
|
||||
此外,也可以在提示命令列,或在除錯器中執行你編譯好的程式看看它是否可以運作。
|
||||
<para>編譯器和直譯器兩者相比的話,有些不同,首先就是必須先把程式碼統統寫入到檔案裡面,
|
||||
然後必須執行編譯器來試著編譯程式,如果編譯器不接受所寫的程式,那就必須一直修改程式,
|
||||
直到編譯器接受且把你的程式編譯成執行檔。
|
||||
此外,也可以在提示命令列,或在除錯器中執行你編譯好的程式看看它是否可以運作。
|
||||
<footnote>
|
||||
<para>如果在提示命令列下執行,那麼有可能會產生 core dump。</para>
|
||||
<para>如果在提示命令列下執行,那麼有可能會產生 core dump。</para>
|
||||
</footnote></para>
|
||||
|
||||
<para>很明顯的,使用編譯器並不像直譯器般可以馬上得到結果。
|
||||
不管如何,編譯器允許你作很多直譯器不可能或者是很難達到的事情。
|
||||
例如:撰寫和作業系統密切互動的程式,甚至是你自己寫的作業系統!
|
||||
當你想要寫出高效率的程式時,編譯器便派上用場了。
|
||||
編譯器可以在編譯時順便最佳化你的程式,但是直譯器卻不行。
|
||||
而編譯器與直譯器最大的差別在於:當你想把你寫好的程式拿到另外一台機器上跑時,
|
||||
你只要將編譯器編譯出來的可執行檔,拿到新機器上便可以執行,
|
||||
而直譯器則必須要求新機器上,必須要有跟另一台機器上相同的直譯器,
|
||||
才能組譯執行你的程式!</para>
|
||||
<para>很明顯的,使用編譯器並不像直譯器般可以馬上得到結果。
|
||||
不管如何,編譯器允許你作很多直譯器不可能或者是很難達到的事情。
|
||||
例如:撰寫和作業系統密切互動的程式,甚至是你自己寫的作業系統!
|
||||
當你想要寫出高效率的程式時,編譯器便派上用場了。
|
||||
編譯器可以在編譯時順便最佳化你的程式,但是直譯器卻不行。
|
||||
而編譯器與直譯器最大的差別在於:當你想把你寫好的程式拿到另外一台機器上跑時,
|
||||
你只要將編譯器編譯出來的可執行檔,拿到新機器上便可以執行,
|
||||
而直譯器則必須要求新機器上,必須要有跟另一台機器上相同的直譯器,
|
||||
才能組譯執行你的程式!</para>
|
||||
|
||||
<para>編譯式的程式語言包含 Pascal、C 和 C++,
|
||||
C 和 C++ 不是一個親和力十足的語言,但是很適合具有經驗的 Programmer。
|
||||
Pascal 其實是一個設計用來教學用的程式語言,而且也很適合用來入門,
|
||||
&os; 預設並沒有把 Pascal 整合進 base system 中,
|
||||
但是 GNU Pascal Compiler 和 Free Pascal Compiler 都可分別在
|
||||
<package>lang/gpc</package> 和 <package>lang/fpc</package> 中找到。</para>
|
||||
<para>編譯式的程式語言包含 Pascal、C 和 C++,
|
||||
C 和 C++ 不是一個親和力十足的語言,但是很適合具有經驗的 Programmer。
|
||||
Pascal 其實是一個設計用來教學用的程式語言,而且也很適合用來入門,
|
||||
&os; 預設並沒有把 Pascal 整合進 base system 中,
|
||||
但是 GNU Pascal Compiler 和 Free Pascal Compiler 都可分別在
|
||||
<package>lang/gpc</package> 和 <package>lang/fpc</package> 中找到。</para>
|
||||
|
||||
<para>如果你用不同的程式來寫編譯式程式,那麼不斷地編輯-編譯-執行-除錯的這個循環肯定會很煩人,
|
||||
為了更簡化、方便程式開發流程,很多商業編譯器廠商開始發展所謂的 <acronym>IDE</acronym>
|
||||
(Integrated Development Environments) 開發環境,
|
||||
FreeBSD 預設並沒有把 IDE 整合進 base system 中,
|
||||
但是你可透過 <package>devel/kdevelop</package> 安裝 kdevelop
|
||||
或使用 <application>Emacs</application> 來體驗 IDE 開發環境。
|
||||
在後面的 <xref linkend="emacs"/> 專題將介紹,如何以 <application>Emacs</application> 來作為 IDE 開發環境。</para>
|
||||
<para>如果你用不同的程式來寫編譯式程式,那麼不斷地編輯-編譯-執行-除錯的這個循環肯定會很煩人,
|
||||
為了更簡化、方便程式開發流程,很多商業編譯器廠商開始發展所謂的 <acronym>IDE</acronym>
|
||||
(Integrated Development Environments) 開發環境,
|
||||
FreeBSD 預設並沒有把 IDE 整合進 base system 中,
|
||||
但是你可透過 <package>devel/kdevelop</package> 安裝 kdevelop
|
||||
或使用 <application>Emacs</application> 來體驗 IDE 開發環境。
|
||||
在後面的 <xref linkend="emacs"/> 專題將介紹,如何以 <application>Emacs</application> 來作為 IDE 開發環境。</para>
|
||||
</sect2>
|
||||
|
||||
|
||||
|
@ -256,95 +256,95 @@
|
|||
|
||||
|
||||
<sect1 xml:id="tools-compiling">
|
||||
<title>用 <command>cc</command> 來編譯程式</title>
|
||||
<title>用 <command>cc</command> 來編譯程式</title>
|
||||
|
||||
<para>本章範例只有針對 GNU C compiler 和 GNU C++ compiler 作說明,
|
||||
這兩個在 FreeBSD base system 中就有了,
|
||||
直接打 <command>cc</command> 或 <command>gcc</command> 就可以執行。
|
||||
至於,如何用直譯器產生程式的說明,通常可在直譯器的文件或線上文件找到說明,因此不再贅述。</para>
|
||||
<para>本章範例只有針對 GNU C compiler 和 GNU C++ compiler 作說明,
|
||||
這兩個在 FreeBSD base system 中就有了,
|
||||
直接打 <command>cc</command> 或 <command>gcc</command> 就可以執行。
|
||||
至於,如何用直譯器產生程式的說明,通常可在直譯器的文件或線上文件找到說明,因此不再贅述。</para>
|
||||
|
||||
<para>當你寫完你的傑作後,接下來便是讓這個程式可以在 FreeBSD 上執行,
|
||||
通常這些要一些步驟才能完成,有些步驟則需要不同程式來完成。</para>
|
||||
<para>當你寫完你的傑作後,接下來便是讓這個程式可以在 FreeBSD 上執行,
|
||||
通常這些要一些步驟才能完成,有些步驟則需要不同程式來完成。</para>
|
||||
|
||||
<procedure>
|
||||
<step>
|
||||
<para>預先處理(Pre-process)你的程式碼,移除程式內的註解,和其他技巧,
|
||||
像是 expanding(擴大) C 的 marco。</para>
|
||||
<para>預先處理(Pre-process)你的程式碼,移除程式內的註解,和其他技巧,
|
||||
像是 expanding(擴大) C 的 marco。</para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>確認你的程式語法是否確實遵照 C/C++ 的規定,如果沒有符合的話,編譯器會出現警告。</para>
|
||||
<para>確認你的程式語法是否確實遵照 C/C++ 的規定,如果沒有符合的話,編譯器會出現警告。</para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>將原始碼轉成組合語言 — 它跟機器語言(machine code)非常相近,但仍在人類可理解的範圍內(據說應該是這樣)。
|
||||
<para>將原始碼轉成組合語言 — 它跟機器語言(machine code)非常相近,但仍在人類可理解的範圍內(據說應該是這樣)。
|
||||
<footnote>
|
||||
<para>嚴格說起來,在這個階段 <command>cc</command> 並不是真的把原始程式轉成組合語言,
|
||||
而是轉為 machine-independent 的 <firstterm>p-code</firstterm>。</para>
|
||||
<para>嚴格說起來,在這個階段 <command>cc</command> 並不是真的把原始程式轉成組合語言,
|
||||
而是轉為 machine-independent 的 <firstterm>p-code</firstterm>。</para>
|
||||
</footnote></para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>把組合語言轉成機器語言 — 是的,這裡說的機器語言就是常提到的 bit 和 byte,也就是 1 和 0。</para>
|
||||
<para>把組合語言轉成機器語言 — 是的,這裡說的機器語言就是常提到的 bit 和 byte,也就是 1 和 0。</para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>確認程式中用到的函式呼叫、全域變數是否正確,舉例來說:如若呼叫了不存在的函式,編譯器會顯示警告。</para>
|
||||
<para>確認程式中用到的函式呼叫、全域變數是否正確,舉例來說:如若呼叫了不存在的函式,編譯器會顯示警告。</para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>如果程式是由程式碼檔案來編譯,編譯器會整合起來。</para>
|
||||
<para>如果程式是由程式碼檔案來編譯,編譯器會整合起來。</para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>編譯器會負責產生東西,讓系統上的 run-time loader 可以把程式載入記憶體內執行。</para>
|
||||
<para>編譯器會負責產生東西,讓系統上的 run-time loader 可以把程式載入記憶體內執行。</para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>最後會把編譯完的執行檔存在硬碟上。</para>
|
||||
<para>最後會把編譯完的執行檔存在硬碟上。</para>
|
||||
</step>
|
||||
</procedure>
|
||||
|
||||
<para>通常 <firstterm>編譯(compiling)</firstterm> 是指第 1 到第 4 個步驟。
|
||||
— 其他步驟則稱為 <firstterm>連結(linking)</firstterm>,
|
||||
有時候步驟 1 也可以是指 <firstterm>預先處理(pre-processing)</firstterm>,
|
||||
而步驟 3 到步驟 4 則是 <firstterm>組譯(assembling)</firstterm>。</para>
|
||||
<para>通常 <firstterm>編譯(compiling)</firstterm> 是指第 1 到第 4 個步驟。
|
||||
— 其他步驟則稱為 <firstterm>連結(linking)</firstterm>,
|
||||
有時候步驟 1 也可以是指 <firstterm>預先處理(pre-processing)</firstterm>,
|
||||
而步驟 3 到步驟 4 則是 <firstterm>組譯(assembling)</firstterm>。</para>
|
||||
|
||||
<para>幸運的是,你可以不用理會以上細節,編譯器都會自動完成。
|
||||
因為 <command>cc</command> 只是是個前端程式(front end),它會依照正確的參數來呼叫相關程式幫你處理。
|
||||
只需打:</para>
|
||||
<para>幸運的是,你可以不用理會以上細節,編譯器都會自動完成。
|
||||
因為 <command>cc</command> 只是是個前端程式(front end),它會依照正確的參數來呼叫相關程式幫你處理。
|
||||
只需打:</para>
|
||||
<screen>&prompt.user; <userinput>cc foobar.c</userinput></screen>
|
||||
|
||||
<para>上述指令會把 <filename>foobar.c</filename> 開始編譯,並完成上述動作。
|
||||
如果你有許多檔案需要編譯,那請打類似下列指令即可:</para>
|
||||
<para>上述指令會把 <filename>foobar.c</filename> 開始編譯,並完成上述動作。
|
||||
如果你有許多檔案需要編譯,那請打類似下列指令即可:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>cc foo.c bar.c</userinput></screen>
|
||||
|
||||
<para>記住語法錯誤檢查就是 — 純粹檢查語法錯誤與否,
|
||||
而不會幫你檢測任何邏輯錯誤,比如:無限迴圈,或是排序方式想用 binary sort 卻弄成 bubble sort。
|
||||
<para>記住語法錯誤檢查就是 — 純粹檢查語法錯誤與否,
|
||||
而不會幫你檢測任何邏輯錯誤,比如:無限迴圈,或是排序方式想用 binary sort 卻弄成 bubble sort。
|
||||
<footnote>
|
||||
<para>剛所說的 binary sort 和 bubble sort 問題,
|
||||
在已排序好的序列中,binary sort 搜索效率會比 bubble sort 好。</para>
|
||||
<para>剛所說的 binary sort 和 bubble sort 問題,
|
||||
在已排序好的序列中,binary sort 搜索效率會比 bubble sort 好。</para>
|
||||
</footnote></para>
|
||||
|
||||
<para><command>cc</command> 有非常多的選項,都可透過線上手冊來查。
|
||||
下面只提一些必要且重要的選項,以作為例子。</para>
|
||||
<para><command>cc</command> 有非常多的選項,都可透過線上手冊來查。
|
||||
下面只提一些必要且重要的選項,以作為例子。</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><option>-o <replaceable>檔名</replaceable></option></term>
|
||||
<term><option>-o <replaceable>檔名</replaceable></option></term>
|
||||
|
||||
<listitem>
|
||||
<para><option>-o</option> 編譯後的執行檔檔名,如果沒有使用這選項的話,
|
||||
編譯好的程式預設檔名將會是 <filename>a.out</filename>
|
||||
<para><option>-o</option> 編譯後的執行檔檔名,如果沒有使用這選項的話,
|
||||
編譯好的程式預設檔名將會是 <filename>a.out</filename>
|
||||
|
||||
<footnote>
|
||||
<para>至於 <option>-o</option> 的原因,則是一團歷史迷霧了。</para>
|
||||
<para>至於 <option>-o</option> 的原因,則是一團歷史迷霧了。</para>
|
||||
</footnote></para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>cc foobar.c</userinput> <lineannotation>執行檔就是 a.out</lineannotation>
|
||||
&prompt.user; <userinput>cc -o foobar foobar.c</userinput> <lineannotation>執行檔就是 foobar</lineannotation>
|
||||
<screen>&prompt.user; <userinput>cc foobar.c</userinput> <lineannotation>執行檔就是 a.out</lineannotation>
|
||||
&prompt.user; <userinput>cc -o foobar foobar.c</userinput> <lineannotation>執行檔就是 foobar</lineannotation>
|
||||
</screen>
|
||||
</informalexample>
|
||||
</listitem>
|
||||
|
@ -354,8 +354,8 @@
|
|||
<term><option>-c</option></term>
|
||||
|
||||
<listitem>
|
||||
<para>使用 <option>-c</option> 時,只會編譯原始碼,而不作連結(linking)。
|
||||
當只想確認語法是否正確或使用 Makefile 來編譯程式時,這個選項非常有用。</para>
|
||||
<para>使用 <option>-c</option> 時,只會編譯原始碼,而不作連結(linking)。
|
||||
當只想確認語法是否正確或使用 Makefile 來編譯程式時,這個選項非常有用。</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>
|
||||
|
@ -363,8 +363,8 @@
|
|||
</screen>
|
||||
</informalexample>
|
||||
|
||||
<para>這會產生叫做 <filename>foobar</filename> 的 <firstterm>object file</firstterm>(非執行檔)。
|
||||
這檔可以與其他的 object file 連結在一起,而成執行檔。</para>
|
||||
<para>這會產生叫做 <filename>foobar</filename> 的 <firstterm>object file</firstterm>(非執行檔)。
|
||||
這檔可以與其他的 object file 連結在一起,而成執行檔。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
@ -372,24 +372,24 @@
|
|||
<term><option>-g</option></term>
|
||||
|
||||
<listitem>
|
||||
<para><option>-g</option> 將會把一些給 gdb 用的除錯訊息包進去執行檔裡面,所謂的除錯訊息例如:
|
||||
程式在第幾行出錯、那個程式第幾行做什麼函式呼叫等等。除錯資訊<emphasis>非常</emphasis>好用。
|
||||
但缺點就是:對於程式來說,額外的除錯訊息會讓編譯出來的程式比較肥些。
|
||||
<option>-g</option> 的適用時機在於:當程式還在開發時使用就好,
|
||||
而當你要釋出你的 <quote>發行版本(release version)</quote>
|
||||
或者確認程式可運作正常的話,就不必用 <option>-g</option> 這選項了。</para>
|
||||
<para><option>-g</option> 將會把一些給 gdb 用的除錯訊息包進去執行檔裡面,所謂的除錯訊息例如:
|
||||
程式在第幾行出錯、那個程式第幾行做什麼函式呼叫等等。除錯資訊<emphasis>非常</emphasis>好用。
|
||||
但缺點就是:對於程式來說,額外的除錯訊息會讓編譯出來的程式比較肥些。
|
||||
<option>-g</option> 的適用時機在於:當程式還在開發時使用就好,
|
||||
而當你要釋出你的 <quote>發行版本(release version)</quote>
|
||||
或者確認程式可運作正常的話,就不必用 <option>-g</option> 這選項了。</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>cc -g foobar.c</userinput>
|
||||
</screen>
|
||||
</informalexample>
|
||||
|
||||
<para>這動作會產生有含除錯訊息的執行檔。
|
||||
<para>這動作會產生有含除錯訊息的執行檔。
|
||||
<footnote>
|
||||
<para>請注意,因為上例沒用 <option>-o</option> 以指定執行檔名稱,
|
||||
所以執行檔會是 <filename>a.out</filename> 這檔。
|
||||
那麼,要如何產生 <filename>foobar</filename> 的執行檔並內含除錯訊息,
|
||||
這就留待看倌們練習一下囉。</para>
|
||||
<para>請注意,因為上例沒用 <option>-o</option> 以指定執行檔名稱,
|
||||
所以執行檔會是 <filename>a.out</filename> 這檔。
|
||||
那麼,要如何產生 <filename>foobar</filename> 的執行檔並內含除錯訊息,
|
||||
這就留待看倌們練習一下囉。</para>
|
||||
</footnote></para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
@ -398,35 +398,35 @@
|
|||
<term><option>-O</option></term>
|
||||
|
||||
<listitem>
|
||||
<para><option>-O</option> 會產生最佳化的執行檔,
|
||||
編譯器會使用一些技巧,來讓程式可以跑的比未經最佳化的程式還快,
|
||||
可以在大寫 O 後面加上數字來指明想要的最佳化層級。
|
||||
但是最佳化還是會有一些錯誤,舉例來說在 FreeBSD 2.10 release 中用 <command>cc</command>
|
||||
且指定 <option>-O2</option> 時,在某些情形下會產生錯誤的執行檔。</para>
|
||||
<para><option>-O</option> 會產生最佳化的執行檔,
|
||||
編譯器會使用一些技巧,來讓程式可以跑的比未經最佳化的程式還快,
|
||||
可以在大寫 O 後面加上數字來指明想要的最佳化層級。
|
||||
但是最佳化還是會有一些錯誤,舉例來說在 FreeBSD 2.10 release 中用 <command>cc</command>
|
||||
且指定 <option>-O2</option> 時,在某些情形下會產生錯誤的執行檔。</para>
|
||||
|
||||
<para>只有當要釋出發行版本、或者加速程式時,才需要使用最佳化選項。</para>
|
||||
<para>只有當要釋出發行版本、或者加速程式時,才需要使用最佳化選項。</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>cc -O -o foobar foobar.c</userinput>
|
||||
</screen>
|
||||
</informalexample>
|
||||
|
||||
<para>這會產生 <filename>foobar</filename> 執行檔的最佳化版本。</para>
|
||||
<para>這會產生 <filename>foobar</filename> 執行檔的最佳化版本。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>以下三個參數將會強迫 <command>cc</command> 確認程式碼是否符合一些國際標準的規範,
|
||||
也就是通常說的 <acronym>ANSI</acronym> 標準,
|
||||
而 <acronym>ANSI</acronym> 嚴格來講屬 <acronym>ISO</acronym> 標準。</para>
|
||||
<para>以下三個參數將會強迫 <command>cc</command> 確認程式碼是否符合一些國際標準的規範,
|
||||
也就是通常說的 <acronym>ANSI</acronym> 標準,
|
||||
而 <acronym>ANSI</acronym> 嚴格來講屬 <acronym>ISO</acronym> 標準。</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><option>-Wall</option></term>
|
||||
|
||||
<listitem>
|
||||
<para><option>-Wall</option> 顯示 <command>cc</command> 維護者所認為值得注意的所有警告訊息。
|
||||
不過這名字可能會造成誤解,事實上它並未完全顯示 <command>cc</command> 所能注意到的各項警告訊息。</para>
|
||||
<para><option>-Wall</option> 顯示 <command>cc</command> 維護者所認為值得注意的所有警告訊息。
|
||||
不過這名字可能會造成誤解,事實上它並未完全顯示 <command>cc</command> 所能注意到的各項警告訊息。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
@ -434,8 +434,8 @@
|
|||
<term><option>-ansi</option></term>
|
||||
|
||||
<listitem>
|
||||
<para><option>-ansi</option> 關閉 <command>cc</command> 特有的某些特殊非 ANSI C 標準功能。
|
||||
不過這名字可能會造成誤解,事實上它並不保證你的程式會完全符合 ANSI 標準。</para>
|
||||
<para><option>-ansi</option> 關閉 <command>cc</command> 特有的某些特殊非 ANSI C 標準功能。
|
||||
不過這名字可能會造成誤解,事實上它並不保證你的程式會完全符合 ANSI 標準。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
@ -443,82 +443,82 @@
|
|||
<term><option>-pedantic</option></term>
|
||||
|
||||
<listitem>
|
||||
<para>全面關閉 <command>cc</command> 所特有的非 <acronym>ANSI</acronym> C 標準功能。</para>
|
||||
<para>全面關閉 <command>cc</command> 所特有的非 <acronym>ANSI</acronym> C 標準功能。</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>除了這些參數,<command>cc</command> 還允許你使用一些額外的參數取代標準參數,有些額外參數非常有用,
|
||||
但是實際上並不是所有的編譯器都有提供這些參數。
|
||||
照標準來寫程式的最主要目的就是,希望你寫出來的程式可以在所有編譯器上編譯、執行無誤,
|
||||
當程式可以達成上述目的時,就稱為 <firstterm>portable code(移植性良好的程式碼)</firstterm>。</para>
|
||||
<para>除了這些參數,<command>cc</command> 還允許你使用一些額外的參數取代標準參數,有些額外參數非常有用,
|
||||
但是實際上並不是所有的編譯器都有提供這些參數。
|
||||
照標準來寫程式的最主要目的就是,希望你寫出來的程式可以在所有編譯器上編譯、執行無誤,
|
||||
當程式可以達成上述目的時,就稱為 <firstterm>portable code(移植性良好的程式碼)</firstterm>。</para>
|
||||
|
||||
<para>一般來說,在撰寫程式時就應要注意『移植性』。
|
||||
否則。當想把程式拿到另外一台機器上跑的時候,就可能得需要重寫程式。</para>
|
||||
<para>一般來說,在撰寫程式時就應要注意『移植性』。
|
||||
否則。當想把程式拿到另外一台機器上跑的時候,就可能得需要重寫程式。</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>cc -Wall -ansi -pedantic -o foobar foobar.c</userinput></screen>
|
||||
</informalexample>
|
||||
|
||||
<para>上述指令會確認 <filename>foobar.c</filename> 內的語法是否符合標準,
|
||||
並且產生名為 <filename>foobar</filename> 的執行檔。</para>
|
||||
<para>上述指令會確認 <filename>foobar.c</filename> 內的語法是否符合標準,
|
||||
並且產生名為 <filename>foobar</filename> 的執行檔。</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><option>-l<replaceable>library</replaceable></option></term>
|
||||
|
||||
<listitem>
|
||||
<para>告訴 gcc 在連結(linking)程式時你需要用到的函式庫名稱。</para>
|
||||
<para>告訴 gcc 在連結(linking)程式時你需要用到的函式庫名稱。</para>
|
||||
|
||||
<para>最常見的情況就是,當你在程式中使用了 C 數學函式庫,
|
||||
跟其他作業平台不一樣的是,這函示學函式都不在標準函式庫(library)中,
|
||||
因此編譯器並不知道這函式庫名稱,你必須告訴編譯器要加上它才行。</para>
|
||||
<para>最常見的情況就是,當你在程式中使用了 C 數學函式庫,
|
||||
跟其他作業平台不一樣的是,這函示學函式都不在標準函式庫(library)中,
|
||||
因此編譯器並不知道這函式庫名稱,你必須告訴編譯器要加上它才行。</para>
|
||||
|
||||
<para>規則很簡單,如果有個函式庫叫做 <filename>libsomething.a</filename>,
|
||||
就必須在編譯時加上參數 <option>-l<replaceable>something</replaceable></option> 才行。
|
||||
舉例來說,數學函式庫叫做 <filename>libm.a</filename>,
|
||||
所以你必須給 <command>cc</command> 的參數就是 <option>-lm</option>。
|
||||
一般情況下,通常會把這參數必須放在指令的最後。</para>
|
||||
<para>規則很簡單,如果有個函式庫叫做 <filename>libsomething.a</filename>,
|
||||
就必須在編譯時加上參數 <option>-l<replaceable>something</replaceable></option> 才行。
|
||||
舉例來說,數學函式庫叫做 <filename>libm.a</filename>,
|
||||
所以你必須給 <command>cc</command> 的參數就是 <option>-lm</option>。
|
||||
一般情況下,通常會把這參數必須放在指令的最後。</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>cc -o foobar foobar.c -lm</userinput>
|
||||
</screen>
|
||||
</informalexample>
|
||||
|
||||
<para>上面這指令會讓 gcc 跟數學函式庫作連結,以便你的程式可以呼叫函式庫內含的數學函式。</para>
|
||||
<para>上面這指令會讓 gcc 跟數學函式庫作連結,以便你的程式可以呼叫函式庫內含的數學函式。</para>
|
||||
|
||||
<para>如果你正在編譯的程式是 C++ 程式碼,你還必須額外指定 <option>-lg++</option> 或者是
|
||||
<option>-lstdc++</option>。
|
||||
如果你的 FreeBSD 是 2.2(含)以後版本,
|
||||
你可以用指令 <command>c++</command> 來取代 <command>cc</command>。
|
||||
在 FreeBSD 上 <command>c++</command> 也可以用 <command>g++</command> 取代。</para>
|
||||
<para>如果你正在編譯的程式是 C++ 程式碼,你還必須額外指定 <option>-lg++</option> 或者是
|
||||
<option>-lstdc++</option>。
|
||||
如果你的 FreeBSD 是 2.2(含)以後版本,
|
||||
你可以用指令 <command>c++</command> 來取代 <command>cc</command>。
|
||||
在 FreeBSD 上 <command>c++</command> 也可以用 <command>g++</command> 取代。</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>cc -o foobar foobar.cc -lg++</userinput> <lineannotation>適用 FreeBSD 2.1.6 或更早期的版本</lineannotation>
|
||||
&prompt.user; <userinput>cc -o foobar foobar.cc -lstdc++</userinput> <lineannotation>適用 FreeBSD 2.2 及之後的版本</lineannotation>
|
||||
<screen>&prompt.user; <userinput>cc -o foobar foobar.cc -lg++</userinput> <lineannotation>適用 FreeBSD 2.1.6 或更早期的版本</lineannotation>
|
||||
&prompt.user; <userinput>cc -o foobar foobar.cc -lstdc++</userinput> <lineannotation>適用 FreeBSD 2.2 及之後的版本</lineannotation>
|
||||
&prompt.user; <userinput>c++ -o foobar foobar.cc</userinput>
|
||||
</screen>
|
||||
</informalexample>
|
||||
|
||||
<para>上述指令都會從原始檔 <filename>foobar.cc</filename> 編譯產生名為 <filename>fooboar</filename> 的執行檔。
|
||||
這邊要提醒的是在 &unix; 系統中 C++ 程式傳統都以 <filename>.C</filename>、
|
||||
<filename>.cxx</filename> 或者是 <filename>.cc</filename> 作為副檔名,
|
||||
而非 &ms-dos; 那種以 <filename>.cpp</filename> 作為副檔名的命名方式(不過也越來越普遍了)。
|
||||
<command>gcc</command> 會依副檔名來決定用哪一種編譯器編譯,
|
||||
然而,現在已經不再限制副檔名了,
|
||||
所以可以自由的使用 <filename>.cpp</filename> 作為 C++ 程式碼的副檔名!</para>
|
||||
<para>上述指令都會從原始檔 <filename>foobar.cc</filename> 編譯產生名為 <filename>fooboar</filename> 的執行檔。
|
||||
這邊要提醒的是在 &unix; 系統中 C++ 程式傳統都以 <filename>.C</filename>、
|
||||
<filename>.cxx</filename> 或者是 <filename>.cc</filename> 作為副檔名,
|
||||
而非 &ms-dos; 那種以 <filename>.cpp</filename> 作為副檔名的命名方式(不過也越來越普遍了)。
|
||||
<command>gcc</command> 會依副檔名來決定用哪一種編譯器編譯,
|
||||
然而,現在已經不再限制副檔名了,
|
||||
所以可以自由的使用 <filename>.cpp</filename> 作為 C++ 程式碼的副檔名!</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<sect2>
|
||||
<title>常見的 <command>cc</command> 問題</title>
|
||||
<title>常見的 <command>cc</command> 問題</title>
|
||||
|
||||
<qandaset>
|
||||
<qandaentry>
|
||||
<question>
|
||||
<para>我用 <function>sin()</function> 函示撰寫我的程式,
|
||||
但是有個錯誤訊息(如下),這代表著?</para>
|
||||
<para>我用 <function>sin()</function> 函示撰寫我的程式,
|
||||
但是有個錯誤訊息(如下),這代表著?</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>/var/tmp/cc0143941.o: Undefined symbol `_sin' referenced from text segment
|
||||
|
@ -527,8 +527,8 @@
|
|||
</question>
|
||||
|
||||
<answer>
|
||||
<para>當使用 <function>sin()</function> 這類的數學函示時,
|
||||
你必須告訴 cc 要和數學函式庫作連結(linking),就像這樣:</para>
|
||||
<para>當使用 <function>sin()</function> 這類的數學函示時,
|
||||
你必須告訴 cc 要和數學函式庫作連結(linking),就像這樣:</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>cc -o foobar foobar.c -lm</userinput>
|
||||
|
@ -539,7 +539,7 @@
|
|||
|
||||
<qandaentry>
|
||||
<question>
|
||||
<para>好吧,我試著寫些簡單的程式,來練習使用 -lm 選項(該程式會運算 2.1 的 6 次方)</para>
|
||||
<para>好吧,我試著寫些簡單的程式,來練習使用 -lm 選項(該程式會運算 2.1 的 6 次方)</para>
|
||||
|
||||
<informalexample>
|
||||
<programlisting>#include <stdio.h>
|
||||
|
@ -554,14 +554,14 @@ int main() {
|
|||
</programlisting>
|
||||
</informalexample>
|
||||
|
||||
<para>然後進行編譯:</para>
|
||||
<para>然後進行編譯:</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>cc temp.c -lm</userinput>
|
||||
</screen>
|
||||
</informalexample>
|
||||
|
||||
<para>編譯後執行程式,得到下面這結果:</para>
|
||||
<para>編譯後執行程式,得到下面這結果:</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>./a.out</userinput>
|
||||
|
@ -569,24 +569,24 @@ int main() {
|
|||
</screen>
|
||||
</informalexample>
|
||||
|
||||
<para>很明顯的,程式結果<emphasis>不是</emphasis>正確答案,到底是哪邊出錯?</para>
|
||||
<para>很明顯的,程式結果<emphasis>不是</emphasis>正確答案,到底是哪邊出錯?</para>
|
||||
</question>
|
||||
|
||||
<answer>
|
||||
<para>當編譯器發現你呼叫一個函示時,它會確認該函示的回傳值類型(prototype),
|
||||
如果沒有特別指明,則預設的回傳值類型為 <type>int(整數)</type>。
|
||||
很明顯的,你的程式所需要的並不是回傳值類別為 <type>int</type>。</para>
|
||||
<para>當編譯器發現你呼叫一個函示時,它會確認該函示的回傳值類型(prototype),
|
||||
如果沒有特別指明,則預設的回傳值類型為 <type>int(整數)</type>。
|
||||
很明顯的,你的程式所需要的並不是回傳值類別為 <type>int</type>。</para>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
|
||||
<qandaentry>
|
||||
<question>
|
||||
<para>那如何才可以修正剛所說的問題?</para>
|
||||
<para>那如何才可以修正剛所說的問題?</para>
|
||||
</question>
|
||||
|
||||
<answer>
|
||||
<para>數學函示的回傳值類型(prototype)會定義在 <filename>math.h</filename>,
|
||||
如果你有 include 這檔,編譯器就會知道該函示的回傳值類型,如此一來該運算就會得到正確的結果!</para>
|
||||
<para>數學函示的回傳值類型(prototype)會定義在 <filename>math.h</filename>,
|
||||
如果你有 include 這檔,編譯器就會知道該函示的回傳值類型,如此一來該運算就會得到正確的結果!</para>
|
||||
|
||||
<informalexample>
|
||||
<programlisting>#include <math.h>
|
||||
|
@ -597,7 +597,7 @@ int main() {
|
|||
</programlisting>
|
||||
</informalexample>
|
||||
|
||||
<para>加了上述內容之後,再重新編譯,最後執行:</para>
|
||||
<para>加了上述內容之後,再重新編譯,最後執行:</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>./a.out</userinput>
|
||||
|
@ -605,21 +605,21 @@ int main() {
|
|||
</screen>
|
||||
</informalexample>
|
||||
|
||||
<para>如果有用到數學函式,<emphasis>請確定</emphasis>要有 include <filename>math.h</filename> 這檔,
|
||||
而且記得要和數學函式庫作連結。</para>
|
||||
<para>如果有用到數學函式,<emphasis>請確定</emphasis>要有 include <filename>math.h</filename> 這檔,
|
||||
而且記得要和數學函式庫作連結。</para>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
|
||||
<qandaentry>
|
||||
<question>
|
||||
<para>已經編譯好 <filename>foobar.c</filename>,
|
||||
但是編譯後找不到 <filename>foobar</filename> 執行檔。 該去哪邊找呢?</para>
|
||||
<para>已經編譯好 <filename>foobar.c</filename>,
|
||||
但是編譯後找不到 <filename>foobar</filename> 執行檔。 該去哪邊找呢?</para>
|
||||
</question>
|
||||
|
||||
<answer>
|
||||
<para>記得,除非有指定編譯結果的執行檔檔名,否則預設的執行檔檔名是 a.out。
|
||||
用 <option>-o <replaceable>filename</replaceable></option> 參數,
|
||||
就可以達到所想要的結果,比如:</para>
|
||||
<para>記得,除非有指定編譯結果的執行檔檔名,否則預設的執行檔檔名是 a.out。
|
||||
用 <option>-o <replaceable>filename</replaceable></option> 參數,
|
||||
就可以達到所想要的結果,比如:</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>cc -o foobar foobar.c</userinput>
|
||||
|
@ -630,88 +630,88 @@ int main() {
|
|||
|
||||
<qandaentry>
|
||||
<question>
|
||||
<para>好,有個編譯好的程式叫做 <filename>foobar</filename>,
|
||||
用 <command>ls</command> 指令時可以看到,
|
||||
但執行時,訊息卻說卻沒有這檔案。為什麼?</para>
|
||||
<para>好,有個編譯好的程式叫做 <filename>foobar</filename>,
|
||||
用 <command>ls</command> 指令時可以看到,
|
||||
但執行時,訊息卻說卻沒有這檔案。為什麼?</para>
|
||||
</question>
|
||||
|
||||
<answer>
|
||||
<para>與 &ms-dos; 不同的是,除非有指定執行檔的路徑,
|
||||
否則 &unix; 系統並不會在目前的目錄下尋找你想執行的檔案。
|
||||
在指令列下打 <command>./foobar</command> 代表
|
||||
<quote>執行在這個目錄底下名為 <filename>foobar</filename> 的程式</quote>,
|
||||
或者也可以更改 <envar>PATH</envar> 環境變數設定如下,以達成類似效果:</para>
|
||||
<para>與 &ms-dos; 不同的是,除非有指定執行檔的路徑,
|
||||
否則 &unix; 系統並不會在目前的目錄下尋找你想執行的檔案。
|
||||
在指令列下打 <command>./foobar</command> 代表
|
||||
<quote>執行在這個目錄底下名為 <filename>foobar</filename> 的程式</quote>,
|
||||
或者也可以更改 <envar>PATH</envar> 環境變數設定如下,以達成類似效果:</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>bin:/usr/bin:/usr/local/bin:.
|
||||
</screen>
|
||||
</informalexample>
|
||||
|
||||
<para>上一行最後的 "." 代表<quote>如果在前面寫的其他目錄找不到,就找目前的目錄</quote>。</para>
|
||||
<para>上一行最後的 "." 代表<quote>如果在前面寫的其他目錄找不到,就找目前的目錄</quote>。</para>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
|
||||
<qandaentry>
|
||||
<question>
|
||||
<para>試著執行 <filename>test</filename> 執行檔,
|
||||
但是卻沒有任何事發生,到底是哪裡出錯了?</para>
|
||||
<para>試著執行 <filename>test</filename> 執行檔,
|
||||
但是卻沒有任何事發生,到底是哪裡出錯了?</para>
|
||||
</question>
|
||||
|
||||
<answer>
|
||||
<para>大多數的 &unix; 系統都會在路徑 <filename>/usr/bin</filename> 擺放執行檔。
|
||||
除非有指定使用在目前目錄內的 <filename>test</filename>,否則 shell 會優先選擇位在
|
||||
<filename>/usr/bin</filename> 的 <filename>test</filename>,
|
||||
要指定檔名的話,作法類似:</para>
|
||||
<para>大多數的 &unix; 系統都會在路徑 <filename>/usr/bin</filename> 擺放執行檔。
|
||||
除非有指定使用在目前目錄內的 <filename>test</filename>,否則 shell 會優先選擇位在
|
||||
<filename>/usr/bin</filename> 的 <filename>test</filename>,
|
||||
要指定檔名的話,作法類似:</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>./test</userinput>
|
||||
</screen>
|
||||
</informalexample>
|
||||
|
||||
<para>為了避免上述困擾,請為你的程式取更好的名稱吧!</para>
|
||||
<para>為了避免上述困擾,請為你的程式取更好的名稱吧!</para>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
|
||||
<qandaentry>
|
||||
<question>
|
||||
<para>當執行我寫的程式時剛開始正常,
|
||||
接下來卻出現 <errorname>core dumped</errorname> 錯誤訊息。這錯誤訊息到底代表什麼?</para>
|
||||
<para>當執行我寫的程式時剛開始正常,
|
||||
接下來卻出現 <errorname>core dumped</errorname> 錯誤訊息。這錯誤訊息到底代表什麼?</para>
|
||||
</question>
|
||||
|
||||
<answer>
|
||||
<para>關於 <firstterm>core dumped</firstterm> 這個名稱的由來,
|
||||
可以追溯到早期的 &unix; 系統開始使用 core memory 對資料排序時。
|
||||
基本上當程式在很多情況下發生錯誤後,
|
||||
作業系統會把 core memory 中的資訊寫入 <filename>core</filename> 這檔案中,
|
||||
以便讓 programmer 知道程式到底是為何出錯。</para>
|
||||
<para>關於 <firstterm>core dumped</firstterm> 這個名稱的由來,
|
||||
可以追溯到早期的 &unix; 系統開始使用 core memory 對資料排序時。
|
||||
基本上當程式在很多情況下發生錯誤後,
|
||||
作業系統會把 core memory 中的資訊寫入 <filename>core</filename> 這檔案中,
|
||||
以便讓 programmer 知道程式到底是為何出錯。</para>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
|
||||
<qandaentry>
|
||||
<question>
|
||||
<para>真是太神奇了!程式居然發生 <errorname>core dumped</errorname> 了,該怎麼辦?</para>
|
||||
<para>真是太神奇了!程式居然發生 <errorname>core dumped</errorname> 了,該怎麼辦?</para>
|
||||
</question>
|
||||
|
||||
<answer>
|
||||
<para>請用 <command>gdb</command> 來分析 core 結果(詳情請參考 <xref linkend="debugging"/>)。</para>
|
||||
<para>請用 <command>gdb</command> 來分析 core 結果(詳情請參考 <xref linkend="debugging"/>)。</para>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
|
||||
<qandaentry>
|
||||
<question>
|
||||
<para>當程式已經把 core memory 資料 dump 出來後,
|
||||
同時也出現另一個錯誤 <errorname>segmentation fault</errorname> 這意思是?</para>
|
||||
<para>當程式已經把 core memory 資料 dump 出來後,
|
||||
同時也出現另一個錯誤 <errorname>segmentation fault</errorname> 這意思是?</para>
|
||||
</question>
|
||||
|
||||
<answer>
|
||||
<para>基本上,這個錯誤表示你的程式在記憶體中試著做一個嚴重的非法運作(illegal operation),
|
||||
&unix; 就是被設計來保護整個作業系統免於被惡質的程式破壞,所以才會告訴你這個訊息。</para>
|
||||
<para>基本上,這個錯誤表示你的程式在記憶體中試著做一個嚴重的非法運作(illegal operation),
|
||||
&unix; 就是被設計來保護整個作業系統免於被惡質的程式破壞,所以才會告訴你這個訊息。</para>
|
||||
|
||||
<para>最常造成<quote>segmentation fault</quote>的原因通常為:</para>
|
||||
<para>最常造成<quote>segmentation fault</quote>的原因通常為:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>試著對一個 <symbol>NULL</symbol> 的指標(pointer)作寫入的動作,如</para>
|
||||
<para>試著對一個 <symbol>NULL</symbol> 的指標(pointer)作寫入的動作,如</para>
|
||||
|
||||
<programlisting>char *foo = NULL;
|
||||
strcpy(foo, "bang!");
|
||||
|
@ -719,21 +719,21 @@ strcpy(foo, "bang!");
|
|||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>使用一個尚未初始化(initialized)的指標,如:</para>
|
||||
<para>使用一個尚未初始化(initialized)的指標,如:</para>
|
||||
|
||||
<programlisting>char *foo;
|
||||
strcpy(foo, "bang!");
|
||||
</programlisting>
|
||||
|
||||
<para>尚未初始化的指標的初始值將會是隨機的,如果你夠幸運的話,
|
||||
這個指標的初始值會指向 kernel 已經用到的記憶體位置,
|
||||
kernel 會結束掉這個程式以確保系統運作正常。如果你不夠幸運,
|
||||
初始指到的記憶體位置是你程式必須要用到的資料結構(data structures)的位置,
|
||||
當這個情形發生時程式將會當的不知其所以然。</para>
|
||||
<para>尚未初始化的指標的初始值將會是隨機的,如果你夠幸運的話,
|
||||
這個指標的初始值會指向 kernel 已經用到的記憶體位置,
|
||||
kernel 會結束掉這個程式以確保系統運作正常。如果你不夠幸運,
|
||||
初始指到的記憶體位置是你程式必須要用到的資料結構(data structures)的位置,
|
||||
當這個情形發生時程式將會當的不知其所以然。</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>試著寫入超過陣列(array)元素個數,如:</para>
|
||||
<para>試著寫入超過陣列(array)元素個數,如:</para>
|
||||
|
||||
<programlisting>int bar[20];
|
||||
bar[27] = 6;
|
||||
|
@ -741,7 +741,7 @@ bar[27] = 6;
|
|||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>試著讀寫在唯讀記憶體(read-only memory)中的資料,如:</para>
|
||||
<para>試著讀寫在唯讀記憶體(read-only memory)中的資料,如:</para>
|
||||
|
||||
<programlisting>char *foo = "My string";
|
||||
strcpy(foo, "bang!");
|
|
@ -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 \
|
11876
zh_TW.UTF-8/books/faq/book.xml
Normal file
11876
zh_TW.UTF-8/books/faq/book.xml
Normal file
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>這些例子並不是很詳細 — 並未包括你可能想用的元件,
|
||||
尤其像是你文件的前頁(正文前的書頁,包括扉頁、序言、目錄等)
|
||||
若需參考更多 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 標記語言文件的話,那麼可以透過 <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
|
241
zh_TW.UTF-8/books/fdp-primer/overview/chapter.xml
Normal file
241
zh_TW.UTF-8/books/fdp-primer/overview/chapter.xml
Normal file
|
@ -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><!-- 測試註解 --></programlisting>
|
||||
<programlisting><!-- 測試註解 --></programlisting>
|
||||
|
||||
<programlisting>
|
||||
<!‐- 這是註解 -‐>
|
||||
<!‐- 這是註解 -‐>
|
||||
|
||||
<!‐- 這也是註解 -‐>
|
||||
<!‐- 這也是註解 -‐>
|
||||
|
||||
<!‐- 要寫多行註解的話,
|
||||
這是其中之一的方式 -‐>
|
||||
<!‐- 要寫多行註解的話,
|
||||
這是其中之一的方式 -‐>
|
||||
|
||||
<!‐- 要寫多行註解, -‐
|
||||
‐- 也可以這樣子用 -‐></programlisting>
|
||||
<!‐- 要寫多行註解, -‐
|
||||
‐- 也可以這樣子用 -‐></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>
|
235
zh_TW.UTF-8/books/fdp-primer/tools/chapter.xml
Normal file
235
zh_TW.UTF-8/books/fdp-primer/tools/chapter.xml
Normal file
|
@ -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>
|
383
zh_TW.UTF-8/books/fdp-primer/translations/chapter.xml
Normal file
383
zh_TW.UTF-8/books/fdp-primer/translations/chapter.xml
Normal file
|
@ -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ü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>然後,就開始翻文件囉,一開始翻譯的時候,先找些篇幅較短的文件會比較容易些
|
||||
— 像是 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>我們想不出來有啥原因,為什麼不把這些資訊提供給英文版呢?(或是德文、西班牙文、日文等 …)
|
||||
因為,有可能英語讀者跑去韓國時,會想買 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>簡單來說,長相一開頭會是 & 符號(&),然後是該 entity 名稱,最後接上分號(;)。</para>
|
||||
|
||||
<para>這些 entity 名稱都是 ISO8879 所制訂的,而 port tree 內則在
|
||||
<package>textproc/iso8879</package>。</para>
|
||||
|
||||
<para>以下舉一些例子:</para>
|
||||
|
||||
<segmentedlist>
|
||||
<segtitle>Entity名稱</segtitle>
|
||||
|
||||
<segtitle>實際樣子</segtitle>
|
||||
|
||||
<segtitle>介紹</segtitle>
|
||||
|
||||
<seglistitem>
|
||||
<seg>&eacute;</seg>
|
||||
<seg>é</seg>
|
||||
<seg>小 <quote>e</quote>,並帶尖、重音(acute accent)</seg>
|
||||
</seglistitem>
|
||||
|
||||
<seglistitem>
|
||||
<seg>&Eacute;</seg>
|
||||
<seg>É</seg>
|
||||
<seg>大 <quote>E</quote>,並帶尖、重音(acute accent)</seg>
|
||||
</seglistitem>
|
||||
|
||||
<seglistitem>
|
||||
<seg>&uuml;</seg>
|
||||
<seg>ü</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><!--
|
||||
The FreeBSD Documentation Project
|
||||
|
||||
$FreeBSD: doc/en_US.ISO8859-1/books/fdp-primer/translations/chapter.xml,v 1.5 2000/07/07 18:38:38 dannyboy Exp $
|
||||
--></programlisting>
|
||||
|
||||
<para>實際上的內容可能稍有不同,但每份原稿都會附上 $FreeBSD$ 這一行以及
|
||||
<literal>The FreeBSD Documentation Project</literal> 宣告。
|
||||
請注意:$FreeBSD 開頭的這行是會由 CVS 隨著每次異動而自動更改的,
|
||||
所以,新檔案的話請保持原狀(也就是只要寫 <literal>$FreeBSD$</literal> 就好了)。</para>
|
||||
|
||||
<para>翻譯文件中,必須都要有 $FreeBSD$ 這行,並且把
|
||||
<literal>FreeBSD Documentation Project</literal> 這行改為
|
||||
<literal>The FreeBSD 你的語系
|
||||
Documentation Project</literal>。</para>
|
||||
|
||||
<para>此外,還必須加上第三行來指出你所翻譯的,到底是以英文版原稿的哪一版本為母本所做的翻譯。</para>
|
||||
|
||||
<para>因此呢,西班牙文版(Spanish)的檔案開頭應該是長像這樣:</para>
|
||||
|
||||
<programlisting><!--
|
||||
The FreeBSD Spanish Documentation Project
|
||||
|
||||
$FreeBSD: doc/es_ES.ISO8859-1/books/fdp-primer/translations/chapter.xml,v 1.3 1999/06/24 19:12:32 jesusr Exp $
|
||||
Original revision: 1.11
|
||||
--></programlisting>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
</qandaset>
|
||||
</chapter>
|
440
zh_TW.UTF-8/books/fdp-primer/writing-style/chapter.xml
Normal file
440
zh_TW.UTF-8/books/fdp-primer/writing-style/chapter.xml
Normal file
|
@ -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>… 在這個
|
||||
<filename>/etc/rc.local</filename> 檔案 …</para>
|
||||
</informalexample>
|
||||
|
||||
<informalexample>
|
||||
<para>… 在
|
||||
<filename>/etc/rc.local</filename> 檔 …</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><para></literal>
|
||||
,<emphasis>而非</emphasis> <literal><PARA></literal>。</para>
|
||||
|
||||
<para>而 SGML 內文則是用大寫字母表示,像是:
|
||||
<literal><!ENTITY…></literal> 及
|
||||
<literal><!DOCTYPE…></literal>,
|
||||
<emphasis>而不是</emphasis>
|
||||
<literal><!entity…></literal> 及
|
||||
<literal><!doctype…></literal>。</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title>縮寫字</title>
|
||||
|
||||
<para>縮寫字(acronym)通常在書中第一次提到時,必須同時列出完整拼法,
|
||||
比如:"Network Time Protocol (<acronym role="Network Time Protocol">NTP</acronym>)"。
|
||||
定義縮寫字之後,應該儘量只使用該縮寫字(而非完整詞彙,
|
||||
除非使用完整詞彙可以更能表達語意)來表達即可。
|
||||
通常每本書只會第一次提到時,才會列出完整詞彙,
|
||||
但若您高興也可以在每章第一次提到時又列出完整詞彙。</para>
|
||||
|
||||
<para>此外,同一縮寫字在前三次使用時,須使用 <acronym> 標籤,
|
||||
並把完整詞彙附在 <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 …</literallayout>
|
||||
|
||||
<para>請使用 <literal>&nbsp;</literal> 以避免同句子之間的斷行,
|
||||
以下示範如何使用 nonbreaking spaces:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>在數字與單位之間:</para>
|
||||
<programlisting><![CDATA[57600 bps]]></programlisting>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>在程式名稱與版號之間:</para>
|
||||
<programlisting><![CDATA[FreeBSD 4.7]]></programlisting>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>multiword 之間 (使用時請小心,像是 <quote>The FreeBSD Brazilian
|
||||
Portuguese Documentation Project</quote> 這類由三到四個字所組成的,
|
||||
則不用加。):</para>
|
||||
<programlisting><![CDATA[Sun 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$
|
2366
zh_TW.UTF-8/books/handbook/basics/chapter.xml
Normal file
2366
zh_TW.UTF-8/books/handbook/basics/chapter.xml
Normal file
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…
Reference in a new issue