Makefile:	1.7 -> 1.9
	book.sgml:	1.1092 -> 1.1117

Obtained from:	The FreeBSD Simplified Chinese Project
This commit is contained in:
Xin LI 2011-10-14 20:47:56 +00:00
parent a114fdf5f2
commit fe66e03460
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=37828
2 changed files with 426 additions and 97 deletions

View file

@ -1,7 +1,8 @@
#
# The FreeBSD Simplified Chinese Project
#
# Original Revision: 1.7
# Original Revision: 1.9
#
# $FreeBSD$
#
# Build the FreeBSD Porter's Handbook.
@ -39,6 +40,17 @@ IMAGES_LIB+= callouts/7.png
IMAGES_LIB+= callouts/8.png
IMAGES_LIB+= callouts/9.png
IMAGES_LIB+= callouts/10.png
IMAGES_LIB+= callouts/11.png
IMAGES_LIB+= callouts/12.png
IMAGES_LIB+= callouts/13.png
IMAGES_LIB+= callouts/14.png
IMAGES_LIB+= callouts/15.png
IMAGES_LIB+= callouts/16.png
IMAGES_LIB+= callouts/17.png
IMAGES_LIB+= callouts/18.png
IMAGES_LIB+= callouts/19.png
IMAGES_LIB+= callouts/20.png
IMAGES_LIB+= callouts/21.png
URL_RELPREFIX?= ../../../..
DOC_PREFIX?= ${.CURDIR}/../../..

View file

@ -2,7 +2,7 @@
The FreeBSD Documentation Project
The FreeBSD Simplified Chinese Project
Original Revision: 1.1092
Original Revision: 1.1117
$FreeBSD$
-->
@ -33,6 +33,7 @@
<year>2008</year>
<year>2009</year>
<year>2010</year>
<year>2011</year>
<holder role="mailto:doc@FreeBSD.org">The FreeBSD Documentation
Project</holder>
</copyright>
@ -51,6 +52,7 @@
<year>2008</year>
<year>2009</year>
<year>2010</year>
<year>2011</year>
<holder>&cnproj.freebsd.org;</holder>
</copyright>
@ -1058,15 +1060,24 @@ PORTEPOCH= 1</programlisting>
<sect2>
<title><makevar>LATEST_LINK</makevar></title>
<para><makevar>LATEST_LINK</makevar> 在编译包的过程中用于确定可以为
<command>pkg_add -r</command> 使用的缩短的名字。 举例来说,
在安装最新版本的 perl 的时候, 只需指定
<command>pkg_add -r perl</command> 而无需知道具体的版本号。
这个名字应该是独一无二的, 并且对用户而言应该是显而易见的名字。</para>
<para>有时, 在 ports 套件中可能会存在同一程序的多个版本。
索引和预编译包的联编系统都需要能够将它们视为不同的软件包, 尽管其
<makevar>PORTNAME</makevar>、 <makevar>PKGNAMEPREFIX</makevar> 以及
even <makevar>PKGNAMESUFFIX</makevar> 可能是一模一样的。 遇到这种情况时,
就需要将除了 <quote>主</quote> port 之外的其他 port
中的 <makevar>LATEST_LINK</makevar> 变量设为不同的值
&mdash; 请参见 <filename>editors/vim5</filename> 和
<filename>editors/vim</filename> port 以及
&mdash; 请参见 <filename>lang/gcc46</filename> 和
<filename>lang/gcc</filename> port 以及
<filename>www/apache*</filename> 系列, 以了解它的用法。
如果设置了 <makevar>NO_LATEST_LINK</makevar>
则系统便不会生成对应的连接, 对于非
<quote>主</quote> port 来说是一个可行的选择。
需要注意的是, 如何确定 <quote>主</quote> 版本 &mdash;
<quote>最流行</quote>、 <quote>受支持最好</quote>
<quote>变动最少</quote> 等等 &mdash; 已经超过了本书能够给出的建议范围;
@ -1167,13 +1178,15 @@ PORTEPOCH= 1</programlisting>
<para>这个方法是为了更容易得凭版本号来排序 port。
特别注意的是, 确保版本号之间的每部分都由小数点来分隔,
如果日期也是版本号的一部分, 就用这样的格式,
<literal><replaceable>yyyy</replaceable>.<replaceable>mm</replaceable>.<replaceable>dd</replaceable></literal>
或者
<literal><replaceable>dd</replaceable>.<replaceable>mm</replaceable>.<replaceable>yyyy</replaceable></literal>
<literal>0.0.<replaceable>yyyy</replaceable>.<replaceable>mm</replaceable>.<replaceable>dd</replaceable></literal>
这样的格式, 而非
<literal><replaceable>yy</replaceable>.<replaceable>mm</replaceable>.<replaceable>dd</replaceable>
因为后者不适合表示千年的格式。</literal>
</para>
<literal><replaceable>dd</replaceable>.<replaceable>mm</replaceable>.<replaceable>yyyy</replaceable></literal>
甚至
<literal><replaceable>yy</replaceable>.<replaceable>mm</replaceable>.<replaceable>dd</replaceable></literal>
这种不适合表示千年的格式。 在版本号上使用
<literal>0.0.</literal> 前缀十分重要, 因为当软件发行正式的版本时,
其版本号数字很可能会小于表示年份的
<literal><replaceable>yyyy</replaceable></literal> 数字。</para>
</listitem>
</orderedlist>
@ -1315,7 +1328,7 @@ PORTEPOCH= 1</programlisting>
就应把版本号设成 <literal>1.0</literal> (就像前面
<literal>piewm</literal> 的例子那样)。 否则,
要求原始的作者加上版本号或使用日期
(<literal><replaceable>yyyy</replaceable>.<replaceable>mm</replaceable>.<replaceable>dd</replaceable></literal>)
(<literal>0.0.<replaceable>yyyy</replaceable>.<replaceable>mm</replaceable>.<replaceable>dd</replaceable></literal>)
来作为版本号。</para>
</sect2>
</sect1>
@ -1659,7 +1672,7 @@ PORTEPOCH= 1</programlisting>
</row>
<row>
<entry><filename>mbone</filename></entry>
<entry><filename>mbone*</filename></entry>
<entry>MBone 应用程序。</entry>
<entry></entry>
</row>
@ -1978,7 +1991,7 @@ PORTEPOCH= 1</programlisting>
editors</filename> 而不是其它的什么。 同样地,
您不应该列出 <filename>net</filename> 如果 port 属于
<filename>irc</filename>、 <filename>mail</filename>、
<filename>mbone</filename>、 <filename>news</filename>、
<filename>news</filename>、
<filename>security</filename> 或是 <filename>www</filename>
因为 <filename>net</filename> 可以表示它们的超集。</para>
</listitem>
@ -3151,7 +3164,7 @@ ALWAYS_KEEP_DISTFILES= yes
<para><filename>Makefile</filename> 中的 COMMENT 变量应该紧接着 MAINTAINER
变量出现。</para>
<para>请务必将 COMMENT 这行限制在 60 个字符之内,
<para>请务必将 COMMENT 这行限制在不超过 70 个字符之内,
因为这行内容会成为 &man.pkg.info.1;
呈现给用户的 port 的一句话简介。</para>
</sect1>
@ -4313,7 +4326,7 @@ PORTVERSION= 1.0</programlisting>
来避免 (参见 <filename role="package">lang/moscow_ml</filename>
给出的例子) 或者用一个 shell 封装程序来在执行可执行文件之前设置
<makevar>LD_LIBRARY_PATH</makevar> 类似
<filename role="package">www/mozilla</filename> 那样。</para>
<filename role="package">www/seamonkey</filename> 那样。</para>
<para>当在 64-位系统上安装 32-位 的函数库时, 请使用
<makevar>USE_LDCONFIG32</makevar>。</para>
@ -4466,7 +4479,7 @@ PORTVERSION= 1.0</programlisting>
<literal>USE_GMAKE=yes</literal>。</para>
<table frame="none">
<title>用于与 gmake 有关的 port 的变量</title>
<title>与 <application>gmake</application> 有关的 port 变量</title>
<tgroup cols="2">
<thead>
@ -4545,7 +4558,7 @@ PORTVERSION= 1.0</programlisting>
</para>
<table frame="none">
<title>用于用到了 configure 脚本的 port 的变量</title>
<title>用于用到了 <command>configure</command> 脚本的 port 的变量</title>
<tgroup cols="2">
<thead>
@ -5865,8 +5878,8 @@ QT_COMPONENTS= qmake_build moc_build rcc_build uic_build</programlisting>
<entry><makevar>JAVA_VERSION</makevar></entry>
<entry>用空格分开的适合 port 使用的 Java 版本。
可选的 <literal>"+"</literal> 可以用于指定某个范围的版本 (可以用:
<literal>1.1[+] 1.2[+] 1.3[+] 1.4[+] 1.5[+]
1.6[+]</literal>)。</entry>
<literal>1.5[+] 1.6[+] 1.7[+]
</literal>)。</entry>
</row>
<row>
@ -5878,8 +5891,8 @@ QT_COMPONENTS= qmake_build moc_build rcc_build uic_build</programlisting>
<row>
<entry><makevar>JAVA_VENDOR</makevar></entry>
<entry>用空格分开的适应 port 的 JDK port 供应商
(可以用: <literal>freebsd bsdjava sun ibm
blackdown</literal>)。</entry>
(可以用: <literal>freebsd bsdjava sun
openjdk</literal>)。</entry>
</row>
<row>
@ -5896,22 +5909,6 @@ QT_COMPONENTS= qmake_build moc_build rcc_build uic_build</programlisting>
<entry><makevar>JAVA_EXTRACT</makevar></entry>
<entry>设置这个变量表示所选的 JDK port 应被列入 port 的解压缩支持依赖关系。</entry>
</row>
<row>
<entry><makevar>USE_JIKES</makevar></entry>
<entry>port 是否应使用
<command>jikes</command> bytecode 编译器进行联编。
如果没有设置, 则 port 将在
<command>jikes</command> 可用的情况下在联编时使用它。
您也可以明确地禁止使用或要求使用
<command>jikes</command> (通过将这个变量设置为 <literal>'no'</literal>
或 <literal>'yes'</literal>)。 后一种情形中, <filename
role="package">devel/jikes</filename> 将加入 port 的联编依赖关系。
任何情况下, 如果 <command>jikes</command>
被作为 <command>javac</command> 使用, 则
<filename>bsd.java.mk</filename> 会定义
<makevar>HAVE_JIKES</makevar> 变量。</entry>
</row>
</tbody>
</tgroup>
</table>
@ -5933,32 +5930,32 @@ QT_COMPONENTS= qmake_build moc_build rcc_build uic_build</programlisting>
<row>
<entry><makevar>JAVA_PORT</makevar></entry>
<entry>JDK port 的名字 (例如
<literal>'java/jdk14'</literal>)。</entry>
<literal>'java/diablo-jdk16'</literal>)。</entry>
</row>
<row>
<entry><makevar>JAVA_PORT_VERSION</makevar></entry>
<entry>JDK port 的完整版本 (例如
<literal>'1.4.2'</literal>)。 如果您只需要版本号的前两位, 则可用
<literal>'1.6.0'</literal>)。 如果您只需要版本号的前两位, 则可用
<makevar>${JAVA_PORT_VERSION:C/^([0-9])\.([0-9])(.*)$/\1.\2/}</makevar>。</entry>
</row>
<row>
<entry><makevar>JAVA_PORT_OS</makevar></entry>
<entry>所用 JDK port 的操作系统 (例如
<literal>'linux'</literal>)。</entry>
<literal>'native'</literal>)。</entry>
</row>
<row>
<entry><makevar>JAVA_PORT_VENDOR</makevar></entry>
<entry>所用 JDK port 的供应商 (例如
<literal>'sun'</literal>)。</entry>
<literal>'freebsd'</literal>)。</entry>
</row>
<row>
<entry><makevar>JAVA_PORT_OS_DESCRIPTION</makevar></entry>
<entry>所用 JDK port 操作系统的描述
(例如 <literal>'Linux'</literal>)。</entry>
(例如 <literal>'Native'</literal>)。</entry>
</row>
<row>
@ -5970,34 +5967,34 @@ QT_COMPONENTS= qmake_build moc_build rcc_build uic_build</programlisting>
<row>
<entry><makevar>JAVA_HOME</makevar></entry>
<entry>JDK 的安装目录 (例如
<filename>'/usr/local/jdk1.3.1'</filename>)。</entry>
<filename>'/usr/local/diablo-jdk1.6.0'</filename>)。</entry>
</row>
<row>
<entry><makevar>JAVAC</makevar></entry>
<entry>所用 Java 编译器的完整路径 (例如
<filename>'/usr/local/jdk1.3.1/bin/javac'</filename> 或
<filename>'/usr/local/bin/jikes'</filename>)。</entry>
<filename>'/usr/local/diablo-jdk1.6.0/bin/javac'</filename>)。
</entry>
</row>
<row>
<entry><makevar>JAR</makevar></entry>
<entry>所用 <command>jar</command> 工具的完整路径 (例如
<filename>'/usr/local/jdk1.3.1/bin/jar'</filename> 或
<filename>'/usr/local/diablo-jdk1.6.0/bin/jar'</filename> 或
<filename>'/usr/local/bin/fastjar'</filename>)。</entry>
</row>
<row>
<entry><makevar>APPLETVIEWER</makevar></entry>
<entry>所用 <command>appletviewer</command> 工具的完整路径 (例如
<filename>'/usr/local/linux-jdk1.3.1/bin/appletviewer'</filename>)。</entry>
<filename>'/usr/local/diablo-jdk1.6.0/bin/appletviewer'</filename>)。</entry>
</row>
<row>
<entry><makevar>JAVA</makevar></entry>
<entry>所用 <command>java</command> 执行文件的完整路径。
您应使用它来执行 Java 程序 (例如
<filename>'/usr/local/jdk1.3.1/bin/java'</filename>)。</entry>
<filename>'/usr/local/diablo-jdk1.6.0/bin/java'</filename>)。</entry>
</row>
<row>
@ -6057,12 +6054,6 @@ QT_COMPONENTS= qmake_build moc_build rcc_build uic_build</programlisting>
<entry>所用 JDK 类文件目录的完整路径。
<filename>${JAVA_HOME}/jre/lib/rt.jar</filename>。</entry>
</row>
<row>
<entry><makevar>HAVE_JIKES</makevar></entry>
<entry>随 <command>jikes</command> 是否将被应用于 port
的联编过程而定 (参见前述 <makevar>USE_JIKES</makevar>)。</entry>
</row>
</tbody>
</tgroup>
</table>
@ -6124,10 +6115,6 @@ QT_COMPONENTS= qmake_build moc_build rcc_build uic_build</programlisting>
的设置执行 Ant。 这类似于 <xref linkend="building"> 中介绍的关于
<makevar>USE_GMAKE</makevar> 的机制。</para>
<para>若 <command>jikes</command> 被作为
<command>javac</command> 使用 (参见 <xref linkend="java-variables"> 中的
<makevar>USE_JIKES</makevar>) 则 Ant 会自动将其用于 port 的联编过程。</para>
</sect2>
<sect2 id="java-best-practices">
@ -8154,6 +8141,86 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
<programlisting>USE_XFCE= mcsmanager configenv</programlisting>
</sect1>
<sect1 id="using-mozilla">
<title>使用 Mozilla</title>
<table frame="none">
<title>用到 Mozilla 的 port 使用的变量</title>
<tgroup cols="2">
<tbody>
<row>
<entry><makevar>USE_GECKO</makevar></entry>
<entry>port 支持的 Gecko 后端。 可选值:
<literal>libxul</literal> (<filename>libxul.so</filename>)、
<literal>seamonkey</literal> (<filename>libgtkembedmoz.so</filename>
过时, 新 port 应避免使用)。</entry>
</row>
<row>
<entry><makevar>USE_FIREFOX</makevar></entry>
<entry>port 需要使用 Firefox 作为运行环境依赖。
可选值:
<literal>yes</literal> (使用默认版本)、
<literal>40</literal>、 <literal>36</literal>、
<literal>35</literal>。
默认的依赖采用的是版本
<literal>40</literal>。</entry>
</row>
<row>
<entry><makevar>USE_FIREFOX_BUILD</makevar></entry>
<entry>port 需要使用 Firefox 作为联编环境依赖。
可选值: 参见 USE_FIREFOX。
这个变量会自动设置 USE_FIREFOX 使用相同的值。</entry>
</row>
<row>
<entry><makevar>USE_SEAMONKEY</makevar></entry>
<entry>port 需要使用 SeaMonkey 作为运行环境依赖。
可选值:
<literal>yes</literal> (使用默认版本)、
<literal>20</literal>、 <literal>11</literal>
(过时, 新 port 应避免使用)。
默认的依赖采用的是版本
<literal>20</literal>。</entry>
</row>
<row>
<entry><makevar>USE_SEAMONKEY_BUILD</makevar></entry>
<entry>port 需要使用 SeaMonkey 作为联编环境依赖。
可选值: 参见 USE_SEAMONKEY。
这个变量会自动设置 USE_SEAMONKEY 使用相同的值。</entry>
</row>
<row>
<entry><makevar>USE_THUNDERBIRD</makevar></entry>
<entry>port 需要使用 Thunderbird 作为运行环境依赖。
可选值:
<literal>yes</literal> (使用默认版本)、
<literal>31</literal>、 <literal>30</literal>
(过时, 新 port 应避免使用)。
默认的依赖采用的是版本
<literal>31</literal>。</entry>
</row>
<row>
<entry><makevar>USE_THUNDERBIRD_BUILD</makevar></entry>
<entry>port 需要使用 Thunderbird 作为联编环境依赖。
可选值: 参见 USE_THUNDERBIRD。
这个变量会自动设置 USE_THUNDERBIRD 使用相同的值。</entry>
</row>
</tbody>
</tgroup>
</table>
<para>可用变量的完整列表, 请参阅
<filename>/usr/ports/Mk/bsd.gecko.mk</filename>。</para>
</sect1>
<sect1 id="using-databases">
<title>使用数据库</title>
@ -8175,8 +8242,8 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
<entry>如果这个变量为 <literal>yes</literal>
则把 <filename role="package">databases/db41</filename>
列为依赖关系。 这个变量还可以被设置成的值有: 234041
42434546 或者 47。你可以声明可接受值的范围,
列为依赖关系。 这个变量还可以被设置成的值有: 4041
42、 43、 44、 46、 47、 48 或 51。 您可以声明可接受值的范围,
<makevar>USE_BDB</makevar>=42+ 将寻找已安装的最高版本,
如果没有找到则退回到 42。</entry>
</row>
@ -8185,9 +8252,9 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
<entry><makevar>USE_MYSQL</makevar></entry>
<entry>如果这个变量为 <literal>yes</literal>
则把 <filename role="package">databases/mysql50-server</filename>
则把 <filename role="package">databases/mysql55-server</filename>
列为依赖关系。还有一个相关的变量,<makevar>WANT_MYSQL_VER</makevar>,
可以设置的值有 32340415051 或者 60。</entry>
可以设置的值有 32340415051 52 55 或者 60。</entry>
</row>
<row>
@ -8196,13 +8263,17 @@ CFLAGS+= -DLUA_VERSION_STRING="${VER_STR}"
<entry>如果设置成 <literal>yes</literal>,则把
<filename role="package">databases/postgresql82</filename>
列为依赖关系。还有一个相关的变量,<makevar>WANT_PGSQL_VER</makevar>
可以设置的值有 7374808182 或 83。</entry>
可以设置的值有 7374808182 83 或 90。</entry>
</row>
</tbody>
</tgroup>
</table>
<para>更多详情请参阅
<ulink url="http://www.freebsd.org/cgi/cvsweb.cgi/ports/Mk/bsd.database.mk">
bsd.database.mk</ulink>。</para>
</sect1>
<sect1 id="rc-scripts">
@ -8349,9 +8420,7 @@ GROUPS= pulse pulse-access pulse-rt</programlisting>
<para>某些 ports (例如可加载式内核模块) 需要内核的源文件才能编译。
下面是检测用户是否安装了源代码的例子:</para>
<programlisting>SRC_BASE?= /usr/src
.if !exists(${SRC_BASE}/sys/Makefile)
<programlisting>.if !exists(${SRC_BASE}/sys/Makefile)
IGNORE= requires kernel sources to be installed
.endif</programlisting>
</sect1>
@ -8568,13 +8637,13 @@ etc/orbit.conf.sample
<para>接下来, 建立一个用于安装您的 port 的临时目录,
并在其中安装它所依赖的所有其他软件包:</para>
<screen>&prompt.root; <userinput>mkdir /var/tmp/$(make -V PORTNAME)</userinput>
&prompt.root; <userinput>mtree -U -f $(make -V MTREE_FILE) -d -e -p /var/tmp/$(make -V PORTNAME)</userinput>
&prompt.root; <userinput>make depends PREFIX=/var/tmp/$(make -V PORTNAME)</userinput></screen>
<screen>&prompt.root; <userinput>mkdir /var/tmp/`make -V PORTNAME`</userinput>
&prompt.root; <userinput>mtree -U -f `make -V MTREE_FILE` -d -e -p /var/tmp/`make -V PORTNAME`</userinput>
&prompt.root; <userinput>make depends PREFIX=/var/tmp/`make -V PORTNAME`</userinput></screen>
<para>将目录结构保存到一新文件中。</para>
<screen>&prompt.root; <userinput>(cd /var/tmp/$(make -V PORTNAME) && find -d * -type d) | sort &gt; OLD-DIRS</userinput></screen>
<screen>&prompt.root; <userinput>(cd /var/tmp/`make -V PORTNAME` && find -d * -type d) | sort &gt; OLD-DIRS</userinput></screen>
<para>建立一空白 <filename>pkg-plist</filename> 文件:</para>
@ -8583,12 +8652,12 @@ etc/orbit.conf.sample
<para>如果您的 port 遵循 <makevar>PREFIX</makevar> (应该如此)
则接下来应安装该 port 并创建装箱单。</para>
<screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/$(make -V PORTNAME)</userinput>
&prompt.root; <userinput>(cd /var/tmp/$(make -V PORTNAME) && find -d * \! -type d) | sort &gt; pkg-plist</userinput></screen>
<screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/`make -V PORTNAME`</userinput>
&prompt.root; <userinput>(cd /var/tmp/`make -V PORTNAME` && find -d * \! -type d) | sort &gt; pkg-plist</userinput></screen>
<para>此外还应把新建立的目录加入装箱单。</para>
<screen>&prompt.root; <userinput>(cd /var/tmp/$(make -V PORTNAME) && find -d * -type d) | sort | comm -13 OLD-DIRS - | sort -r | sed -e 's#^#@dirrm #' &gt;&gt; pkg-plist</userinput></screen>
<screen>&prompt.root; <userinput>(cd /var/tmp/`make -V PORTNAME` && find -d * -type d) | sort | comm -13 OLD-DIRS - | sort -r | sed -e 's#^#@dirrm #' &gt;&gt; pkg-plist</userinput></screen>
<para>最后需要手工整理 packing list 这一过程不是
<emphasis>完全</emphasis> 自动的。 联机手册应列入 port
@ -8615,12 +8684,12 @@ etc/orbit.conf.sample
<command>make depends</command>。 然后联编和安装
port</para>
<screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/$(make -V PORTNAME)</userinput></screen>
<screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/`make -V PORTNAME`</userinput></screen>
<para>然后让 <command>plist</command> 生成
<filename>pkg-plist</filename> 文件:</para>
<screen>&prompt.root; <userinput>/usr/ports/Tools/scripts/plist -Md -m $(make -V MTREE_FILE) /var/tmp/$(make -V PORTNAME) &gt; pkg-plist</userinput></screen>
<screen>&prompt.root; <userinput>/usr/ports/Tools/scripts/plist -Md -m `make -V MTREE_FILE` /var/tmp/`make -V PORTNAME` &gt; pkg-plist</userinput></screen>
<para>与前面类似, 如此生成的装箱单也需要手工进行一些清理工作。</para>
@ -8949,7 +9018,7 @@ as .putsy.conf and edit it.</programlisting>
<filename>/usr/local</filename> 而不是正确的 <makevar>PREFIX</makevar>
中安装文件。 简单的测试方法是:</para>
<screen>&prompt.root; <userinput>make clean; make package PREFIX=/var/tmp/$(make -V PORTNAME)</userinput></screen>
<screen>&prompt.root; <userinput>make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`</userinput></screen>
<para>如果有文件安装到了 <makevar>PREFIX</makevar> 以外的地方,
打包过程将抱怨找不到这些文件。</para>
@ -8957,7 +9026,7 @@ as .putsy.conf and edit it.</programlisting>
<!-- XXX This paragraph is confusing and poorly indented. -->
<para>这一步骤并不能帮助发现内部引用, 或纠正在引用其它 port
中的文件时使用的 <makevar>LOCALBASE</makevar>。 您需要在
<filename>/var/tmp/$(make -V PORTNAME)</filename>
<filename>/var/tmp/`make -V PORTNAME`</filename>
中测试安装好的软件, 才能够达到这样的目的。</para>
<para>您可以在自己的 <filename>Makefile</filename> 中改变
@ -9040,7 +9109,8 @@ as .putsy.conf and edit it.</programlisting>
<screen>&prompt.user; <userinput>/usr/bin/diff something.orig something > something.diff</userinput></screen>
</informalexample>
<para>还有一种办法是将目录整个复制到另一个目录,
<para>如果不是这样的话, 则您应使用 <command>cvs diff</command>
的方法 (<xref linkend="cvs-diff">) 或将目录整个复制到另一个目录,
并使用 &man.diff.1; 比较两个目录时在目录中递归产生的输出结果
(例如, 如果您修改后的 port 目录的名字是
<filename>superedit</filename> 而原始文件的目录是
@ -9097,6 +9167,121 @@ as .putsy.conf and edit it.</programlisting>
<para>现在您已经了解了所需的所有操作, 您可能会像要阅读在
<xref linkend="keeping-up"> 中关于如何保持最新的描述。</para>
<sect1 id="cvs-diff">
<title>使用 CVS 制作补丁</title>
<para>如果可能的话, 请提交&man.cvs.1; diff
这种情形要比直接比较 <quote>新、旧</quote> 目录要容易处理。
此外, 这种方法也让您更容易看出到底改了什么,
并在其他人更新了 Ports Collection 时容易合并这些改动,
在提交之前, 这可以减少维护补丁所需的工作。</para>
<screen>&prompt.user; <userinput>cd ~/my_wrkdir</userinput> <co id="my-wrkdir">
&prompt.user; <userinput>cvs -d R_CVSROOT co pdnsd</userinput> <co id="R-CVSROOT"> <co id="module-name">
&prompt.user; <userinput>cd ~/my_wrkdir/pdnsd</userinput></screen>
<calloutlist>
<callout arearefs="my-wrkdir">
<para>当然, 这可以是您指定的任意目录;
联编 port 并不局限于
<filename class="directory">/usr/ports/</filename>
的子目录。</para>
</callout>
<callout arearefs="R-CVSROOT">
<para>R_CVSROOT 是任何一个公共的 cvs 镜像服务器, 您可以在 <ulink
url="&url.books.handbook;/cvsup.html">&os; 使用手册</ulink>
中挑选一个。</para>
</callout>
<callout arearefs="module-name">
<para>pdnsd 是 port 的模块名字; 通常说来它和 port 的名字一样,
不过也有些例外, 特别是那些本地化类别 (<filename
role="package">german/selfhtml</filename>
对应的模块名字是 de-selfhtml) 您可以通过 <ulink
url="&url.base;/cgi/cvsweb.cgi/ports">cvsweb 界面</ulink>
查询, 或者也可以指定完整路径, 例如在我们这个例子中是
<filename class="directory">ports/dns/pdnsd</filename>。</para>
</callout>
</calloutlist>
<para>在工作目录中, 您可以像往常一样进行任何更改。
如果您添加或删除了文件, 则需要告诉
<command>cvs</command> 来追踪这些改动:</para>
<screen>&prompt.user; <userinput>cvs add new_file</userinput>
&prompt.user; <userinput>cvs remove deleted_file</userinput></screen>
<para>请反复检查 <xref linkend="porting-testing"> 列出的事项并使用
<xref linkend="porting-portlint"> 进行检查。</para>
<screen>&prompt.user; <userinput>cvs status</userinput>
&prompt.user; <userinput>cvs update</userinput> <co id="cvs-update"></screen>
<calloutlist>
<callout arearefs="cvs-update">
<para>这会合并 CVS 中其他人做的改动和您的补丁;
在这个过程中, 您需要仔细观察输出。
文件名前面的那个字母会显示做了什么, 请参阅
<xref linkend="table-cvs-up"> 中给出的说明。</para>
</callout>
</calloutlist>
<table pgwide="1" frame="none" id="table-cvs-up">
<title>cvs update 文件名前字母前缀的含义</title>
<tgroup cols="2">
<tbody>
<row>
<entry>U</entry>
<entry>文件更新无误。</entry>
</row>
<row>
<entry>P</entry>
<entry>文件更新无误 (通常只有在使用远程代码库时才会看到)。</entry>
</row>
<row>
<entry>M</entry>
<entry>文件有本地修改, 并合并成功而未产生任何冲突。</entry>
</row>
<row>
<entry>C</entry>
<entry>文件有本地修改, 进行了合并并产生了冲突。</entry>
</row>
</tbody>
</tgroup>
</table>
<para>如果您在执行
<literal>cvs update</literal> 时某些文件出现了 <literal>C</literal>
则说明有其他人在 CVS 中做了修改, 而 &man.cvs.1; 无法将这些改动与您本地的改动进行合并。
不过, 无论如何, 最好都检查一下合并的结果,
因为 <command>cvs</command> 并不知道 port 应该是什么样子,
因此它所做的合并无论是否产生了冲突,
都有可能 (并且并不罕见) 产生没有意义的结果。</para>
<para>最后一步是以 CVS 中的文件为基础生成 unified &man.diff.1;</para>
<screen>&prompt.user; <userinput>cvs diff -uN &gt; ../`basename ${PWD}`.diff</userinput></screen>
<note>
<para>指定 <option>-N</option> 十分重要,
因为它确保了添加或删除的文件也出现在补丁中。
补丁将包含删除的文件, 在打上补丁时,
这些文件会被清空, 所以最好在 PR 中提醒 committer
删除它们。</para>
</note>
<para>根据 <xref linkend="port-upgrading"> 的指导提交您的补丁。</para>
</sect1>
<sect1 id="moved-and-updating-files">
<title>UPDATING 和 MOVED 文件</title>
@ -9206,13 +9391,13 @@ as .putsy.conf and edit it.</programlisting>
<para>如果您是 committer 则可以自行更新 VuXML 数据库。
这样, 您就能够同时帮助安全官团队,
并尽早将至关重要的信息传达给用户群体。 然而, 如果您不是 committer
或者您相信自己发现了一个异常严重的漏洞, 或者由于其它情况,
请不要由于按照 <ulink
或者您相信自己发现了一个异常严重的漏洞,
请不要犹豫, 按照 <ulink
url="http://www.freebsd.org/zh_CN/security/#how">FreeBSD
安全信息</ulink> 页面上的方法联系安全官团队。</para>
<para>现在您选择了一条艰难的路。 正如其名称所暗示的那样, VuXML
数据库本质上是一个 XML 文档。 其源文件 <filename>vuln.xml</filename>
<para>正如其名称所暗示的那样, VuXML
数据库是一个 XML 文档。 其源文件 <filename>vuln.xml</filename>
被保存在 <filename
role="package">security/vuxml</filename> port 的目录中。
所以, 它的全名是
@ -9296,11 +9481,7 @@ as .putsy.conf and edit it.</programlisting>
用于为此记录 (它包含的部分) 指定一个全局唯一标识符 (UUID)。
您应为每一个新的 vuXML 生成新的 UUID (而且别忘了要把模板中的
UUID 换成新的, 如果您不是从头开始的话)。 您可以使用 &man.uuidgen.1;
来生成 VuXML UUID 另外, 如果您使用的是 FreeBSD 4.x
版本, 也可以用 <filename
role="package">devel/p5-Data-UUID</filename> 并执行:</para>
<programlisting>perl -MData::UUID -le 'print lc new Data::UUID-&gt;create_str'</programlisting>
来生成 VuXML UUID。</para>
</callout>
<callout arearefs="co-vx-top">
@ -9482,9 +9663,29 @@ as .putsy.conf and edit it.</programlisting>
package <literal>clamav</literal> 的问题描述, 并且,
已经知道 <literal>0.65_7</literal> 版本修正了这个问题。</para>
<para>您需要做的准备工作, 是安装一个新版本的
ports <filename role="package">ports-mgmt/portaudit</filename> 程序以及
<filename role="package">ports-mgmt/portaudit-db</filename>。</para>
<para>您需要做的准备工作, 是 <emphasis>安装</emphasis> 一个新版本的
ports <filename role="package">ports-mgmt/portaudit</filename> 程序、
<filename role="package">ports-mgmt/portaudit-db</filename> 以及
<filename role="package">security/vuxml</filename>。</para>
<note>
<para>要运行 <command>packaudit</command>
您必须拥有其
<filename><makevar>DATABASEDIR</makevar></filename>
通常是 <filename>/var/db/portaudit</filename>
的写入权限。</para>
<para>您可以通过
<filename><makevar>DATABASEDIR</makevar></filename>
环境变量来指定一个不同的位置。</para>
<para>如果您的工作目录是
<filename>${PORTSDIR}/security/vuxml</filename>
以外的其它地方, 则应使用环境变量
<filename><makevar>VUXMLDIR</makevar></filename>
来指明
<filename>vuln.xml</filename> 的位置。</para>
</note>
<para>首先, 检查一下是否已经有了关于这个漏洞的描述。
如果已经有过这样的记录, 那么它将匹配较早版本的 package
@ -9493,12 +9694,6 @@ as .putsy.conf and edit it.</programlisting>
<screen>&prompt.user; <userinput>packaudit</userinput>
&prompt.user; <userinput>portaudit clamav-0.65_6</userinput></screen>
<note>
<para>要运行 <command>packaudit</command> 您必须拥有写入
<filename><makevar>DATABASEDIR</makevar></filename> 目录,
通常是 <filename>/var/db/portaudit</filename> 的权限。</para>
</note>
<para>如果什么都没有发现, 您就可以考虑写一个新的记录来描述这个漏洞了。
现在可以生成一个新的 UUID (假设它是
<literal>74a9541d-5d6c-11d8-80e3-0020ed76ef5a</literal>)
@ -12537,7 +12732,8 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
<entry>800038</entry>
<entry>May 26, 2008</entry>
<entry>删去了 netatm 和
ISDN4BSD 后的 8.0-CURRENT。</entry>
ISDN4BSD 后的 8.0-CURRENT。 这个版本也表示增加了
Compact C Type (CTF) 工具。</entry>
</row>
<row>
<entry>800039</entry>
@ -13018,6 +13214,57 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
<entry>December 22, 2010</entry>
<entry>8.2-RELEASE 之后的 8.2-STABLE。</entry>
</row>
<row>
<entry>802501</entry>
<entry>February 28, 2011</entry>
<entry>合并了 DTrace 变动, 包含用户态跟踪支持之后的 8.2-STABLE。</entry>
</row>
<row>
<entry>802502</entry>
<entry>March 6, 2011</entry>
<entry>在 libm 中合并了 log2 和 log2f 之后的 8.2-STABLE。</entry>
</row>
<row>
<entry>802503</entry>
<entry>May 1, 2011</entry>
<entry>将 gcc 升级至 FSF gcc-4_2-branch 最后一个
GPLv2 版本之后的 8.2-STABLE。</entry>
</row>
<row>
<entry>802504</entry>
<entry>May 28, 2011</entry>
<entry>引入模块化拥塞控制支持基础设施和 KPI 之后的 8.2-STABLE。</entry>
</row>
<row>
<entry>802505</entry>
<entry>May 28, 2011</entry>
<entry>引入了 Hhook 和 Khelp KPI 之后的 8.2-STABLE。</entry>
</row>
<row>
<entry>802506</entry>
<entry>May 28, 2011</entry>
<entry>在 tcpcb 结构中增加 OSD 之后的 8.2-STABLE。</entry>
</row>
<row>
<entry>802507</entry>
<entry>June 6, 2011</entry>
<entry>引入 ZFS v28 之后的 8.2-STABLE。</entry>
</row>
<row>
<entry>802508</entry>
<entry>June 8, 2011</entry>
<entry>删去了 sv_schedtail struct sysvec 方法之后的 8.2-STABLE。</entry>
</row>
<row>
<entry>802509</entry>
<entry>July 14, 2011</entry>
<entry>在 binutils 中合并了 SSE3 支持之后的 8.2-STABLE。</entry>
</row>
<row>
<entry>802510</entry>
<entry>July 19, 2011</entry>
<entry>为 <function>rfork(2)</function> 添加了 RFTSIGZMB 标志之后的 8.2-STABLE。</entry>
</row>
<row>
<entry>900000</entry>
<entry>August 22, 2009</entry>
@ -13178,6 +13425,76 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
<entry>December 5, 2010</entry>
<entry>在 libm 中增加 log2 之后的 9.0-CURRENT。</entry>
</row>
<row>
<entry>900028</entry>
<entry>December 21, 2010</entry>
<entry>添加了 Hhook (Helper
Hook)、 Khelp (Kernel Helpers) 和 Object Specific Data
(OSD) KPI 之后的 9.0-CURRENT。</entry>
</row>
<row>
<entry>900029</entry>
<entry>December 28, 2010</entry>
<entry>修改 TCP 协议栈使其允许 Khelp 模块通过 helper hook 指针,
与 TCP 控制块交互并保存连接数据之后的 9.0-CURRENT。</entry>
</row>
<row>
<entry>900030</entry>
<entry>January 12, 2011</entry>
<entry>将 libdialog 更新至版本 20100428 之后的 9.0-CURRENT。</entry>
</row>
<row>
<entry>900031</entry>
<entry>February 7, 2011</entry>
<entry>添加了 <function>pthread_getthreadid_np(3)</function> 之后的 9.0-CURRENT。</entry>
</row>
<row>
<entry>900032</entry>
<entry>February 8, 2011</entry>
<entry>删除了 uio_yield 函数原型和符号之后的 9.0-CURRENT。</entry>
</row>
<row>
<entry>900033</entry>
<entry>February 18, 2011</entry>
<entry>将 binutils 更新至 2.17.50 之后的 9.0-CURRENT。</entry>
<row>
<entry>900034</entry>
<entry>March 8, 2011</entry>
<entry>修改了 struct sysvec (sv_schedtail) 之后的 9.0-CURRENT。</entry>
</row>
<row>
<entry>900035</entry>
<entry>March 29, 2011</entry>
<entry>将基本系统中 gcc 和
libstdc++ 升级至最后的 GPLv2 授权版本之后的 9.0-CURRENT。</entry>
</row>
<row>
<entry>900036</entry>
<entry>April 18, 2011</entry>
<entry>在基本系统中删去了 libobjc 和 Objective-C 支持之后的 9.0-CURRENT。</entry>
</row>
<row>
<entry>900037</entry>
<entry>May 13, 2011</entry>
<entry>在基本系统中引入了 libprocstat(3)
函数库以及 fuser(1) 工具之后的 9.0-CURRENT。</entry>
</row>
<row>
<entry>900038</entry>
<entry>May 22, 2011</entry>
<entry>为 VFS_FHTOVP(9) 添加锁标志参数之后的 9.0-CURRENT。</entry>
</row>
<row>
<entry>900039</entry>
<entry>June 28, 2011</entry>
<entry>引入了来自 OpenBSD 4.5 的 pf 之后的 9.0-CURRENT。</entry>
</row>
<row>
<entry>900041</entry>
<entry>August 13, 2011</entry>
<entry>实现了 Capsicum
capabilities 之后的 9.0-CURRENT。 fget(9) 新增了权限参数。</entry>
</row>
</tbody>
</tgroup>
</table>