Traditional Chinese handbook update:

- Catch up the latest handbook architecture
- Translate "cutting-edge" chapter

PR:		193066, 193715, 193750
Differential Revision:	https://reviews.freebsd.org/D2284
Submitted by:	RayCherng Yu <raycherng@gmail.com>
Reviewed by:	delphij, wblock
Approved by:	delphij, wblock
This commit is contained in:
Li-Wen Hsu 2015-04-14 21:06:08 +00:00
parent bbb438489b
commit 5764da7bbf
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=46538
28 changed files with 23114 additions and 15397 deletions

View file

@ -1,9 +1,18 @@
#
# $FreeBSD$
# Original revision: 1.108
#
# Build the FreeBSD Handbook.
# Build the FreeBSD Handbook (Traditional Chinese).
#
# Original revision: r46480
#
# ------------------------------------------------------------------------
# To add a new chapter to the Handbook:
#
# - Update this Makefile, chapters.ent and book.xml
# - Add a descriptive entry for the new chapter in preface/preface.xml
#
# ------------------------------------------------------------------------
.PATH: ${.CURDIR}/../../share/xml/glossary
@ -20,7 +29,63 @@ IMAGES_EN = advanced-networking/isdn-bus.eps
IMAGES_EN+= advanced-networking/isdn-twisted-pair.eps
IMAGES_EN+= advanced-networking/natd.eps
IMAGES_EN+= advanced-networking/net-routing.pic
IMAGES_EN+= advanced-networking/pxe-nfs.png
IMAGES_EN+= advanced-networking/static-routes.pic
IMAGES_EN+= bsdinstall/bsdinstall-adduser1.png
IMAGES_EN+= bsdinstall/bsdinstall-adduser2.png
IMAGES_EN+= bsdinstall/bsdinstall-adduser3.png
IMAGES_EN+= bsdinstall/bsdinstall-boot-loader-menu.png
IMAGES_EN+= bsdinstall/bsdinstall-boot-options-menu.png
IMAGES_EN+= bsdinstall/bsdinstall-newboot-loader-menu.png
IMAGES_EN+= bsdinstall/bsdinstall-choose-mode.png
IMAGES_EN+= bsdinstall/bsdinstall-config-components.png
IMAGES_EN+= bsdinstall/bsdinstall-config-hostname.png
IMAGES_EN+= bsdinstall/bsdinstall-config-keymap.png
IMAGES_EN+= bsdinstall/bsdinstall-config-services.png
IMAGES_EN+= bsdinstall/bsdinstall-config-crashdump.png
IMAGES_EN+= bsdinstall/bsdinstall-configure-network-interface-ipv4-dhcp.png
IMAGES_EN+= bsdinstall/bsdinstall-configure-network-interface-ipv4.png
IMAGES_EN+= bsdinstall/bsdinstall-configure-network-interface-ipv4-static.png
IMAGES_EN+= bsdinstall/bsdinstall-configure-network-interface-ipv6.png
IMAGES_EN+= bsdinstall/bsdinstall-configure-network-interface-ipv6-static.png
IMAGES_EN+= bsdinstall/bsdinstall-configure-network-interface-slaac.png
IMAGES_EN+= bsdinstall/bsdinstall-configure-network-interface.png
IMAGES_EN+= bsdinstall/bsdinstall-configure-network-ipv4-dns.png
IMAGES_EN+= bsdinstall/bsdinstall-configure-wireless-accesspoints.png
IMAGES_EN+= bsdinstall/bsdinstall-configure-wireless-scan.png
IMAGES_EN+= bsdinstall/bsdinstall-configure-wireless-wpa2setup.png
IMAGES_EN+= bsdinstall/bsdinstall-distfile-extracting.png
IMAGES_EN+= bsdinstall/bsdinstall-distfile-fetching.png
IMAGES_EN+= bsdinstall/bsdinstall-distfile-verifying.png
IMAGES_EN+= bsdinstall/bsdinstall-final-confirmation.png
IMAGES_EN+= bsdinstall/bsdinstall-finalconfiguration.png
IMAGES_EN+= bsdinstall/bsdinstall-final-modification-shell.png
IMAGES_EN+= bsdinstall/bsdinstall-keymap-10.png
IMAGES_EN+= bsdinstall/bsdinstall-keymap-select-default.png
IMAGES_EN+= bsdinstall/bsdinstall-mainexit.png
IMAGES_EN+= bsdinstall/bsdinstall-netinstall-files.png
IMAGES_EN+= bsdinstall/bsdinstall-netinstall-mirrorselect.png
IMAGES_EN+= bsdinstall/bsdinstall-part-entire-part.png
IMAGES_EN+= bsdinstall/bsdinstall-part-guided-disk.png
IMAGES_EN+= bsdinstall/bsdinstall-part-guided-manual.png
IMAGES_EN+= bsdinstall/bsdinstall-part-manual-addpart.png
IMAGES_EN+= bsdinstall/bsdinstall-part-manual-create.png
IMAGES_EN+= bsdinstall/bsdinstall-part-manual-partscheme.png
IMAGES_EN+= bsdinstall/bsdinstall-part-review.png
IMAGES_EN+= bsdinstall/bsdinstall-post-root-passwd.png
IMAGES_EN+= bsdinstall/bsdinstall-set-clock-local-utc.png
IMAGES_EN+= bsdinstall/bsdinstall-timezone-confirm.png
IMAGES_EN+= bsdinstall/bsdinstall-timezone-country.png
IMAGES_EN+= bsdinstall/bsdinstall-timezone-region.png
IMAGES_EN+= bsdinstall/bsdinstall-timezone-zone.png
IMAGES_EN+= bsdinstall/bsdinstall-zfs-disk_info.png
IMAGES_EN+= bsdinstall/bsdinstall-zfs-disk_select.png
IMAGES_EN+= bsdinstall/bsdinstall-zfs-geli_password.png
IMAGES_EN+= bsdinstall/bsdinstall-zfs-menu.png
IMAGES_EN+= bsdinstall/bsdinstall-zfs-partmenu.png
IMAGES_EN+= bsdinstall/bsdinstall-zfs-vdev_invalid.png
IMAGES_EN+= bsdinstall/bsdinstall-zfs-vdev_type.png
IMAGES_EN+= bsdinstall/bsdinstall-zfs-warning.png
IMAGES_EN+= geom/striping.pic
IMAGES_EN+= install/adduser1.scr
IMAGES_EN+= install/adduser2.scr
@ -28,6 +93,7 @@ IMAGES_EN+= install/adduser3.scr
IMAGES_EN+= install/boot-loader-menu.scr
IMAGES_EN+= install/boot-mgr.scr
IMAGES_EN+= install/config-country.scr
IMAGES_EN+= install/config-keymap.scr
IMAGES_EN+= install/console-saver1.scr
IMAGES_EN+= install/console-saver2.scr
IMAGES_EN+= install/console-saver3.scr
@ -104,13 +170,6 @@ IMAGES_EN+= security/ipsec-network.pic
IMAGES_EN+= security/ipsec-crypt-pkt.pic
IMAGES_EN+= security/ipsec-encap-pkt.pic
IMAGES_EN+= security/ipsec-out-pkt.pic
IMAGES_EN+= vinum/vinum-concat.pic
IMAGES_EN+= vinum/vinum-mirrored-vol.pic
IMAGES_EN+= vinum/vinum-raid10-vol.pic
IMAGES_EN+= vinum/vinum-raid5-org.pic
IMAGES_EN+= vinum/vinum-simple-vol.pic
IMAGES_EN+= vinum/vinum-striped-vol.pic
IMAGES_EN+= vinum/vinum-striped.pic
IMAGES_EN+= virtualization/parallels-freebsd1.png
IMAGES_EN+= virtualization/parallels-freebsd2.png
IMAGES_EN+= virtualization/parallels-freebsd3.png
@ -175,7 +234,9 @@ IMAGES_LIB+= callouts/15.png
# XML content
SRCS+= audit/chapter.xml
SRCS+= book.xml
SRCS+= bsdinstall/chapter.xml
SRCS+= colophon.xml
SRCS+= dtrace/chapter.xml
SRCS+= advanced-networking/chapter.xml
SRCS+= basics/chapter.xml
SRCS+= bibliography/chapter.xml
@ -186,6 +247,8 @@ SRCS+= desktop/chapter.xml
SRCS+= disks/chapter.xml
SRCS+= eresources/chapter.xml
SRCS+= firewalls/chapter.xml
SRCS+= zfs/chapter.xml
SRCS+= filesystems/chapter.xml
SRCS+= geom/chapter.xml
SRCS+= install/chapter.xml
SRCS+= introduction/chapter.xml
@ -205,8 +268,6 @@ SRCS+= preface/preface.xml
SRCS+= printing/chapter.xml
SRCS+= security/chapter.xml
SRCS+= serialcomms/chapter.xml
SRCS+= users/chapter.xml
SRCS+= vinum/chapter.xml
SRCS+= virtualization/chapter.xml
SRCS+= x11/chapter.xml
@ -230,8 +291,6 @@ DOC_PREFIX?= ${.CURDIR}/../../..
XMLDOCS= lastmod:::mirrors.lastmod.inc \
mirrors-ftp-index:::mirrors.xml.ftp.index.inc \
mirrors-ftp:::mirrors.xml.ftp.inc \
mirrors-cvsup-index:::mirrors.xml.cvsup.index.inc \
mirrors-cvsup:::mirrors.xml.cvsup.inc \
eresources-index:::eresources.xml.www.index.inc \
eresources:::eresources.xml.www.inc
DEPENDSET.DEFAULT= transtable mirror
@ -245,12 +304,6 @@ PARAMS.mirrors-ftp-index+= --param 'type' "'ftp'" \
PARAMS.mirrors-ftp+= --param 'type' "'ftp'" \
--param 'proto' "'ftp'" \
--param 'target' "'handbook/mirrors/chapter.xml'"
PARAMS.mirrors-cvsup-index+= --param 'type' "'cvsup'" \
--param 'proto' "'cvsup'" \
--param 'target' "'index'"
PARAMS.mirrors-cvsup+= --param 'type' "'cvsup'" \
--param 'proto' "'cvsup'" \
--param 'target' "'handbook/mirrors/chapter.xml'"
PARAMS.eresources-index+= --param 'type' "'www'" \
--param 'proto' "'http'" \
--param 'target' "'index'"
@ -261,8 +314,6 @@ PARAMS.eresources+= --param 'type' "'www'" \
SRCS+= mirrors.lastmod.inc \
mirrors.xml.ftp.inc \
mirrors.xml.ftp.index.inc \
mirrors.xml.cvsup.inc \
mirrors.xml.cvsup.index.inc \
eresources.xml.www.inc \
eresources.xml.www.index.inc

View file

@ -1,19 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project
The FreeBSD Traditional Chinese Project
$FreeBSD$
Original revision: 1.152
Original revision: r46052
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="basics">
<info><title>UNIX 基礎概念</title>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="basics">
<!--
<chapterinfo>
<authorgroup>
<author><personname><firstname>Chris</firstname><surname>Shumway</surname></personname><contrib>Rewritten by </contrib></author>
<author>
<firstname>Chris</firstname>
<surname>Shumway</surname>
<contrib>Rewritten by in Mar 2000</contrib>
</author>
</authorgroup>
</info>
</chapterinfo>
-->
<title>UNIX 基礎概念</title>
<sect1 xml:id="basics-synopsis">
<title>概述</title>
@ -29,44 +36,61 @@
<listitem>
<para>如何使用 FreeBSD 的<quote>virtual consoles</quote></para>
</listitem>
<listitem>
<para>&unix; 檔案權限運作的方式以及 &os; 中檔案的 flags。</para>
</listitem>
<listitem>
<para>預設的 &os; 檔案系統配置。</para>
</listitem>
<listitem>
<para>&os; 的磁碟結構。</para>
</listitem>
<listitem>
<para>如何掛載(mount)、卸載(umount)檔案系統</para>
</listitem>
<listitem>
<para>什麼是processes、daemons 以及 signals 。</para>
</listitem>
<listitem>
<para>什麼是 shell ,以及如何變更您預設的登入環境。</para>
</listitem>
<listitem>
<para>如何使用基本的文字編輯器。</para>
</listitem>
<listitem>
<para>什麼是 devices 和 device nodes 。</para>
</listitem>
<listitem>
<para>&os; 下使用的 binary 格式。</para>
</listitem>
<listitem>
<para>如何閱讀 manual pages 以獲得更多的資訊。</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="consoles">
<title>Virtual Consoles 和終端機</title>
<indexterm><primary>virtual consoles</primary></indexterm>
<indexterm><primary>terminals</primary></indexterm>
<indexterm>
<primary>virtual consoles</primary>
</indexterm>
<indexterm>
<primary>terminals</primary>
</indexterm>
<indexterm>
<primary>console</primary>
</indexterm>
<para>有很多方法可以操作 FreeBSD ,其中一種就是在文字終端機上打字。
如此使用 FreeBSD 即可輕易的體會到 &unix; 作業系統的威力和彈性。
@ -279,6 +303,798 @@ options SC_PIXEL_MODE</programlisting>
</sect2>
</sect1>
<sect1 xml:id="users-synopsis">
<title>Users and Basic Account Management</title>
<para>&os; allows multiple users to use the computer at the same
time. While only one user can sit in front of the screen and
use the keyboard at any one time, any number of users can log
in to the system through the network. To use the system, each
user should have their own user account.</para>
<para>This chapter describes:</para>
<itemizedlist>
<listitem>
<para>The different types of user accounts on a
&os; system.</para>
</listitem>
<listitem>
<para>How to add, remove, and modify user accounts.</para>
</listitem>
<listitem>
<para>How to set limits to control the
resources that users and
groups are allowed to access.</para>
</listitem>
<listitem>
<para>How to create groups and add users as members of a
group.</para>
</listitem>
</itemizedlist>
<sect2 xml:id="users-introduction">
<title>Account Types</title>
<para>Since all access to the &os; system is achieved using
accounts and all processes are run by users, user and account
management is important.</para>
<para>There are three main types of accounts: system accounts,
user accounts, and the superuser account.</para>
<sect3 xml:id="users-system">
<title>System Accounts</title>
<indexterm>
<primary>accounts</primary>
<secondary>system</secondary>
</indexterm>
<para>System accounts are used to run services such as DNS,
mail, and web servers. The reason for this is security; if
all services ran as the superuser, they could act without
restriction.</para>
<indexterm>
<primary>accounts</primary>
<secondary><systemitem
class="username">daemon</systemitem></secondary>
</indexterm>
<indexterm>
<primary>accounts</primary>
<secondary><systemitem
class="username">operator</systemitem></secondary>
</indexterm>
<para>Examples of system accounts are
<systemitem class="username">daemon</systemitem>,
<systemitem class="username">operator</systemitem>,
<systemitem class="username">bind</systemitem>,
<systemitem class="username">news</systemitem>, and
<systemitem class="username">www</systemitem>.</para>
<indexterm>
<primary>accounts</primary>
<secondary><systemitem
class="username">nobody</systemitem></secondary>
</indexterm>
<para><systemitem class="username">nobody</systemitem> is the
generic unprivileged system account. However, the more
services that use
<systemitem class="username">nobody</systemitem>, the more
files and processes that user will become associated with,
and hence the more privileged that user becomes.</para>
</sect3>
<sect3 xml:id="users-user">
<title>User Accounts</title>
<indexterm>
<primary>accounts</primary>
<secondary>user</secondary>
</indexterm>
<para>User accounts are assigned to real people and are used
to log in and use the system. Every person accessing the
system should have a unique user account. This allows the
administrator to find out who is doing what and prevents
users from clobbering the settings of other users.</para>
<para>Each user can set up their own environment to
accommodate their use of the system, by configuring their
default shell, editor, key bindings, and language
settings.</para>
<para>Every user account on a &os; system has certain
information associated with it:</para>
<variablelist>
<varlistentry>
<term>User name</term>
<listitem>
<para>The user name is typed at the
<prompt>login:</prompt> prompt. Each user must have
a unique user name. There are a number of rules for
creating valid user names which are documented in
&man.passwd.5;. It is recommended to use user names
that consist of eight or fewer, all lower case
characters in order to maintain backwards
compatibility with applications.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Password</term>
<listitem>
<para>Each account has an associated password.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>User ID (<acronym>UID</acronym>)</term>
<listitem>
<para>The User ID (<acronym>UID</acronym>) is a number
used to uniquely identify the user to the &os; system.
Commands that allow a user name to be specified will
first convert it to the <acronym>UID</acronym>. It is
recommended to use a UID less than 65535, since higher
values may cause compatibility issues with some
software.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Group ID (<acronym>GID</acronym>)</term>
<listitem>
<para>The Group ID (<acronym>GID</acronym>) is a number
used to uniquely identify the primary group that the
user belongs to. Groups are a mechanism for
controlling access to resources based on a user's
<acronym>GID</acronym> rather than their
<acronym>UID</acronym>. This can significantly reduce
the size of some configuration files and allows users
to be members of more than one group. It is
recommended to use a GID of 65535 or lower as higher
GIDs may break some software.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Login class</term>
<listitem>
<para>Login classes are an extension to the group
mechanism that provide additional flexibility when
tailoring the system to different users. Login
classes are discussed further in
<xref linkend="users-limiting"/>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Password change time</term>
<listitem>
<para>By default, passwords do not expire. However,
password expiration can be enabled on a per-user
basis, forcing some or all users to change their
passwords after a certain amount of time has
elapsed.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Account expiry time</term>
<listitem>
<para>By default, &os; does not expire accounts. When
creating accounts that need a limited lifespan, such
as student accounts in a school, specify the account
expiry date using &man.pw.8;. After the expiry time
has elapsed, the account cannot be used to log in to
the system, although the account's directories and
files will remain.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>User's full name</term>
<listitem>
<para>The user name uniquely identifies the account to
&os;, but does not necessarily reflect the user's real
name. Similar to a comment, this information can
contain spaces, uppercase characters, and be more
than 8 characters long.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Home directory</term>
<listitem>
<para>The home directory is the full path to a directory
on the system. This is the user's starting directory
when the user logs in. A common convention is to put
all user home directories under <filename
class="directory"><replaceable>/home/username</replaceable></filename>
or <filename
class="directory"><replaceable>/usr/home/username</replaceable></filename>.
Each user stores their personal files and
subdirectories in their own home directory.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>User shell</term>
<listitem>
<para>The shell provides the user's default environment
for interacting with the system. There are many
different kinds of shells and experienced users will
have their own preferences, which can be reflected in
their account settings.</para>
</listitem>
</varlistentry>
</variablelist>
</sect3>
<sect3 xml:id="users-superuser">
<title>The Superuser Account</title>
<indexterm>
<primary>accounts</primary>
<secondary>superuser (root)</secondary>
</indexterm>
<para>The superuser account, usually called
<systemitem class="username">root</systemitem>, is used to
manage the system with no limitations on privileges. For
this reason, it should not be used for day-to-day tasks like
sending and receiving mail, general exploration of the
system, or programming.</para>
<para>The superuser, unlike other user accounts, can operate
without limits, and misuse of the superuser account may
result in spectacular disasters. User accounts are unable
to destroy the operating system by mistake, so it is
recommended to login as a user account and to only become
the superuser when a command requires extra
privilege.</para>
<para>Always double and triple-check any commands issued as
the superuser, since an extra space or missing character can
mean irreparable data loss.</para>
<para>There are several ways to gain superuser privilege.
While one can log in as
<systemitem class="username">root</systemitem>, this is
highly discouraged.</para>
<para>Instead, use &man.su.1; to become the superuser. If
<literal>-</literal> is specified when running this command,
the user will also inherit the root user's environment. The
user running this command must be in the
<systemitem class="groupname">wheel</systemitem> group or
else the command will fail. The user must also know the
password for the
<systemitem class="username">root</systemitem> user
account.</para>
<para>In this example, the user only becomes superuser in
order to run <command>make install</command> as this step
requires superuser privilege. Once the command completes,
the user types <command>exit</command> to leave the
superuser account and return to the privilege of their user
account.</para>
<example>
<title>Install a Program As the Superuser</title>
<screen>&prompt.user; <userinput>configure</userinput>
&prompt.user; <userinput>make</userinput>
&prompt.user; <userinput>su -</userinput>
Password:
&prompt.root; <userinput>make install</userinput>
&prompt.root; <userinput>exit</userinput>
&prompt.user;</screen>
</example>
<para>The built-in &man.su.1; framework works well for single
systems or small networks with just one system
administrator. An alternative is to install the
<package>security/sudo</package> package or port. This
software provides activity logging and allows the
administrator to configure which users can run which
commands as the superuser.</para>
</sect3>
</sect2>
<sect2 xml:id="users-modifying">
<title>Managing Accounts</title>
<indexterm>
<primary>accounts</primary>
<secondary>modifying</secondary>
</indexterm>
<para>&os; provides a variety of different commands to manage
user accounts. The most common commands are summarized in
<xref linkend="users-modifying-utilities"/>, followed by some
examples of their usage. See the manual page for each utility
for more details and usage examples.</para>
<table frame="none" pgwide="1"
xml:id="users-modifying-utilities">
<title>Utilities for Managing User Accounts</title>
<tgroup cols="2">
<colspec colwidth="1*"/>
<colspec colwidth="2*"/>
<thead>
<row>
<entry>Command</entry>
<entry>Summary</entry>
</row>
</thead>
<tbody>
<row>
<entry>&man.adduser.8;</entry>
<entry>The recommended command-line application for
adding new users.</entry>
</row>
<row>
<entry>&man.rmuser.8;</entry>
<entry>The recommended command-line application for
removing users.</entry>
</row>
<row>
<entry>&man.chpass.1;</entry>
<entry>A flexible tool for changing user database
information.</entry>
</row>
<row>
<entry>&man.passwd.1;</entry>
<entry>The command-line tool to change user
passwords.</entry>
</row>
<row>
<entry>&man.pw.8;</entry>
<entry>A powerful and flexible tool for modifying all
aspects of user accounts.</entry>
</row>
</tbody>
</tgroup>
</table>
<sect3 xml:id="users-adduser">
<title><command>adduser</command></title>
<indexterm>
<primary>accounts</primary>
<secondary>adding</secondary>
</indexterm>
<indexterm>
<primary><command>adduser</command></primary>
</indexterm>
<indexterm>
<primary><filename>/usr/share/skel</filename></primary>
</indexterm>
<indexterm>
<primary>skeleton directory</primary>
</indexterm>
<para>The recommended program for adding new users is
&man.adduser.8;. When a new user is added, this program
automatically updates <filename>/etc/passwd</filename> and
<filename>/etc/group</filename>. It also creates a home
directory for the new user, copies in the default
configuration files from
<filename>/usr/share/skel</filename>, and can optionally
mail the new user a welcome message. This utility must be
run as the superuser.</para>
<para>The &man.adduser.8; utility is interactive and walks
through the steps for creating a new user account. As seen
in <xref linkend="users-modifying-adduser"/>, either input
the required information or press <keycap>Return</keycap>
to accept the default value shown in square brackets.
In this example, the user has been invited into the
<systemitem class="groupname">wheel</systemitem> group,
allowing them to become the superuser with &man.su.1;.
When finished, the utility will prompt to either
create another user or to exit.</para>
<example xml:id="users-modifying-adduser">
<title>Adding a User on &os;</title>
<screen>&prompt.root; <userinput>adduser</userinput>
Username: <userinput>jru</userinput>
Full name: <userinput>J. Random User</userinput>
Uid (Leave empty for default):
Login group [jru]:
Login group is jru. Invite jru into other groups? []: <userinput>wheel</userinput>
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: <userinput>zsh</userinput>
Home directory [/home/jru]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username : jru
Password : ****
Full Name : J. Random User
Uid : 1001
Class :
Groups : jru wheel
Home : /home/jru
Shell : /usr/local/bin/zsh
Locked : no
OK? (yes/no): <userinput>yes</userinput>
adduser: INFO: Successfully added (jru) to the user database.
Add another user? (yes/no): <userinput>no</userinput>
Goodbye!
&prompt.root;</screen>
</example>
<note>
<para>Since the password is not echoed when typed, be
careful to not mistype the password when creating the user
account.</para>
</note>
</sect3>
<sect3 xml:id="users-rmuser">
<title><command>rmuser</command></title>
<indexterm>
<primary><command>rmuser</command></primary>
</indexterm>
<indexterm>
<primary>accounts</primary>
<secondary>removing</secondary>
</indexterm>
<para>To completely remove a user from the system, run
&man.rmuser.8; as the superuser. This command performs the
following steps:</para>
<procedure>
<step>
<para>Removes the user's &man.crontab.1; entry, if one
exists.</para>
</step>
<step>
<para>Removes any &man.at.1; jobs belonging to the
user.</para>
</step>
<step>
<para>Kills all processes owned by the user.</para>
</step>
<step>
<para>Removes the user from the system's local password
file.</para>
</step>
<step>
<para>Optionally removes the user's home directory, if it
is owned by the user.</para>
</step>
<step>
<para>Removes the incoming mail files belonging to the
user from <filename>/var/mail</filename>.</para>
</step>
<step>
<para>Removes all files owned by the user from temporary
file storage areas such as
<filename>/tmp</filename>.</para>
</step>
<step>
<para>Finally, removes the username from all groups to
which it belongs in <filename>/etc/group</filename>. If
a group becomes empty and the group name is the same as
the username, the group is removed. This complements
the per-user unique groups created by
&man.adduser.8;.</para>
</step>
</procedure>
<para>&man.rmuser.8; cannot be used to remove superuser
accounts since that is almost always an indication of
massive destruction.</para>
<para>By default, an interactive mode is used, as shown
in the following example.</para>
<example>
<title><command>rmuser</command> Interactive Account
Removal</title>
<screen>&prompt.root; <userinput>rmuser jru</userinput>
Matching password entry:
jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
Is this the entry you wish to remove? <userinput>y</userinput>
Remove user's home directory (/home/jru)? <userinput>y</userinput>
Removing user (jru): mailspool home passwd.
&prompt.root;</screen>
</example>
</sect3>
<sect3 xml:id="users-chpass">
<title><command>chpass</command></title>
<indexterm>
<primary><command>chpass</command></primary>
</indexterm>
<para>Any user can use &man.chpass.1; to change their default
shell and personal information associated with their user
account. The superuser can use this utility to change
additional account information for any user.</para>
<para>When passed no options, aside from an optional username,
&man.chpass.1; displays an editor containing user
information. When the user exits from the editor, the user
database is updated with the new information.</para>
<note>
<para>This utility will prompt for the user's password when
exiting the editor, unless the utility is run as the
superuser.</para>
</note>
<para>In <xref linkend="users-modifying-chpass-su"/>, the
superuser has typed <command>chpass jru</command> and is
now viewing the fields that can be changed for this user.
If <systemitem class="username">jru</systemitem> runs this
command instead, only the last six fields will be displayed
and available for editing. This is shown in
<xref linkend="users-modifying-chpass-ru"/>.</para>
<example xml:id="users-modifying-chpass-su">
<title>Using <command>chpass</command> as
Superuser</title>
<screen>#Changing user database information for jru.
Login: jru
Password: *
Uid [#]: 1001
Gid [# or name]: 1001
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/jru
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:</screen>
</example>
<example xml:id="users-modifying-chpass-ru">
<title>Using <command>chpass</command> as Regular
User</title>
<screen>#Changing user database information for jru.
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:</screen>
</example>
<note>
<para>The commands &man.chfn.1; and &man.chsh.1; are links
to &man.chpass.1;, as are &man.ypchpass.1;,
&man.ypchfn.1;, and &man.ypchsh.1;. Since
<acronym>NIS</acronym> support is automatic, specifying
the <literal>yp</literal> before the command is not
necessary. How to configure NIS is covered in <xref
linkend="network-servers"/>.</para>
</note>
</sect3>
<sect3 xml:id="users-passwd">
<title><command>passwd</command></title>
<indexterm>
<primary><command>passwd</command></primary>
</indexterm>
<indexterm>
<primary>accounts</primary>
<secondary>changing password</secondary>
</indexterm>
<para>Any user can easily change their password using
&man.passwd.1;. To prevent accidental or unauthorized
changes, this command will prompt for the user's original
password before a new password can be set:</para>
<example>
<title>Changing Your Password</title>
<screen>&prompt.user; <userinput>passwd</userinput>
Changing local password for jru.
Old password:
New password:
Retype new password:
passwd: updating the database...
passwd: done</screen>
</example>
<para>The superuser can change any user's password by
specifying the username when running &man.passwd.1;. When
this utility is run as the superuser, it will not prompt for
the user's current password. This allows the password to be
changed when a user cannot remember the original
password.</para>
<example>
<title>Changing Another User's Password as the
Superuser</title>
<screen>&prompt.root; <userinput>passwd jru</userinput>
Changing local password for jru.
New password:
Retype new password:
passwd: updating the database...
passwd: done</screen>
</example>
<note>
<para>As with &man.chpass.1;, &man.yppasswd.1; is a link to
&man.passwd.1;, so <acronym>NIS</acronym> works with
either command.</para>
</note>
</sect3>
<sect3 xml:id="users-pw">
<title><command>pw</command></title>
<indexterm>
<primary><command>pw</command></primary>
</indexterm>
<para>The &man.pw.8; utility can create, remove,
modify, and display users and groups. It functions as a
front end to the system user and group files. &man.pw.8;
has a very powerful set of command line options that make it
suitable for use in shell scripts, but new users may find it
more complicated than the other commands presented in this
section.</para>
</sect3>
</sect2>
<sect2 xml:id="users-groups">
<title>Managing Groups</title>
<indexterm>
<primary>groups</primary>
</indexterm>
<indexterm>
<primary><filename>/etc/groups</filename></primary>
</indexterm>
<indexterm>
<primary>accounts</primary>
<secondary>groups</secondary>
</indexterm>
<para>A group is a list of users. A group is identified by its
group name and <acronym>GID</acronym>. In &os;, the kernel
uses the <acronym>UID</acronym> of a process, and the list of
groups it belongs to, to determine what the process is allowed
to do. Most of the time, the <acronym>GID</acronym> of a user
or process usually means the first group in the list.</para>
<para>The group name to <acronym>GID</acronym> mapping is listed
in <filename>/etc/group</filename>. This is a plain text file
with four colon-delimited fields. The first field is the
group name, the second is the encrypted password, the third
the <acronym>GID</acronym>, and the fourth the comma-delimited
list of members. For a more complete description of the
syntax, refer to &man.group.5;.</para>
<para>The superuser can modify <filename>/etc/group</filename>
using a text editor. Alternatively, &man.pw.8; can be used to
add and edit groups. For example, to add a group called
<systemitem class="groupname">teamtwo</systemitem> and then
confirm that it exists:</para>
<example>
<title>Adding a Group Using &man.pw.8;</title>
<screen>&prompt.root; <userinput>pw groupadd teamtwo</userinput>
&prompt.root; <userinput>pw groupshow teamtwo</userinput>
teamtwo:*:1100:</screen>
</example>
<para>In this example, <literal>1100</literal> is the
<acronym>GID</acronym> of
<systemitem class="groupname">teamtwo</systemitem>. Right
now, <systemitem class="groupname">teamtwo</systemitem> has no
members. This command will add
<systemitem class="username">jru</systemitem> as a member of
<systemitem class="groupname">teamtwo</systemitem>.</para>
<example>
<title>Adding User Accounts to a New Group Using
&man.pw.8;</title>
<screen>&prompt.root; <userinput>pw groupmod teamtwo -M jru</userinput>
&prompt.root; <userinput>pw groupshow teamtwo</userinput>
teamtwo:*:1100:jru</screen>
</example>
<para>The argument to <option>-M</option> is a comma-delimited
list of users to be added to a new (empty) group or to replace
the members of an existing group. To the user, this group
membership is different from (and in addition to) the user's
primary group listed in the password file. This means that
the user will not show up as a member when using
<option>groupshow</option> with &man.pw.8;, but will show up
when the information is queried via &man.id.1; or a similar
tool. When &man.pw.8; is used to add a user to a group, it
only manipulates <filename>/etc/group</filename> and does not
attempt to read additional data from
<filename>/etc/passwd</filename>.</para>
<example>
<title>Adding a New Member to a Group Using &man.pw.8;</title>
<screen>&prompt.root; <userinput>pw groupmod teamtwo -m db</userinput>
&prompt.root; <userinput>pw groupshow teamtwo</userinput>
teamtwo:*:1100:jru,db</screen>
</example>
<para>In this example, the argument to <option>-m</option> is a
comma-delimited list of users who are to be added to the
group. Unlike the previous example, these users are appended
to the group and do not replace existing users in the
group.</para>
<example>
<title>Using &man.id.1; to Determine Group Membership</title>
<screen>&prompt.user; <userinput>id jru</userinput>
uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)</screen>
</example>
<para>In this example,
<systemitem class="username">jru</systemitem> is a member of
the groups <systemitem class="groupname">jru</systemitem> and
<systemitem class="groupname">teamtwo</systemitem>.</para>
<para>For more information about this command and the format of
<filename>/etc/group</filename>, refer to &man.pw.8; and
&man.group.5;.</para>
</sect2>
</sect1>
<sect1 xml:id="permissions">
<title>權限</title>
<indexterm><primary>UNIX</primary></indexterm>

Binary file not shown.

View file

@ -1,24 +1,32 @@
<?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" [
<!--
The FreeBSD Documentation Project
The FreeBSD Traditional Chinese Documentation Project
Original revision: r45698
$FreeBSD$
-->
<!ENTITY % chapters SYSTEM "chapters.ent">
%chapters;
<!ENTITY % txtfiles SYSTEM "txtfiles.ent">
%txtfiles;
]>
<!--
The FreeBSD Documentation Project
$FreeBSD$
Original revision: 1.163
-->
<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>
<book xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:lang="zh_tw">
<author><orgname>FreeBSD 文件計畫</orgname></author>
<info>
<title>FreeBSD 使用手冊</title>
<pubdate>February 1999</pubdate>
<author>
<orgname>FreeBSD 文件計畫</orgname>
</author>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
@ -37,6 +45,12 @@
<year>2006</year>
<year>2007</year>
<year>2008</year>
<year>2009</year>
<year>2010</year>
<year>2011</year>
<year>2012</year>
<year>2013</year>
<year>2014</year>
<holder>FreeBSD 文件計畫</holder>
</copyright>
@ -50,9 +64,8 @@
&tm-attrib.adaptec;
&tm-attrib.adobe;
&tm-attrib.apple;
&tm-attrib.corel;
&tm-attrib.creative;
&tm-attrib.cvsup;
&tm-attrib.google;
&tm-attrib.heidelberger;
&tm-attrib.ibm;
&tm-attrib.ieee;
@ -60,19 +73,12 @@
&tm-attrib.intuit;
&tm-attrib.linux;
&tm-attrib.lsilogic;
&tm-attrib.m-systems;
&tm-attrib.macromedia;
&tm-attrib.microsoft;
&tm-attrib.netscape;
&tm-attrib.nexthop;
&tm-attrib.opengroup;
&tm-attrib.oracle;
&tm-attrib.powerquest;
&tm-attrib.realnetworks;
&tm-attrib.redhat;
&tm-attrib.sap;
&tm-attrib.sun;
&tm-attrib.symantec;
&tm-attrib.themathworks;
&tm-attrib.thomson;
&tm-attrib.usrobotics;
@ -86,6 +92,7 @@
<abstract>
<para>歡迎使用FreeBSD 本使用手冊涵蓋範圍包括了
<emphasis>FreeBSD &rel3.current;-RELEASE</emphasis>
<emphasis>FreeBSD &rel2.current;-RELEASE</emphasis>
<emphasis>FreeBSD &rel.current;-RELEASE</emphasis> 的安裝和日常使用。
這份使用手冊是很多人的集體創作,而且仍然『持續不斷』的進行中。
@ -140,6 +147,7 @@
</partintro>
&chap.introduction;
&chap.bsdinstall;
&chap.install;
&chap.basics;
&chap.ports;
@ -177,7 +185,6 @@
</itemizedlist>
<para>這些章節中有些需要您預先閱讀些相關文件,在各章節開頭的概要內會提及。</para>
</partintro>
&chap.desktop;
@ -202,17 +209,18 @@
&chap.config;
&chap.boot;
&chap.users;
&chap.security;
&chap.jails;
&chap.mac;
&chap.audit;
&chap.disks;
&chap.geom;
&chap.vinum;
&chap.zfs;
&chap.filesystems;
&chap.virtualization;
&chap.l10n;
&chap.cutting-edge;
&chap.dtrace;
</part>
<part xml:id="network-communication">

View file

@ -0,0 +1,15 @@
#
# Build the Handbook with just the content from this chapter.
#
# $FreeBSD$
#
CHAPTERS= bsdinstall/chapter.xml
VPATH= ..
MASTERDOC= ${.CURDIR}/../${DOC}.${DOCBOOKSUFFIX}
DOC_PREFIX?= ${.CURDIR}/../../../..
.include "../Makefile"

File diff suppressed because it is too large Load diff

View file

@ -8,7 +8,7 @@
Chapters should be listed in the order in which they are referenced.
$FreeBSD$
Original revision: 1.33
Original revision: r45602
-->
<!ENTITY chap.preface SYSTEM "preface/preface.xml">
@ -17,6 +17,7 @@
<!-- Part One -->
<!ENTITY chap.introduction SYSTEM "introduction/chapter.xml">
<!ENTITY chap.install SYSTEM "install/chapter.xml">
<!ENTITY chap.bsdinstall SYSTEM "bsdinstall/chapter.xml">
<!ENTITY chap.basics SYSTEM "basics/chapter.xml">
<!ENTITY chap.ports SYSTEM "ports/chapter.xml">
<!ENTITY chap.x11 SYSTEM "x11/chapter.xml">
@ -31,15 +32,14 @@
<!-- Part Three -->
<!ENTITY chap.config SYSTEM "config/chapter.xml">
<!ENTITY chap.boot SYSTEM "boot/chapter.xml">
<!ENTITY chap.users SYSTEM "users/chapter.xml">
<!ENTITY chap.security SYSTEM "security/chapter.xml">
<!ENTITY chap.jails SYSTEM "jails/chapter.xml">
<!ENTITY chap.mac SYSTEM "mac/chapter.xml">
<!ENTITY chap.audit SYSTEM "audit/chapter.xml">
<!ENTITY chap.disks SYSTEM "disks/chapter.xml">
<!ENTITY chap.geom SYSTEM "geom/chapter.xml">
<!ENTITY chap.zfs SYSTEM "zfs/chapter.xml">
<!ENTITY chap.filesystems SYSTEM "filesystems/chapter.xml">
<!ENTITY chap.vinum SYSTEM "vinum/chapter.xml">
<!ENTITY chap.virtualization SYSTEM "virtualization/chapter.xml">
<!ENTITY chap.l10n SYSTEM "l10n/chapter.xml">
<!ENTITY chap.cutting-edge SYSTEM "cutting-edge/chapter.xml">
@ -55,14 +55,12 @@
<!-- Part Five (appendices) -->
<!ENTITY chap.mirrors SYSTEM "mirrors/chapter.xml">
<!ENTITY chap.mirrors.lastmod.inc SYSTEM "mirrors.lastmod.inc">
<!ENTITY chap.mirrors.ftp.index.inc SYSTEM "mirrors.xml.ftp.index.inc">
<!ENTITY chap.mirrors.lastmod.inc SYSTEM "mirrors.lastmod.inc">
<!ENTITY chap.mirrors.ftp.index.inc SYSTEM "mirrors.xml.ftp.index.inc">
<!ENTITY chap.mirrors.ftp.inc SYSTEM "mirrors.xml.ftp.inc">
<!ENTITY chap.mirrors.cvsup.index.inc SYSTEM "mirrors.xml.cvsup.index.inc">
<!ENTITY chap.mirrors.cvsup.inc SYSTEM "mirrors.xml.cvsup.inc">
<!ENTITY chap.bibliography SYSTEM "bibliography/chapter.xml">
<!ENTITY chap.eresources SYSTEM "eresources/chapter.xml">
<!ENTITY chap.eresources.www.index.inc SYSTEM "eresources.xml.www.index.inc">
<!ENTITY chap.eresources.www.index.inc SYSTEM "eresources.xml.www.index.inc">
<!ENTITY chap.eresources.www.inc SYSTEM "eresources.xml.www.inc">
<!ENTITY chap.pgpkeys SYSTEM "pgpkeys/chapter.xml">
<!ENTITY chap.freebsd-glossary SYSTEM "../../share/xml/glossary.ent">

View file

@ -2,20 +2,19 @@
<!--
The FreeBSD Documentation Project
$FreeBSD$
$FreeBSD$
-->
<colophon xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="colophon">
<colophon xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="colophon">
<para>This book is the combined work of hundreds of contributors to
<quote>The FreeBSD Documentation Project</quote>. The text is
authored in SGML
according to the DocBook DTD and is formatted from SGML into many
different presentation formats using <application>Jade</application>,
an open source DSSSL
engine. Norm Walsh's DSSSL stylesheets were used with an
additional customization layer to provide the presentation
instructions for <application>Jade</application>. The printed
version of this document would not be possible without Donald
Knuth's &tex; typesetting language,
Leslie Lamport's <application>LaTeX</application>, or Sebastian
Rahtz's <application>JadeTeX</application> macro package.</para>
authored in XML according to the DocBook DTD and is formatted
from XML into many different presentation formats using
XSLT. The printed version of this
document would not be possible without Donald Knuth's
&tex; typesetting language, Leslie
Lamport's <application>LaTeX</application>, or Sebastian Rahtz's
<application>JadeTeX</application> macro package.</para>
</colophon>

View file

@ -1,26 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project
The FreeBSD Traditional Chinese Project
$FreeBSD$
Original revision: 1.213
Chased revision: 1.221
Original revision: r46049
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="config-tuning">
<info><title>設定與效能調校(Tuning)</title>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="config-tuning">
<info>
<title>設定與效能調校(Tuning)</title>
<authorgroup>
<author><personname><firstname>Chern</firstname><surname>Lee</surname></personname><contrib>Written by </contrib></author>
<author>
<personname>
<firstname>Chern</firstname>
<surname>Lee</surname>
</personname>
<contrib>Written by </contrib>
</author>
</authorgroup>
<authorgroup>
<author><personname><firstname>Mike</firstname><surname>Smith</surname></personname><contrib>Based on a tutorial written by </contrib></author>
<author>
<personname>
<firstname>Mike</firstname>
<surname>Smith</surname>
</personname>
<contrib>Based on a tutorial written by </contrib>
</author>
</authorgroup>
<authorgroup>
<author><personname><firstname>Matt</firstname><surname>Dillon</surname></personname><contrib>Also based on tuning(7) written by </contrib></author>
<author>
<personname>
<firstname>Matt</firstname>
<surname>Dillon</surname>
</personname>
<contrib>Also based on tuning(7) written by </contrib>
</author>
</authorgroup>
</info>
<sect1 xml:id="config-synopsis">
<title>概述</title>
@ -70,6 +93,7 @@
</itemizedlist>
</sect1>
<!-- moved to bsdinstall/chapter.xml
<sect1 xml:id="configtuning-initial">
<title>一開始的規劃</title>
@ -172,6 +196,7 @@
</sect2>
</sect1>
-->
<sect1 xml:id="configtuning-core-configuration">
<title>最主要的設定檔</title>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,15 @@
#
# Build the Handbook with just the content from this chapter.
#
# $FreeBSD$
#
CHAPTERS= dtrace/chapter.xml
VPATH= ..
MASTERDOC= ${.CURDIR}/../${DOC}.${DOCBOOKSUFFIX}
DOC_PREFIX?= ${.CURDIR}/../../../..
.include "../Makefile"

View file

@ -0,0 +1,359 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Recently I suggested to myself that this should become a profiling
and debugging chapter, which covers things like ktrace(1) and
using other debugging (like -x in shell scripts). But then I
realized that, over time and while DTrace becomes better supported,
that might make this chapter too large.
-->
<!--
The FreeBSD Documentation Project
$FreeBSD$
-->
<!-- XXXTR: Should probably put links and resources here. I'm
nervous about this chapter as it may require a partial
re-write and large modification once DTrace is complete, but
at least we can get everyone started ... -->
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="dtrace">
<info>
<title>&dtrace;</title>
<authorgroup>
<author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Written
by </contrib></author>
</authorgroup>
</info>
<sect1 xml:id="dtrace-synopsis">
<title>Synopsis</title>
<indexterm><primary>&dtrace;</primary></indexterm>
<indexterm>
<primary>&dtrace; support</primary>
<see>&dtrace;</see>
</indexterm>
<para>&dtrace;, also known as Dynamic Tracing, was developed by
&sun; as a tool for locating performance bottlenecks in
production and pre-production systems. In addition to
diagnosing performance problems, &dtrace; can be used to help
investigate and debug unexpected behavior in both the &os;
kernel and in userland programs.</para>
<para>&dtrace; is a remarkable profiling tool, with an impressive
array of features for diagnosing system issues. It may also be
used to run pre-written scripts to take advantage of its
capabilities. Users can author their own utilities using the
&dtrace; D Language, allowing them to customize their profiling
based on specific needs.</para>
<para>The &os; implementation provides full support for kernel
&dtrace; and experimental support for userland &dtrace;.
Userland &dtrace; allows users to perform function boundary
tracing for userland programs using the <literal>pid</literal>
provider, and to insert static probes into userland programs for
later tracing. Some ports, such as
<package>databases/postgres-server</package> and
<package>lang/php5</package> have a &dtrace; option to enable
static probes. &os; 10.0-RELEASE has reasonably good userland
&dtrace; support, but it is not considered production ready. In
particular, it is possible to crash traced programs.</para>
<para>After reading this chapter, you will know:</para>
<itemizedlist>
<listitem>
<para>What &dtrace; is and what features it provides.</para>
</listitem>
<listitem>
<para>Differences between the &solaris; &dtrace;
implementation and the one provided by &os;.</para>
</listitem>
<listitem>
<para>How to enable and use &dtrace; on &os;.</para>
</listitem>
</itemizedlist>
<para>Before reading this chapter, you should:</para>
<itemizedlist>
<listitem>
<para>Understand &unix; and &os; basics
(<xref linkend="basics"/>).</para>
</listitem>
<listitem>
<para>Have some familiarity with security and how it pertains
to &os; (<xref linkend="security"/>).</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="dtrace-implementation">
<title>Implementation Differences</title>
<para>While the &dtrace; in &os; is similar to that found in
&solaris;, differences do exist. The primary difference is that
in &os;, &dtrace; is implemented as a set of kernel modules and
&dtrace; can not be used until the modules are loaded. To load
all of the necessary modules:</para>
<screen>&prompt.root; <userinput>kldload dtraceall</userinput></screen>
<para>Beginning with &os; 10.0-RELEASE, the modules are
automatically loaded when <command>dtrace</command> is
run.</para>
<para>&os; uses the <literal>DDB_CTF</literal> kernel option to
enable support for loading <acronym>CTF</acronym> data from
kernel modules and the kernel itself. <acronym>CTF</acronym> is
the &solaris; Compact C Type Format which encapsulates a reduced
form of debugging information similar to
<acronym>DWARF</acronym> and the venerable stabs.
<acronym>CTF</acronym> data is added to binaries by the
<command>ctfconvert</command> and <command>ctfmerge</command>
build tools. The <command>ctfconvert</command> utility parses
<acronym>DWARF</acronym> <acronym>ELF</acronym> debug sections
created by the compiler and <command>ctfmerge</command> merges
<acronym>CTF</acronym> <acronym>ELF</acronym> sections from
objects into either executables or shared libraries.</para>
<para>Some different providers exist for &os; than for &solaris;.
Most notable is the <literal>dtmalloc</literal> provider, which
allows tracing <function>malloc()</function> by type in the &os;
kernel. Some of the providers found in &solaris;, such as
<literal>cpc</literal> and <literal>mib</literal>, are not
present in &os;. These may appear in future versions of &os;.
Moreover, some of the providers available in both operating
systems are not compatible, in the sense that their probes have
different argument types. Thus, <acronym>D</acronym> scripts
written on &solaris; may or may not work unmodified on &os;, and
vice versa.</para>
<para>Due to security differences, only <systemitem
class="username">root</systemitem> may use &dtrace; on &os;.
&solaris; has a few low level security checks which do not yet
exist in &os;. As such, the
<filename>/dev/dtrace/dtrace</filename> is strictly limited to
<systemitem class="username">root</systemitem>.</para>
<para>&dtrace; falls under the Common Development and Distribution
License (<acronym>CDDL</acronym>) license. To view this license
on &os;, see
<filename>/usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE</filename>
or view it online at <uri
xlink:href="http://opensource.org/licenses/CDDL-1.0">http://opensource.org/licenses/CDDL-1.0</uri>.
While a &os; kernel with &dtrace; support is
<acronym>BSD</acronym> licensed, the <acronym>CDDL</acronym> is
used when the modules are distributed in binary form or the
binaries are loaded.</para>
</sect1>
<sect1 xml:id="dtrace-enable">
<title>Enabling &dtrace; Support</title>
<para>In &os; 9.2 and 10.0, &dtrace; support is built into the
<filename>GENERIC</filename> kernel. Users of earlier versions
of &os; or who prefer to statically compile in &dtrace; support
should add the following lines to a custom kernel configuration
file and recompile the kernel using the instructions in <xref
linkend="kernelconfig"/>:</para>
<programlisting>options KDTRACE_HOOKS
options DDB_CTF
options DEBUG=-g</programlisting>
<para>Users of the AMD64 architecture should also add this
line:</para>
<programlisting>options KDTRACE_FRAME</programlisting>
<para>This option provides support for <acronym>FBT</acronym>.
While &dtrace; will work without this option, there will be
limited support for function boundary tracing.</para>
<para>Once the &os; system has rebooted into the new kernel, or
the &dtrace; kernel modules have been loaded using
<command>kldload dtraceall</command>, the system will need
support for the Korn shell as the &dtrace;
Toolkit has several utilities written in <command>ksh</command>.
Make sure that the <package>shells/ksh93</package> package or
port is installed. It is also possible to run these tools under
<package>shells/pdksh</package> or
<package>shells/mksh</package>.</para>
<para>Finally, install the current &dtrace; Toolkit,
a collection of ready-made scripts
for collecting system information. There are scripts to check
open files, memory, <acronym>CPU</acronym> usage, and a lot
more. &os; 10
installs a few of these scripts into
<filename>/usr/share/dtrace</filename>. On other &os; versions,
or to install the full
&dtrace; Toolkit, use the
<package>sysutils/DTraceToolkit</package> package or
port.</para>
<note>
<para>The scripts found in
<filename>/usr/share/dtrace</filename> have been specifically
ported to &os;. Not all of the scripts found in the &dtrace;
Toolkit will work as-is on &os; and some scripts may require
some effort in order for them to work on &os;.</para>
</note>
<para>The &dtrace; Toolkit includes many scripts in the special
language of &dtrace;. This language is called the D language
and it is very similar to C++. An in depth discussion of the
language is beyond the scope of this document. It is
extensively discussed at <uri
xlink:href="http://wikis.oracle.com/display/DTrace/Documentation">http://wikis.oracle.com/display/DTrace/Documentation</uri>.</para>
</sect1>
<sect1 xml:id="dtrace-using">
<title>Using &dtrace;</title>
<para>&dtrace; scripts consist of a list of one or more
<firstterm>probes</firstterm>, or instrumentation points, where
each probe is associated with an action. Whenever the condition
for a probe is met, the associated action is executed. For
example, an action may occur when a file is opened, a process is
started, or a line of code is executed. The action might be to
log some information or to modify context variables. The
reading and writing of context variables allows probes to share
information and to cooperatively analyze the correlation of
different events.</para>
<para>To view all probes, the administrator can execute the
following command:</para>
<screen>&prompt.root; <userinput>dtrace -l | more</userinput></screen>
<para>Each probe has an <literal>ID</literal>, a
<literal>PROVIDER</literal> (dtrace or fbt), a
<literal>MODULE</literal>, and a
<literal>FUNCTION NAME</literal>. Refer to &man.dtrace.1; for
more information about this command.</para>
<para>The examples in this section provide an overview of how to
use two of the fully supported scripts from the
&dtrace; Toolkit: the
<filename>hotkernel</filename> and
<filename>procsystime</filename> scripts.</para>
<para>The <filename>hotkernel</filename> script is designed to
identify which function is using the most kernel time. It will
produce output similar to the following:</para>
<screen>&prompt.root; <userinput>cd /usr/share/dtrace/toolkit</userinput>
&prompt.root; <userinput>./hotkernel</userinput>
Sampling... Hit Ctrl-C to end.</screen>
<para>As instructed, use the
<keycombo action="simul"><keycap>Ctrl</keycap><keycap>C</keycap>
</keycombo> key combination to stop the process. Upon
termination, the script will display a list of kernel functions
and timing information, sorting the output in increasing order
of time:</para>
<screen>kernel`_thread_lock_flags 2 0.0%
0xc1097063 2 0.0%
kernel`sched_userret 2 0.0%
kernel`kern_select 2 0.0%
kernel`generic_copyin 3 0.0%
kernel`_mtx_assert 3 0.0%
kernel`vm_fault 3 0.0%
kernel`sopoll_generic 3 0.0%
kernel`fixup_filename 4 0.0%
kernel`_isitmyx 4 0.0%
kernel`find_instance 4 0.0%
kernel`_mtx_unlock_flags 5 0.0%
kernel`syscall 5 0.0%
kernel`DELAY 5 0.0%
0xc108a253 6 0.0%
kernel`witness_lock 7 0.0%
kernel`read_aux_data_no_wait 7 0.0%
kernel`Xint0x80_syscall 7 0.0%
kernel`witness_checkorder 7 0.0%
kernel`sse2_pagezero 8 0.0%
kernel`strncmp 9 0.0%
kernel`spinlock_exit 10 0.0%
kernel`_mtx_lock_flags 11 0.0%
kernel`witness_unlock 15 0.0%
kernel`sched_idletd 137 0.3%
0xc10981a5 42139 99.3%</screen>
<!-- XXXTR: I attempted to use objdump and nm on /boot/kernel/kernel
to find 0xc10981a5, but to no avail. It would be nice to know
how we should look that up. -->
<para>This script will also work with kernel modules. To use this
feature, run the script with <option>-m</option>:</para>
<screen>&prompt.root; <userinput>./hotkernel -m</userinput>
Sampling... Hit Ctrl-C to end.
^C
MODULE COUNT PCNT
0xc107882e 1 0.0%
0xc10e6aa4 1 0.0%
0xc1076983 1 0.0%
0xc109708a 1 0.0%
0xc1075a5d 1 0.0%
0xc1077325 1 0.0%
0xc108a245 1 0.0%
0xc107730d 1 0.0%
0xc1097063 2 0.0%
0xc108a253 73 0.0%
kernel 874 0.4%
0xc10981a5 213781 99.6%</screen>
<!-- XXXTR: I was unable to match these up with output from
kldstat and kldstat -v and grep. Maybe I'm missing something
seriously obvious. It is 5AM btw. -->
<para>The <filename>procsystime</filename> script captures and
prints the system call time usage for a given process
<acronym>ID</acronym> (<acronym>PID</acronym>) or process name.
In the following example, a new instance of
<filename>/bin/csh</filename> was spawned. Then,
<filename>procsystime</filename> was executed and remained
waiting while a few commands were typed on the other incarnation
of <command>csh</command>. These are the results of this
test:</para>
<screen>&prompt.root; <userinput>./procsystime -n csh</userinput>
Tracing... Hit Ctrl-C to end...
^C
Elapsed Times for processes csh,
SYSCALL TIME (ns)
getpid 6131
sigreturn 8121
close 19127
fcntl 19959
dup 26955
setpgid 28070
stat 31899
setitimer 40938
wait4 62717
sigaction 67372
sigprocmask 119091
gettimeofday 183710
write 263242
execve 492547
ioctl 770073
vfork 3258923
sigsuspend 6985124
read 3988049784</screen>
<para>As shown, the <function>read()</function> system call used
the most time in nanoseconds while the
<function>getpid()</function> system call used the least amount
of time.</para>
</sect1>
</chapter>

View file

@ -1,12 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project
The FreeBSD Traditional Chinese Project
$FreeBSD$
Take translation from Kang-min Liu <gugod@gugod.org>
Original revision: 1.175
Original revision: r46084
-->
<appendix xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="eresources">
<appendix xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="eresources">
<title>網際網路上的資源</title>
<para>進展飛快的 FreeBSD 使得現有的印刷、平面媒體跟不上它的最新進度!
@ -111,11 +115,6 @@
<entry>FreeBSD 人力銀行</entry>
</row>
<row>
<entry>&a.policy.name;</entry>
<entry>FreeBSD Core team 的 policy 方針討論區。這裡文章不多,且只限 core team 才可發言。</entry>
</row>
<row>
<entry>&a.questions.name;</entry>
<entry>使用問題及技術支援</entry>
@ -193,16 +192,6 @@
<entry>在 FreeBSD 上使用 ATM 網路</entry>
</row>
<row>
<entry>&a.audit.name;</entry>
<entry>Source code 的稽核(audit)計劃</entry>
</row>
<row>
<entry>&a.binup.name;</entry>
<entry>研發 binary 的升級方式</entry>
</row>
<row>
<entry>&a.bluetooth.name;</entry>
<entry>在 FreeBSD 中使用藍芽(&bluetooth;)技術</entry>
@ -213,11 +202,6 @@
<entry>把 FreeBSD 在叢集架構環境(clustered environment)的運用</entry>
</row>
<row>
<entry>&a.cvsweb.name;</entry>
<entry>CVSweb 的維護</entry>
</row>
<row>
<entry>&a.database.name;</entry>
<entry>討論各式資料庫在 FreeBSD 的研發、運用</entry>
@ -313,11 +297,6 @@
<entry>移植 LFS 到 FreeBSD</entry>
</row>
<row>
<entry>&a.libh.name;</entry>
<entry>新世代的安裝、打包套件機制</entry>
</row>
<row>
<entry>&a.mips.name;</entry>
<entry>移植 FreeBSD 到 &mips;</entry>
@ -348,12 +327,6 @@
<entry>網路運用探討與 TCP/IP source code</entry>
</row>
<row>
<entry>&a.openoffice.name;</entry>
<entry>移植 <application>OpenOffice.org</application>
<application>&staroffice;</application> 到 FreeBSD</entry>
</row>
<row>
<entry>&a.performance.name;</entry>
<entry>在高效能/負荷環境下的效能調校(tuning)議題</entry>
@ -726,44 +699,6 @@
</listitem>
</varlistentry>
<varlistentry>
<term>&a.audit.name;</term>
<listitem>
<para><emphasis>Source code audit project</emphasis></para>
<para>This is the mailing list for the FreeBSD source code
audit project. Although this was originally intended for
security-related changes, its charter has been expanded to
review any code changes.</para>
<para>This list is very heavy on patches, and is probably of no
interest to the average FreeBSD user. Security discussions
not related to a particular code change are held on
freebsd-security. Conversely, all developers are encouraged
to send their patches here for review, especially if they
touch a part of the system where a bug may adversely affect
the integrity of the system.</para>
<!-- I can't actually find a charter for this, but there's this email: http://www.FreeBSD.org/cgi/getmsg.cgi?fetch=223347+225804+/usr/local/www/db/text/2000/cvs-all/20001210.cvs-all -->
</listitem>
</varlistentry>
<varlistentry>
<term>&a.binup.name;</term>
<listitem>
<para><emphasis>FreeBSD Binary Update Project</emphasis></para>
<para>This list exists to provide discussion for the binary
update system, or <application>binup</application>.
Design issues, implementation details,
patches, bug reports, status reports, feature requests, commit
logs, and all other things related to
<application>binup</application> are fair game.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>&a.bluetooth.name;</term>
@ -853,17 +788,6 @@
</listitem>
</varlistentry>
<varlistentry>
<term>&a.cvsweb.name;</term>
<listitem>
<para><emphasis>FreeBSD CVSweb Project</emphasis></para>
<para>Technical discussions about use, development and maintenance
of FreeBSD-CVSweb.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>&a.doc.name;</term>
@ -1128,18 +1052,6 @@
</listitem>
</varlistentry>
<varlistentry>
<term>&a.openoffice.name;</term>
<listitem>
<para><emphasis>OpenOffice.org</emphasis></para>
<para>Discussions concerning the porting and maintenance
of <application>OpenOffice.org</application> and
<application>&staroffice;</application>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>&a.performance.name;</term>
@ -1194,17 +1106,6 @@
</listitem>
</varlistentry>
<varlistentry>
<term>&a.policy.name;</term>
<listitem>
<para><emphasis>Core team policy decisions</emphasis></para>
<para>This is a low volume, read-only mailing list for FreeBSD
Core Team Policy decisions.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>&a.ports.name;</term>

View file

@ -0,0 +1,15 @@
#
# Build the Handbook with just the content from this chapter.
#
# $FreeBSD$
#
CHAPTERS= filesystems/chapter.xml
VPATH= ..
MASTERDOC= ${.CURDIR}/../${DOC}.${DOCBOOKSUFFIX}
DOC_PREFIX?= ${.CURDIR}/../../../..
.include "../Makefile"

View file

@ -0,0 +1,219 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project
$FreeBSD$
-->
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="filesystems">
<info>
<title>Other File Systems</title>
<authorgroup>
<author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Written
by </contrib></author>
</authorgroup>
</info>
<sect1 xml:id="filesystems-synopsis">
<title>Synopsis</title>
<indexterm><primary>File Systems</primary></indexterm>
<indexterm>
<primary>File Systems Support</primary>
<see>File Systems</see>
</indexterm>
<para>File systems are an integral part of any operating system.
They allow users to upload and store files, provide access to
data, and make hard drives useful. Different operating systems
differ in their native file system. Traditionally, the native
&os; file system has been the Unix File System
<acronym>UFS</acronym> which has been modernized as
<acronym>UFS2</acronym>. Since &os;&nbsp;7.0, the Z File System
(<acronym>ZFS</acronym>) is also available as a native file
system. See <xref linkend="zfs"/> for more information.</para>
<para>In addition to its native file systems, &os; supports a
multitude of other file systems so that data from other
operating systems can be accessed locally, such as data stored
on locally attached <acronym>USB</acronym> storage devices,
flash drives, and hard disks. This includes support for the
&linux; Extended File System (<acronym>EXT</acronym>) and the
Reiser file system.</para>
<para>There are different levels of &os; support for the various
file systems. Some require a kernel module to be loaded and
others may require a toolset to be installed. Some non-native
file system support is full read-write while others are
read-only.</para>
<para>After reading this chapter, you will know:</para>
<itemizedlist>
<listitem>
<para>The difference between native and supported file
systems.</para>
</listitem>
<listitem>
<para>Which file systems are supported by &os;.</para>
</listitem>
<listitem>
<para>How to enable, configure, access, and make use of
non-native file systems.</para>
</listitem>
</itemizedlist>
<para>Before reading this chapter, you should:</para>
<itemizedlist>
<listitem>
<para>Understand &unix; and <link
linkend="basics">&os; basics</link>.</para>
</listitem>
<listitem>
<para>Be familiar with the basics of <link
linkend="kernelconfig">kernel configuration and
compilation</link>.</para>
</listitem>
<listitem>
<para>Feel comfortable <link linkend="ports">installing
software</link> in &os;.</para>
</listitem>
<listitem>
<para>Have some familiarity with <link
linkend="disks">disks</link>, storage, and device names in
&os;.</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="filesystems-linux">
<title>&linux; File Systems</title>
<para>&os; provides built-in support for several &linux; file
systems. This section demonstrates how to load support for and
how to mount the supported &linux; file systems.</para>
<sect2>
<title><acronym>ext2</acronym></title>
<para>Kernel support for ext2 file systems has
been available since &os;&nbsp;2.2. In &os;&nbsp;8.x and
earlier, the code is licensed under the
<acronym>GPL</acronym>. Since &os;&nbsp;9.0, the code has
been rewritten and is now <acronym>BSD</acronym>
licensed.</para>
<para>The &man.ext2fs.5; driver allows the &os; kernel to both
read and write to ext2 file systems.</para>
<note>
<para>
This driver can also be used to access ext3 and ext4 file
systems. However, ext3 journaling, extended attributes, and
inodes greater than 128-bytes are not supported. Support
for ext4 is read-only.</para>
</note>
<para>To access an ext file system, first
load the kernel loadable module:</para>
<screen>&prompt.root; <userinput>kldload ext2fs</userinput></screen>
<para>Then, mount the ext volume by specifying its &os;
partition name and an existing mount point. This example
mounts <filename>/dev/ad1s1</filename> on
<filename>/mnt</filename>:</para>
<screen>&prompt.root; <userinput>mount -t ext2fs <replaceable>/dev/ad1s1</replaceable> <replaceable>/mnt</replaceable></userinput></screen>
</sect2>
<sect2>
<title>XFS</title>
<para>A &os; kernel can be configured to provide read-only
support for <acronym>XFS</acronym>
file systems.</para>
<para>To compile in <acronym>XFS</acronym> support, add the
following option to a custom kernel configuration file and
recompile the kernel using the instructions in <xref
linkend="kernelconfig"/>:</para>
<programlisting>options XFS</programlisting>
<para>Then, to mount an <acronym>XFS</acronym> volume located on
<filename>/dev/ad1s1</filename>:</para>
<screen>&prompt.root; <userinput>mount -t xfs <replaceable>/dev/ad1s1</replaceable> <replaceable>/mnt</replaceable></userinput></screen>
<para>The <package>sysutils/xfsprogs</package> package or
port provides additional
utilities, with man pages, for using, analyzing, and repairing
<acronym>XFS</acronym> file systems.</para>
</sect2>
<sect2>
<title>ReiserFS</title>
<para>&os; provides read-only support for The Reiser file
system, ReiserFS.</para>
<para>To load the &man.reiserfs.5; driver:</para>
<screen>&prompt.root; <userinput>kldload reiserfs</userinput></screen>
<para>Then, to mount a ReiserFS volume located on
<filename>/dev/ad1s1</filename>:</para>
<screen>&prompt.root; <userinput>mount -t reiserfs <replaceable>/dev/ad1s1</replaceable> <replaceable>/mnt</replaceable></userinput></screen>
</sect2>
</sect1>
<!--
<sect1>
<title>Device File System</title>
</sect1>
<sect1>
<title>DOS and NTFS File Systems</title>
<para>This is a good section for those who transfer files, using
USB devices, from Windows to FreeBSD and vice-versa. My camera,
and many other cameras I have seen default to using FAT16. There
is (was?) a kde utility, I think called kamera, that could be used
to access camera devices. A section on this would be useful.</para>
<para>XXXTR: Though! The disks chapter, covers a bit of this and
devfs under it's USB devices. It leaves a lot to be desired though,
see:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/usb-disks.html
It may be better to flesh out that section a bit more. Add the
word "camera" to it so that others can easily notice.</para>
</sect1>
<sect1>
<title>Linux EXT File System</title>
<para>Probably NOT as useful as the other two, but it requires
knowledge of the existence of the tools. Which are hidden in
the ports collection. Most Linux guys would probably only use
Linux, BSD guys would be smarter and use NFS.</para>
</sect1>
<sect1>
<title>HFS</title>
<para>I think this is the file system used on Apple OSX. There are
tools in the ports collection, and with Apple being a big
FreeBSD supporter and user of our technologies, surely there
is enough cross over to cover this?</para>
</sect1>
-->
</chapter>

View file

@ -1,20 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project
$FreeBSD$
Original revision: 1.21
The FreeBSD Traditional Chinese Project
$FreeBSD$
Original revision: r46061
-->
<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>
<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>
<author>
<personname>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
</personname>
<contrib>Written by </contrib>
</author>
</authorgroup>
</info>
<sect1 xml:id="GEOM-synopsis">
<sect1 xml:id="geom-synopsis">
<title>概述</title>
<indexterm>
@ -69,25 +80,27 @@
</itemizedlist>
</sect1>
<sect1 xml:id="GEOM-intro">
<title>GEOM 導論</title>
<sect1 xml:id="geom-striping">
<info>
<title>RAID0 - 分散連結(striping)</title>
<para>GEOM 透過 privoder(即 <filename>/dev/</filename>
下的特殊裝置檔案) 來操控 classes(如 Master Boot Records、
<acronym>BSD</acronym> labels 等) 。GEOM 支援多種軟體
<acronym>RAID</acronym> 配置,透過 GEOM 存取時,
作業系統和應用程式不會意識到 GEOM 存在。</para>
</sect1>
<authorgroup>
<author>
<personname>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
</personname>
<contrib>Written by </contrib>
</author>
<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>
<author>
<personname>
<firstname>Murray</firstname>
<surname>Stokely</surname>
</personname>
</author>
</authorgroup>
</info>
<indexterm>
<primary>GEOM</primary>
@ -189,7 +202,7 @@ XXX: What message? Put it inside the screen output above.
</sect1>
<sect1 xml:id="GEOM-mirror">
<sect1 xml:id="geom-mirror">
<title>RAID1 - 鏡射(Mirroring)</title>
<indexterm>
@ -353,4 +366,855 @@ OK? <userinput>boot</userinput></screen>
</sect3>
</sect2>
</sect1>
<sect1 xml:id="geom-raid3">
<info>
<title><acronym>RAID</acronym>3 - Byte-level Striping with
Dedicated Parity</title>
<authorgroup>
<author>
<personname>
<firstname>Mark</firstname>
<surname>Gladman</surname>
</personname>
<contrib>Written by </contrib>
</author>
<author>
<personname>
<firstname>Daniel</firstname>
<surname>Gerzo</surname>
</personname>
</author>
</authorgroup>
<authorgroup>
<author>
<personname>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
</personname>
<contrib>Based on documentation by </contrib>
</author>
<author>
<personname>
<firstname>Murray</firstname>
<surname>Stokely</surname>
</personname>
</author>
</authorgroup>
</info>
<indexterm>
<primary><acronym>GEOM</acronym></primary>
</indexterm>
<indexterm>
<primary>RAID3</primary>
</indexterm>
<para><acronym>RAID</acronym>3 is a method used to combine several
disk drives into a single volume with a dedicated parity disk.
In a <acronym>RAID</acronym>3 system, data is split up into a
number of bytes that are written across all the drives in the
array except for one disk which acts as a dedicated parity disk.
This means that disk reads from a <acronym>RAID</acronym>3
implementation access all disks in the array. Performance can
be enhanced by using multiple disk controllers. The
<acronym>RAID</acronym>3 array provides a fault tolerance of 1
drive, while providing a capacity of 1 - 1/n times the total
capacity of all drives in the array, where n is the number of
hard drives in the array. Such a configuration is mostly
suitable for storing data of larger sizes such as multimedia
files.</para>
<para>At least 3 physical hard drives are required to build a
<acronym>RAID</acronym>3 array. Each disk must be of the same
size, since <acronym>I/O</acronym> requests are interleaved to
read or write to multiple disks in parallel. Also, due to the
nature of <acronym>RAID</acronym>3, the number of drives must be
equal to 3, 5, 9, 17, and so on, or 2^n + 1.</para>
<para>This section demonstrates how to create a software
<acronym>RAID</acronym>3 on a &os; system.</para>
<note>
<para>While it is theoretically possible to boot from a
<acronym>RAID</acronym>3 array on &os;, that configuration is
uncommon and is not advised.</para>
</note>
<sect2>
<title>Creating a Dedicated <acronym>RAID</acronym>3
Array</title>
<para>In &os;, support for <acronym>RAID</acronym>3 is
implemented by the &man.graid3.8; <acronym>GEOM</acronym>
class. Creating a dedicated <acronym>RAID</acronym>3 array on
&os; requires the following steps.</para>
<procedure>
<step>
<para>First, load the <filename>geom_raid3.ko</filename>
kernel module by issuing one of the following
commands:</para>
<screen>&prompt.root; <userinput>graid3 load</userinput></screen>
<para>or:</para>
<screen>&prompt.root; <userinput>kldload geom_raid3</userinput></screen>
</step>
<step>
<para>Ensure that a suitable mount point exists. This
command creates a new directory to use as the mount
point:</para>
<screen>&prompt.root; <userinput>mkdir <replaceable>/multimedia</replaceable></userinput></screen>
</step>
<step>
<para>Determine the device names for the disks which will be
added to the array, and create the new
<acronym>RAID</acronym>3 device. The final device listed
will act as the dedicated parity disk. This example uses
three unpartitioned <acronym>ATA</acronym> drives:
<filename><replaceable>ada1</replaceable></filename> and
<filename><replaceable>ada2</replaceable></filename> for
data, and
<filename><replaceable>ada3</replaceable></filename> for
parity.</para>
<screen>&prompt.root; <userinput>graid3 label -v gr0 /dev/ada1 /dev/ada2 /dev/ada3</userinput>
Metadata value stored on /dev/ada1.
Metadata value stored on /dev/ada2.
Metadata value stored on /dev/ada3.
Done.</screen>
</step>
<step>
<para>Partition the newly created <filename>gr0</filename>
device and put a <acronym>UFS</acronym> file system on
it:</para>
<screen>&prompt.root; <userinput>gpart create -s GPT /dev/raid3/gr0</userinput>
&prompt.root; <userinput>gpart add -t freebsd-ufs /dev/raid3/gr0</userinput>
&prompt.root; <userinput>newfs -j /dev/raid3/gr0p1</userinput></screen>
<para>Many numbers will glide across the screen, and after a
bit of time, the process will be complete. The volume has
been created and is ready to be mounted:</para>
<screen>&prompt.root; <userinput>mount /dev/raid3/gr0p1 /multimedia/</userinput></screen>
<para>The <acronym>RAID</acronym>3 array is now ready to
use.</para>
</step>
</procedure>
<para>Additional configuration is needed to retain this setup
across system reboots.</para>
<procedure>
<step>
<para>The <filename>geom_raid3.ko</filename> module must be
loaded before the array can be mounted. To automatically
load the kernel module during system initialization, add
the following line to
<filename>/boot/loader.conf</filename>:</para>
<programlisting>geom_raid3_load="YES"</programlisting>
</step>
<step>
<para>The following volume information must be added to
<filename>/etc/fstab</filename> in order to
automatically mount the array's file system during the
system boot process:</para>
<programlisting>/dev/raid3/gr0p1 /multimedia ufs rw 2 2</programlisting>
</step>
</procedure>
</sect2>
</sect1>
<sect1 xml:id="geom-graid">
<info>
<title>Software <acronym>RAID</acronym> Devices</title>
<authorgroup>
<author>
<personname>
<firstname>Warren</firstname>
<surname>Block</surname>
</personname>
<contrib>Originally contributed by </contrib>
</author>
</authorgroup>
</info>
<indexterm>
<primary><acronym>GEOM</acronym></primary>
</indexterm>
<indexterm>
<primary>Software RAID Devices</primary>
<secondary>Hardware-assisted RAID</secondary>
</indexterm>
<para>Some motherboards and expansion cards add some simple
hardware, usually just a <acronym>ROM</acronym>, that allows the
computer to boot from a <acronym>RAID</acronym> array. After
booting, access to the <acronym>RAID</acronym> array is handled
by software running on the computer's main processor. This
<quote>hardware-assisted software
<acronym>RAID</acronym></quote> gives <acronym>RAID</acronym>
arrays that are not dependent on any particular operating
system, and which are functional even before an operating system
is loaded.</para>
<para>Several levels of <acronym>RAID</acronym> are supported,
depending on the hardware in use. See &man.graid.8; for a
complete list.</para>
<para>&man.graid.8; requires the <filename>geom_raid.ko</filename>
kernel module, which is included in the
<filename>GENERIC</filename> kernel starting with &os;&nbsp;9.1.
If needed, it can be loaded manually with
<command>graid load</command>.</para>
<sect2 xml:id="geom-graid-creating">
<title>Creating an Array</title>
<para>Software <acronym>RAID</acronym> devices often have a menu
that can be entered by pressing special keys when the computer
is booting. The menu can be used to create and delete
<acronym>RAID</acronym> arrays. &man.graid.8; can also create
arrays directly from the command line.</para>
<para><command>graid label</command> is used to create a new
array. The motherboard used for this example has an Intel
software <acronym>RAID</acronym> chipset, so the Intel
metadata format is specified. The new array is given a label
of <filename>gm0</filename>, it is a mirror
(<acronym>RAID1</acronym>), and uses drives
<filename>ada0</filename> and
<filename>ada1</filename>.</para>
<caution>
<para>Some space on the drives will be overwritten when they
are made into a new array. Back up existing data
first!</para>
</caution>
<screen>&prompt.root; <userinput>graid label Intel gm0 RAID1 ada0 ada1</userinput>
GEOM_RAID: Intel-a29ea104: Array Intel-a29ea104 created.
GEOM_RAID: Intel-a29ea104: Disk ada0 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:0-ada0 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Array started.
GEOM_RAID: Intel-a29ea104: Volume gm0 state changed from STARTING to OPTIMAL.
Intel-a29ea104 created
GEOM_RAID: Intel-a29ea104: Provider raid/r0 for volume gm0 created.</screen>
<para>A status check shows the new mirror is ready for
use:</para>
<screen>&prompt.root; <userinput>graid status</userinput>
Name Status Components
raid/r0 OPTIMAL ada0 (ACTIVE (ACTIVE))
ada1 (ACTIVE (ACTIVE))</screen>
<para>The array device appears in
<filename>/dev/raid/</filename>. The first array is called
<filename>r0</filename>. Additional arrays, if present, will
be <filename>r1</filename>, <filename>r2</filename>, and so
on.</para>
<para>The <acronym>BIOS</acronym> menu on some of these devices
can create arrays with special characters in their names. To
avoid problems with those special characters, arrays are given
simple numbered names like <filename>r0</filename>. To show
the actual labels, like <filename>gm0</filename> in the
example above, use &man.sysctl.8;:</para>
<screen>&prompt.root; <userinput>sysctl kern.geom.raid.name_format=1</userinput></screen>
</sect2>
<sect2 xml:id="geom-graid-volumes">
<title>Multiple Volumes</title>
<para>Some software <acronym>RAID</acronym> devices support
more than one <emphasis>volume</emphasis> on an array.
Volumes work like partitions, allowing space on the physical
drives to be split and used in different ways. For example,
Intel software <acronym>RAID</acronym> devices support two
volumes. This example creates a 40&nbsp;G mirror for safely
storing the operating system, followed by a 20&nbsp;G
<acronym>RAID0</acronym> (stripe) volume for fast temporary
storage:</para>
<screen>&prompt.root; <userinput>graid label -S 40G Intel gm0 RAID1 ada0 ada1</userinput>
&prompt.root; <userinput>graid add -S 20G gm0 RAID0</userinput></screen>
<para>Volumes appear as additional
<filename>r<replaceable>X</replaceable></filename> entries
in <filename>/dev/raid/</filename>. An array with two volumes
will show <filename>r0</filename> and
<filename>r1</filename>.</para>
<para>See &man.graid.8; for the number of volumes supported by
different software <acronym>RAID</acronym> devices.</para>
</sect2>
<sect2 xml:id="geom-graid-converting">
<title>Converting a Single Drive to a Mirror</title>
<para>Under certain specific conditions, it is possible to
convert an existing single drive to a &man.graid.8; array
without reformatting. To avoid data loss during the
conversion, the existing drive must meet these minimum
requirements:</para>
<itemizedlist>
<listitem>
<para>The drive must be partitioned with the
<acronym>MBR</acronym> partitioning scheme.
<acronym>GPT</acronym> or other partitioning schemes with
metadata at the end of the drive will be overwritten and
corrupted by the &man.graid.8; metadata.</para>
</listitem>
<listitem>
<para>There must be enough unpartitioned and unused space at
the end of the drive to hold the &man.graid.8; metadata.
This metadata varies in size, but the largest occupies
64&nbsp;M, so at least that much free space is
recommended.</para>
</listitem>
</itemizedlist>
<para>If the drive meets these requirements, start by making a
full backup. Then create a single-drive mirror with that
drive:</para>
<screen>&prompt.root; <userinput>graid label Intel gm0 RAID1 ada0 NONE</userinput></screen>
<para>&man.graid.8; metadata was written to the end of the drive
in the unused space. A second drive can now be inserted into
the mirror:</para>
<screen>&prompt.root; <userinput>graid insert raid/r0 ada1</userinput></screen>
<para>Data from the original drive will immediately begin to be
copied to the second drive. The mirror will operate in
degraded status until the copy is complete.</para>
</sect2>
<sect2 xml:id="geom-graid-inserting">
<title>Inserting New Drives into the Array</title>
<para>Drives can be inserted into an array as replacements for
drives that have failed or are missing. If there are no
failed or missing drives, the new drive becomes a spare. For
example, inserting a new drive into a working two-drive mirror
results in a two-drive mirror with one spare drive, not a
three-drive mirror.</para>
<para>In the example mirror array, data immediately begins to be
copied to the newly-inserted drive. Any existing information
on the new drive will be overwritten.</para>
<screen>&prompt.root; <userinput>graid insert raid/r0 ada1</userinput>
GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NONE to NEW.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NEW to REBUILD.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 rebuild start at 0.</screen>
</sect2>
<sect2 xml:id="geom-graid-removing">
<title>Removing Drives from the Array</title>
<para>Individual drives can be permanently removed from a
from an array and their metadata erased:</para>
<screen>&prompt.root; <userinput>graid remove raid/r0 ada1</userinput>
GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from ACTIVE to OFFLINE.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-[unknown] state changed from ACTIVE to NONE.
GEOM_RAID: Intel-a29ea104: Volume gm0 state changed from OPTIMAL to DEGRADED.</screen>
</sect2>
<sect2 xml:id="geom-graid-stopping">
<title>Stopping the Array</title>
<para>An array can be stopped without removing metadata from the
drives. The array will be restarted when the system is
booted.</para>
<screen>&prompt.root; <userinput>graid stop raid/r0</userinput></screen>
</sect2>
<sect2 xml:id="geom-graid-status">
<title>Checking Array Status</title>
<para>Array status can be checked at any time. After a drive
was added to the mirror in the example above, data is being
copied from the original drive to the new drive:</para>
<screen>&prompt.root; <userinput>graid status</userinput>
Name Status Components
raid/r0 DEGRADED ada0 (ACTIVE (ACTIVE))
ada1 (ACTIVE (REBUILD 28%))</screen>
<para>Some types of arrays, like <literal>RAID0</literal> or
<literal>CONCAT</literal>, may not be shown in the status
report if disks have failed. To see these partially-failed
arrays, add <option>-ga</option>:</para>
<screen>&prompt.root; <userinput>graid status -ga</userinput>
Name Status Components
Intel-e2d07d9a BROKEN ada6 (ACTIVE (ACTIVE))</screen>
</sect2>
<sect2 xml:id="geom-graid-deleting">
<title>Deleting Arrays</title>
<para>Arrays are destroyed by deleting all of the volumes from
them. When the last volume present is deleted, the array is
stopped and metadata is removed from the drives:</para>
<screen>&prompt.root; <userinput>graid delete raid/r0</userinput></screen>
</sect2>
<sect2 xml:id="geom-graid-unexpected">
<title>Deleting Unexpected Arrays</title>
<para>Drives may unexpectedly contain &man.graid.8; metadata,
either from previous use or manufacturer testing.
&man.graid.8; will detect these drives and create an array,
interfering with access to the individual drive. To remove
the unwanted metadata:</para>
<procedure>
<step>
<para>Boot the system. At the boot menu, select
<literal>2</literal> for the loader prompt. Enter:</para>
<screen>OK <userinput>set kern.geom.raid.enable=0</userinput>
OK <userinput>boot</userinput></screen>
<para>The system will boot with &man.graid.8;
disabled.</para>
</step>
<step>
<para>Back up all data on the affected drive.</para>
</step>
<step>
<para>As a workaround, &man.graid.8; array detection
can be disabled by adding</para>
<programlisting>kern.geom.raid.enable=0</programlisting>
<para>to <filename>/boot/loader.conf</filename>.</para>
<para>To permanently remove the &man.graid.8; metadata
from the affected drive, boot a &os; installation
<acronym>CD-ROM</acronym> or memory stick, and select
<literal>Shell</literal>. Use <command>status</command>
to find the name of the array, typically
<literal>raid/r0</literal>:</para>
<screen>&prompt.root; <userinput>graid status</userinput>
Name Status Components
raid/r0 OPTIMAL ada0 (ACTIVE (ACTIVE))
ada1 (ACTIVE (ACTIVE))</screen>
<para>Delete the volume by name:</para>
<screen>&prompt.root; <userinput>graid delete raid/r0</userinput></screen>
<para>If there is more than one volume shown, repeat the
process for each volume. After the last array has been
deleted, the volume will be destroyed.</para>
<para>Reboot and verify data, restoring from backup if
necessary. After the metadata has been removed, the
<literal>kern.geom.raid.enable=0</literal> entry in
<filename>/boot/loader.conf</filename> can also be
removed.</para>
</step>
</procedure>
</sect2>
</sect1>
<sect1 xml:id="geom-ggate">
<title><acronym>GEOM</acronym> Gate Network</title>
<para><acronym>GEOM</acronym> provides a simple mechanism for
providing remote access to devices such as disks,
<acronym>CD</acronym>s, and file systems through the use of the
<acronym>GEOM</acronym> Gate network daemon,
<application>ggated</application>. The system with the device
runs the server daemon which handles requests made by clients
using <application>ggatec</application>. The devices should not
contain any sensitive data as the connection between the client
and the server is not encrypted.</para>
<para>Similar to <acronym>NFS</acronym>, which is discussed in
<xref linkend="network-nfs"/>, <application>ggated</application>
is configured using an exports file. This file specifies which
systems are permitted to access the exported resources and what
level of access they are offered. For example, to give the
client <systemitem class="ipaddress">192.168.1.5</systemitem>
read and write access to the fourth slice on the first
<acronym>SCSI</acronym> disk, create
<filename>/etc/gg.exports</filename> with this line:</para>
<programlisting>192.168.1.5 RW /dev/da0s4d</programlisting>
<para>Before exporting the device, ensure it is not currently
mounted. Then, start <application>ggated</application>:</para>
<screen>&prompt.root; <userinput>ggated</userinput></screen>
<para>Several options are available for specifying an alternate
listening port or changing the default location of the exports
file. Refer to &man.ggated.8; for details.</para>
<para>To access the exported device on the client machine, first
use <command>ggatec</command> to specify the
<acronym>IP</acronym> address of the server and the device name
of the exported device. If successful, this command will
display a <literal>ggate</literal> device name to mount. Mount
that specified device name on a free mount point. This example
connects to the <filename>/dev/da0s4d</filename> partition on
<literal>192.168.1.1</literal>, then mounts
<filename>/dev/ggate0</filename> on
<filename>/mnt</filename>:</para>
<screen>&prompt.root; <userinput>ggatec create -o rw 192.168.1.1 /dev/da0s4d</userinput>
ggate0
&prompt.root; <userinput>mount /dev/ggate0 /mnt</userinput></screen>
<para>The device on the server may now be accessed through
<filename>/mnt</filename> on the client. For more details about
<command>ggatec</command> and a few usage examples, refer to
&man.ggatec.8;.</para>
<note>
<para>The mount will fail if the device is currently mounted on
either the server or any other client on the network. If
simultaneous access is needed to network resources, use
<acronym>NFS</acronym> instead.</para>
</note>
<para>When the device is no longer needed, unmount it with
<command>umount</command> so that the resource is available to
other clients.</para>
</sect1>
<sect1 xml:id="geom-glabel">
<title>Labeling Disk Devices</title>
<indexterm>
<primary><acronym>GEOM</acronym></primary>
</indexterm>
<indexterm>
<primary>Disk Labels</primary>
</indexterm>
<para>During system initialization, the &os; kernel creates
device nodes as devices are found. This method of probing for
devices raises some issues. For instance, what if a new disk
device is added via <acronym>USB</acronym>? It is likely that
a flash device may be handed the device name of
<filename>da0</filename> and the original
<filename>da0</filename> shifted to
<filename>da1</filename>. This will cause issues mounting
file systems if they are listed in
<filename>/etc/fstab</filename> which may also prevent the
system from booting.</para>
<para>One solution is to chain <acronym>SCSI</acronym> devices
in order so a new device added to the <acronym>SCSI</acronym>
card will be issued unused device numbers. But what about
<acronym>USB</acronym> devices which may replace the primary
<acronym>SCSI</acronym> disk? This happens because
<acronym>USB</acronym> devices are usually probed before the
<acronym>SCSI</acronym> card. One solution is to only insert
these devices after the system has been booted. Another method
is to use only a single <acronym>ATA</acronym> drive and never
list the <acronym>SCSI</acronym> devices in
<filename>/etc/fstab</filename>.</para>
<para>A better solution is to use <command>glabel</command> to
label the disk devices and use the labels in
<filename>/etc/fstab</filename>. Because
<command>glabel</command> stores the label in the last sector of
a given provider, the label will remain persistent across
reboots. By using this label as a device, the file system may
always be mounted regardless of what device node it is accessed
through.</para>
<note>
<para><command>glabel</command> can create both transient and
permanent labels. Only permanent labels are consistent across
reboots. Refer to &man.glabel.8; for more information on the
differences between labels.</para>
</note>
<sect2>
<title>Label Types and Examples</title>
<para>Permanent labels can be a generic or a file system label.
Permanent file system labels can be created with
&man.tunefs.8; or &man.newfs.8;. These types of labels are
created in a sub-directory of <filename>/dev</filename>, and
will be named according to the file system type. For example,
<acronym>UFS</acronym>2 file system labels will be created in
<filename>/dev/ufs</filename>. Generic permanent labels can
be created with <command>glabel label</command>. These are
not file system specific and will be created in
<filename>/dev/label</filename>.</para>
<para>Temporary labels are destroyed at the next reboot. These
labels are created in <filename>/dev/label</filename> and are
suited to experimentation. A temporary label can be created
using <command>glabel create</command>.</para>
<!-- XXXTR: How do you create a file system label without running newfs
or when there is no newfs (e.g.: cd9660)? -->
<para>To create a permanent label for a
<acronym>UFS</acronym>2 file system without destroying any
data, issue the following command:</para>
<screen>&prompt.root; <userinput>tunefs -L <replaceable>home</replaceable> <replaceable>/dev/da3</replaceable></userinput></screen>
<warning>
<para>If the file system is full, this may cause data
corruption.</para>
</warning>
<para>A label should now exist in <filename>/dev/ufs</filename>
which may be added to <filename>/etc/fstab</filename>:</para>
<programlisting>/dev/ufs/home /home ufs rw 2 2</programlisting>
<note>
<para>The file system must not be mounted while attempting
to run <command>tunefs</command>.</para>
</note>
<para>Now the file system may be mounted:</para>
<screen>&prompt.root; <userinput>mount /home</userinput></screen>
<para>From this point on, so long as the
<filename>geom_label.ko</filename> kernel module is loaded at
boot with <filename>/boot/loader.conf</filename> or the
<literal>GEOM_LABEL</literal> kernel option is present,
the device node may change without any ill effect on the
system.</para>
<para>File systems may also be created with a default label
by using the <option>-L</option> flag with
<command>newfs</command>. Refer to &man.newfs.8; for
more information.</para>
<para>The following command can be used to destroy the
label:</para>
<screen>&prompt.root; <userinput>glabel destroy home</userinput></screen>
<para>The following example shows how to label the partitions of
a boot disk.</para>
<example>
<title>Labeling Partitions on the Boot Disk</title>
<para>By permanently labeling the partitions on the boot disk,
the system should be able to continue to boot normally, even
if the disk is moved to another controller or transferred to
a different system. For this example, it is assumed that a
single <acronym>ATA</acronym> disk is used, which is
currently recognized by the system as
<filename>ad0</filename>. It is also assumed that the
standard &os; partition scheme is used, with
<filename>/</filename>,
<filename>/var</filename>,
<filename>/usr</filename> and
<filename>/tmp</filename>, as
well as a swap partition.</para>
<para>Reboot the system, and at the &man.loader.8; prompt,
press <keycap>4</keycap> to boot into single user mode.
Then enter the following commands:</para>
<screen>&prompt.root; <userinput>glabel label rootfs /dev/ad0s1a</userinput>
GEOM_LABEL: Label for provider /dev/ad0s1a is label/rootfs
&prompt.root; <userinput>glabel label var /dev/ad0s1d</userinput>
GEOM_LABEL: Label for provider /dev/ad0s1d is label/var
&prompt.root; <userinput>glabel label usr /dev/ad0s1f</userinput>
GEOM_LABEL: Label for provider /dev/ad0s1f is label/usr
&prompt.root; <userinput>glabel label tmp /dev/ad0s1e</userinput>
GEOM_LABEL: Label for provider /dev/ad0s1e is label/tmp
&prompt.root; <userinput>glabel label swap /dev/ad0s1b</userinput>
GEOM_LABEL: Label for provider /dev/ad0s1b is label/swap
&prompt.root; <userinput>exit</userinput></screen>
<para>The system will continue with multi-user boot. After
the boot completes, edit <filename>/etc/fstab</filename> and
replace the conventional device names, with their respective
labels. The final <filename>/etc/fstab</filename> will
look like this:</para>
<programlisting># Device Mountpoint FStype Options Dump Pass#
/dev/label/swap none swap sw 0 0
/dev/label/rootfs / ufs rw 1 1
/dev/label/tmp /tmp ufs rw 2 2
/dev/label/usr /usr ufs rw 2 2
/dev/label/var /var ufs rw 2 2</programlisting>
<para>The system can now be rebooted. If everything went
well, it will come up normally and <command>mount</command>
will show:</para>
<screen>&prompt.root; <userinput>mount</userinput>
/dev/label/rootfs on / (ufs, local)
devfs on /dev (devfs, local)
/dev/label/tmp on /tmp (ufs, local, soft-updates)
/dev/label/usr on /usr (ufs, local, soft-updates)
/dev/label/var on /var (ufs, local, soft-updates)</screen>
</example>
<para>Starting with &os;&nbsp;7.2, the &man.glabel.8; class
supports a new label type for <acronym>UFS</acronym> file
systems, based on the unique file system id,
<literal>ufsid</literal>. These labels may be found in
<filename>/dev/ufsid</filename> and are
created automatically during system startup. It is possible
to use <literal>ufsid</literal> labels to mount partitions
using <filename>/etc/fstab</filename>. Use <command>glabel
status</command> to receive a list of file systems and their
corresponding <literal>ufsid</literal> labels:</para>
<screen>&prompt.user; <userinput>glabel status</userinput>
Name Status Components
ufsid/486b6fc38d330916 N/A ad4s1d
ufsid/486b6fc16926168e N/A ad4s1f</screen>
<para>In the above example, <filename>ad4s1d</filename>
represents <filename>/var</filename>,
while <filename>ad4s1f</filename> represents
<filename>/usr</filename>.
Using the <literal>ufsid</literal> values shown, these
partitions may now be mounted with the following entries in
<filename>/etc/fstab</filename>:</para>
<programlisting>/dev/ufsid/486b6fc38d330916 /var ufs rw 2 2
/dev/ufsid/486b6fc16926168e /usr ufs rw 2 2</programlisting>
<para>Any partitions with <literal>ufsid</literal> labels can be
mounted in this way, eliminating the need to manually create
permanent labels, while still enjoying the benefits of device
name independent mounting.</para>
</sect2>
</sect1>
<sect1 xml:id="geom-gjournal">
<title>UFS Journaling Through <acronym>GEOM</acronym></title>
<indexterm>
<primary><acronym>GEOM</acronym></primary>
</indexterm>
<indexterm>
<primary>Journaling</primary>
</indexterm>
<para>Beginning with &os;&nbsp;7.0, support for journals on
<acronym>UFS</acronym> file systems is available. The
implementation is provided through the <acronym>GEOM</acronym>
subsystem and is configured using <command>gjournal</command>.
Unlike other file system journaling implementations, the
<command>gjournal</command> method is block based and not
implemented as part of the file system. It is a
<acronym>GEOM</acronym> extension.</para>
<para>Journaling stores a log of file system transactions, such as
changes that make up a complete disk write operation, before
meta-data and file writes are committed to the disk. This
transaction log can later be replayed to redo file system
transactions, preventing file system inconsistencies.</para>
<para>This method provides another mechanism to protect against
data loss and inconsistencies of the file system. Unlike Soft
Updates, which tracks and enforces meta-data updates, and
snapshots, which create an image of the file system, a log is
stored in disk space specifically for this task. For better
performance, the journal may be stored on another disk. In this
configuration, the journal provider or storage device should be
listed after the device to enable journaling on.</para>
<para>The <filename>GENERIC</filename> kernel provides support for
<command>gjournal</command>. To automatically load the
<filename>geom_journal.ko</filename> kernel module at boot time,
add the following line to
<filename>/boot/loader.conf</filename>:</para>
<programlisting>geom_journal_load="YES"</programlisting>
<para>If a custom kernel is used, ensure the following line is in
the kernel configuration file:</para>
<programlisting>options GEOM_JOURNAL</programlisting>
<para>Once the module is loaded, a journal can be created on a new
file system using the following steps. In this example,
<filename>da4</filename> is a new <acronym>SCSI</acronym>
disk:</para>
<screen>&prompt.root; <userinput>gjournal load</userinput>
&prompt.root; <userinput>gjournal label /dev/<replaceable>da4</replaceable></userinput></screen>
<para>This will load the module and create a
<filename>/dev/da4.journal</filename> device node on
<filename>/dev/da4</filename>.</para>
<para>A <acronym>UFS</acronym> file system may now be created on
the journaled device, then mounted on an existing mount
point:</para>
<screen>&prompt.root; <userinput>newfs -O 2 -J /dev/<replaceable>da4</replaceable>.journal</userinput>
&prompt.root; <userinput>mount /dev/<replaceable>da4</replaceable>.journal <replaceable>/mnt</replaceable></userinput></screen>
<note>
<para>In the case of several slices, a journal will be created
for each individual slice. For instance, if
<filename>ad4s1</filename> and <filename>ad4s2</filename> are
both slices, then <command>gjournal</command> will create
<filename>ad4s1.journal</filename> and
<filename>ad4s2.journal</filename>.</para>
</note>
<para>Journaling may also be enabled on current file systems by
using <command>tunefs</command>. However,
<emphasis>always</emphasis> make a backup before attempting to
alter an existing file system. In most cases,
<command>gjournal</command> will fail if it is unable to create
the journal, but this does not protect against data loss
incurred as a result of misusing <command>tunefs</command>.
Refer to &man.gjournal.8; and &man.tunefs.8; for more
information about these commands.</para>
<para>It is possible to journal the boot disk of a &os; system.
Refer to the article
Implementing UFS Journaling on a Desktop PC for detailed
instructions.</para>
</sect1>
</chapter>

View file

@ -1,26 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project
The FreeBSD Traditional Chinese Project
$FreeBSD$
Original revision: 1.381
Original revision: r46052
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="install">
<info><title>安裝 FreeBSD</title>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="install">
<info>
<title>安裝 FreeBSD</title>
<authorgroup>
<author><personname><firstname>Jim</firstname><surname>Mock</surname></personname><contrib>Restructured, reorganized, and parts
rewritten by </contrib></author>
<author><personname><firstname>Jim</firstname><surname>Mock</surname></personname><contrib>Restructured,
reorganized, and parts rewritten by </contrib></author>
</authorgroup>
<authorgroup>
<author><personname><firstname>Randy</firstname><surname>Pratt</surname></personname><contrib>The sysinstall walkthrough, screenshots, and general
copy by </contrib></author>
<author><personname><firstname>Randy</firstname><surname>Pratt</surname></personname><contrib>The
sysinstall walkthrough, screenshots, and general copy by
</contrib></author>
</authorgroup>
</info>
<sect1 xml:id="install-synopsis">
<title>概述</title>
@ -84,7 +87,7 @@
Information</link> 找相關的 Installation Notes 說明。
接下來的章節會有相關說明整理。
根據安裝 &os; 的方式不同,可能會需要軟碟機或光碟機,
或某些情況則是要網路卡。 這些部份會在 <xref linkend="install-floppies"/> 有介紹。</para>
或某些情況則是要網路卡。 這些部份會在 <xref linkend="install-boot-media"/> 有介紹。</para>
<sect3>
<title>&os;/&arch.i386;&os;/&arch.pc98; 架構</title>
@ -412,52 +415,6 @@
</listitem>
</orderedlist>
</example>
</sect3>
<sect3>
<title>Alpha 架構的磁碟配置模式</title>
<para>在 Alpha 上,您必須使用一整顆硬碟給 FreeBSD
沒有辦法在同顆硬碟上跟其他作業系統共存。 依不同型號的 Alpha
機器,您的硬碟可以是 SCSI 或 IDE 硬碟,
只要您的機器可以從這些硬碟開機就可以。</para>
<para>按照 Digital / Compaq 使用手冊的編排風格,
所有 SRM 輸入的部分都用大寫表示。 注意SRM 大小寫有別。</para>
<para>要得知您磁碟的名稱以及型號,可以在 SRM console 提示下使用
<literal>SHOW DEVICE</literal> 命令:</para>
<screen>&gt;&gt;&gt;<userinput>SHOW DEVICE</userinput>
dka0.0.0.4.0 DKA0 TOSHIBA CD-ROM XM-57 3476
dkc0.0.0.1009.0 DKC0 RZ1BB-BS 0658
dkc100.1.0.1009.0 DKC100 SEAGATE ST34501W 0015
dva0.0.0.0.1 DVA0
ewa0.0.0.3.0 EWA0 00-00-F8-75-6D-01
pkc0.7.0.1009.0 PKC0 SCSI Bus ID 7 5.27
pqa0.0.0.4.0 PQA0 PCI EIDE
pqb0.0.1.4.0 PQB0 PCI EIDE</screen>
<para>例子中機器為 Digital Personal Workstation 433au
並且顯示出此機器有連接三個磁碟機。 第一個是 CDROM叫做
<filename>DKA0</filename> ;另外兩個是磁碟機, 分別叫做:
<filename>DKC0</filename><filename>DKC100</filename>
</para>
<para>磁碟機的名稱中有 <filename>DKx</filename>
字樣的是 SCSI 硬碟。例如: <filename>DKA100</filename>
表示是 SCSI 硬碟,其 SCSI ID 為 1 位在第一個 SCSI 匯流排(A)
<filename>DKC300</filename> 表示是 SCSI 硬碟,
其 SCSI ID 為 3位於第三個 SCSI 匯流排(C)。
裝置名稱 <filename>PKx</filename> 則為 SCSI 控制卡。
由上述 <literal>SHOW DEVICE</literal> 的結果看來,
SCSI 光碟機也被視為是 SCSI 硬碟的一種。</para>
<para>若為 IDE 硬碟的話,名稱會有 <filename>DQx</filename> 字樣,
<filename>PQx</filename> 則表示相對應的 IDE 磁碟控制器。
</para>
</sect3>
</sect2>
@ -583,58 +540,176 @@ pqb0.0.1.4.0 PQB0 PCI EIDE</screen>
</listitem>
</itemizedlist>
<para>若已經有 FreeBSD 的 CD 或 DVD但機器不支援從光碟開機的話,
那麼請直接進下一節 (<xref linkend="install-floppies"/>)。</para>
<para>若已經有 FreeBSD 的 CD 或 DVD
那麼請直接進下一節 (<xref linkend="install-boot-media"/>)。</para>
<para>若沒有 FreeBSD 安裝片的話,那麼請先看 <xref linkend="install-diff-media"/> 這裡會介紹如何準備所需要的安裝片,
照該節步驟弄好後,就可以繼續下一步 <xref linkend="install-start"/>
照該節步驟弄好後,就可以繼續下一步 <xref linkend="install-boot-media"/>
</para>
</sect2>
<sect2 xml:id="install-floppies">
<title>準備好開機磁片</title>
<sect2 xml:id="install-boot-media">
<title>Prepare the Boot Media</title>
<para>FreeBSD 安裝流程是要從電腦開機後,進入 FreeBSD 安裝畫面 ——
而不是在其他作業系統上執行程式。
一般來講,電腦都是用裝在硬碟上的作業系統來開機,
也可以用開機磁片來開機;
此外,現在大多數電腦都可以從光碟開機。</para>
<para>The &os; installation process is started by booting the
computer into the &os; installer. It is not a program that
can be run within another operating system. The computer
normally boots using the operating system installed on the
hard disk, but it can also be configured to boot from a CDROM
or from a USB disk.</para>
<tip>
<para>如果您有 FreeBSD 的 CDROM 或 DVD(無論是用買現成的或是自己燒錄的)
且您的電腦可支援由光碟開機,(通常在 BIOS 中會有
<quote>Boot Order</quote> 或類似選項),那麼您就可以跳過此小節。
因為 FreeBSD CDROM 或 DVD 都可以用來開機。</para>
<para>If installing from a CD/DVD to a computer whose BIOS
supports booting from the CD/DVD, skip this section. The
&os; CD/DVD images are bootable and can be used to install
&os; without any other special preparation.</para>
</tip>
<para>請按照下面步驟,以製作開機片:</para>
<para>To create a bootable memory stick, follow these
steps:</para>
<procedure>
<step>
<title>取得開機片的映像檔(images)</title>
<title>Acquire the Memory Stick Image</title>
<para>開機磁片用的映像檔(images)通常會放在光碟片上的
<filename>floppies/</filename> 目錄內,
另外也可以從像是下面 FTP 站的 floppies 目錄下載:
<literal>ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/&lt;arch&gt;/&lt;version&gt;-RELEASE/floppies/</literal>
。請將『arch』、『version』替換為打算安裝的電腦架構、OS 版本。
例如:想裝的是 &os;/&arch.i386;&nbsp;&rel.current;-RELEASE
,那麼可以到 <uri xlink:href="ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/&rel.current;-RELEASE/floppies/">ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/&rel.current;-RELEASE/floppies/</uri> 下載。</para>
<para>Memory stick images for
&os;&nbsp;8.<replaceable>X</replaceable> can be downloaded
from the <filename
class="directory">ISO-IMAGES/</filename> directory at
<literal>ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/<replaceable>arch</replaceable>/ISO-IMAGES/<replaceable>version</replaceable>/&os;-<replaceable>version</replaceable>-RELEASE-<replaceable>arch</replaceable>-memstick.img</literal>.
Replace <replaceable>arch</replaceable> and
<replaceable>version</replaceable> with the architecture
and the version number to install. For example, the
memory stick images for
&os;/&arch.i386;&nbsp;&rel2.current;-RELEASE are
available from <uri
xlink:href="ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/&arch.i386;/ISO-IMAGES/&rel2.current;/&os;-&rel2.current;-RELEASE-&arch.i386;-memstick.img">ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/&arch.i386;/ISO-IMAGES/&rel2.current;/&os;-&rel2.current;-RELEASE-&arch.i386;-memstick.img</uri>.</para>
<para>映像檔(images)的附檔名都是 <filename>.flp</filename>。而
<filename>floppies/</filename> 目錄內包含一些不同用途的映像檔
(images),這取決於您要裝的 FreeBSD 版本、需求、硬體配備為何。
通常要 4 個映像檔,也就是: <filename>boot.flp</filename>
<filename>kern1.flp</filename><filename>kern2.flp</filename>
<filename>kern3.flp</filename>。 若有疑問的話,請翻閱同一目錄下的
<filename>README.TXT</filename> 文件檔,以瞭解相關最新注意事項。
</para>
<tip>
<para>A different directory path is used for
&os;&nbsp;9.0-RELEASE and later versions. How to
download and install
&os;&nbsp;9.<replaceable>X</replaceable>
is covered in <xref linkend="bsdinstall"/>.</para>
</tip>
<para>The memory stick image has a <filename>.img</filename>
extension. The <filename>ISO-IMAGES/</filename> directory
contains a number of different images and the one to
use depends on the version of &os; and the type of media
supported by the hardware being installed to.</para>
<important>
<para>在使用 FTP 下載時,必須使用 <emphasis>binary 模式</emphasis>
進行傳輸。 有些瀏覽器預設是以 <emphasis>text</emphasis> (或
<emphasis>ASCII</emphasis>) 模式來傳輸資料,
所以這些錯誤傳輸模式下載的映像檔所做成的磁片,會無法使用。</para>
<para>Before proceeding, <emphasis>back up</emphasis> the
data on the USB stick, as this procedure will
<emphasis>erase</emphasis> it.</para>
</important>
</step>
<step>
<title>Write the Image File to the Memory Stick</title>
<procedure>
<title>Using &os; to Write the Image</title>
<warning>
<para>The example below lists
<filename>/dev/da0</filename> as the target device
where the image will be written. Be very careful that
you have the correct device as the output target, or
you may destroy your existing data.</para>
</warning>
<step>
<title>Writing the Image with &man.dd.1;</title>
<para>The <filename>.img</filename> file is
<emphasis>not</emphasis> a regular file that can just
be copied to the memory stick. It is an image of the
complete contents of the disk. This means that
&man.dd.1; must be used to write the image directly to
the disk:</para>
<screen>&prompt.root; <userinput>dd if=&os;-&rel2.current;-RELEASE-&arch.i386;-memstick.img of=/dev/<replaceable>da0</replaceable> bs=64k</userinput></screen>
<para>If an <computeroutput>Operation not
permitted</computeroutput> error is displayed, make
certain that the target device is not in use, mounted,
or being automounted by another program. Then try
again.</para>
</step>
</procedure>
<procedure>
<title>Using &windows; to Write the Image</title>
<warning>
<para>Make sure to use the correct drive letter as the
output target, as this command will overwrite and
destroy any existing data on the specified
device.</para>
</warning>
<step>
<title>Obtaining <application>Image Writer for
Windows</application></title>
<para><application>Image Writer for
Windows</application> is a free application that can
correctly write an image file to a memory stick.
Download it from <uri
xlink:href="https://launchpad.net/win32-image-writer/">https://launchpad.net/win32-image-writer/</uri>
and extract it into a folder.</para>
</step>
<step>
<title>Writing the Image with Image Writer</title>
<para>Double-click the
<application>Win32DiskImager</application> icon to
start the program. Verify that the drive letter shown
under <computeroutput>Device</computeroutput> is the
drive with the memory stick. Click the folder icon
and select the image to be written to the memory
stick. Click <guibutton>Save</guibutton> to accept
the image file name. Verify that everything is
correct, and that no folders on the memory stick are
open in other windows. Finally, click
<guibutton>Write</guibutton> to write the image file
to the drive.</para>
</step>
</procedure>
</step>
</procedure>
<para>To create the boot floppy images for a &os;/&arch.pc98;
installation, follow these steps:</para>
<procedure>
<step>
<title>Acquire the Boot Floppy Images</title>
<para>The &os;/&arch.pc98; boot disks can be downloaded from
the floppies directory,
<literal>ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/pc98/<replaceable>version</replaceable>-RELEASE/floppies/</literal>.
Replace <replaceable>version</replaceable> with the
version number to install.</para>
<para>The floppy images have a <filename>.flp</filename>
extension. <filename
class="directory">floppies/</filename> contains a number
of different images. Download
<filename>boot.flp</filename> as well as the number of
files associated with the type of installation, such as
<literal>kern.small*</literal> or
<literal>kern*</literal>.</para>
<important>
<para>The FTP program must use <emphasis>binary
mode</emphasis> to download these disk images. Some
web browsers use <emphasis>text</emphasis> or
<emphasis>ASCII</emphasis> mode, which will be apparent
if the disks are not bootable.</para>
</important>
</step>
@ -760,7 +835,7 @@ We can take no responsibility for lost disk contents!</literallayout>
<step>
<para>若要用磁片安裝,請把在
<xref linkend="install-floppies"/>一節中製作好的
<xref linkend="install-boot-media"/>一節中製作好的
<filename>boot.flp</filename> 那張安裝磁片放到第一台軟碟機中。
</para>
@ -854,59 +929,6 @@ Insert disk labelled "Kernel floppy 1" and press any key...</screen>
</step>
</procedure>
</sect3>
<sect3>
<title>Alpha 平台的開機流程</title>
<indexterm><primary>Alpha</primary></indexterm>
<procedure>
<step>
<para>在一開始,電腦電源開關是關閉的。</para>
</step>
<step>
<para>打開電腦電源開關,然後等開機畫面出現。</para>
</step>
<step>
<para>若要用磁片安裝,請把在
<xref linkend="install-floppies"/>一節中製作好的
<filename>boot.flp</filename> 那張安裝磁片放到第一台軟碟機中。
然後,打下列指令來從磁片開機
(請把下列軟碟機代號改為你電腦的軟碟機代號)</para>
<screen>&gt;&gt;&gt;<userinput>BOOT DVA0 -FLAGS '' -FILE ''</userinput></screen>
<para>若要用光碟安裝,請把做好的安裝片放入光碟機,
然後打下列指令來從光碟開機
(請把下列光碟機代號改為你電腦的光碟機代號)</para>
<screen>&gt;&gt;&gt;<userinput>BOOT DKA0 -FLAGS '' -FILE ''</userinput></screen>
</step>
<step>
<para>接著 FreeBSD 開機片就會開始了。若是由軟碟開機的話,
這時會看到以下訊息:</para>
<screen>Insert disk labelled "Kernel floppy 1" and press any key...</screen>
<para>請照指示,拿走 <filename>boot.flp</filename> 片,改放
<filename>kern1.flp</filename> 片,
然後按 <keycap>Enter</keycap></para>
</step>
<step>
<para>無論從軟碟或光碟開機,您都會看到下面這段訊息:</para>
<screen>Hit [Enter] to boot immediately, or any other key for command prompt.
Booting [kernel] in 9 seconds... _</screen>
<para>您可以等待 10 秒,或是按 <keycap>Enter</keycap> 鍵。
接下來就會進入kernel configuration 選單。</para>
</step>
</procedure>
</sect3>
<sect3>
@ -2346,7 +2368,7 @@ Do you want to configure inetd and the network services that it provides?
<para>These services can be enabled after installation by editing
<filename>/etc/inetd.conf</filename> with your favorite text editor.
See <xref linkend="network-inetd-overview"/> for more information.</para>
See <xref linkend="network-inetd-conf"/> for more information.</para>
<para>Select &gui.yes; if you wish to
configure these services during install. An additional
@ -3969,7 +3991,7 @@ Please press any key to reboot.</screen>
serial console. A serial console is basically using another
machine to act as the main display and keyboard for a
system. To do this, just follow the steps to create
installation floppies, explained in <xref linkend="install-floppies"/>.</para>
installation floppies, explained in <xref linkend="install-boot-media"/>.</para>
<para>To modify these floppies to boot into a serial console, follow
these steps:</para>
@ -4106,112 +4128,156 @@ Please press any key to reboot.</screen>
</itemizedlist>
<sect2 xml:id="install-cdrom">
<title>Creating an Installation CDROM</title>
<title>Creating an Installation ISO</title>
<para>As part of each release, the FreeBSD project makes available at least two
CDROM images (<quote>ISO images</quote>) per supported architecture. These images can be written
(<quote>burned</quote>) to CDs if you have a CD writer, and then used
to install FreeBSD. If you have a CD writer, and bandwidth is cheap,
then this is the easiest way to install FreeBSD.</para>
<para>As part of each release, the &os; Project provides ISO
images for each supported architecture. These images can be
written (<quote>burned</quote>) to CD or DVD media using a
burning application, and then used to install &os;. If a
CD/DVD writer is available, this is the easiest way to install
&os;.</para>
<procedure>
<step>
<title>Download the Correct ISO Images</title>
<para>The ISO images for each release can be downloaded from <filename>ftp://ftp.FreeBSD.org/pub/FreeBSD/ISO-IMAGES-arch/version</filename> or the closest mirror.
Substitute <replaceable>arch</replaceable> and
<para>The ISO images for each release can be downloaded from
<filename>ftp://ftp.FreeBSD.org/pub/FreeBSD/ISO-IMAGES-<replaceable>arch</replaceable>/<replaceable>version</replaceable></filename>
or the closest mirror. Substitute
<replaceable>arch</replaceable> and
<replaceable>version</replaceable> as appropriate.</para>
<para>That directory will normally contain the following images:</para>
<para>An image directory normally contains the following
images:</para>
<table frame="none">
<title>FreeBSD 5.<replaceable>X</replaceable> and 6.<replaceable>X</replaceable>
ISO Image Names and Meanings</title>
<title>&os;
ISO Image Names and Meanings</title>
<tgroup cols="2">
<thead>
<row>
<entry>檔名</entry>
<entry>Filename</entry>
<entry>內容</entry>
<entry>Contents</entry>
</row>
</thead>
<tbody>
<row>
<entry><filename>版本-RELEASE-架構-bootonly.iso</filename></entry>
<entry><filename>&os;-<replaceable>version</replaceable>-RELEASE-<replaceable>arch</replaceable>-bootonly.iso</filename></entry>
<entry>Everything you need to boot into a FreeBSD
kernel and start the installation interface.
The installable files have to be pulled over FTP
or some other supported source.</entry>
<entry>This CD image starts the installation process
by booting from a CD-ROM drive but it does not
contain the support for installing &os; from the
CD itself. Perform a network based install, such
as from an FTP server, after booting from this
CD.</entry>
</row>
<row>
<entry><filename>版本-RELEASE-架構-disc1.iso</filename></entry>
<entry><filename>&os;-<replaceable>version</replaceable>-RELEASE-<replaceable>arch</replaceable>-dvd1.iso.gz</filename></entry>
<entry>Everything you need to install &os; and a
<quote>live filesystem</quote>, which is used in
conjunction with the <quote>Repair</quote> facility
in <application>sysinstall</application>.</entry>
<entry>This DVD image contains everything necessary
to install the base &os; operating system, a
collection of pre-built packages, and the
documentation. It also supports booting into a
<quote>livefs</quote> based rescue mode.</entry>
</row>
<row>
<entry><filename>版本-RELEASE-架構-disc2.iso</filename></entry>
<entry><filename>&os;-<replaceable>version</replaceable>-RELEASE-<replaceable>arch</replaceable>-memstick.img</filename></entry>
<entry>&os; 文件(&os; 6.2 之前的),以及許多 third-party
packages。</entry>
<entry>This image can be written to a USB memory
stick in order to install machines capable of
booting from USB drives. It also supports booting
into a <quote>livefs</quote> based rescue mode.
The only included package is the documentation
package.</entry>
</row>
<row>
<entry><filename>版本-RELEASE-架構-docs.iso</filename></entry>
<entry><filename>&os;-<replaceable>version</replaceable>-RELEASE-<replaceable>arch</replaceable>-disc1.iso</filename></entry>
<entry>&os; 文件(&os; 6.2 及之後)。</entry>
<entry>This image can be written to a USB memory
stick in order to install machines capable of
booting from USB drives. Similar to the
<filename>bootonly.iso</filename> image, it does
not contain the distribution sets on the medium
itself, but does support network-based
installations (for example, via ftp).</entry>
</row>
<row>
<entry><filename>&os;-version-RELEASE-arch-disc1.iso</filename></entry>
<entry>This CD image contains the base &os;
operating system and the documentation package but
no other packages.</entry>
</row>
<row>
<entry><filename>&os;-<replaceable>version</replaceable>-RELEASE-<replaceable>arch</replaceable>-disc2.iso</filename></entry>
<entry>A CD image with as many third-party packages
as would fit on the disc. This image is not
available for
&os;&nbsp;9.<replaceable>X</replaceable>.</entry>
</row>
<row>
<entry><filename>&os;-<replaceable>version</replaceable>-RELEASE-<replaceable>arch</replaceable>-disc3.iso</filename></entry>
<entry>Another CD image with as many third-party
packages as would fit on the disc. This image is
not available for
&os;&nbsp;9.<replaceable>X</replaceable>.</entry>
</row>
<row>
<entry><filename>&os;-<replaceable>version</replaceable>-RELEASE-<replaceable>arch</replaceable>-livefs.iso</filename></entry>
<entry>This CD image contains support for booting
into a <quote>livefs</quote> based rescue mode but
does not support doing an install from the CD
itself.</entry>
</row>
</tbody>
</tgroup>
</table>
<para>You <emphasis>must</emphasis> download one of either the bootonly
ISO image (if available), or the image of disc one. Do not download
both of them, since the disc one image contains everything that the
bootonly ISO image contains.</para>
<para>When performing a CD installation, download either
the <literal>bootonly</literal> ISO image or
<literal>disc1</literal>. Do not download both, since
<literal>disc1</literal> contains everything that the
<literal>bootonly</literal> ISO image contains.</para>
<para>Use the bootonly ISO if Internet access is cheap for you. It will
let you install &os;, and you can then install third-party
packages by downloading them using the ports/packages system (see
<xref linkend="ports"/>) as
necessary.</para>
<para>Use the <literal>bootonly</literal> ISO to perform a
network install over the Internet. Additional software
can be installed as needed using the Ports Collection as
described in <xref linkend="ports"/>.</para>
<para>Use the image of disc one if you want to install a &os;
release and want
a reasonable selection of third-party packages on the disc
as well.</para>
<para>The additional disc images are useful, but not essential,
especially if you have high-speed access to the Internet.</para>
<para>Use <literal>dvd1</literal> to install &os; and a
selection of third-party packages from the disc.</para>
</step>
<step>
<title>Write the CDs</title>
<title>Burn the Media</title>
<para>You must then write the CD images to disc. If you will be
doing this on another FreeBSD system then see
<xref linkend="creating-cds"/> for more information (in
particular, <xref linkend="burncd"/> and
<xref linkend="cdrecord"/>).</para>
<para>Next, write the downloaded image(s) to disc. If using
another &os; system, refer to
<xref linkend="cdrecord"/> for instructions.</para>
<para>If you will be doing this on another platform then you will
need to use whatever utilities exist to control your CD writer on
that platform. The images provided are in the standard ISO format,
which many CD writing applications support.</para>
<para>If using another platform, use any burning utility
that exists for that platform. The images are in the
standard ISO format which most CD writing applications
support.</para>
</step>
</procedure>
<note><para>If you are interested in building a customized
release of FreeBSD, please see the <link xlink:href="&url.articles.releng;">Release Engineering
Article</link>.</para></note>
<note><para>To build a customized release of &os;, refer to the
<link xlink:href="&url.articles.releng;">Release Engineering
Article</link>.</para></note>
</sect2>
<sect2 xml:id="install-ftp">

View file

@ -524,8 +524,8 @@ jail_<replaceable>www</replaceable>_devfs_ruleset="<replaceable>www_ruleset</rep
<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>
在 Handbook 中 <xref linkend="ports-using-portsnap-method"/>
有相關介紹,初學者可以看看。</para>
<procedure>
<step>

View file

@ -242,7 +242,7 @@ ath_hal(4) - Atheros Hardware Access Layer (HAL)</programlisting>
一旦真的砍了之後,你可能幾秒之後才會醒悟到:
你同時也砍掉自己改的 kernel 設定檔。
此外,也不要直接修改 <filename>GENERIC</filename>,因為下次你
<link linkend="cutting-edge">更新 source tree</link>時,
更新 source tree 時,
它會被新版覆蓋,而相關修改也將隨之而逝。</para>
<para>你也可考慮把 kernel 設定檔改放到其他地方,然後再到
@ -275,7 +275,7 @@ ath_hal(4) - Atheros Hardware Access Layer (HAL)</programlisting>
會循序漸進地介紹。</para>
<note>
<para>若有從 &os; 計劃去 <link linkend="cutting-edge">更新你的 source tree</link> 的話,
<para>若有從 &os; 計劃去更新你的 source tree 的話,
則切記在進行任何升級之前,務必要察看
<filename>/usr/src/UPDATING</filename>
這檔會介紹在更新過程中的重大議題或要注意的事項。

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
The FreeBSD Documentation Project
The FreeBSD Traditional Chinese Project
$FreeBSD$
Original revision: 1.273
Original revision: r46064
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="ports">
<title>軟體套件管理篇Packages 及 Ports 機制</title>
@ -300,6 +301,7 @@ R-deps: </screen>
</itemizedlist>
</sect1>
<!--
<sect1 xml:id="packages-using">
<info><title>使用 Packages 管理機制</title>
<authorgroup>
@ -500,227 +502,513 @@ docbook =
<para>以上面例子而言,將會移除所有以 <literal>xchat</literal>
開頭的軟體。</para>
</sect2>
</sect1>
-->
<sect2>
<title>其他細節部份</title>
<para>所有已裝的 package 資訊都會存到 <filename>/var/db/pkg</filename>
目錄內,在該目錄下可以找到記載已裝的軟體檔案清單及該軟體簡介的檔案。
</para>
<sect1 xml:id="pkgng-intro">
<title>Using <application>pkg</application> for Binary Package
Management</title>
<para><application>pkg</application> is the next generation
replacement for the traditional &os; package management tools,
offering many features that make dealing with binary packages
faster and easier.</para>
<para><application>pkg</application> is not a replacement for
port management tools like
<package>ports-mgmt/portmaster</package> or
<package>ports-mgmt/portupgrade</package>. These tools can be
used to install third-party software from both binary packages
and the Ports Collection, while
<application>pkg</application> installs only binary
packages.</para>
<sect2 xml:id="pkgng-initial-setup">
<title>Getting Started with
<application>pkg</application></title>
<para>&os;&nbsp;8.4 and later includes a bootstrap utility
which can be used to download and install
<application>pkg</application>, along with its manual
pages.</para>
<para>To bootstrap the system, run:</para>
<screen>&prompt.root; <userinput>/usr/sbin/pkg</userinput></screen>
<para>For earlier &os; versions,
<application>pkg</application> must instead be installed
from the Ports Collection or as a binary package.</para>
<para>To install the port, run:</para>
<screen>&prompt.root; <userinput>cd /usr/ports/ports-mgmt/pkg</userinput>
&prompt.root; <userinput>make</userinput>
&prompt.root; <userinput>make install clean</userinput></screen>
<para>When upgrading an existing system that originally used the
older package system, the database must be converted to the
new format, so that the new tools are aware of the already
installed packages. Once <application>pkg</application> has
been installed, the
package database must be converted from the traditional format
to the new format by running this command:</para>
<screen>&prompt.root; <userinput>pkg2ng</userinput></screen>
<note><para>This step is not required for new installations that
do not yet have any third-party software
installed.</para></note>
<important>
<para>This step is not reversible. Once the package database
has been converted to the <application>pkg</application>
format, the traditional <literal>pkg_*</literal> tools
should no longer be used.</para>
</important>
<note>
<para>The package database conversion may emit errors as the
contents are converted to the new version. Generally, these
errors can be safely ignored. However, a list of
third-party software that was not successfully converted
will be listed after <command>pkg2ng</command> has finished
and these applications must be manually reinstalled.</para>
</note>
<para>To ensure that the &os;&nbsp;Ports Collection registers
new software with <application>pkg</application>, and not
the traditional packages format, &os; versions earlier than
10.<replaceable>X</replaceable> require this line in
<filename>/etc/make.conf</filename>:</para>
<programlisting>WITH_PKGNG= yes</programlisting>
<para>The <application>pkg</application> package management
system uses a package repository for most operations. The
default package repository location is defined in
<filename>/usr/local/etc/pkg.conf</filename> or by the
<envar>PACKAGESITE</envar> environment variable, which
overrides the configuration file.</para>
<para>Additional <application>pkg</application>
configuration options are described in pkg.conf(5).</para>
<para>Usage information for <application>pkg</application> is
available in pkg(8) or by running
<command>pkg</command> without additional arguments.</para>
<para>Each <application>pkg</application> command argument is
documented in a command-specific manual page. To read the
manual page for <command>pkg install</command>, for example,
run either of these commands:</para>
<screen>&prompt.root; <userinput>pkg help install</userinput></screen>
<screen>&prompt.root; <userinput>man pkg-install</userinput></screen>
<para>The rest of this section demonstrates common binary
package management tasks which can be performed using
<application>pkg</application>. Each demonstrated command
provides many switches to customize its use. Refer to a
command's help or man page for details and more
examples.</para>
</sect2>
<sect2 xml:id="pkgng-pkg-info">
<title>Obtaining Information About Installed Packages</title>
<para>Information about the packages installed on a system
can be viewed by running <command>pkg info</command> which,
when run without any switches, will list the package version
for either all installed packages or the specified
package.</para>
<para>For example, to see which version of
<application>pkg</application> is installed, run:</para>
<screen>&prompt.root; <userinput>pkg info pkg</userinput>
pkg-1.1.4_1</screen>
</sect2>
<sect2 xml:id="pkgng-installing-deinstalling">
<title>Installing and Removing Packages</title>
<para>To install a binary package use the following command,
where <replaceable>packagename</replaceable> is the name of
the package to install:</para>
<screen>&prompt.root; <userinput>pkg install <replaceable>packagename</replaceable></userinput></screen>
<para>This command uses repository data to determine which
version of the software to install and if it has any
uninstalled dependencies. For example, to install
<application>curl</application>:</para>
<screen>&prompt.root; <userinput>pkg install curl</userinput>
Updating repository catalogue
/usr/local/tmp/All/curl-7.31.0_1.txz 100% of 1181 kB 1380 kBps 00m01s
/usr/local/tmp/All/ca_root_nss-3.15.1_1.txz 100% of 288 kB 1700 kBps 00m00s
Updating repository catalogue
The following 2 packages will be installed:
Installing ca_root_nss: 3.15.1_1
Installing curl: 7.31.0_1
The installation will require 3 MB more space
0 B to be downloaded
Proceed with installing packages [y/N]: <userinput>y</userinput>
Checking integrity... done
[1/2] Installing ca_root_nss-3.15.5_1... done
[2/2] Installing curl-7.31.0_1... done
Cleaning up cache files...Done</screen>
<para>The new package and any additional packages that were
installed as dependencies can be seen in the installed
packages list:</para>
<screen>&prompt.root; <userinput>pkg info</userinput>
ca_root_nss-3.15.5_1 The root certificate bundle from the Mozilla Project
curl-7.31.0_1 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
pkg-1.1.4_6 New generation package manager</screen>
<para>Packages that are no longer needed can be removed with
<command>pkg delete</command>. For example:</para>
<screen>&prompt.root; <userinput>pkg delete curl</userinput>
The following packages will be deleted:
curl-7.31.0_1
The deletion will free 3 MB
Proceed with deleting packages [y/N]: <userinput>y</userinput>
[1/1] Deleting curl-7.31.0_1... done</screen>
</sect2>
<sect2 xml:id="pkgng-upgrading">
<title>Upgrading Installed Packages</title>
<para>Packages that are outdated can be found with
<command>pkg version</command>. If a local ports tree
does not exist, pkg-version(8) will use the remote
repository catalogue. Otherwise, the local ports tree will
be used to identify package versions.</para>
<para>Installed packages can be upgraded to their latest
versions by typing <command>pkg upgrade</command>. This
command will compare the installed versions with those
available in the repository catalogue. When finished, it
will list the applications that have newer versions. Type
<userinput>y</userinput> to proceed with the upgrade or
<userinput>n</userinput> to cancel the upgrade.</para>
</sect2>
<sect2 xml:id="pkgng-auditing">
<title>Auditing Installed Packages</title>
<para>Occasionally, software vulnerabilities may be discovered
in third-party applications. To address this,
<application>pkg</application> includes a built-in auditing
mechanism. To determine if there are any known
vulnerabilities for the software installed on the system,
run:</para>
<screen>&prompt.root; <userinput>pkg audit -F</userinput></screen>
</sect2>
<sect2 xml:id="pkgng-autoremove">
<title>Automatically Removing Leaf Dependencies</title>
<para>Removing a package may leave behind dependencies which
are no longer required. Unneeded packages that were installed
as dependencies can be automatically detected and removed
using:</para>
<screen>&prompt.root; <userinput>pkg autoremove</userinput>
Packages to be autoremoved:
ca_root_nss-3.13.5
The autoremoval will free 723 kB
Proceed with autoremoval of packages [y/N]: <userinput>y</userinput>
Deinstalling ca_root_nss-3.15.1_1... done</screen>
</sect2>
<sect2 xml:id="pkgng-backup">
<title>Backing Up the Package Database</title>
<para>Unlike the traditional package management system,
<application>pkg</application> includes its own package
database backup mechanism. To manually back up the contents
of the package database, run the following command, replacing
<replaceable>pkgng.db</replaceable> with a suitable file
name:</para>
<screen>&prompt.root; <userinput>pkg backup -d <replaceable>pkgng.db</replaceable></userinput></screen>
<para>Additionally, <application>pkg</application> includes
a &man.periodic.8; script to automatically perform a daily
back up of the package database. This functionality is
enabled if <literal>daily_backup_pkgdb_enable</literal> is
set to <literal>YES</literal> in &man.periodic.conf.5;.</para>
<tip>
<para>To disable the periodic script from backing up the
package database, set
<literal>daily_backup_pkgdb_enable</literal> to
<literal>NO</literal> in &man.periodic.conf.5;.</para>
</tip>
<para>To restore the contents of a previous package database
backup, run:</para>
<screen>&prompt.root; <userinput>pkg backup -r <replaceable>/path/to/pkgng.db</replaceable></userinput></screen>
</sect2>
<sect2 xml:id="pkgng-clean">
<title>Removing Stale Packages</title>
<para>By default, <application>pkg</application> stores
binary packages in a cache directory defined by
<envar>PKG_CACHEDIR</envar> in pkg.conf(5). When upgrading
packages with <command>pkg upgrade</command>, old versions
of the upgraded packages are not automatically removed.</para>
<para>To remove these outdated binary packages, run:</para>
<screen>&prompt.root; <userinput>pkg clean</userinput></screen>
</sect2>
<sect2 xml:id="pkgng-set">
<title>Modifying Package Metadata</title>
<para>Software within the &os;&nbsp;Ports Collection can
undergo major version number changes. To address this,
<application>pkg</application> has a built-in command to
update package origins. This can be useful, for example, if
<package>lang/php5</package> is renamed to
<package>lang/php53</package> so that
<package>lang/php5</package> can now
represent version <literal>5.4</literal>.</para>
<para>To change the package origin for the above example,
run:</para>
<screen>&prompt.root; <userinput>pkg set -o lang/php5:lang/php53</userinput></screen>
<para>As another example, to update
<package>lang/ruby18</package> to
<package>lang/ruby19</package>, run:</para>
<screen>&prompt.root; <userinput>pkg set -o lang/ruby18:lang/ruby19</userinput></screen>
<para>As a final example, to change the origin of the
<filename>libglut</filename> shared libraries from
<package>graphics/libglut</package> to
<package>graphics/freeglut</package>, run:</para>
<screen>&prompt.root; <userinput>pkg set -o graphics/libglut:graphics/freeglut</userinput></screen>
<note>
<para>When changing package origins, it is important to
reinstall packages that are dependent on the package with
the modified origin. To force a reinstallation of dependent
packages, run:</para>
<screen>&prompt.root; <userinput>pkg install -Rf <replaceable>graphics/freeglut</replaceable></userinput></screen>
</note>
</sect2>
</sect1>
<sect1 xml:id="ports-using">
<title>使用 Ports 管理機制</title>
<para>下面我們會介紹如何使用 Ports Collection 來安裝、移除軟體的基本用法。
至於其他可用的 <command>make</command> 詳細用法與環境設定,可參閱
&man.ports.7;</para>
<para>The Ports Collection is a set of
<filename>Makefiles</filename>, patches, and description files
stored in <filename>/usr/ports</filename>. This set of files is
used to compile and install applications on &os;. Before an
application can be compiled using a port, the Ports Collection
must first be installed. If it was not installed during the
installation of &os;, use one of the following methods to
install it:</para>
<sect2 xml:id="ports-tree">
<title>記得安裝 Ports Collection</title>
<procedure xml:id="ports-using-portsnap-method">
<title>Portsnap 方式</title>
<para>在安裝任一 ports 之前,必須先裝上
Ports Collection —— 它主要是由 <filename>/usr/ports</filename> 內一堆
<filename>Makefiles</filename>, patches 以及一些軟體簡介檔所組成的。
</para>
<para>The base system of &os; includes
<application>Portsnap</application>. This is a fast and
user-friendly tool for retrieving the Ports Collection and
is the recommended choice for most users. This utility
connects to a &os; site, verifies the secure key, and
downloads a new copy of the Ports Collection. The key is used
to verify the integrity of all downloaded files.</para>
<para>在裝 FreeBSD 時,若忘了在 <application>sysinstall</application>
內勾選要裝 Ports Collection 的話,
沒關係,可以照下列方式來安裝 ports collection</para>
<step>
<para>To download a compressed snapshot of the Ports
Collection into
<filename>/var/db/portsnap</filename>:</para>
<procedure>
<title>CVSup 方式</title>
<screen>&prompt.root; <userinput>portsnap fetch</userinput></screen>
</step>
<para>使用 <application>CVSup</application> 是安裝、更新 Ports
Collection 的快速方法之一。
若想更瞭解 <application>CVSup</application> 用法的話,請參閱 <link linkend="cvsup">使用 CVSup</link></para>
<step>
<para>若是第一次跑 <application>Portsnap</application> 的話,
則需要先解壓到 <filename>/usr/ports</filename></para>
<note>
<para><application>csup</application> 是以 C 語言對
<application>CVSup</application> 軟體的重寫,在 &os; 6.2
及之後版本即有附在系統內。 可以直接用系統所附的
<application>csup</application> 即可跳過步驟一的動作,
並將本文相關提到 <command>cvsup</command> 之處,
都改為 <command>csup</command> 即可。 此外, &os; 6.2
之前的版本,則可裝 <package>net/csup</package>
或者 package 來使用 <application>csup</application></para>
</note>
<screen>&prompt.root; <userinput>portsnap extract</userinput></screen>
</step>
<para>第一次跑 <application>CVSup</application> 之前,請先確認
<filename>/usr/ports</filename>
是乾淨的! 若你已經裝了 Ports Collection ,但又自行加上其他 patch
檔,那麼 <application>CVSup</application>
並不會刪除你自行加上的 patch 檔,這樣可能會導致要安裝某些軟體時,
發生 patch 失敗或編譯失敗。</para>
<step>
<para>After the first use of
<application>Portsnap</application> has been completed as
shown above, <filename>/usr/ports</filename> can be updated
as needed by running:</para>
<step>
<para>安裝 <package>net/cvsup-without-gui</package>
package</para>
<screen>&prompt.root; <userinput>portsnap fetch</userinput>
&prompt.root; <userinput>portsnap update</userinput></screen>
<screen>&prompt.root; <userinput>pkg_add -r cvsup-without-gui</userinput></screen>
<para>When using <literal>fetch</literal>, the
<literal>extract</literal> or the <literal>update</literal>
operation may be run consecutively, like so:</para>
<para>細節用法請參閱 <link linkend="cvsup-install">安裝 CVSup</link>(<xref linkend="cvsup-install"/>)。</para>
</step>
<screen>&prompt.root; <userinput>portsnap fetch update</userinput></screen>
</step>
</procedure>
<step>
<para>執行 <command>cvsup</command></para>
<procedure xml:id="ports-using-subversion-method">
<title>Subversion Method</title>
<screen>&prompt.root; <userinput>cvsup -L 2 -h cvsup.tw.FreeBSD.org /usr/share/examples/cvsup/ports-supfile</userinput></screen>
<para>If more control over the ports tree is needed or if local
changes need to be maintained,
<application>Subversion</application> can be used to obtain
the Ports Collection. Refer to <link
xlink:href="&url.articles.committers-guide;/subversion-primer.html">the
Subversion Primer</link> for a detailed description of
<application>Subversion</application>.</para>
<para>請把
<replaceable>cvsup.tw.FreeBSD.org</replaceable> 請改成離你比較近
(快)的 <application>CVSup</application> 主機。
這部分可以參閱完整的 <link linkend="cvsup-mirrors">CVSup mirror
</link> 站列表(<xref linkend="cvsup-mirrors"/>)。</para>
<step>
<para><application>Subversion</application> must be installed
before it can be used to check out the ports tree. If a
copy of the ports tree is already present, install
<application>Subversion</application> like this:</para>
<note>
<para>若想改用自己設的
<filename>ports-supfile</filename>,比如說,
不想每次都得打指令來指定所使用的
<application>CVSup</application> 主機。</para>
<screen>&prompt.root; <userinput>cd /usr/ports/devel/subversion</userinput>
&prompt.root; <userinput>make install clean</userinput></screen>
<procedure>
<step>
<para>這種情況下,請以 <systemitem class="username">root</systemitem> 權限把
<filename>/usr/share/examples/cvsup/ports-supfile</filename>
複製到其他位置,比如
<filename>/root</filename> 或者自己帳號的家目錄。</para>
</step>
<para>If the ports tree is not available, or
<application>pkg</application> is being used to manage
packages, <application>Subversion</application> can be
installed as a package:</para>
<step>
<para>修改新的 <filename>ports-supfile</filename> 檔。</para>
</step>
<screen>&prompt.root; <userinput>pkg install subversion</userinput></screen>
<step>
<para>
<replaceable>CHANGE_THIS.FreeBSD.org</replaceable>
改為離你比較近(快)的 <application>CVSup</application> 主機。
這部分可以參閱完整的 <link linkend="cvsup-mirrors">CVSup
Mirrors</link> (<xref linkend="cvsup-mirrors"/>) 站列表</para>
</step>
</step>
<step>
<para>然後就開始以類似下列指令跑 <command>cvsup</command>
</para>
<step>
<para>Check out a copy of the ports tree. For better
performance, replace
<replaceable>svn0.us-east.FreeBSD.org</replaceable> with a
<link linkend="svn-mirrors">Subversion
mirror</link> close to your geographic location:</para>
<screen>&prompt.root; <userinput>cvsup -L 2 /root/ports-supfile</userinput></screen>
</step>
</procedure>
</note>
</step>
<screen>&prompt.root; <userinput>svn checkout https://<replaceable>svn0.us-east.FreeBSD.org</replaceable>/ports/head /usr/ports</userinput></screen>
</step>
<step>
<para>執行 &man.cvsup.1; 之後,就會開始更新 Ports Collection。
不過這動作只是『更新』並不是『升級』,不會把已裝的軟體重新編譯、升級。</para>
</step>
</procedure>
<step>
<para>As needed, update <filename>/usr/ports</filename> after
the initial <application>Subversion</application>
checkout:</para>
<procedure>
<title>Portsnap 方式</title>
<screen>&prompt.root; <userinput>svn update /usr/ports</userinput></screen>
</step>
</procedure>
<para>&man.portsnap.8; 也是更新 Ports Collection 的方式之一。
&os;&nbsp;6.0 起開始內建 Portsnap 機制,而較舊的系統,則可透過
<package>ports-mgmt/portsnap</package> port 來安裝:
</para>
<para>The Ports Collection installs a series of directories
representing software categories with each category having
a subdirectory for each application. Each subdirectory, also
referred to as a ports skeleton, contains a set of files that
tell &os; how to compile and install that program. Each port
skeleton includes these files and directories:</para>
<screen>&prompt.root; <userinput>pkg_add -r portsnap</userinput></screen>
<itemizedlist>
<listitem>
<para><filename>Makefile</filename>: contains statements that
specify how the application should be compiled and where
its components should be installed.</para>
</listitem>
<para><application>Portsnap</application> 細節功能,請參閱
<link linkend="portsnap">Portsnap 使用篇</link></para>
<listitem>
<para><filename>distinfo</filename>: contains the names and
checksums of the files that must be downloaded to build the
port.</para>
</listitem>
<step>
<para><filename>/usr/ports</filename> 目錄不存在的話,
就建立一下吧:</para>
<listitem>
<para><filename>files/</filename>: this directory contains
any patches needed for the program to compile and install
on &os;. This directory may also contain other files used
to build the port.</para>
</listitem>
<screen>&prompt.root; <userinput>mkdir /usr/ports</userinput></screen>
</step>
<listitem>
<para><filename>pkg-descr</filename>: provides a more detailed
description of the program.</para>
</listitem>
<step>
<para>接下來,下載壓縮的 Ports Collection 定期更新檔到
<filename>/var/db/portsnap</filename> 目錄。
完成下載後,要斷線與否都可以。</para>
<listitem>
<para><filename>pkg-plist</filename>: a list of all the
files that will be installed by the port. It also tells
the ports system which files to remove upon
deinstallation.</para>
</listitem>
</itemizedlist>
<screen>&prompt.root; <userinput>portsnap fetch</userinput></screen>
</step>
<para>Some ports include <filename>pkg-message</filename> or
other files to handle special situations. For more details
on these files, and on ports in general, refer to the <link
xlink:href="&url.books.porters-handbook;/index.html">&os;
Porter's Handbook</link>.</para>
<step>
<para>若是第一次跑 <application>Portsnap</application> 的話,
則需要先解壓到 <filename>/usr/ports</filename>
</para>
<screen>&prompt.root; <userinput>portsnap extract</userinput></screen>
<para>若已有 <filename>/usr/ports</filename> 而且只是想更新而已,
那麼就照下面作:</para>
<screen>&prompt.root; <userinput>portsnap update</userinput></screen>
</step>
</procedure>
<procedure>
<title>Sysinstall 方式</title>
<para>這方式要用 <application>sysinstall</application>
透過安裝來源來裝 Ports Collection。
請注意:所安裝的 Ports Collection 版本只是該 release
發佈時的版本而已,而非最新。
若能上網(Internet)的話,請使用上述方式之一會比較好。</para>
<step>
<para><systemitem class="username">root</systemitem> 權限執行
<command>sysinstall</command>
(在 &os; 5.2 之前版本則是 <command>/stand/sysinstall</command>)
,方式如下:</para>
<screen>&prompt.root; <userinput>sysinstall</userinput></screen>
</step>
<step>
<para>請以方向鍵移動選擇項目,選擇
<guimenuitem>Configure</guimenuitem>,然後按
<keycap>Enter</keycap> 鍵。</para>
</step>
<step>
<para>選擇
<guimenuitem>Distributions</guimenuitem>,然後按
<keycap>Enter</keycap> 鍵。</para>
</step>
<step>
<para>選擇 <guimenuitem>ports</guimenuitem>,然後按
<keycap>Space</keycap> 鍵。</para>
</step>
<step>
<para><guimenuitem>Exit</guimenuitem>,然後按
<keycap>Enter</keycap> 鍵。</para>
</step>
<step>
<para>選擇要用的安裝來源比如CDROM(光碟)、FTP 等方式。</para>
</step>
<step>
<para><guimenuitem>Exit</guimenuitem>,然後按
<keycap>Enter</keycap> 鍵。</para>
</step>
<step>
<para>按下 <keycap>X</keycap> 鍵就可離開
<application>sysinstall</application> 程式。</para>
</step>
</procedure>
</sect2>
<para>The port does not include the actual source code, also
known as a <filename>distfile</filename>. The extract portion
of building a port will automatically save the downloaded
source to <filename>/usr/ports/distfiles</filename>.</para>
<sect2 xml:id="ports-skeleton">
<title>Ports 的安裝方式</title>
<indexterm>
<primary>ports</primary>
<secondary>installing</secondary>
<primary>ports</primary>
<secondary>installing</secondary>
</indexterm>
<para>下面我們會介紹如何使用 Ports Collection 來安裝、移除軟體的基本用法。
至於其他可用的 <command>make</command> 詳細用法與環境設定,可參閱
&man.ports.7;</para>
<warning>
<para>Before compiling any port, be sure to update the Ports
Collection as described in the previous section. Since
the installation of any third-party software can introduce
security vulnerabilities, it is recommended to first check
<uri
xlink:href="http://vuxml.freebsd.org/">http://vuxml.freebsd.org/</uri>
for known security issues related to the port. Alternately,
if <package>ports-mgmt/portaudit</package> is installed, run
<command>portaudit -F</command> before installing a new
port. This command can be configured to automatically
perform a security audit and an update of the vulnerability
database during the daily security system check. For more
information, refer to the manual page for
<application>portaudit</application> and
&man.periodic.8;.</para>
</warning>
<para>提到 Ports Collection首先要先說明的是何謂
<quote>skeleton</quote>
簡單來講port skeleton 就是讓軟體如何在 FreeBSD
@ -1016,7 +1304,7 @@ ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch</userinput></screen>
比如裝了一個 port 後才意識到裝錯 port 了。
在此,我們將移除前面例子所裝的那個 port
(沒仔細注意的話,我們再提醒一下就是 <command>lsof</command>)。
跟移除 package 時相當類似(在 <link linkend="packages-using">Packages section</link> 有介紹),都是使用
跟移除 package 時相當類似,都是使用
&man.pkg.delete.1; 指令:</para>
<screen>&prompt.root; <userinput>pkg_delete lsof-4.57</userinput></screen>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
$FreeBSD$
Original revision: 1.30
Original revision: r46055
-->
<preface xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="book-preface">
<title></title>
@ -41,11 +41,6 @@
、檔案及網路的備援檔案系統、以及如何對硬碟分割區作加密等詳解。</para>
</listitem>
<listitem>
<para><xref linkend="vinum-vinum"/>Vinum是本版所新增的章節。本章介紹如何運用 Vinum 這種邏輯磁碟(device-independent)
,以及軟體 RAID-0, RAID-1 和 RAID-5 。</para>
</listitem>
<listitem>
<para><xref linkend="ppp-and-slip"/>PPP 及 SLIP 一章中增加了故障排除的說明。</para>
</listitem>
@ -244,83 +239,136 @@
<!-- Part III - System Administration -->
<varlistentry>
<term><emphasis><xref linkend="config-tuning"/>, Configuration and Tuning</emphasis></term>
<term><emphasis><xref
linkend="config-tuning"/></emphasis></term>
<listitem>
<para>Describes the parameters available for system
administrators to tune a FreeBSD system for optimum
performance. Also describes the various configuration files
used in FreeBSD and where to find them.</para>
administrators to tune a &os; system for optimum
performance. Also describes the various configuration files
used in &os; and where to find them.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis><xref linkend="boot"/>, Booting Process</emphasis></term>
<term><emphasis><xref linkend="boot"/></emphasis></term>
<listitem>
<para>Describes the FreeBSD boot process and explains
how to control this process with configuration options.</para>
<para>Describes the &os; boot process and explains how to
control this process with configuration options.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis><xref linkend="users"/>, Users and Basic Account
Management</emphasis></term>
<term><emphasis><xref linkend="security"/></emphasis></term>
<listitem>
<para>Describes the creation and manipulation of user
accounts. Also discusses resource limitations that can be
set on users and other account management tasks.</para>
<para>Describes many different tools available to help keep
your &os; system secure, including Kerberos, IPsec and
OpenSSH.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis><xref linkend="security"/>, Security</emphasis></term>
<term><emphasis><xref linkend="jails"/></emphasis></term>
<listitem>
<para>Describes many different tools available to help keep your
FreeBSD system secure, including Kerberos, IPsec and OpenSSH.</para>
<para>Describes the jails framework, and the improvements of
jails over the traditional chroot support of &os;.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis><xref linkend="mac"/>, Mandatory Access Control</emphasis></term>
<term><emphasis><xref linkend="mac"/></emphasis></term>
<listitem>
<para>Explains what Mandatory Access Control (MAC) is and how this
mechanism can be used to secure a FreeBSD system.</para>
<para>Explains what Mandatory Access Control (MAC) is and
how this mechanism can be used to secure a &os;
system.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis><xref linkend="disks"/>, Storage</emphasis></term>
<term><emphasis><xref linkend="audit"/></emphasis></term>
<listitem>
<para>Describes what &os; Event Auditing is, how it can be
installed, configured, and how audit trails can be inspected
or monitored.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis><xref linkend="disks"/></emphasis></term>
<listitem>
<para>Describes how to manage storage media and filesystems
with FreeBSD. This includes physical disks, RAID arrays,
optical and tape media, memory-backed disks, and network
filesystems.</para>
with &os;. This includes physical disks, RAID arrays,
optical and tape media, memory-backed disks, and network
filesystems.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis><xref linkend="GEOM"/>, GEOM</emphasis></term>
<term><emphasis><xref linkend="geom"/></emphasis></term>
<listitem>
<para>Describes what the GEOM framework in FreeBSD is and how
<para>Describes what the GEOM framework in &os; is and how
to configure various supported RAID levels.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis><xref linkend="vinum-vinum"/>, Vinum</emphasis></term>
<term><emphasis><xref linkend="filesystems"/></emphasis></term>
<listitem>
<para>Describes how to use Vinum, a logical volume manager
which provides device-independent logical disks, and
software RAID-0, RAID-1 and RAID-5.</para>
<para>Examines support of non-native file systems in &os;,
like the Z File System from &sun;.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis><xref linkend="l10n"/>, Localization</emphasis></term>
<term><emphasis><xref
linkend="virtualization"/></emphasis></term>
<listitem>
<para>Describes how to use FreeBSD in languages other than
English. Covers both system and application level
localization.</para>
<para>Describes what virtualization systems offer, and how
they can be used with &os;.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis><xref linkend="cutting-edge"/>, The Cutting Edge</emphasis></term>
<term><emphasis><xref linkend="l10n"/></emphasis></term>
<listitem>
<para>Explains the differences between FreeBSD-STABLE,
FreeBSD-CURRENT, and FreeBSD releases. Describes which users
would benefit from tracking a development system and outlines
that process.</para>
<para>Describes how to use &os; in languages other than
English. Covers both system and application level
localization.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis><xref
linkend="updating-upgrading"/></emphasis></term>
<listitem>
<para>Explains the differences between &os;-STABLE,
&os;-CURRENT, and &os; releases. Describes which users
would benefit from tracking a development system and
outlines that process. Covers the methods users may take
to update their system to the latest security
release.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis><xref linkend="dtrace"/></emphasis></term>
<listitem>
<para>Describes how to configure and use the &dtrace; tool
from &sun; in &os;. Dynamic tracing can help locate
performance issues, by performing real time system
analysis.</para>
</listitem>
</varlistentry>

File diff suppressed because it is too large Load diff

View file

@ -2666,7 +2666,7 @@ boot:</screen>
<procedure>
<step>
<para>Get the kernel source. (See <xref linkend="cutting-edge"/>)</para>
<para>Get the kernel source.</para>
</step>
<step>

File diff suppressed because it is too large Load diff

View file

@ -3,7 +3,7 @@
Names of FreeBSD 郵遞論壇s and related software.
The FreeBSD Traditional-Chinese Documentation Project
Original revision: 1.57
Original revision: r46084
$FreeBSD$
-->
@ -27,10 +27,6 @@
<!ENTITY a.aic7xxx "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.aic7xxx.url;'>FreeBSD Adaptec AIC7xxx discussions 郵遞論壇</link>">
<!ENTITY a.aic7xxx.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.aic7xxx.url;'>freebsd-aic7xxx</link>">
<!ENTITY a.alpha.url "&a.mailman.listinfo;/freebsd-alpha">
<!ENTITY a.alpha "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.alpha.url;'>FreeBSD Alpha porting 郵遞論壇</link>">
<!ENTITY a.alpha.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.alpha.url;'>freebsd-alpha</link>">
<!ENTITY a.amd64.url "&a.mailman.listinfo;/freebsd-amd64">
<!ENTITY a.amd64 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.amd64.url;'>Porting FreeBSD to AMD64 systems</link>">
<!ENTITY a.amd64.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.amd64.url;'>freebsd-amd64</link>">
@ -55,14 +51,6 @@
<!ENTITY a.atm "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.atm.url;'>FreeBSD ATM networking 郵遞論壇</link>">
<!ENTITY a.atm.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.atm.url;'>freebsd-atm</link>">
<!ENTITY a.audit.url "&a.mailman.listinfo;/freebsd-audit">
<!ENTITY a.audit "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.audit.url;'>FreeBSD source code audit 郵遞論壇</link>">
<!ENTITY a.audit.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.audit.url;'>freebsd-audit</link>">
<!ENTITY a.binup.url "&a.mailman.listinfo;/freebsd-binup">
<!ENTITY a.binup "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.binup.url;'>FreeBSD binary update system 郵遞論壇</link>">
<!ENTITY a.binup.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.binup.url;'>freebsd-binup</link>">
<!ENTITY a.bluetooth.url "&a.mailman.listinfo;/freebsd-bluetooth">
<!ENTITY a.bluetooth "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.bluetooth.url;'>FreeBSD Bluetooth 郵遞論壇</link>">
<!ENTITY a.bluetooth.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.bluetooth.url;'>freebsd-bluetooth</link>">
@ -79,6 +67,10 @@
<!ENTITY a.chat "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.chat.url;'>FreeBSD chat 郵遞論壇</link>">
<!ENTITY a.chat.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.chat.url;'>freebsd-chat</link>">
<!ENTITY a.chromium.url "&a.mailman.listinfo;/freebsd-chromium">
<!ENTITY a.chromium "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.chromium.url;'>FreeBSD-specific Chromium issues</link>">
<!ENTITY a.chromium.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.chromium.url;'>freebsd-chromium</link>">
<!ENTITY a.cluster.url "&a.mailman.listinfo;/freebsd-cluster">
<!ENTITY a.cluster "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.cluster.url;'>FreeBSD clustering 郵遞論壇</link>">
<!ENTITY a.cluster.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.cluster.url;'>freebsd-cluster</link>">
@ -86,7 +78,6 @@
<!ENTITY a.committers "FreeBSD committer's 郵遞論壇">
<!ENTITY a.committers.name "cvs-committers">
<!ENTITY a.core "FreeBSD core team">
<!ENTITY a.core.name "freebsd-core">
<!ENTITY a.current.url "&a.mailman.listinfo;/freebsd-current">
@ -97,14 +88,34 @@
<!ENTITY a.ctm-announce "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-announce.url;'>CTM 公告</link>">
<!ENTITY a.ctm-announce.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-announce.url;'>ctm-announce</link>">
<!ENTITY a.ctm-cvs-cur.url "&a.mailman.listinfo;/ctm-cvs-cur">
<!ENTITY a.ctm-cvs-cur "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-cvs-cur.url;'>透過 CTM 發佈的 CVS 檔案</link>">
<!ENTITY a.ctm-cvs-cur.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-cvs-cur.url;'>ctm-cvs-cur</link>">
<!ENTITY a.ctm-src-4.url "&a.mailman.listinfo;/ctm-src-4">
<!ENTITY a.ctm-src-4 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-4.url;'>CTM 4-STABLE src branch distribution 郵遞論壇</link>">
<!ENTITY a.ctm-src-4.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-4.url;'>ctm-src-4</link>">
<!ENTITY a.ctm-src-5.url "&a.mailman.listinfo;/ctm-src-5">
<!ENTITY a.ctm-src-5 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-5.url;'>CTM 5-STABLE src branch distribution mailing list</link>">
<!ENTITY a.ctm-src-5.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-5.url;'>ctm-src-5</link>">
<!ENTITY a.ctm-src-6.url "&a.mailman.listinfo;/ctm-src-6">
<!ENTITY a.ctm-src-6 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-6.url;'>CTM 6-STABLE src branch distribution mailing list</link>">
<!ENTITY a.ctm-src-6.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-6.url;'>ctm-src-6</link>">
<!ENTITY a.ctm-src-7.url "&a.mailman.listinfo;/ctm-src-7">
<!ENTITY a.ctm-src-7 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-7.url;'>CTM 7-STABLE src branch distribution mailing list</link>">
<!ENTITY a.ctm-src-7.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-7.url;'>ctm-src-7</link>">
<!ENTITY a.ctm-src-8.url "&a.mailman.listinfo;/ctm-src-8">
<!ENTITY a.ctm-src-8 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-8.url;'>CTM 8-STABLE src branch distribution mailing list</link>">
<!ENTITY a.ctm-src-8.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-8.url;'>ctm-src-8</link>">
<!ENTITY a.ctm-src-9.url "&a.mailman.listinfo;/ctm-src-9">
<!ENTITY a.ctm-src-9 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-9.url;'>CTM 9-STABLE src branch distribution mailing list</link>">
<!ENTITY a.ctm-src-9.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-9.url;'>ctm-src-9</link>">
<!ENTITY a.ctm-src-10.url "&a.mailman.listinfo;/ctm-src-10">
<!ENTITY a.ctm-src-10 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-10.url;'>CTM 10-STABLE src branch distribution mailing list</link>">
<!ENTITY a.ctm-src-10.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-10.url;'>ctm-src-10</link>">
<!ENTITY a.ctm-src-cur.url "&a.mailman.listinfo;/ctm-src-cur">
<!ENTITY a.ctm-src-cur "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-cur.url;'>CTM -CURRENT src branch distribution 郵遞論壇</link>">
<!ENTITY a.ctm-src-cur.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ctm-src-cur.url;'>ctm-src-cur</link>">
@ -133,15 +144,15 @@
<!ENTITY a.cvs-src "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.cvs-src.url;'>FreeBSD CVS src commit list</link>">
<!ENTITY a.cvs-src.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.cvs-src.url;'>cvs-src</link>">
<!ENTITY a.cvsweb.url "&a.mailman.listinfo;/freebsd-cvsweb">
<!ENTITY a.cvsweb "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.cvsweb.url;'>FreeBSD CVSweb 維護郵遞論壇</link>">
<!ENTITY a.cvsweb.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.cvsweb.url;'>freebsd-cvsweb</link>">
<!ENTITY a.database.url "&a.mailman.listinfo;/freebsd-database">
<!ENTITY a.database "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.database.url;'>FreeBSD based Databases 郵遞論壇</link>">
<!ENTITY a.database.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.database.url;'>freebsd-database</link>">
<!ENTITY a.developers "FreeBSD developers 郵遞論壇">
<!ENTITY a.desktop "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.desktop.url;'>Using and improving &os; on the desktop</link>">
<!ENTITY a.desktop.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.desktop.url;'>freebsd-desktop</link>">
<!ENTITY a.developers "FreeBSD developers mailing list">
<!ENTITY a.developers.name "freebsd-developers">
<!ENTITY a.doc.url "&a.mailman.listinfo;/freebsd-doc">
@ -158,10 +169,13 @@
<!ENTITY a.drivers "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.drivers.url;'>Writing device drivers for FreeBSD</link>">
<!ENTITY a.drivers.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.drivers.url;'>freebsd-drivers</link>">
<!ENTITY a.dtrace.url "&a.mailman.listinfo;/freebsd-dtrace">
<!ENTITY a.dtrace "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.dtrace.url;'>Using and working on DTrace in &os;.</link>">
<!ENTITY a.dtrace.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.dtrace.url;'>freebsd-dtrace</link>">
<!ENTITY a.eclipse.url "&a.mailman.listinfo;/freebsd-eclipse">
<!ENTITY a.eclipse "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.eclipse.url;'>FreeBSD users of Eclipse IDE, tools, rich client applications and ports</link>">
<!ENTITY a.eclipse.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.eclipse.url;'>freebsd-eclipse</link>">
<!ENTITY a.embedded.url "&a.mailman.listinfo;/freebsd-embedded">
<!ENTITY a.embedded "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.embedded.url;'>FreeBSD-embedded 郵遞論壇</link>">
<!ENTITY a.embedded.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.embedded.url;'>freebsd-embedded</link>">
@ -170,6 +184,10 @@
<!ENTITY a.emulation "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.emulation.url;'>FreeBSD-emulation 郵遞論壇</link>">
<!ENTITY a.emulation.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.emulation.url;'>freebsd-emulation</link>">
<!ENTITY a.enlightenment.url "&a.mailman.listinfo;/freebsd-enlightenment">
<!ENTITY a.enlightenment "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.enlightenment.url;'>FreeBSD-enlightenment mailing list</link>">
<!ENTITY a.enlightenment.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.enlightenment.url;'>freebsd-enlightenment</link>">
<!ENTITY a.eol.url "&a.mailman.listinfo;/freebsd-eol">
<!ENTITY a.eol "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.eol.url;'>FreeBSD-eol 郵遞論壇</link>">
<!ENTITY a.eol.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.eol.url;'>freebsd-eol</link>">
@ -178,14 +196,30 @@
<!ENTITY a.firewire "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.firewire.url;'>FreeBSD FireWire (IEEE 1394) discussion 郵遞論壇</link>">
<!ENTITY a.firewire.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.firewire.url;'>freebsd-firewire</link>">
<!ENTITY a.fortran.url "&a.mailman.listinfo;/freebsd-fortran">
<!ENTITY a.fortran "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.fortran.url;'>Fortran on FreeBSD mailing list</link>">
<!ENTITY a.fortran.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.fortran.url;'>freebsd-fortran</link>">
<!ENTITY a.fs.url "&a.mailman.listinfo;/freebsd-fs">
<!ENTITY a.fs "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.fs.url;'>FreeBSD file system project 郵遞論壇</link>">
<!ENTITY a.fs.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.fs.url;'>freebsd-fs</link>">
<!ENTITY a.games.url "&a.mailman.listinfo;/freebsd-games">
<!ENTITY a.games "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.games.url;'>Games on FreeBSD mailing list</link>">
<!ENTITY a.games.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.games.url;'>freebsd-games</link>">
<!ENTITY a.gecko.url "&a.mailman.listinfo;/freebsd-gecko">
<!ENTITY a.gecko "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.gecko.url;'>FreeBSD gecko mailing list</link>">
<!ENTITY a.gecko.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.gecko.url;'>freebsd-gecko</link>">
<!ENTITY a.geom.url "&a.mailman.listinfo;/freebsd-geom">
<!ENTITY a.geom "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.geom.url;'>FreeBSD GEOM 郵遞論壇</link>">
<!ENTITY a.geom.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.geom.url;'>freebsd-geom</link>">
<!ENTITY a.git.url "&a.mailman.listinfo;/freebsd-git">
<!ENTITY a.git "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.git.url;'>Discussion of git use in the FreeBSD project</link>">
<!ENTITY a.git.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.git.url;'>freebsd-git</link>">
<!ENTITY a.gnome.url "&a.mailman.listinfo;/freebsd-gnome">
<!ENTITY a.gnome "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.gnome.url;'>FreeBSD GNOME and GNOME applications 郵遞論壇</link>">
<!ENTITY a.gnome.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.gnome.url;'>freebsd-gnome</link>">
@ -218,6 +252,10 @@
<!ENTITY a.ia64 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ia64.url;'>FreeBSD IA64 porting 郵遞論壇</link>">
<!ENTITY a.ia64.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ia64.url;'>freebsd-ia64</link>">
<!ENTITY a.infiniband.url "&a.mailman.listinfo;/freebsd-infiniband">
<!ENTITY a.infiniband "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.infiniband.url;'>Infiniband on FreeBSD</link>">
<!ENTITY a.infiniband.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.infiniband.url;'>freebsd-infiniband</link>">
<!ENTITY a.ipfw.url "&a.mailman.listinfo;/freebsd-ipfw">
<!ENTITY a.ipfw "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ipfw.url;'>FreeBSD IPFW code 郵遞論壇</link>">
<!ENTITY a.ipfw.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ipfw.url;'>freebsd-ipfw</link>">
@ -250,10 +288,6 @@
<!ENTITY a.lfs "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.lfs.url;'>FreeBSD LFS porting 郵遞論壇</link>">
<!ENTITY a.lfs.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.lfs.url;'>freebsd-lfs</link>">
<!ENTITY a.libh.url "&a.mailman.listinfo;/freebsd-libh">
<!ENTITY a.libh "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.libh.url;'>FreeBSD libh installation and packaging system 郵遞論壇</link>">
<!ENTITY a.libh.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.libh.url;'>freebsd-libh</link>">
<!ENTITY a.mips.url "&a.mailman.listinfo;/freebsd-mips">
<!ENTITY a.mips "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.mips.url;'>FreeBSD MIPS porting 郵遞論壇</link>">
<!ENTITY a.mips.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.mips.url;'>freebsd-mips</link>">
@ -286,9 +320,17 @@
<!ENTITY a.newbus "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.newbus.url;'>FreeBSD new-bus 郵遞論壇</link>">
<!ENTITY a.newbus.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.newbus.url;'>freebsd-new-bus</link>">
<!ENTITY a.openoffice.url "&a.mailman.listinfo;/freebsd-openoffice">
<!ENTITY a.openoffice "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.openoffice.url;'>FreeBSD OpenOffice 郵遞論壇</link>">
<!ENTITY a.openoffice.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.openoffice.url;'>freebsd-openoffice</link>">
<!ENTITY a.numerics.url "&a.mailman.listinfo;/freebsd-numerics">
<!ENTITY a.numerics "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.numerics.url;'>Discussions of high quality implementation of libm functions</link>">
<!ENTITY a.numerics.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.numerics.url;'>freebsd-numerics</link>">
<!ENTITY a.office.url "&a.mailman.listinfo;/freebsd-office">
<!ENTITY a.office "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.office.url;'>Office applications on FreeBSD</link>">
<!ENTITY a.office.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.office.url;'>freebsd-office</link>">
<!ENTITY a.ops-announce.url "&a.mailman.listinfo;/freebsd-ops-announce">
<!ENTITY a.ops-announce "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ops-announce.url;'>Project Infrastructure Announcements</link>">
<!ENTITY a.ops-announce.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ops-announce.url;'>freebsd-ops-announce</link>">
<!ENTITY a.performance.url "&a.mailman.listinfo;/freebsd-performance">
<!ENTITY a.performance "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.performance.url;'>FreeBSD performance 郵遞論壇</link>">
@ -302,18 +344,25 @@
<!ENTITY a.pf "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.pf.url;'>FreeBSD packet filter 郵遞論壇</link>">
<!ENTITY a.pf.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.pf.url;'>freebsd-pf</link>">
<!ENTITY a.pkg.url "&a.mailman.listinfo;/freebsd-pkg">
<!ENTITY a.pkg "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.pkg.url;'>Binary package management and package tools discussion</link>">
<!ENTITY a.pkg.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.pkg.url;'>freebsd-pkg</link>">
<!ENTITY a.pkg-fallout.url "&a.mailman.listinfo;/freebsd-pkg-fallout">
<!ENTITY a.pkg-fallout "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.pkg-fallout.url;'>Fallout logs from package building</link>">
<!ENTITY a.pkg-fallout.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.pkg-fallout.url;'>freebsd-pkg-fallout</link>">
<!ENTITY a.platforms.url "&a.mailman.listinfo;/freebsd-platforms">
<!ENTITY a.platforms "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.platforms.url;'>FreeBSD non-Intel platforms porting 郵遞論壇</link>">
<!ENTITY a.platforms.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.platforms.url;'>freebsd-platforms</link>">
<!ENTITY a.policy.url "&a.mailman.listinfo;/freebsd-policy">
<!ENTITY a.policy "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.policy.url;'>FreeBSD core team policy decisions 郵遞論壇</link>">
<!ENTITY a.policy.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.policy.url;'>freebsd-policy</link>">
<!ENTITY a.ports.url "&a.mailman.listinfo;/freebsd-ports">
<!ENTITY a.ports "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ports.url;'>FreeBSD ports 郵遞論壇</link>">
<!ENTITY a.ports.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ports.url;'>freebsd-ports</link>">
<!ENTITY a.ports-announce.url "&a.mailman.listinfo;/freebsd-ports-announce">
<!ENTITY a.ports-announce "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ports-announce.url;'>FreeBSD ports announce mailing list</link>">
<!ENTITY a.ports-announce.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ports-announce.url;'>freebsd-ports-announce</link>">
<!ENTITY a.ports-bugs.url "&a.mailman.listinfo;/freebsd-ports-bugs">
<!ENTITY a.ports-bugs "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ports-bugs.url;'>FreeBSD ports bugs 郵遞論壇</link>">
<!ENTITY a.ports-bugs.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ports-bugs.url;'>freebsd-ports-bugs</link>">
@ -336,10 +385,6 @@
<!ENTITY a.python "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.python.url;'>FreeBSD Python 郵遞論壇</link>">
<!ENTITY a.python.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.python.url;'>freebsd-python</link>">
<!ENTITY a.qa.url "&a.mailman.listinfo;/freebsd-qa">
<!ENTITY a.qa "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.qa.url;'>FreeBSD Quality Assurance 郵遞論壇</link>">
<!ENTITY a.qa.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.qa.url;'>freebsd-qa</link>">
<!ENTITY a.questions.url "&a.mailman.listinfo;/freebsd-questions">
<!ENTITY a.questions "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.questions.url;'>FreeBSD general questions 郵遞論壇</link>">
<!ENTITY a.questions.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.questions.url;'>freebsd-questions</link>">
@ -352,6 +397,10 @@
<!ENTITY a.realtime "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.realtime.url;'>FreeBSD realtime extensions 郵遞論壇</link>">
<!ENTITY a.realtime.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.realtime.url;'>freebsd-realtime</link>">
<!ENTITY a.ruby.url "&a.mailman.listinfo;/freebsd-ruby">
<!ENTITY a.ruby "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ruby.url;'>FreeBSD Ruby mailing list</link>">
<!ENTITY a.ruby.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.ruby.url;'>freebsd-ruby</link>">
<!ENTITY a.scsi.url "&a.mailman.listinfo;/freebsd-scsi">
<!ENTITY a.scsi "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.scsi.url;'>FreeBSD SCSI subsystem 郵遞論壇</link>">
<!ENTITY a.scsi.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.scsi.url;'>freebsd-scsi</link>">
@ -368,9 +417,9 @@
<!ENTITY a.small "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.small.url;'>FreeBSD-small 郵遞論壇</link>">
<!ENTITY a.small.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.small.url;'>freebsd-small</link>">
<!ENTITY a.smp.url "&a.mailman.listinfo;/freebsd-smp">
<!ENTITY a.smp "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.smp.url;'>FreeBSD symmetric multiprocessing 郵遞論壇</link>">
<!ENTITY a.smp.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.smp.url;'>freebsd-smp</link>">
<!ENTITY a.snapshots.url "&a.mailman.listinfo;/freebsd-snapshots">
<!ENTITY a.snapshots "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.snapshots.url;'>FreeBSD Development Snapshot Announcements</link>">
<!ENTITY a.snapshots.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.snapshots.url;'>freebsd-snapshots</link>">
<!ENTITY a.sparc.url "&a.mailman.listinfo;/freebsd-sparc64">
<!ENTITY a.sparc "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.sparc.url;'>FreeBSD SPARC porting 郵遞論壇</link>">
@ -394,6 +443,102 @@
<!ENTITY a.sun4v "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.sun4v.url;'>FreeBSD sun4v porting 郵遞論壇</link>">
<!ENTITY a.sun4v.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.sun4v.url;'>freebsd-sun4v</link>">
<!ENTITY a.svn-doc-all.url "&a.mailman.listinfo;/svn-doc-all">
<!ENTITY a.svn-doc-all "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-doc-all.url;'>SVN commit messages for the entire doc tree (except for <quote>user</quote>, <quote>projects</quote> and <quote>translations</quote>)</link>">
<!ENTITY a.svn-doc-all.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-doc-all.url;'>svn-doc-all</link>">
<!ENTITY a.svn-doc-head.url "&a.mailman.listinfo;/svn-doc-head">
<!ENTITY a.svn-doc-head "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-doc-head.url;'>SVN commit messages for the doc tree for head/</link>">
<!ENTITY a.svn-doc-head.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-doc-head.url;'>svn-doc-head</link>">
<!ENTITY a.svn-doc-projects.url "&a.mailman.listinfo;/svn-doc-projects">
<!ENTITY a.svn-doc-projects "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-doc-projects.url;'>SVN commit messages for the doc <quote>projects</quote> tree</link>">
<!ENTITY a.svn-doc-projects.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-doc-projects.url;'>svn-doc-projects</link>">
<!ENTITY a.svn-doc-svnadmin.url "&a.mailman.listinfo;/svn-doc-svnadmin">
<!ENTITY a.svn-doc-svnadmin "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-doc-svnadmin.url;'>SVN commit messages for the doc admin&nbsp;/ configuration tree</link>">
<!ENTITY a.svn-doc-svnadmin.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-doc-svnadmin.url;'>svn-doc-svnadmin</link>">
<!ENTITY a.svn-ports-all.url "&a.mailman.listinfo;/svn-ports-all">
<!ENTITY a.svn-ports-all "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-ports-all.url;'>SVN commit messages for the entire ports tree</link>">
<!ENTITY a.svn-ports-all.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-ports-all.url;'>svn-ports-all</link>">
<!ENTITY a.svn-ports-head.url "&a.mailman.listinfo;/svn-ports-head">
<!ENTITY a.svn-ports-head "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-ports-head.url;'>SVN commit messages for the ports tree for head/</link>">
<!ENTITY a.svn-ports-head.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-ports-head.url;'>svn-ports-head</link>">
<!ENTITY a.svn-ports-svnadmin.url "&a.mailman.listinfo;/svn-ports-svnadmin">
<!ENTITY a.svn-ports-svnadmin "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-ports-svnadmin.url;'>SVN commit messages for the ports admin&nbsp;/ configuration tree</link>">
<!ENTITY a.svn-ports-svnadmin.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-ports-svnadmin.url;'>svn-ports-svnadmin</link>">
<!ENTITY a.svn-src-all.url "&a.mailman.listinfo;/svn-src-all">
<!ENTITY a.svn-src-all "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-all.url;'>SVN commit messages for the entire src tree (except for <quote>user</quote> and <quote>projects</quote>)</link>">
<!ENTITY a.svn-src-all.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-all.url;'>svn-src-all</link>">
<!ENTITY a.svn-src-head.url "&a.mailman.listinfo;/svn-src-head">
<!ENTITY a.svn-src-head "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-head.url;'>SVN commit messages for the src tree for head/-current</link>">
<!ENTITY a.svn-src-head.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-head.url;'>svn-src-head</link>">
<!ENTITY a.svn-src-projects.url "&a.mailman.listinfo;/svn-src-projects">
<!ENTITY a.svn-src-projects "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-projects.url;'>SVN commit messages for the src <quote>projects</quote> tree</link>">
<!ENTITY a.svn-src-projects.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-projects.url;'>svn-src-projects</link>">
<!ENTITY a.svn-src-release.url "&a.mailman.listinfo;/svn-src-release">
<!ENTITY a.svn-src-release "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-release.url;'>SVN commit messages for releases in the src tree</link>">
<!ENTITY a.svn-src-release.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-release.url;'>svn-src-release</link>">
<!ENTITY a.svn-src-releng.url "&a.mailman.listinfo;/svn-src-releng">
<!ENTITY a.svn-src-releng "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-releng.url;'>SVN commit messages for the release engineering&nbsp;/ security commits to the src tree</link>">
<!ENTITY a.svn-src-releng.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-releng.url;'>svn-src-releng</link>">
<!ENTITY a.svn-src-stable.url "&a.mailman.listinfo;/svn-src-stable">
<!ENTITY a.svn-src-stable "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable.url;'>SVN commit messages for all the -stable branches of the src tree</link>">
<!ENTITY a.svn-src-stable.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable.url;'>svn-src-stable</link>">
<!ENTITY a.svn-src-stable-6.url "&a.mailman.listinfo;/svn-src-stable-6">
<!ENTITY a.svn-src-stable-6 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-6.url;'>SVN commit messages for only the 6-stable src tree</link>">
<!ENTITY a.svn-src-stable-6.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-6.url;'>svn-src-stable-6</link>">
<!ENTITY a.svn-src-stable-7.url "&a.mailman.listinfo;/svn-src-stable-7">
<!ENTITY a.svn-src-stable-7 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-7.url;'>SVN commit messages for only the 7-stable src tree</link>">
<!ENTITY a.svn-src-stable-7.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-7.url;'>svn-src-stable-7</link>">
<!ENTITY a.svn-src-stable-8.url "&a.mailman.listinfo;/svn-src-stable-8">
<!ENTITY a.svn-src-stable-8 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-8.url;'>SVN commit messages for only the 8-stable src tree</link>">
<!ENTITY a.svn-src-stable-8.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-8.url;'>svn-src-stable-8</link>">
<!ENTITY a.svn-src-stable-9.url "&a.mailman.listinfo;/svn-src-stable-9">
<!ENTITY a.svn-src-stable-9 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-9.url;'>SVN commit messages for only the 9-stable src tree</link>">
<!ENTITY a.svn-src-stable-9.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-9.url;'>svn-src-stable-9</link>">
<!ENTITY a.svn-src-stable-10.url "&a.mailman.listinfo;/svn-src-stable-10">
<!ENTITY a.svn-src-stable-10 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-10.url;'>SVN commit messages for only the 10-stable src tree</link>">
<!ENTITY a.svn-src-stable-10.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-10.url;'>svn-src-stable-10</link>">
<!ENTITY a.svn-src-stable-other.url "&a.mailman.listinfo;/svn-src-stable-other">
<!ENTITY a.svn-src-stable-other "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-other.url;'>SVN commit messages for the old stable src trees</link>">
<!ENTITY a.svn-src-stable-other.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-stable-other.url;'>svn-src-stable-other</link>">
<!ENTITY a.svn-src-svnadmin.url "&a.mailman.listinfo;/svn-src-svnadmin">
<!ENTITY a.svn-src-svnadmin "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-svnadmin.url;'>SVN commit messages for the admin&nbsp;/ configuration tree</link>">
<!ENTITY a.svn-src-svnadmin.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-svnadmin.url;'>svn-src-svnadmin</link>">
<!ENTITY a.svn-src-user.url "&a.mailman.listinfo;/svn-src-user">
<!ENTITY a.svn-src-user "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-user.url;'>SVN commit messages for the experimental <quote>user</quote> src tree</link>">
<!ENTITY a.svn-src-user.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-user.url;'>svn-src-user</link>">
<!ENTITY a.svn-src-vendor.url "&a.mailman.listinfo;/svn-src-vendor">
<!ENTITY a.svn-src-vendor "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-vendor.url;'>SVN commit messages for the vendor work area tree</link>">
<!ENTITY a.svn-src-vendor.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.svn-src-vendor.url;'>svn-src-vendor</link>">
<!ENTITY a.sysinstall.url "&a.mailman.listinfo;/freebsd-sysinstall">
<!ENTITY a.sysinstall "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.sysinstall.url;'>Sysinstall development mailing list</link>">
<!ENTITY a.sysinstall.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.sysinstall.url;'>freebsd-sysinstall</link>">
<!ENTITY a.tcltk.url "&a.mailman.listinfo;/freebsd-tcltk">
<!ENTITY a.tcltk "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.tcltk.url;'>FreeBSD-specific Tcl/Tk discussions</link>">
<!ENTITY a.tcltk.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.tcltk.url;'>freebsd-tcltk</link>">
<!ENTITY a.test.url "&a.mailman.listinfo;/freebsd-test">
<!ENTITY a.test "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.test.url;'>FreeBSD test 郵遞論壇</link>">
<!ENTITY a.test.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.test.url;'>freebsd-test</link>">
@ -402,14 +547,30 @@
<!ENTITY a.testing "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.testing.url;'>FreeBSD performance and stability testing 郵遞論壇</link>">
<!ENTITY a.testing.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.testing.url;'>freebsd-testing</link>">
<!ENTITY a.tex.url "&a.mailman.listinfo;/freebsd-tex">
<!ENTITY a.tex "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.tex.url;'>Porting TeX and its applications to &os;</link>">
<!ENTITY a.tex.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.tex.url;'>freebsd-tex</link>">
<!ENTITY a.threads.url "&a.mailman.listinfo;/freebsd-threads">
<!ENTITY a.threads "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.threads.url;'>FreeBSD threads 郵遞論壇</link>">
<!ENTITY a.threads.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.threads.url;'>freebsd-threads</link>">
<!ENTITY a.tilera.url "&a.mailman.listinfo;/freebsd-tilera">
<!ENTITY a.tilera "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.tilera.url;'>Porting FreeBSD to the Tilera family of CPUs</link>">
<!ENTITY a.tilera.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.tilera.url;'>freebsd-tilera</link>">
<!ENTITY a.tokenring.url "&a.mailman.listinfo;/freebsd-tokenring">
<!ENTITY a.tokenring "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.tokenring.url;'>FreeBSD tokenring 郵遞論壇</link>">
<!ENTITY a.tokenring.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.tokenring.url;'>freebsd-tokenring</link>">
<!ENTITY a.toolchain.url "&a.mailman.listinfo;/freebsd-toolchain">
<!ENTITY a.toolchain "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.toolchain.url;'>FreeBSD integrated toolchain mailing list</link>">
<!ENTITY a.toolchain.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.toolchain.url;'>freebsd-toolchain</link>">
<!ENTITY a.translators.url "&a.mailman.listinfo;/freebsd-translators">
<!ENTITY a.translators "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.translators.url;'>FreeBSD translators mailing list</link>">
<!ENTITY a.translators.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.translators.url;'>freebsd-translators</link>">
<!ENTITY a.usb.url "&a.mailman.listinfo;/freebsd-usb">
<!ENTITY a.usb "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.usb.url;'>FreeBSD USB 郵遞論壇</link>">
<!ENTITY a.usb.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.usb.url;'>freebsd-usb</link>">
@ -422,11 +583,23 @@
<!ENTITY a.vendors "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.vendors.url;'>FreeBSD vendors pre-release coordination 郵遞論壇</link>">
<!ENTITY a.vendors.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.vendors.url;'>freebsd-vendors</link>">
<!ENTITY a.virtualization.url "&a.mailman.listinfo;/freebsd-virtualization">
<!ENTITY a.virtualization "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.virtualization.url;'>Discussion of various virtualization techniques supported by FreeBSD</link>">
<!ENTITY a.virtualization.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.virtualization.url;'>freebsd-virtualization</link>">
<!ENTITY a.vuxml.url "&a.mailman.listinfo;/freebsd-vuxml">
<!ENTITY a.vuxml "<unlink url='&a.vuxml.url;'>Discussion on the VuXML
infrastructure</link>">
<!ENTITY a.vuxml.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.vuxml.url;'>freebsd-vuxml</link>">
<!ENTITY a.wip-status.url "&a.mailman.listinfo;/freebsd-wip-status">
<!ENTITY a.wip-status "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.wip-status.url;'>FreeBSD Work-In-Progress Status</link>">
<!ENTITY a.wip-status.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.wip-status.url;'>freebsd-wip-status</link>">
<!ENTITY a.wireless.url "&a.mailman.listinfo;/freebsd-wireless">
<!ENTITY a.wireless "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.wireless.url;'>Discussions of 802.11 stack, tools, device driver development</link>">
<!ENTITY a.wireless.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.wireless.url;'>freebsd-wireless</link>">
<!ENTITY a.www.url "&a.mailman.listinfo;/freebsd-www">
<!ENTITY a.www "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.www.url;'>FreeBSD Webmaster 郵遞論壇</link>">
<!ENTITY a.www.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.www.url;'>freebsd-www</link>">
@ -435,9 +608,38 @@ infrastructure</link>">
<!ENTITY a.x11 "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.x11.url;'>FreeBSD X11 郵遞論壇</link>">
<!ENTITY a.x11.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.x11.url;'>freebsd-x11</link>">
<!ENTITY a.xen.url "&a.mailman.listinfo;/freebsd-xen">
<!ENTITY a.xen "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.xen.url;'>FreeBSD port to Xen mailing list</link>">
<!ENTITY a.xen.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.xen.url;'>freebsd-xen</link>">
<!ENTITY a.xfce.url "&a.mailman.listinfo;/freebsd-xfce">
<!ENTITY a.xfce "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.xfce.url;'>XFCE for FreeBSD mailing list</link>">
<!ENTITY a.xfce.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.xfce.url;'>freebsd-xfce</link>">
<!ENTITY a.zope.url "&a.mailman.listinfo;/freebsd-zope">
<!ENTITY a.zope "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.zope.url;'>Zope for FreeBSD mailing list</link>">
<!ENTITY a.zope.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.zope.url;'>freebsd-zope</link>">
<!-- Not really proper mailing lists -->
<!ENTITY a.bugfollowup "<email xmlns='http://docbook.org/ns/docbook'>bug-followup@FreeBSD.org</email>">
<!ENTITY a.bugsubmit "&a.bugfollowup;">
<!ENTITY a.majordomo "<email xmlns='http://docbook.org/ns/docbook'>majordomo@FreeBSD.org</email>">
<!--
The following mailinglists are deactivated. Keep them until all references
in the documentation are gone.
-->
<!ENTITY a.alpha.url "&a.mailman.listinfo;/freebsd-alpha">
<!ENTITY a.alpha "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.alpha.url;'>FreeBSD Alpha porting mailing list</link>">
<!ENTITY a.alpha.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.alpha.url;'>freebsd-alpha</link>">
<!ENTITY a.qa.url "&a.mailman.listinfo;/freebsd-qa">
<!ENTITY a.qa "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.qa.url;'>FreeBSD Quality Assurance mailing list</link>">
<!ENTITY a.qa.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.qa.url;'>freebsd-qa</link>">
<!ENTITY a.smp.url "&a.mailman.listinfo;/freebsd-smp">
<!ENTITY a.smp "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.smp.url;'>FreeBSD symmetric multiprocessing mailing list</link>">
<!ENTITY a.smp.name "<link xmlns='http://docbook.org/ns/docbook' xlink:href='&a.smp.url;'>freebsd-smp</link>">