aboutsummaryrefslogtreecommitdiff
path: root/zh_CN.GB2312/books/porters-handbook
diff options
context:
space:
mode:
Diffstat (limited to 'zh_CN.GB2312/books/porters-handbook')
-rw-r--r--zh_CN.GB2312/books/porters-handbook/book.sgml276
1 files changed, 220 insertions, 56 deletions
diff --git a/zh_CN.GB2312/books/porters-handbook/book.sgml b/zh_CN.GB2312/books/porters-handbook/book.sgml
index d8619dce3c..534515ef40 100644
--- a/zh_CN.GB2312/books/porters-handbook/book.sgml
+++ b/zh_CN.GB2312/books/porters-handbook/book.sgml
@@ -2,7 +2,7 @@
The FreeBSD Documentation Project
The FreeBSD Simplified Chinese Project
- Original Revision: 1.714
+ Original Revision: 1.730
$FreeBSD$
-->
@@ -339,8 +339,8 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<title>用 <command>portlint</command> 来检查 port</title>
<para>请使用 <command>portlint</command> 命令来检查您的 port
- 是否符合我们的规范。 <filename role="package">
- devel/portlint</filename> 程序是 ports collection 的一部分。
+ 是否符合我们的规范。 <filename role="package">devel/portlint</filename>
+ 程序是 ports 套件的一部分。
这个程序的主要功能是帮助您检查
<link linkend="porting-samplem">Makefile</link> 的样式是否符合规范,
以及 <link linkend="porting-pkgname">package</link> 的命名是否得体。</para>
@@ -3635,12 +3635,20 @@ ${PREFIX}/man/ja/man4/baz.4.gz</programlisting>
必须在引用 <filename>bsd.port.pre.mk</filename> 之前定义。
而 <makevar>WITH_*</makevar> 和 <makevar>WITHOUT_*</makevar>
只有在引用了
- <filename>bsd.port.pre.mk</filename> 之后才能开始检测。
+ <filename>bsd.port.pre.mk</filename> 之后才能开始检测。</para>
+
+ <para>
由于基础支持框架的一些缺陷, 您只能使用
<makevar>WITH_*</makevar> 变量来检测那些默认值为
<literal>OFF</literal> 的选项, 而使用
<makevar>WITHOUT_*</makevar> 变量来检测那些默认值为
- <literal>ON</literal> 的选项。</para>
+ <literal>ON</literal> 的选项。 这样做的原因是:
+ 当定义了 <makevar>PACKAGE_BUILDING</makevar> 或
+ <makevar>BATCH</makevar> 来联编 package 时, <command>config</command>
+ target 并不执行, 因此也就不会有选定的 <makevar>OPTIONS</makevar>。
+ 这会导致 <command>make depends</command> 和
+ <command>make describe</command> 在没有遵循前面规则的 port
+ 联编失败。</para>
<sect3>
<title>例子</title>
@@ -3739,7 +3747,7 @@ PORTVERSION= 1.0</programlisting>
<title>共享库</title>
<para>如果您的port安装了一个或多个共享库,那么请定义一个
- <makevar>INSTALLS_SHLIB</makevar> make 变量,
+ <makevar>USE_LDCONFIG</makevar> make 变量,
在<maketarget>post-install</maketarget>标记把它注册进共享库
缓冲时会调用<filename>bsd.port.mk</filename>去运行
<literal>&dollar;{LDCONFIG} -m</literal>来指向新库的安装目录。
@@ -3751,37 +3759,28 @@ PORTVERSION= 1.0</programlisting>
那么用户可以在安装后马上
就能使用,并且在卸载软件包后系统也不会认为这些共享库仍然存在。</para>
+ <programlisting>USE_LDCONFIG= yes</programlisting>
+
<para>如果您需要把共享库安装在缺省的位置之外,
- 可以定义 <makevar>LDCONFIG_DIRS</makevar>
- make 变量,它包含安装共享库的目录列表
- 例如:
- 如果您的共享库安装到
+ 可以通过定义 make 变量 <makevar>USE_LDCONFIG</makevar>
+ 来改变默认的安装路径, 它包含安装共享库的目录列表
+ 例如: 如果您的共享库安装到
<filename><makevar>PREFIX</makevar>/lib/foo</filename> 和
<filename><makevar>PREFIX</makevar>/lib/bar</filename>
directories目录,您可以在您的
<filename>Makefile</filename>中这样设置:</para>
- <programlisting>INSTALLS_SHLIB= yes
-LDCONFIG_DIRS= %%PREFIX%%/lib/foo %%PREFIX%%/lib/bar</programlisting>
+ <programlisting>USE_LDCONFIG= ${PREFIX}/lib/foo ${PREFIX}/lib/bar</programlisting>
- <para>要时刻谨记, 非标准的目录不会在 (重) 启动时自动传递给
- &man.ldconfig.8; ! 如果有 port 真的需要这样做, 则需要像
- <filename role="package">x11/kdelibs3</filename> 那样安装一个启动脚本。
- 请务必仔细检查, 通常这是完全不必要的,
+ <para>请务必仔细检查, 通常这是完全不必要的,
或者可以通过 <literal>-rpath</literal> 或在连接时设置 <envar>LD_RUN_PATH</envar>
来避免 (参见 <filename role="package">lang/moscow_ml</filename>
给出的例子), 或者用一个 shell 封装程序来在执行可执行文件之前设置
<makevar>LD_LIBRARY_PATH</makevar>, 类似
<filename role="package">www/mozilla</filename> 那样。</para>
- <para>值得注意的是这里 <makevar>LDCONFIG_DIRS</makevar> 的内
- 容就像 <filename>pkg-plist</filename>
- 的其它部分一样要通过&man.sed.1;过滤,所
- 以 <makevar>PLIST_SUB</makevar>
- 置换也会应用。我们推荐您使用 <literal>%%PREFIX%%</literal> 替换
- <makevar>PREFIX</makevar>,<literal>%%LOCALBASE%%</literal>
- 替换<makevar>LOCALBASE</makevar>,<literal>%%X11BASE%%</literal>
- 替换<makevar>X11BASE</makevar>.</para>
+ <para>当在 64-位系统上安装 32-位 的函数库时, 请使用
+ <makevar>USE_LDCONFIG32</makevar>。</para>
<para>尽量将共享库版本号保持为
<filename>libfoo.so.0</filename> 这样的格式。
@@ -4043,6 +4042,55 @@ LDCONFIG_DIRS= %%PREFIX%%/lib/foo %%PREFIX%%/lib/bar</programlisting>
</tgroup>
</table>
</sect2>
+
+ <sect2 id="using-scons">
+ <title>使用 <command>scons</command></title>
+
+ <para>如果您的 port 使用 <application>SCons</application>, 就需要定义
+ <literal>USE_SCONS=yes</literal> 了。</para>
+
+ <table frame="none">
+ <title>使用 <command>scons</command> 的 port 会用到的变量</title>
+
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>变量</entry>
+
+ <entry>含义</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><makevar>SCONS_ARGS</makevar></entry>
+
+ <entry>当前 port 希望传给 SCons
+ 环境的参数。</entry>
+ </row>
+
+ <row>
+ <entry><makevar>SCONS_BUILDENV</makevar></entry>
+
+ <entry>希望在系统环境中设置的变量。</entry>
+ </row>
+
+ <row>
+ <entry><makevar>SCONS_ENV</makevar></entry>
+
+ <entry>希望在 SCons 环境中设置的变量。</entry>
+ </row>
+
+ <row>
+ <entry><makevar>SCONS_TARGET</makevar></entry>
+
+ <entry>传递给 SCons 的最后一个参数, 类似于
+ <makevar>MAKE_TARGET</makevar>。</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect2>
</sect1>
<sect1 id="using-autotools">
@@ -4333,6 +4381,18 @@ LDCONFIG_DIRS= %%PREFIX%%/lib/foo %%PREFIX%%/lib/bar</programlisting>
<sect1 id="using-perl">
<title>使用 <literal>perl</literal></title>
+ <para>如果 <makevar>MASTER_SITES</makevar> 设为
+ <makevar>MASTER_SITE_PERL_CPAN</makevar>, 则应尽量把
+ <makevar>MASTER_SITE_SUBDIR</makevar> 设置为顶级目录的名字。
+ 例如, 对 <literal>p5-Module-Name</literal>
+ 而言推荐的名字是 <literal>Module</literal>。
+ 您可以在 <ulink url="http://cpan.org/modules/by-module/">cpan.org</ulink>
+ 找到顶级目录的名字。 这可以确保在模块的作者发生变化时,
+ 保持 port 继续可用。</para>
+
+ <para>以上规则有一个例外, 即对应目录不存在时, 允许使用作者的 id 作为
+ <makevar>MASTER_SITE_SUBDIR</makevar>。</para>
+
<table frame="none">
<title>用于用到 <literal>perl</literal> 的 port 的变量</title>
@@ -5293,7 +5353,7 @@ BUILD_DEPENDS+= Xvfb:${X_VFBSERVER_PORT} \
</row>
<row>
- <entry><makevar>BROKEN_WITH_PHP</makevar></entry>
+ <entry><makevar>IGNORE_WITH_PHP</makevar></entry>
<entry>此 port 无法与给定版本的 PHP 一同工作。
可选值为 <literal>4</literal>、
@@ -5348,13 +5408,6 @@ BUILD_DEPENDS+= Xvfb:${X_VFBSERVER_PORT} \
<entry>希望使用 Apache 模块或 CGI 版本的 PHP。</entry>
</row>
-
- <row>
- <entry><makevar>WANT_PHP_PEAR</makevar></entry>
-
- <entry>希望使用 PEAR 框架。</entry>
- </row>
-
</tbody>
</tgroup>
</table>
@@ -5374,8 +5427,8 @@ BUILD_DEPENDS+= Xvfb:${X_VFBSERVER_PORT} \
所有这里列出的文件都会自动安装到合适的位置, 并加入
<filename>pkg-plist</filename>。</para>
- <para>在 <filename>Makefile</filename> 的最后一行引用
- <filename>&dollar;{PORTSDIR}/devel/pear-PEAR/Makefile.common</filename>。</para>
+ <para>在 <filename>Makefile</filename> 文件的最后一行引入
+ <filename>&dollar;{PORTSDIR}/devel/pear/bsd.pear.mk</filename>。</para>
<example id="pear-makefile">
<title>用于 PEAR 类的 Makefile 例子</title>
@@ -5401,7 +5454,7 @@ DOCS= TODO
_DOCSDIR= .
.include &lt;bsd.port.pre.mk&gt;
-.include "&dollar;{PORTSDIR}/devel/pear-PEAR/Makefile.common"
+.include "&dollar;{PORTSDIR}/devel/pear/bsd.pear.mk"
.include &lt;bsd.port.post.mk&gt;</programlisting>
</example>
@@ -5738,6 +5791,88 @@ USE_SDL+= mixer
</sect1>
+ <sect1 id="using-wx">
+ <title>使用 wxWidgets</title>
+
+ <para>如果您的 port 用到了跨平台工具套件 <application>wxWidgets</application>,
+ 则应定义 <literal>USE_WX=yes</literal>。 如果希望指定具体的版本,
+ 则可以设置为类似
+ <literal>USE_WX=2.6</literal> 这样。 除此之外,
+ 还可以指定范围 (<literal>2.4-2.6</literal>)
+ 和开区间 (<literal>-2.4</literal>、 <literal>2.6+</literal>)
+ 这样的形式。</para>
+
+ <para>所需的 wxWidgets 组件可以通过
+ <makevar>WX_COMPS</makevar> 来设置。 除非另外指定,
+ port 将依赖于 wxWidgets 库 (<literal>wx</literal>)。
+ 可用的组件包括:</para>
+
+ <table frame="none">
+ <title><makevar>WX_COMPS</makevar> 的可选值</title>
+
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>值</entry>
+
+ <entry>意义</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><literal>wx</literal></entry>
+
+ <entry>wxWidget 函数库</entry>
+ </row>
+
+ <row>
+ <entry><literal>contrib</literal></entry>
+
+ <entry>wxWidget 第三方函数库</entry>
+ </row>
+
+ <row>
+ <entry><literal>python</literal></entry>
+
+ <entry>wxPython</entry>
+ </row>
+
+ <row>
+ <entry><literal>mozilla</literal></entry>
+
+ <entry>wxMozilla (仅限于 2.4 以上版本)</entry>
+ </row>
+
+ <row>
+ <entry><literal>svg</literal></entry>
+
+ <entry>wxSVG (仅限于 2.6 以上版本)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>如果查找 wxWidget 函数库需要通过 <makevar>WX_CONFIG</makevar> 变量以外的
+ configure 参数 来指定, 则应在 port 中设置
+ <makevar>WX_CONF_ARGS</makevar>。 可选的值包括表示
+ <literal>--with-wx-config=${WX_CONFIG}</literal> 的
+ <literal>absolute</literal>, 以及表示
+ <literal>--with-wx=${X11BASE}</literal> 的
+ <literal>relative</literal>; 这些参数将作为 configure 的参数。</para>
+
+ <para>如果您的 port 需要 Unicode 版本的 wxWidgets 函数库, 则应定义
+ <literal>WX_UNICODE=yes</literal>。</para>
+
+ <para>下面是一个表示 port 需要 Unicode 版本的 wxWidgets 2.6 和
+ contrib 函数库的例子:</para>
+
+ <programlisting>USE_WX= 2.6
+WX_COMPS= wx contrib
+WX_UNICODE= yes</programlisting>
+
+ </sect1>
+
<sect1 id="rc-scripts">
<title>启动和停止服务 (rc 脚本)</title>
@@ -5751,7 +5886,7 @@ USE_SDL+= mixer
<para>可以安装一或多个 rc 脚本:</para>
- <programlisting>USE_RC_SUBR= doormand.sh</programlisting>
+ <programlisting>USE_RC_SUBR= doormand</programlisting>
<para>这些脚本必须放到 <filename>files</filename>
目录, 并附加 <literal>.in</literal>。
@@ -6012,20 +6147,16 @@ etc/orbit.conf.sample
<para>首先, 请确认已经基本上完成了 port 的工作, 仅缺
<filename>pkg-plist</filename>。</para>
- <para>接下来, 建立一个临时的目录, 以便安装您的 port,
- 首先在其中安装所有依赖的 port。 对于非 X 的 port,
- <replaceable>port-type</replaceable> 应该是 <literal>local</literal>;
- 而使用 XFree86 4.X 或 X.org 目录结构的对应则是 <literal>x11-4</literal>,
- 最后, 如果 port 使用的是 XFree86 3.X, 则应使用
- <literal>x11</literal>。</para>
+ <para>接下来, 建立一个用于安装您的 port 的临时目录,
+ 并在其中安装它所依赖的所有其他软件包:</para>
- <screen>&prompt.root; <userinput>mkdir /var/tmp/<replaceable>port-name</replaceable></userinput>
-&prompt.root; <userinput>mtree -U -f /etc/mtree/BSD.<replaceable>port-type</replaceable>.dist -d -e -p /var/tmp/<replaceable>port-name</replaceable></userinput>
-&prompt.root; <userinput>make depends PREFIX=/var/tmp/<replaceable>port-name</replaceable></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/<replaceable>port-name</replaceable> && 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>
@@ -6034,12 +6165,12 @@ etc/orbit.conf.sample
<para>如果您的 port 遵循 <makevar>PREFIX</makevar> (应该如此)
则接下来应安装该 port 并创建装箱单。</para>
- <screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/<replaceable>port-name</replaceable></userinput>
-&prompt.root; <userinput>(cd /var/tmp/<replaceable>port-name</replaceable> && 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/<replaceable>port-name</replaceable> && 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
@@ -6062,12 +6193,12 @@ etc/orbit.conf.sample
<command>make depends</command>。 然后构建和安装
port:</para>
- <screen>&prompt.root; <userinput>make install PREFIX=/var/tmp/<replaceable>port-name</replaceable></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 /etc/mtree/BSD.<replaceable>port-type</replaceable>.dist /var/tmp/<replaceable>port-name</replaceable> &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>
@@ -6359,7 +6490,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/<replaceable>port-name</replaceable></userinput></screen>
+ <screen>&prompt.root; <userinput>make clean; make package PREFIX=/var/tmp/$(make -V PORTNAME)</userinput></screen>
<para>如果有文件安装到了 <makevar>PREFIX</makevar> 以外的地方,
打包过程将抱怨找不到这些文件。</para>
@@ -6367,7 +6498,7 @@ as .putsy.conf and edit it.</programlisting>
<!-- XXX This paragraph is confusing and poorly indented. -->
<para>这一步骤并不能帮助发现内部引用, 或纠正在引用其它 port
中的文件时使用的 <makevar>LOCALBASE</makevar>。 您需要在
- <filename>/var/tmp/<replaceable>port-name</replaceable></filename>
+ <filename>/var/tmp/$(make -V PORTNAME)</filename>
中测试安装好的软件, 才能够达到这样的目的。</para>
<para>除非真的需要, 否则不要设置 <makevar>USE_X_PREFIX</makevar>
@@ -8485,6 +8616,18 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
<entry>600105</entry>
</row>
<row>
+ <entry>6.1-RELEASE</entry>
+ <entry>601000</entry>
+ </row>
+ <row>
+ <entry>6.1-RELEASE 之后的 6.1-STABLE。</entry>
+ <entry>601100</entry>
+ </row>
+ <row>
+ <entry>引入 csup 之后的 6.1-STABLE。</entry>
+ <entry>601101</entry>
+ </row>
+ <row>
<entry>7.0-CURRENT。</entry>
<entry>700000</entry>
</row>
@@ -8940,6 +9083,7 @@ messagebus:*:556:556:D-BUS Daemon User:/nonexistent:/sbin/nologin
avahi:*:558:558:Avahi Daemon User:/nonexistent:/sbin/nologin
bnetd:*:700:700:Bnetd user:/nonexistent:/sbin/nologin
bopm:*:717:717:Blitzed Open Proxy Monitor:/nonexistent:/bin/sh
+openxpki:*:777:777:OpenXPKI Owner:/nonexistent:/usr/sbin/nologin
bacula:*:910:910:Bacula Daemon:/var/db/bacula:/sbin/nologin</programlisting>
<para>下面是目前预留的 GID。</para>
@@ -9020,6 +9164,7 @@ realtime:*:557:
avahi:*:558:
bnetd:*:700:
bopm:*:717:
+openxpki:*:777:
bacula:*:910:</programlisting>
<para>如果您的 port 需要在这一范围内预留新的 UID 或 GID 的话,
@@ -9194,9 +9339,13 @@ bacula:*:910:</programlisting>
<itemizedlist>
<listitem>
<para><makevar>BROKEN</makevar> 专门用于表达目前无法正确编译、
- 安装或卸载这类问题。 如果是临时性的问题, 则可以使用它。
- 构建集群仍将尝试构建它, 以确认导致问题的深层问题是否已被解决。
- 举例来说, 当 port 发生下述情况时, 应使用
+ 安装或卸载这类问题。 如果是临时性的问题, 则可以使用它。</para>
+
+ <para>如果进行了相关的配置, 则构建集群仍将尝试构建它,
+ 以确认导致问题的深层问题是否已被解决。 (不过, 一般情况下,
+ 构建集群并不会这样做。)</para>
+
+ <para>举例来说, 当 port 发生下述情况时, 应使用
<makevar>BROKEN</makevar>:</para>
<itemizedlist>
@@ -9380,6 +9529,21 @@ IGNORE=POINTYHAT is not supported
</sect1>
+ <sect1 id="dads-sysctl">
+ <title>对于 <filename>sysctl</filename> 的使用</title>
+
+ <para>除了在 target 中之外, 是不鼓励使用 <filename>sysctl</filename>
+ 的。 这是因为计算
+ <literal>makevar</literal>, 例如在
+ <command>make index</command> 中所进行的那种,
+ 都不得不运行一条命令, 这会使这一操作变得更慢。</para>
+
+ <para>在使用 <filename>sysctl</filename> 时,
+ 应务必使用完整路径即 <filename>/sbin/</filename>,
+ 因为某些用户可能并不在他们的 <envar>PATH</envar>
+ 中包含这个目录。</para>
+ </sect1>
+
<sect1 id="dads-workarounds">
<title>一些必要的 workaround</title>