--- title: 附录 A. 获取 FreeBSD part: 部分 V. 附录 prev: books/handbook/partv next: books/handbook/bibliography showBookMenu: true weight: 39 params: path: "/books/handbook/mirrors/" --- [appendix] [[mirrors]] = 获取 FreeBSD :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: A :partnums: :source-highlighter: rouge :experimental: :images-path: books/handbook/mirrors/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [[mirrors-cdrom]] == CDROM 和 DVD 发行商 === 零售盒装产品 可以从下面几个零售商那里买到 FreeBSD 的盒装产品 (FreeBSD CD, 附加软件,印刷文档): * CompUSA + WWW: http://www.compusa.com/ * Frys Electronics + WWW: http://www.frys.com/ === CD 和 DVD 光盘 FreeBSD CD 和 DVD 光盘可以从许多在线零售商那里买到: * FreeBSD Mall, Inc. + 700 Harvest Park Ste F + Brentwood, CA 94513 + USA + Phone: +1 925 240-6652 + Fax: +1 925 674-0821 + Email: + WWW: http://www.freebsdmall.com/ * Dr. Hinner EDV + St. Augustinus-Str. 10 + D-81825 München + Germany + Phone: (089) 428 419 + WWW: http://www.hinner.de/linux/freebsd.html * Ikarios + 22-24 rue Voltaire + 92000 Nanterre + France + WWW: http://ikarios.com/form/#freebsd * JMC Software + Ireland + Phone: 353 1 6291282 + WWW: http://www.thelinuxmall.com * The Linux Emporium + Hilliard House, Lester Way + Wallingford + OX10 9TA + United Kingdom + Phone: +44 1491 837010 + Fax: +44 1491 837016 + WWW: http://www.linuxemporium.co.uk/products/bsd/ * Linux+ DVD Magazine + Lewartowskiego 6 + Warsaw + 00-190 + Poland + Phone: +48 22 860 18 18 + Email: + WWW: http://www.lpmagazine.org/ * Linux System Labs Australia + 21 Ray Drive + Balwyn North + VIC - 3104 + Australia + Phone: +61 3 9857 5918 + Fax: +61 3 9857 8974 + WWW: http://www.lsl.com.au * LinuxCenter.Ru + Galernaya Street, 55 + Saint-Petersburg + 190000 + Russia + Phone: +7-812-3125208 + Email: + WWW: http://linuxcenter.ru/shop/freebsd === 发行人 如果您是销售商并且想销售 FreeBSD CDROM 产品, 请和发行人联系: * Cylogistics + 809B Cuesta Dr., #2149 + Mountain View, CA 94040 + USA + Phone: +1 650 694-4949 + Fax: +1 650 694-4953 + Email: + WWW: http://www.cylogistics.com/ * Ingram Micro + 1600 E. St. Andrew Place + Santa Ana, CA 92705-4926 + USA + Phone: 1 (800) 456-8000 + WWW: http://www.ingrammicro.com/ * Kudzu, LLC + 7375 Washington Ave. S. + Edina, MN 55439 + USA + Phone: +1 952 947-0822 + Fax: +1 952 947-0876 + Email: * LinuxCenter.Kz + Ust-Kamenogorsk + Kazakhstan + Phone: +7-705-501-6001 + Email: + WWW: http://linuxcenter.kz/page.php?page=fr * LinuxCenter.Ru + Galernaya Street, 55 + Saint-Petersburg + 190000 + Russia + Phone: +7-812-3125208 + Email: + WWW: http://linuxcenter.ru/freebsd * Navarre Corp + 7400 49th Ave South + New Hope, MN 55428 + USA + Phone: +1 763 535-8333 + Fax: +1 763 535-0341 + WWW: http://www.navarre.com/ [[mirrors-ftp]] == FTP 站点 官方的 FreeBSD 源代码可以从遍布全球的镜像站点 通过匿名 FTP 下载。 站点 link:ftp://ftp.FreeBSD.org/pub/FreeBSD/[ftp://ftp.FreeBSD.org/pub/FreeBSD/] 有着良好的网络连接并且允许大量的并发连接, 但是 您或许更想找一个 "更近的" 镜像站点 (特别是当您想进行某种形式的镜像的时候)。 FreeBSD 可以从下面这些镜像站点通过匿名 FTP 下载。如果您选择了通过匿名 FTP 获取 FreeBSD, 请尽量使用离您比较近的站点。被列为 "主镜像站点" 的镜像站点一般都有完整的 FreeBSD 文件 (针对每种体系结构的所有当前可用的版本), 您或许从您所在的国家或地区的站点下载会得到更快的下载速度。 每个站点提供了最流行的体系结构的最近的版本而有可能不提供完整的 FreeBSD 存档。所有的站点都提供匿名 FTP 访问而有些站点也提供其他的访问方式。对每个站点可用的访问方式 在其主机名后有所说明。 <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>, <>. (as of UTC) [[central]] *{central}* {central-ftp} (ftp / ftpv6 / {central-http} / {central-httpv6}) [[primary]] *{mirrors-primary}* In case of problems, please contact the hostmaster `<{mirrors-primary-email}>` for this domain. * {mirrors-primary-ftp1} (ftp) * {mirrors-primary-ftp2} (ftp) * {mirrors-primary-ftp3} (ftp) * {mirrors-primary-ftp4} (ftp / ftpv6 / {mirrors-primary-ftp4-http} / {mirrors-primary-ftp4-httpv6}) * {mirrors-primary-ftp5} (ftp) * {mirrors-primary-ftp6} (ftp) * {mirrors-primary-ftp7} (ftp) * {mirrors-primary-ftp10} (ftp / ftpv6 / {mirrors-primary-ftp10-http} / {mirrors-primary-ftp10-httpv6}) * {mirrors-primary-ftp11} (ftp) * {mirrors-primary-ftp13} (ftp) * {mirrors-primary-ftp14} (ftp / {mirrors-primary-ftp14-http}) [[armenia]] *{mirrors-armenia}* In case of problems, please contact the hostmaster `<{mirrors-armenia-email}>` for this domain. * {mirrors-armenia-ftp} (ftp / {mirrors-armenia-ftp-http} / rsync) [[australia]] *{mirrors-australia}* In case of problems, please contact the hostmaster `<{mirrors-australia-email}>` for this domain. * {mirrors-australia-ftp} (ftp) * {mirrors-australia-ftp2} (ftp) * {mirrors-australia-ftp3} (ftp) [[austria]] *{mirrors-austria}* In case of problems, please contact the hostmaster `<{mirrors-austria-email}>` for this domain. * {mirrors-austria-ftp} (ftp / ftpv6 / {mirrors-austria-ftp-http} / {mirrors-austria-ftp-httpv6}) [[brazil]] *{mirrors-brazil}* In case of problems, please contact the hostmaster `<{mirrors-brazil-email}>` for this domain. * {mirrors-brazil-ftp2} (ftp / {mirrors-brazil-ftp2-http}) * {mirrors-brazil-ftp3} (ftp / rsync) * {mirrors-brazil-ftp4} (ftp) [[czech-republic]] *{mirrors-czech}* In case of problems, please contact the hostmaster `<{mirrors-czech-email}>` for this domain. * {mirrors-czech-ftp} (ftp / {mirrors-czech-ftpv6} / {mirrors-czech-ftp-http} / {mirrors-czech-ftp-httpv6} / rsync / rsyncv6) * {mirrors-czech-ftp2} (ftp / {mirrors-czech-ftp2-http}) [[denmark]] *{mirrors-denmark}* In case of problems, please contact the hostmaster `<{mirrors-denmark-email}>` for this domain. * {mirrors-denmark-ftp} (ftp / ftpv6 / {mirrors-denmark-ftp-http} / {mirrors-denmark-ftp-httpv6}) [[estonia]] *{mirrors-estonia}* In case of problems, please contact the hostmaster `<{mirrors-estonia-email}>` for this domain. * {mirrors-estonia-ftp} (ftp) [[finland]] *{mirrors-finland}* In case of problems, please contact the hostmaster `<{mirrors-finland-email}>` for this domain. * {mirrors-finland-ftp} (ftp) [[france]] *{mirrors-france}* In case of problems, please contact the hostmaster `<{mirrors-france-email}>` for this domain. * {mirrors-france-ftp} (ftp) * {mirrors-france-ftp1} (ftp / {mirrors-france-ftp1-http} / rsync) * {mirrors-france-ftp3} (ftp) * {mirrors-france-ftp5} (ftp) * {mirrors-france-ftp6} (ftp / rsync) * {mirrors-france-ftp7} (ftp) * {mirrors-france-ftp8} (ftp) [[germany]] *{mirrors-germany}* In case of problems, please contact the hostmaster `<{mirrors-germany-email}>` for this domain. * ftp://ftp.de.FreeBSD.org/pub/FreeBSD/ (ftp) * ftp://ftp1.de.FreeBSD.org/freebsd/ (ftp / http://www1.de.FreeBSD.org/freebsd/ / rsync://rsync3.de.FreeBSD.org/freebsd/) * ftp://ftp2.de.FreeBSD.org/pub/FreeBSD/ (ftp / http://ftp2.de.FreeBSD.org/pub/FreeBSD/ / rsync) * ftp://ftp4.de.FreeBSD.org/FreeBSD/ (ftp / http://ftp4.de.FreeBSD.org/pub/FreeBSD/) * ftp://ftp5.de.FreeBSD.org/pub/FreeBSD/ (ftp) * ftp://ftp7.de.FreeBSD.org/pub/FreeBSD/ (ftp / http://ftp7.de.FreeBSD.org/pub/FreeBSD/) [[greece]] *{mirrors-greece}* In case of problems, please contact the hostmaster `<{mirrors-greece-email}>` for this domain. * {mirrors-greece-ftp} (ftp) * {mirrors-greece-ftp2} (ftp) [[hong-kong]] *{mirrors-hongkong}* {mirrors-hongkong-ftp} (ftp) [[ireland]] *{mirrors-ireland}* In case of problems, please contact the hostmaster `<{mirrors-ireland-email}>` for this domain. * {mirrors-ireland-ftp} (ftp / rsync) [[japan]] *{mirrors-japan}* In case of problems, please contact the hostmaster `<{mirrors-japan-email}>` for this domain. * {mirrors-japan-ftp} (ftp) * {mirrors-japan-ftp2} (ftp) * {mirrors-japan-ftp3} (ftp) * {mirrors-japan-ftp4} (ftp) * {mirrors-japan-ftp5} (ftp) * {mirrors-japan-ftp6} (ftp) * {mirrors-japan-ftp7} (ftp) * {mirrors-japan-ftp8} (ftp) * {mirrors-japan-ftp9} (ftp) [[korea]] *{mirrors-korea}* In case of problems, please contact the hostmaster `<{mirrors-korea-email}>` for this domain. * {mirrors-korea-ftp} (ftp / rsync) * {mirrors-korea-ftp2} (ftp / {mirrors-korea-ftp2-http}) [[latvia]] *{mirrors-latvia}* In case of problems, please contact the hostmaster `<{mirrors-latvia-email}>` for this domain. * {mirrors-latvia-ftp} (ftp / {mirrors-latvia-ftp-http}) [[lithuania]] *{mirrors-lithuania}* In case of problems, please contact the hostmaster `<{mirrors-lithuania-email}>` for this domain. * {mirrors-lithuania-ftp} (ftp / {mirrors-lithuania-ftp-http}) [[netherlands]] *{mirrors-netherlands}* In case of problems, please contact the hostmaster `<{mirrors-netherlands-email}>` for this domain. * {mirrors-netherlands-ftp} (ftp / {mirrors-netherlands-ftp-http} / rsync) * {mirrors-netherlands-ftp2} (ftp) [[new-zealand]] *{mirrors-new-zealand}* * {mirrors-new-zealand-ftp} (ftp / {mirrors-new-zealand-ftp-http}) [[norway]] *{mirrors-norway}* In case of problems, please contact the hostmaster `<{mirrors-norway-email}>` for this domain. * {mirrors-norway-ftp} (ftp / rsync) [[poland]] *{mirrors-poland}* In case of problems, please contact the hostmaster `<{mirrors-poland-email}>` for this domain. * {mirrors-poland-ftp} (ftp) * ftp2.pl.FreeBSD.org [[russia]] *{mirrors-russia}* In case of problems, please contact the hostmaster `<{mirrors-russia-email}>` for this domain. * {mirrors-russia-ftp} (ftp / {mirrors-russia-ftp-http} / rsync) * {mirrors-russia-ftp2} (ftp / {mirrors-russia-ftp2-http} / rsync) * {mirrors-russia-ftp5} (ftp / {mirrors-russia-ftp5-http} / rsync) * {mirrors-russia-ftp6} (ftp) [[saudi-arabia]] *{mirrors-saudi-arabia}* In case of problems, please contact the hostmaster `<{mirrors-saudi-arabia-email}>` for this domain. * {mirrors-saudi-arabia-ftp} (ftp) [[slovenia]] *{mirrors-slovenia}* In case of problems, please contact the hostmaster `<{mirrors-slovenia-email}>` for this domain. * {mirrors-slovenia-ftp} (ftp) [[south-africa]] *{mirrors-south-africa}* In case of problems, please contact the hostmaster `<{mirrors-south-africa-email}>` for this domain. * {mirrors-south-africa-ftp} (ftp) * {mirrors-south-africa-ftp2} (ftp) * {mirrors-south-africa-ftp4} (ftp) [[spain]] *{mirrors-spain}* In case of problems, please contact the hostmaster `<{mirrors-spain-email}>` for this domain. * {mirrors-spain-ftp} (ftp / {mirrors-spain-ftp-http}) * {mirrors-spain-ftp3} (ftp) [[sweden]] *{mirrors-sweden}* In case of problems, please contact the hostmaster `<{mirrors-sweden-email}>` for this domain. * {mirrors-sweden-ftp} (ftp) * {mirrors-sweden-ftp2} (ftp / {mirrors-sweden-ftp2-rsync}) * {mirrors-sweden-ftp3} (ftp) * {mirrors-sweden-ftp4} (ftp / {mirrors-sweden-ftp4v6} / {mirrors-sweden-ftp4-http} / {mirrors-sweden-ftp4-httpv6} / {mirrors-sweden-ftp4-rsync} / {mirrors-sweden-ftp4-rsyncv6}) * {mirrors-sweden-ftp6} (ftp / {mirrors-sweden-ftp6-http}) [[switzerland]] *{mirrors-switzerland}* In case of problems, please contact the hostmaster `<{mirrors-switzerland-email}>` for this domain. * {mirrors-switzerland-ftp} (ftp / {mirrors-switzerland-ftp-http}) [[taiwan]] *{mirrors-taiwan}* In case of problems, please contact the hostmaster `<{mirrors-taiwan-email}>` for this domain. * {mirrors-taiwan-ftp} (ftp / {mirrors-taiwan-ftpv6} / rsync / rsyncv6) * {mirrors-taiwan-ftp2} (ftp / {mirrors-taiwan-ftp2v6} / {mirrors-taiwan-ftp2-http} / {mirrors-taiwan-ftp2-httpv6} / rsync / rsyncv6) * {mirrors-taiwan-ftp4} (ftp) * {mirrors-taiwan-ftp5} (ftp) * {mirrors-taiwan-ftp6} (ftp / {mirrors-taiwan-ftp6v6} / rsync) * {mirrors-taiwan-ftp7} (ftp) * {mirrors-taiwan-ftp8} (ftp) * {mirrors-taiwan-ftp11} (ftp / {mirrors-taiwan-ftp11-http}) * {mirrors-taiwan-ftp12} (ftp) * {mirrors-taiwan-ftp13} (ftp) * {mirrors-taiwan-ftp14} (ftp) * {mirrors-taiwan-ftp15} (ftp) [[ukraine]] *{mirrors-ukraine}* * {mirrors-ukraine-ftp} (ftp / {mirrors-ukraine-ftp-http}) * {mirrors-ukraine-ftp6} (ftp / {mirrors-ukraine-ftp6-http} / {mirrors-ukraine-ftp6-rsync}) * {mirrors-ukraine-ftp7} (ftp) [[uk]] *{mirrors-uk}* In case of problems, please contact the hostmaster `<{mirrors-uk-email}>` for this domain. * {mirrors-uk-ftp} (ftp) * {mirrors-uk-ftp2} (ftp / {mirrors-uk-ftp2-rsync}) * {mirrors-uk-ftp3} (ftp) * {mirrors-uk-ftp4} (ftp) * {mirrors-uk-ftp5} (ftp) [[usa]] *{mirrors-us}* In case of problems, please contact the hostmaster `<{mirrors-us-email}>` for this domain. * {mirrors-us-ftp} (ftp) * {mirrors-us-ftp2} (ftp) * {mirrors-us-ftp3} (ftp) * {mirrors-us-ftp4} (ftp / ftpv6 / {mirrors-us-ftp4-http} / {mirrors-us-ftp4-httpv6}) * {mirrors-us-ftp5} (ftp) * {mirrors-us-ftp6} (ftp) * {mirrors-us-ftp8} (ftp) * {mirrors-us-ftp10} (ftp) * {mirrors-us-ftp11} (ftp) * {mirrors-us-ftp13} (ftp / {mirrors-us-ftp13-http} / rsync) * {mirrors-us-ftp14} (ftp / {mirrors-us-ftp14-http}) * {mirrors-us-ftp15} (ftp) [[anoncvs]] == 匿名 CVS [[anoncvs-intro]] === 概述 匿名 CVS(或人们常说的 _anoncvs_)是由和 FreeBSD 附带的 CVS 实用工具提供的用于和远程的 CVS 代码库同步的一种特性。 尤其是, 它允许 FreeBSD 用户不需要特殊的权限对任何一台 FreeBSD 项目的官方 anoncvs 服务器执行只读的 CVS 操作。 要使用它,简单的设置 `CVSROOT` 环境变量指向适当的 anoncvs 服务器, 输入 `cvs login` 命令 并提供广为人知的密码"anoncvs",然后使用 man:cvs[1] 命令像访问任何本地仓库一样来访问它。 [NOTE] ==== `cvs login` 命令把用来登录 CVS 服务器的密码储存在您的 `HOME` 目录中一个叫 [.filename]#.cvspass# 的文件里。 如果这个文件不存在, 第一次使用 `cvs login` 的时候可能会出错。 请创建一个空的 [.filename]#.cvspass# 文件,然后试试重新登录。 ==== 也可以这么说 <> 和 _anoncvs_ 服务本质上提供了同样的功能,但是有各种各样 不同的场合可以影响用户对同步方式的选择。简单来说, CVSup 在网络资源利用方面 更加有效,而且是到目前为止在两者之中技术上更成熟的 除了成本方面。要使用 CVSup,在下载任何东西之前 必须首先安装配置特定的客户端, 而且只能用于下载相当大块的 CVSup 称作 _collections_。 相比之下,anoncvs 可以通过 CVS 模块名来从单个文件里检出任何东西并赋给特定的程序 (比如 `ls` 或者 `grep`)。 当然,anoncvs 也只适用于对 CVS 仓库的只读操作,所以如果您是想用和 FreeBSD 项目共享的仓库提供本地开发的话, CVSup 几乎是您唯一的选择。 [[anoncvs-usage]] === 使用匿名 CVS 配置 man:cvs[1] 使用匿名 CVS 仓库可以简单的设定 `CVSROOT` 环境变量指向 FreeBSD 项目的 _anoncvs_ 服务器之一。 到此书写作为止, 下面的服务器都是可用的: * _法国_: :pserver:anoncvs@anoncvs.fr.FreeBSD.org:/home/ncvs (使用 pserver 模式时, 用 `cvs login` 配合口令 "anoncvs" 来登录。 如果使用的是 ssh, 则不需要口令。) * __台湾__地区: :pserver:anoncvs@anoncvs.tw.FreeBSD.org:/home/ncvs (使用 pserver 模式时, 用 `cvs login` 配合口令 "anoncvs" 来登录。 如果使用的是 ssh, 则不需要口令。) + [.programlisting] .... SSH2 HostKey: 1024 02:ed:1b:17:d6:97:2b:58:5e:5c:e2:da:3b:89:88:26 /etc/ssh/ssh_host_rsa_key.pub SSH2 HostKey: 1024 e8:3b:29:7b:ca:9f:ac:e9:45:cb:c8:17:ae:9b:eb:55 /etc/ssh/ssh_host_dsa_key.pub .... * _美国_: anoncvs@anoncvs1.FreeBSD.org:/home/ncvs (使用 ssh 时, 请使用协议版本 2, 不需要口令。) + [.programlisting] .... SSH2 HostKey: 2048 53:1f:15:a3:72:5c:43:f6:44:0e:6a:e9:bb:f8:01:62 /etc/ssh/ssh_host_dsa_key.pub .... 因为 CVS 实际上允许 "检出" 曾经存在的 (或者,某种情况下将会存在) FreeBSD 源代码的任意版本, 您需要熟悉 man:cvs[1] 的版本 (`-r`) 参数, 以及在 FreeBSD 代码库中可用的值。 有两种标签,修订标签和分支标签。 修订标签特指一个特定的修订版本。含义始终是不变的。 分支标签,另一方面, 指代给定时间给定开发分支的最新修订, 因为分支标签不涉及特定的修订版本, 它明天所代表的含义就可能和今天的不同。 <> 包括了用户可能感兴趣的 修订标签。 请注意, 这些标签并不适用于 Ports Collection, 因为它并不包含多个开发分支。 当您指定一个分支标签,您通常会得到那个开发分支的文件的最新版本。 如果您希望得到一些旧的版本,您可以用 `-D date` 标记制定一个日期。 察看 man:cvs[1] 手册页了解更多细节。 === 示例 在这之前强烈建议您通读 man:cvs[1] 的手册页, 这里有一些简单的例子来展示如何使用匿名 CVS: .从 -CURRENT 检出些东西 (man:ls[1]): [example] ==== [source,shell] .... % setenv CVSROOT :pserver:anoncvs@anoncvs.tw.FreeBSD.org:/home/ncvs % cvs login >在提示符处,输入任意密码 “password”. % cvs co ls .... ==== .通过 SSH 检出整个 [.filename]#src/# 代码树: [example] ==== [source,shell] .... % cvs -d anoncvs@anoncvs1.FreeBSD.org:/home/ncvs co src The authenticity of host 'anoncvs1.freebsd.org (216.87.78.137)' can't be established. DSA key fingerprint is 53:1f:15:a3:72:5c:43:f6:44:0e:6a:e9:bb:f8:01:62. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'anoncvs1.freebsd.org' (DSA) to the list of known hosts. .... ==== .检出 8-STABLE 分支中的 man:ls[1] 版本: [example] ==== [source,shell] .... % setenv CVSROOT :pserver:anoncvs@anoncvs.tw.FreeBSD.org:/home/ncvs % cvs login 在提示符处,输入任意密码 “password”。 % cvs co -rRELENG_8 ls .... ==== .创建 man:ls[1] 的变化列表(用标准的 diff) [example] ==== [source,shell] .... % setenv CVSROOT :pserver:anoncvs@anoncvs.tw.FreeBSD.org:/home/ncvs % cvs login 在提示符处,输入任意密码 “password”。 % cvs rdiff -u -rRELENG_8_0_0_RELEASE -rRELENG_8_1_0_RELEASE ls .... ==== .找出可以使用的其它的模块名: [example] ==== [source,shell] .... % setenv CVSROOT :pserver:anoncvs@anoncvs.tw.FreeBSD.org:/home/ncvs % cvs login 在提示符处,输入任意密码 “password”。 % cvs co modules % more modules/modules .... ==== === 其他资源 下面附加的资源可能对学习 CVS 有帮助: * http://users.csc.calpoly.edu/~gfisher/classes/308/handouts/cvs-basics.html[CVS 教程], 来自加州州立理工大学。 * http://ximbiot.com/cvs/wiki/[CVS 主页], CVS 开发和支持社区。 * http://www.FreeBSD.org/cgi/cvsweb.cgi[CVSweb] 是 FreeBSD 项目的 CVS web 界面。 [[ctm]] == 使用 CTM CTM 是保持远程目录树和中央服务器目录树同步的一种方法。 它被开发用于 FreeBSD 的源代码树,虽然其他人随着时间推移会发现它可以用于其他目的。 当前几乎没有,也或者只有很少的文档讲述创建 deltas 的步骤, 所以如果您希望使用 CTM 去做其它事情, 请联系 link:{ctm-users-url}[ctm-users-desc] 邮件列表了解更多信息。 === 为什么我该使用 CTM? CTM 会给您一份 FreeBSD 源代码树的本地副本。 代码树有很多的 "flavors" 可用。不管您是希望跟踪完整的 CVS 树还是只是一个分支, CTM 都会给您提供信息。 如果您是 FreeBSD 上的一个活跃的开发者,但是缺乏或者不存在 TCP/IP 连接,或者只是希望把变化自动发送给您, CTM 就是适合您的。对于最积极的分支 您将会每天获得三个以上的 deltas。 然而,您应该考虑通过邮件来自动发送。 升级的大小总是保证尽可能的小。 通常小于 5K,也偶然(十分之一可能)会有 10-50K,也不时地有个大的 100K+ 甚至更大的。 您也需要让自己了解直接和开发代码而不是预发行版本打交道的各种警告。这种情况会很显著, 如果您选择了 "current" 代码的话。强烈建议您阅读crossref:cutting-edge[current,和 FreeBSD 保持同步]。 === 使用 CTM 我需要做什么? 您需要两样东西:CTM 程序,还有初始的 deltas 来 feed it(达到 "current" 级别)。 CTM 程序从版本 2.0 发布以来 已经是 FreeBSD 的一部分了,如果您安装了源代码副本的话, 它位于 [.filename]#/usr/src/usr.sbin/ctm#。 您喂给 CTM 的 "deltas" 可以有两种方式,FTP 或者 email。 如果您有普通的访问 Internet 的 FTP 权限, 那么下面的 FTP 站点支持访问 CTM: link:ftp://ftp.FreeBSD.org/pub/FreeBSD/CTM/[ftp://ftp.FreeBSD.org/pub/FreeBSD/CTM/] 或者看看这一小节<>。 FTP 访问相关的目录并取得 [.filename]#README# 文件,从那里开始。 如果您希望通过 email 得到您的 deltas: 订阅一个 CTM 分发列表。 link:{ctm-src-cur-url}[ctm-src-cur-desc] 支持最新的开发分支。 link:{ctm-src-7-url}[ctm-src-7-desc] 支持 7.X 发行分支, 等等。。(如果您不知道如何订阅邮件列表, 点击上面的列表名或者到 {mailing-lists-url} 点击您希望订阅的列表。 列表页包含了所有必要的订阅指导。) 当您开始接收到您邮件中的 CTM 升级时,您可以使用 `ctm_rmail` 程序来解压并应用它们。 事实上如果您想要让进程以全自动的形式运行的话,您可以通过在 [.filename]#/etc/aliases# 中设置直接使用 `ctm_rmail` 程序。 查看 `ctm_rmail` 手册页了解更多细节。 [NOTE] ==== 不管您使用什么方法得到 CTM deltas,您都应该订阅 link:{ctm-announce-url}[ctm-announce-desc] 邮件列表。 以后会有单独的地方提交有关 CTM 系统的操作的公告。 点击上面的邮件列表名并按照指示订阅邮件列表。 ==== === 第一次使用 CTM 在您开始使用 CTM delta 之前,您需要获得一个起始点。 首先您应该确定您已经有了什么。每个人都可以从一个"空"目录开始。 您必须用一个初始的 "空的" delta 来开始您的 CTM 支持树。曾经为了您的便利这些 "起始" deltas 被有意的通过 CD 来发行, 然而现在已经不这样做了。 因为代码树有数十兆字节,您应该更喜欢从手头上已经有的东西开始。如果您有一张 -RELEASE CD 光盘,您可以从里面复制或者解压缩一份初始代码出来。 这会节省非常多的数据传输量。 您会发现这些"初始的" deltas 名字的数字后面都有个 `X` (比如 [.filename]#src-cur.3210XEmpty.gz#)。 后面加一个 `X` 的设计符合您的初始 "seed" 的由来。 [.filename]#Empty# 是一个空目录。通常一个基本的从 `Empty` 开始的转换由 100 个 deltas 构成。顺便说一下,他们都很大!70 到 80 兆字节的 `gzip` 压缩的数据对于 [.filename]#XEmpty# deltas 是很平常的。 一旦您已经选定了一个基本的 delta 开始,您就需要比这个数高的所有的 delta。 === 在您的日常生活中使用 CTM 要应用 deltas,简单的键入: [source,shell] .... # cd /where/ever/you/want/the/stuff # ctm -v -v /where/you/store/your/deltas/src-xxx.* .... CTM 能够理解被 `gzip` 压缩的 deltas,所以您不需要先 `gunzip` 他们,这可以节省磁盘空间。 除非觉得整个过程非常可靠, CTM 不会涉及到您的代码树的。您也可以使用 `-c` 标记来校验 delta, 这样 CTM 就不会涉及代码树; 它会只校验 delta 的完整性看看是否可以安全的用于您的当前代码树。 CTM 还有其他的一些参数, 查看手册页或者源代码了解更多信息。 这真的就是全部的事情了。每次得到一个新的 delta,就通过 CTM 运行它来保证您的代码是最新的。 如果这些 deltas 很难重新下载的话不要删除它们。 有些东西坏掉的时候您会想到保留它们的。 即使您只有软盘,也请考虑使用 `fdwrite` 来做一份副本。 === 维持您本地的变动 作为一名开发者喜欢实验,改动代码树中的文件。 CTM 用一种受限的方式支持本地修改:再检查文件 [.filename]#foo# 存在之前,首先查找 [.filename]#foo.ctm#。如果这个文件存在, CTM 会对它操作而不是 [.filename]#foo#。 这种行为给我们提供了一种简单的方式来维持本地的改动: 只要复制您计划修改的文件并用 [.filename]#.ctm# 的后缀重新命名。 然后就可以自由的修改代码了,CTM 会更新 [.filename]#.ctm# 文件到最新版本。 === 其他有趣的 CTM 选项 ==== 正确的找出哪些将被更新 您可以确定变动列表, CTM 可以做到,在您的代码库上使用 CTM 的 `-l` 选项。 这很有用如果您想要保存改动的日志, pre- 或者 post- 用各种风格处理修改的文件的纪录, 或者仅仅是想感受一下孩子般的疯狂。 ==== 在升级前制作备份 有时您可能想备份将要被 CTM 升级所改动的所有文件。 指定 `-B backup-file` 选项会导致 CTM 备份将要被给定的 CTM delta 改动的所有文件到 [.filename]#backup-file#。 ==== 限定受升级影响的文件 有时您可能对限定一个给定的 CTM 升级的范围感兴趣,也有可能想知道怎样从一列 deltas 中解压缩一部分文件。 您可以通过使用 `-e` 和 `-x` 选项指定过滤规则表达式来控制 CTM 即将对之操作的文件列表。 例如,要从您保存的CTM deltas 集里解压缩出一个最新的 [.filename]#lib/libc/Makefile# 文件,运行这个命令: [source,shell] .... # cd /where/ever/you/want/to/extract/it/ # ctm -e '^lib/libc/Makefile' ~ctm/src-xxx.* .... 对于每一个在 CTM delta 中指定的文件,`-e` 和 `-x` 选项按照命令行给定的顺序应用。 文件只有在所有的 `-e` 和 `-x` 被应用之后标记为合格之后 才能被 CTM 操作。 === CTM 未来的计划 其中几项: * 在 CTM 中使用一些认证方式, 这样来允许察觉冒充的 CTM 补丁。 * 整理 CTM 的选项, 它们变得杂乱而违反直觉了。 === 杂项 也有一系列的 `ports` collection 的 deltas,但是人们对它的兴致还没有那么高。 [[mirrors-ctm]] === CTM 镜像 <>/FreeBSD 可以在下面的镜像站点通过匿名 FTP 下载。如果您选择通过匿名 FTP 获取 CTM, 请试着使用一个离您较近的站点。 如果有问题,请联系 link:{ctm-users-url}[ctm-users-desc] 邮件列表。 加利福尼亚州,旧金山湾区,官方源代码:: ** link:ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CTM/[ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CTM/] 南非,旧的 deltas 的备份服务器:: ** link:ftp://ftp.za.FreeBSD.org/pub/FreeBSD/CTM/[ftp://ftp.za.FreeBSD.org/pub/FreeBSD/CTM/] 中国台湾:: ** link:ftp://ctm.tw.FreeBSD.org/pub/FreeBSD/development/CTM/[ftp://ctm.tw.FreeBSD.org/pub/FreeBSD/development/CTM/] ** link:ftp://ctm2.tw.FreeBSD.org/pub/FreeBSD/development/CTM/[ftp://ctm2.tw.FreeBSD.org/pub/FreeBSD/development/CTM/] ** link:ftp://ctm3.tw.FreeBSD.org/pub/FreeBSD/development/CTM/[ftp://ctm3.tw.FreeBSD.org/pub/FreeBSD/development/CTM/] 如果您在您附近找不到镜像或者镜像不完整, 试着使用搜索引擎比如 http://www.alltheweb.com/[alltheweb]. [[cvsup]] == 使用 CVSup [[cvsup-intro]] === 概述 CVSup 是一个用于从远程服务器主机上的主 CVS 仓库发布和升级源代码树的软件包。 FreeBSD 的源代码维护在加利福尼亚州一台主开发服务器的 CVS 仓库里。 有了 CVSup, FreeBSD 用户可以很容易的保持他们自己的源代码树更新。 CVSup 使用所谓的升级 _pull_ 模式。在 pull 模式下,客户端在需要的时候向服务器端请求更新。 服务器被动的等待客户端的升级请求。 因此所有的升级都是客户端发起的。 服务器决不会发送未请求的升级。用户必须手动运行 CVSup 客户端获取更新, 或者设置一个 `cron` 作业来让它以固定的规律自动运行。 术语 CVSup用大写字母写正是表示, 代表了完整的软件包。 它的主要组件是运行在每个用户机器上的客户端 `cvsup`, 和运行在每个 FreeBSD 镜像站点上的服务器端 `cvsupd`。 当您阅读 FreeBSD 文档和邮件列表时,您可能会看见 sup。 Sup 是 CVSup 的前身,有着相似的目的。 CVSup 使用很多和 sup 相同的方式, 而且, 它还是用使用和 `sup` 的兼容的配置文件。 Sup 已经不再被 FreeBSD 项目使用了, 因为 CVSup 既快又有更好的灵活性。 [NOTE] ==== csup 是用 C 语言对 CVSup 软件的重写。 它最大的好处是, 这个程序更快一些, 并且也不需要依赖于 Modula-3 语言, 因此也就不需要安装后者。 另外, 您可以直接使用它, 因为它是基本系统的一部分。 假如您决定使用 csup, 则可以跳过安装 CVSup 这一步, 并在文章中余下部分提到的 CVSup 改为 csup。 ==== [[cvsup-install]] === 安装 安装 CVSup 最简单的方式就是使用 FreeBSD crossref:ports[ports,packages collection] 中预编译的 package:net/cvsup[] 包。 如果您想从源代码构建 CVSup, 您可以使用 package:net/cvsup[] port。但是预先警告一下: package:net/cvsup[] port 依赖于 Modula-3 系统,会花费相当的时间和磁盘空间来下载编译。 [NOTE] ==== 如果想在没有安装 Xorg 的计算机, 例如服务器上使用 CVSup, 则只能使用不包含 CVSupGUI 的 package:net/cvsup-without-gui[]。 ==== [[cvsup-config]] === CVSup 配置 CVSup 的操作被一个叫做 [.filename]#supfile# 的配置文件所控制。 在目录 link:file://localhost/usr/shared/examples/cvsup/[/usr/shared/examples/cvsup/] 下面有一些示例的 [.filename]#supfiles#。 [.filename]#supfile# 中的信息解答了 CVSup 下面的几个问题: * <> * <> * <> * <> * <> 在下面的章节里,我们通过依次回答这些问题来创建一个典型的 [.filename]#supfile# 文件。首先,我们描述一下 [.filename]#supfile# 的整体构成。 [.filename]#supfile# 是个文本文件。注释用 `#` 开头,至行尾有效。 空行和只包含注释的行会被忽略。 每个保留行描述一批用户希望接收的文件。 每行以 "collection", 由服务器端定义的合理的文件分组,的名字开头。 collection 的名字告诉服务器您想要的文件。 collection 名字结束或者有更多的字段,用空格分隔。 这些字段回答了上面列出的问题。 字段类型有两种:标记字段和值字段。 标记字段由独立的关键字组成,比如, `delete` 或者 `compress`。值字段也用关键字开头, 关键字后面跟 `=` 和第二个词而没有空格。 例如,`release=cvs` 是一个值字段。 一个典型的 [.filename]#supfile# 往往接收多于一个的 collection。创建 [.filename]#supfile# 的一种方式是明确的为每一个 collection 指定相关的字段。然而,这样使得 [.filename]#supfile# 的行变得特别长,很不方便, 因为 [.filename]#supfile# 中的所有 collection 的大部分 字段都是相同的。 CVSup 提供了一个默认机制来避免 这些问题。用特定的伪 collection 名 `*default` 开头的行可以被用来设置标记和值为 [.filename]#supfile# 中随后的 collection 中的默认值。 默认值可以通过为这个 collection 自身指定不同的值来对单个的 collection 覆盖设置, 也可以在 mid-supfile 中通过附加的 `*default` 行改变或扩充。 知道了这些,我们现在就可以开始创建一个 用于接收和升级 crossref:cutting-edge[current,FreeBSD-CURRENT] 主源代码树的 [.filename]#supfile# 文件了。 * [[cvsup-config-files]]您想接收哪些文件? + 通过 CVSup 可用的文件组织成叫做 "collections" 的名称组。 这些可用的 collection 在 <> 中描述。 在这个例子里, 我们希望接收 FreeBSD 系统的完整的主代码树。 有一个单独的大的 collection `src-all` 让我们完成这个。 创建我们的 [.filename]#supfile# 的第一步, 我们简单的列出这些 collection,每个一行(在这个例子里, 只有一行): + [.programlisting] .... src-all .... * [[cvsup-config-vers]]您想要他们的 哪个版本? + 通过 CVSup,您实际上可以接收 曾经存在的源代码的任何版本。 这是有可能的,因为 cvsupd 服务器直接通过 CVS 仓库工作,那包含了所有的版本。您可以 用 `tag=` 和 `date=` 值字段 指定一个您想要的版本。 + [WARNING] ==== 仔细的正确指定任何 `tag=` 字段。有一些 tag 只对特定的 collection 文件合法。 如果您指定了一个不正确的或者 拼写错误的 tag,CVSup 会删除您可能不想删除的文件。 特别地,对 `ports-*` collection __只__使用 `tag=.`。 ==== + `tag=` 字段在仓库中表示为一个符号标签。 有两种标签,修订标签和分支标签。 修订标签代表一个特定的修订版本。 它的含义是一成不变的。 分支标签,另一方面,代表给定开发线上给定时间的最新修订。 因为分支标签不代表一个特定的修订版本, 它明天的含义就可能和今天的有所不同。 + <> 包含了用户可能感兴趣的分支标签。 当在 CVSup 的配置文件中指定标签的时候,必须用 `tag=` 开头 (`RELENG_8` 会变成 `tag=RELENG_8`)。 记住只有 `tag=.` 可以用于 Ports Collection。 + [WARNING] ==== 注意像看到的那样正确的输入标签名。 CVSup 不能辨别合法和不合法标签。 如果您拼写错了标签名, CVSup 会像您指定了一个没有任何文件的合法标签一样工作, 那会删除您已经存在的代码。 ==== + 当您指定一个分支标签的时候,您通常会收到开发线上文件的最新版本。 如果您希望接收一些过时的版本,您可以通过用 `date=` 值字段指定一个日期来做到。 man:cvsup[1] 手册页解释了如何来做。 + 对于我们的示例来说,我们希望接收 FreeBSD-CURRENT。 我们在我们的 [.filename]#supfile# 的开头添加这行: + [.programlisting] .... *default tag=. .... + 有一个重要的特例, 如果您既没指定 `tag=` 字段也没指定 `date=` 字段的情况。这种情况下, 您会收到直接来自于服务器 CVS 仓库的真实的 RCS 文件, 而不是某一特定版本。 开发人员一般喜欢这种操作模式。 通过在他们的系统上维护一份仓库自身的副本, 他们可以浏览修订历史以及检查文件过去的版本。 然而,这个好处是以大量的磁盘空间为代价的。 * [[cvsup-config-where]]您想从哪里获取他们? + 我们使用 `host=` 字段来告诉 `cvsup` 从哪里获取更新。 任何一个 <>都可以, 虽然您应该选择一个离您比较近的站点。 在这个例子里我们将使用一个虚拟的 FreeBSD 发布站点, `cvsup99.FreeBSD.org`: + [.programlisting] .... *default host=cvsup99.FreeBSD.org .... + 您需要在运行 CVSup 之前把这个改成一个实际存在的站点。 在任何 `cvsup` 运行的特定时刻, 您都可以在命令行上使用 `-h _hostname_` 选项来覆盖主机设置。 * [[cvsup-config-dest]]您想把它们放在 您自己机器的什么地方? + `prefix=` 字段告诉 `cvsup` 把接收的文件放在哪里。 在这个例子里,我们把源代码文件直接放进我们的主源代码树, [.filename]#/usr/src#。 [.filename]#src# 目录已经隐含在我们选择接收的 collection 里了, 所以正确的写法是: + [.programlisting] .... *default prefix=/usr .... * [[cvsup-config-status]]`cvsup` 在哪里维护它的状态文件? + CVSup 客户端在被叫做 "base" 的目录里维护了几个状态文件。 这些文件帮助 CVSup 更有效的工作, 通过跟踪您已经接收到哪些更新的方式。 我们将使用标准的 base 目录, [.filename]#/var/db#: + [.programlisting] .... *default base=/var/db .... + 如果您的 base 目录还不存在,现在最好创建它。 如果 base 目录不存在,`cvsup` 客户端会拒绝工作。 * 其他的 [.filename]#supfile# 设置: + 在 [.filename]#supfile# 中有一些其他选项需要介绍一下: + [.programlisting] .... *default release=cvs delete use-rel-suffix compress .... + `release=cvs` 显示服务器应该从 FreeBSD 的主 CVS 仓库中获取信息。 事实上总是这样的,但是也有可能会超出这个讨论的范围。 + `delete` 给 CVSup 权限删除文件。 您应该总是指定这个,这样 CVSup 可以保证您的源代码树完全更新。CVSup 很小心的只删除那些不再依赖的文件。 您拥有的任何额外的文件会被严格的保留。 + `use-rel-suffix` 是 ... 不可思议的。 如果您真的想了解它,查看 man:cvsup[1] 手册页。 否则,就指定而不用担心这个。 + `compress` 启用 gzip 风格的信道压缩。 如果您的网络连接是 T1 或者更快, 您可能不想使用压缩。 否则,它非常有帮助。 * 把它们放在一起: + 这是我们的示例的完整 [.filename]#supfile# 文件: + [.programlisting] .... *default tag=. *default host=cvsup99.FreeBSD.org *default prefix=/usr *default base=/var/db *default release=cvs delete use-rel-suffix compress src-all .... [[cvsup-refuse-file]] ==== [.filename]#refuse# 文件 像上面提到的,CVSup 使用一种 _pull 方法_。基本上,这意味着您要连接到 CVSup 服务器,服务器说, "这有些您能下载的东西 ...",然后您的客户端反应"好,我要这个, 这个,这个,还有这个。"在默认的配置中, CVSup 客户端会取回您在配置文件中选定的 collection 和标签的每个文件。 然而,并不总是您想要的, 尤其是您在同步 [.filename]#doc#,[.filename]#ports#,或者 [.filename]#www# 树 - 大部分人都不能阅读四种或者五种 语言,因此他们不需要下载特定语言的文件。 如果您在 CVSup Ports Collection,您 可以通过单独指定每个 collection 来避免这个 (比如,_ports-astrology_, _ports-biology_,等等取代简单的说明 _ports-all_)。然而,因为 [.filename]#doc# 和 [.filename]#www# 树没有特定语言的 collection,您必须 使用 CVSup 许多极好的特性之一: [.filename]#refuse# 文件。 [.filename]#refuse# 文件本质上是告诉 CVSup 它不应该从 collection 中取得某些文件;换句话说,它告诉客户端 _拒绝_ 来自服务器的特定的文件。 [.filename]#refuse# 文件可以在 [.filename]#base/sup/# 中找到(或者,如果您没有,应该创建一个)。 _base_ 在您的 [.filename]#supfile# 中定义; 默认情况下,_base_ 就是 [.filename]#/var/db#, 这意味着默认的 [.filename]#refuse# 文件就是 [.filename]#/var/db/sup/refuse#。 [.filename]#refuse# 文件的格式很简单; 它仅仅包含您不希望下载的文件和目录名。 例如,如果您除了英语和德语之外不会讲其他语言, 而且也不打算阅读德文的文档翻译版本, 则可以把下面这些放在您的 [.filename]#refuse# 文件里: [source,shell] .... doc/bn_* doc/da_* doc/de_* doc/el_* doc/es_* doc/fr_* doc/hu_* doc/it_* doc/ja_* doc/mn_* doc/nl_* doc/no_* doc/pl_* doc/pt_* doc/ru_* doc/sr_* doc/tr_* doc/zh_* .... 等等其他语言(您可以通过浏览 http://www.FreeBSD.org/cgi/cvsweb.cgi/[FreeBSD CVS 仓库]找到完整的列表)。 有这个非常有用的特性,那些慢速连接或者要为他们的 Internet 连接按时付费的用户就可以节省宝贵的时间因为他们不再需要 下载那些从来不用的文件。要了解 [.filename]#refuse# 文件的更多信息以及其它 CVSup 的优雅的特性,请浏览它的 手册页。 === 运行 CVSup 您现在准备尝试升级了。命令很简单: [source,shell] .... # cvsup supfile .... [.filename]#supfile# 的位置当然就是您刚刚创建的 [.filename]#supfile# 文件名啦。 如果您在 X11 下面运行,`cvsup` 会显示一个有一些可以做平常事情的按钮的 GUI 窗口。 按 btn:[go] 按钮,然后看着它运行。 在这个例子里您将要升级您目前的 [.filename]#/usr/src# 树,您将需要 用 `root` 来运行程序,这样 `cvsup` 有需要的权限来更新您的文件。 刚刚创建了您的配置文件,又从来没有使用过这个程序, 紧张不安是可以理解的。有一个简单的方法不改变您当前的文件 来做一次试验性的运行。只要在方便的地方创建一个 空目录,并在命令行上作为一个额外的参数说明: [source,shell] .... # mkdir /var/tmp/dest # cvsup supfile /var/tmp/dest .... 您指定的目录会作为所有文件更新的目的路径。 CVSup 会检查您在 [.filename]#/usr/src# 中的文件,但是不会修改或 删除。任何文件更新都会被放到 [.filename]#/var/tmp/dest/usr/src# 里了。 在这种方式下运行 CVSup 也会把它的 base 目录状态文件保持原样。这些文件的新版本 会被写到指定的目录。 因为您有 [.filename]#/usr/src# 目录的读权限,所以执行这种试验性的运行 甚至不需要使用 `root` 用户。 如果您没有运行 X11 或者不喜欢 GUI, 当您运行 `cvsup` 的时候需要在命令行添加 两个选项: [source,shell] .... # cvsup -g -L 2 supfile .... `-g` 告诉 CVSup 不要使用 GUI。如果您 没在运行 X11 这个是自动的,否则您必须指定它。 `-L 2` 告诉 CVSup 输出所有正在升级的文件的细节。 有三个等级可以选择,从 `-L 0` 到 `-L 2`。默认是 0,意味着除了错误消息 什么都不输出。 还有许多其它的选项可用。想要一个简短的列表, 输入 `cvsup -H`。要查看更详细的描述, 请查看手册页。 一旦您对升级工作的方式满意了,您就 可以使用 man:cron[8] 来安排规则的运行 CVSup。 很显然的,您不应该让 CVSup 通过 man:cron[8] 运行的时候使用它的 GUI。 [[cvsup-collec]] === CVSup 文件 collection CVSup 可用的文件 collection 是分级组织的。 有几个大的 collection,然后它们有分成更小的子 collection。接收一个大的 collection 等同于 接收它的每一个子 collection。 collection 的等级关系在下面列表中通过缩进的使用 反映出来。 最常用的 collection 是 `src-all`,和 `ports-all`。其它的 collection 只被有着特定 目的的小部分人使用, 有些站点可能不全部支持。 `cvs-all release=cvs`:: FreeBSD 主 CVS 仓库,包含 密码系统的代码。 `distrib release=cvs`::: FreeBSD 发行版本和镜像相关的 文件。 `doc-all release=cvs`::: FreeBSD 使用手册和其它文档的源代码。 其中不包含 FreeBSD web 站点的文件。 `ports-all release=cvs`::: FreeBSD Ports Collection。 + [IMPORTANT] ==== 如果您不想升级全部的 `ports-all`(整个 ports 树), 而只是使用下面列出的一个子集, 请确保您__总是__升级了 `ports-base` 子 collection! 无论何时在 ports 构建下层构造有所改变的时候都会通过 `ports-base` 表现出来,事实上某些 改变会很快的被"实际的" ports 使用,因此,如果您只升级了 "实际的" ports 而他们使用了一些新的特性, 就有极大的可能编译会因一些神秘的错误信息而失败。 这种情况下__非常快速的__要做的事情 就是确保您的 `ports-base` 子 collection 更新到 最新。 ==== + [IMPORTANT] ==== 要自行构建 [.filename]#ports/INDEX#, 您 _必须_ 接受 `ports-all` (完整的 ports tree)。 在部分 ports tree 上构建 [.filename]#ports/INDEX# 是不被支持的。 请参见 extref:{faq}[FAQ, MAKE-INDEX]。 ==== `ports-accessibility release=cvs`:::: 用以帮助残疾用户的软件。 `ports-arabic release=cvs`:::: 阿拉伯语支持。 `ports-archivers release=cvs`:::: 存档工具。 `ports-astro release=cvs`:::: 天文相关的 ports。 `ports-audio release=cvs`:::: 声音支持。 `ports-base release=cvs`:::: Ports Collection 构建下部构造 - 位于 [.filename]#/usr/ports# 的 [.filename]#Mk/# 和 [.filename]#Tools/# 子目录的 各种各样的文件。 + [NOTE] ==== 请查看<>:您应该 __总是__更新这个 子 collection,无论您更新 FreeBSD Ports Collection 的任何部分的时候! ==== `ports-benchmarks release=cvs`:::: 基准。 `ports-biology release=cvs`:::: 生物学。 `ports-cad release=cvs`:::: 计算机辅助设计工具。 `ports-chinese release=cvs`:::: 中文语言支持。 `ports-comms release=cvs`:::: 通信软件。 `ports-converters release=cvs`:::: 字符编码转换。 `ports-databases release=cvs`:::: 数据库 `ports-deskutils release=cvs`:::: 计算机发明前常出现在桌面上的东西。 `ports-devel release=cvs`:::: 开发工具。 `ports-dns release=cvs`:::: DNS 相关软件。 `ports-editors release=cvs`:::: 编辑器 `ports-emulators release=cvs`:::: 其它操作系统的模拟器 `ports-finance release=cvs`:::: 货币,金融相关应用程序。 `ports-ftp release=cvs`:::: FTP 客户端和服务器端工具。 `ports-games release=cvs`:::: 游戏 `ports-german release=cvs`:::: 德语支持。 `ports-graphics release=cvs`:::: 图形图像工具。 `ports-hebrew release=cvs`:::: 希伯来语支持。 `ports-hungarian release=cvs`:::: 匈牙利语言支持。 `ports-irc release=cvs`:::: Internet 多线交谈(IRC)工具。 `ports-japanese release=cvs`:::: 日语支持。 `ports-java release=cvs`:::: Java(TM) 工具。 `ports-korean release=cvs`:::: 韩国语言支持。 `ports-lang release=cvs`:::: 编程语言。 `ports-mail release=cvs`:::: 邮件软件。 `ports-math release=cvs`:::: 数值计算软件。 `ports-misc release=cvs`:::: 杂样工具。 `ports-multimedia release=cvs`:::: 多媒体软件。 `ports-net release=cvs`:::: 网络软件。 `ports-net-im release=cvs`:::: 即时消息软件。 `ports-net-mgmt release=cvs`:::: 网管软件。 `ports-net-p2p release=cvs`:::: 对等网 (peer to peer network) 应用。 `ports-news release=cvs`:::: USENET 新闻软件。 `ports-palm release=cvs`:::: Palm(TM) 系列软件支持。 `ports-polish release=cvs`:::: 波兰语支持。 `ports-ports-mgmt release=cvs`:::: 用于管理 ports 和预编译包的工具。 `ports-portuguese release=cvs`:::: 葡萄牙语支持。 `ports-print release=cvs`:::: 打印软件。 `ports-russian release=cvs`:::: 俄语支持。 `ports-science release=cvs`:::: 科学计算。 `ports-security release=cvs`:::: 安全工具。 `ports-shells release=cvs`:::: 命令行 shell。 `ports-sysutils release=cvs`:::: 系统实用工具。 `ports-textproc release=cvs`:::: 文本处理工具(不 包含桌面出版)。 `ports-ukrainian release=cvs`:::: 乌克兰语支持。 `ports-vietnamese release=cvs`:::: 越南语支持。 `ports-www release=cvs`:::: 万维网(WWW)相关软件。 `ports-x11 release=cvs`:::: 支持 X window 系统的 ports。 `ports-x11-clocks release=cvs`:::: X11 时钟。 `ports-x11-drivers release=cvs`:::: X11 驱动程序。 `ports-x11-fm release=cvs`:::: X11 文件管理器。 `ports-x11-fonts release=cvs`:::: X11 字体和字体工具。 `ports-x11-toolkits release=cvs`:::: X11 工具包。 `ports-x11-servers release=cvs`:::: X11 服务器。 `ports-x11-themes release=cvs`:::: X11 主题。 `ports-x11-wm release=cvs`:::: X11 窗口管理器。 `projects-all release=cvs`::: FreeBSD 内部项目的代码库。 `src-all release=cvs`::: FreeBSD 主代码,包含密码系统的代码。 `src-base release=cvs`:::: [.filename]#/usr/src# 顶层的各式各样的文件。 `src-bin release=cvs`:::: 单用户模式下可能用到的用户工具 ([.filename]#/usr/src/bin#)。 `src-cddl release=cvs`:::: 采用了 CDDL 授权的实用工具和函数库 ([.filename]#/usr/src/cddl#)。 `src-contrib release=cvs`:::: FreeBSD 项目之外的工具和库,通常在 FreeBSD 中不作修改 ([.filename]#/usr/src/contrib#)。 `src-crypto release=cvs`:::: FreeBSD 项目之外的 密码系统工具和库,通常在 FreeBSD 中不作修改 ([.filename]#/usr/src/crypto#)。 `src-eBones release=cvs`:::: Kerberos 和 DES ([.filename]#/usr/src/eBones#)。 目前的 FreeBSD 中不再使用使用。 `src-etc release=cvs`:::: 系统配置文件 ([.filename]#/usr/src/etc#)。 `src-games release=cvs`:::: 游戏 ([.filename]#/usr/src/games#)。 `src-gnu release=cvs`:::: GNU 公共许可协议的工具 ([.filename]#/usr/src/gnu#)。 `src-include release=cvs`:::: 头文件 ([.filename]#/usr/src/include#)。 `src-kerberos5 release=cvs`:::: Kerberos5 安全包 ([.filename]#/usr/src/kerberos5#)。 `src-kerberosIV release=cvs`:::: KerberosIV 安全包 ([.filename]#/usr/src/kerberosIV#)。 `src-lib release=cvs`:::: 库 ([.filename]#/usr/src/lib#)。 `src-libexec release=cvs`:::: 通常被其它程序调用的系统程序 ([.filename]#/usr/src/libexec#)。 `src-release release=cvs`:::: 生成 FreeBSD 版本必需的文件 ([.filename]#/usr/src/release#)。 `src-rescue release=cvs`:::: 用于紧急修复的静态联编的程序; 请参见 man:rescue[8] ([.filename]#/usr/src/rescue#)。 `src-sbin release=cvs`:::: 单用户模式的系统工具 ([.filename]#/usr/src/sbin#)。 `src-secure release=cvs`:::: 密码相关库和命令 ([.filename]#/usr/src/secure#)。 `src-share release=cvs`:::: 跨多个平台的共享的文件 ([.filename]#/usr/src/share#)。 `src-sys release=cvs`:::: 内核 ([.filename]#/usr/src/sys#)。 `src-sys-crypto release=cvs`:::: 内核密码系统代码 ([.filename]#/usr/src/sys/crypto#)。 `src-tools release=cvs`:::: 维护 FreeBSD 的各种各样的工具 ([.filename]#/usr/src/tools#)。 `src-usrbin release=cvs`:::: 用户工具 ([.filename]#/usr/src/usr.bin#)。 `src-usrsbin release=cvs`:::: 系统工具 ([.filename]#/usr/src/usr.sbin#)。 `www release=cvs`::: FreeBSD WWW 站点的源代码。 `distrib release=self`:: CVSup 服务器的 配置文件。用于 CVSup 镜像站点。 `gnats release=current`:: GNATS bug 跟踪数据库。 `mail-archive release=current`:: FreeBSD 邮件列表存档。 `www release=current`:: 预处理过的 FreeBSD WWW 站点文件(不是源文件)。 用于 WWW 镜像站点。 === 更多信息 CVSup FAQ 以及关于 CVSup 的其他信息, 请查看 http://www.cvsup.org[CVSup 主页]。 多数与 FreeBSD 有关的 CVSup 讨论会在 {freebsd-hackers} 进行。 这个软件的新版本会在那里和 {freebsd-announce} 公布。 如果对于 CVSup 有任何问题, 或希望提交 bug 报告, 请参阅 http://www.cvsup.org/faq.html#bugreports[ CVSup FAQ]。 [[cvsup-mirrors]] === CVSup 站点 FreeBSD 的 <> 服务器运行于 下列站点: [[cvs-tags]] == CVS 标签 当使用 cvs 或者 CVSup 获取和升级源代码的时候,必须指定一个修订标签。 修订标签代表 FreeBSD 开发的一个特定分支, 或者一个特定的时间点。第一种叫做 "分支标签",第二种叫做 "版本标签"。 === 分支标签 所有这些,除了 `HEAD` (这个总是 合法标签)以外,只适用于 [.filename]#src/# 树。[.filename]#ports/#,[.filename]#doc/#,和 [.filename]#www/# 树没有分支。 HEAD:: 主线的符号名,或者说 FreeBSD-CURRENT。 当没有指定修订版本的时候也是默认的。 + 在 CVSup 里,这个标签通过 一个 `.` 来反映出来(不是标点,而是一个 `.` 字符)。 + [NOTE] ==== 在 CVS 里,当没有修订标签指定时这是默认的。 在一台 STABLE 机器上检出或者升级到 CURRENT 源代码 通常__不是__ 一个好主意,除非这是您的本意。 ==== RELENG_8:: 这是 FreeBSD-8.X 的开发分支, 也被称作 FreeBSD 8-STABLE。 RELENG_8_2:: 这是 FreeBSD-8.2 发行版分支,只用于安全公告, 以及其他重要更新。 RELENG_8_1:: FreeBSD-8.1 的发行版分支, 只用于安全公告, 以及其他重要更新。 RELENG_8_0:: FreeBSD-8.0 的发行版分支, 只用于安全公告, 以及其他重要更新。 RELENG_7:: 这是 FreeBSD-7.X 的开发分支, 也被称作 FreeBSD 7-STABLE。 RELENG_7_4:: FreeBSD-7.4 的发行版分支, 只用于安全公告, 以及其他重要更新。 RELENG_7_3:: FreeBSD-7.3 的发行版分支, 只用于安全公告, 以及其他重要更新。 RELENG_7_2:: FreeBSD-7.2 的发行版分支, 只用于安全公告, 以及其他重要更新。 RELENG_7_1:: FreeBSD-7.1 的发行版分支, 只用于安全公告, 以及其他重要更新。 RELENG_7_0:: FreeBSD-7.0 的发行版分支, 只用于安全公告, 以及其他重要更新。 RELENG_6:: 这是 FreeBSD-6.X 的开发分支, 也被称作 FreeBSD 6-STABLE。 RELENG_6_4:: FreeBSD-6.4 的发行版分支, 只用于安全公告, 以及其他重要更新。 RELENG_6_3:: FreeBSD-6.3 的发行版分支, 只用于安全公告, 以及其他重要更新。 RELENG_6_2:: FreeBSD-6.2 的发行版分支, 只用于安全公告, 以及其他重要更新。 RELENG_6_1:: FreeBSD-6.1 的发行版分支, 只用于安全公告, 以及其他重要更新。 RELENG_6_0:: FreeBSD-6.0 的发行版分支, 只用于安全公告, 以及其他重要更新。 RELENG_5:: 这是 FreeBSD-5.X 的开发分支, 也被称作 FreeBSD 5-STABLE。 RELENG_5_5:: FreeBSD-5.5 安全分支。 只被安全公告和其它重要更新使用。 RELENG_5_4:: FreeBSD-5.4 安全分支。 只被安全公告和其它重要更新使用。 RELENG_5_3:: FreeBSD-5.3 安全分支。 只被安全公告和其它重要更新使用。 RELENG_5_2:: 针对 FreeBSD-5.2 和 FreeBSD-5.2.1 的安全分支, 只被安全公告和其它重要更新使用。 RELENG_5_1:: 针对 FreeBSD-5.1 的发行版本分支, 只被安全公告和其它重要更新使用。 RELENG_5_0:: 针对 FreeBSD-5.0 的发行版本分支, 只被安全公告和其它重要更新使用。 RELENG_4:: FreeBSD-4.X 开发线,也被叫做 FreeBSD-STABLE。 RELENG_4_11:: FreeBSD-4.11 安全分支。 只被安全公告和其它重要更新使用。 RELENG_4_10:: FreeBSD-4.10 安全分支。 只被安全公告和其它重要更新使用。 RELENG_4_9:: FreeBSD-4.9 安全分支。 只被安全公告和其它重要更新使用。 RELENG_4_8:: FreeBSD-4.8 安全分支。 只被安全公告和其它重要更新使用。 RELENG_4_7:: FreeBSD-4.7 安全分支。 只被安全公告和其它重要更新使用。 RELENG_4_6:: FreeBSD-4.6 和 4.6.2 的安全分支。 只被安全公告和其它重要更新使用。 RELENG_4_5:: FreeBSD-4.5 安全分支。 只被安全公告和其它重要更新使用。 RELENG_4_4:: FreeBSD-4.4 安全分支。 只被安全公告和其它重要更新使用。 RELENG_4_3:: FreeBSD-4.3 安全分支。 只被安全公告和其它重要更新使用。 RELENG_3:: FreeBSD-3.X 的开发线,也被叫做 3.X-STABLE。 RELENG_2_2:: FreeBSD-2.2.X 的开发线, 也被叫做 2.2-STABLE。 这个分支基本上已经过时了。 === 版本标签 当一个特定的 FreeBSD 版本发行时, 这些标签代表了一个指定的时间点。发布工程进程在 link:https://www.FreeBSD.org/releng/[Release Engineering Information] 和 extref:{releng}[Release Process, release-proc] 文档中被详细描述。 [.filename]#src# 树使用以 `RELENG_` 开头的标签。 [.filename]#ports# 和 [.filename]#doc# 树使用以 `RELEASE` 开头的标签。 最后, [.filename]#www# 树上不会有任何特定发行版的标签。 RELENG_8_2_0_RELEASE:: FreeBSD 8.2 RELENG_8_1_0_RELEASE:: FreeBSD 8.1 RELENG_8_0_0_RELEASE:: FreeBSD 8.0 RELENG_7_4_0_RELEASE:: FreeBSD 7.4 RELENG_7_3_0_RELEASE:: FreeBSD 7.3 RELENG_7_2_0_RELEASE:: FreeBSD 7.2 RELENG_7_1_0_RELEASE:: FreeBSD 7.1 RELENG_7_0_0_RELEASE:: FreeBSD 7.0 RELENG_6_4_0_RELEASE:: FreeBSD 6.4 RELENG_6_3_0_RELEASE:: FreeBSD 6.3 RELENG_6_2_0_RELEASE:: FreeBSD 6.2 RELENG_6_1_0_RELEASE:: FreeBSD 6.1 RELENG_6_0_0_RELEASE:: FreeBSD 6.0 RELENG_5_5_0_RELEASE:: FreeBSD 5.5 RELENG_5_4_0_RELEASE:: FreeBSD 5.4 RELENG_4_11_0_RELEASE:: FreeBSD 4.11 RELENG_5_3_0_RELEASE:: FreeBSD 5.3 RELENG_4_10_0_RELEASE:: FreeBSD 4.10 RELENG_5_2_1_RELEASE:: FreeBSD 5.2.1 RELENG_5_2_0_RELEASE:: FreeBSD 5.2 RELENG_4_9_0_RELEASE:: FreeBSD 4.9 RELENG_5_1_0_RELEASE:: FreeBSD 5.1 RELENG_4_8_0_RELEASE:: FreeBSD 4.8 RELENG_5_0_0_RELEASE:: FreeBSD 5.0 RELENG_4_7_0_RELEASE:: FreeBSD 4.7 RELENG_4_6_2_RELEASE:: FreeBSD 4.6.2 RELENG_4_6_1_RELEASE:: FreeBSD 4.6.1 RELENG_4_6_0_RELEASE:: FreeBSD 4.6 RELENG_4_5_0_RELEASE:: FreeBSD 4.5 RELENG_4_4_0_RELEASE:: FreeBSD 4.4 RELENG_4_3_0_RELEASE:: FreeBSD 4.3 RELENG_4_2_0_RELEASE:: FreeBSD 4.2 RELENG_4_1_1_RELEASE:: FreeBSD 4.1.1 RELENG_4_1_0_RELEASE:: FreeBSD 4.1 RELENG_4_0_0_RELEASE:: FreeBSD 4.0 RELENG_3_5_0_RELEASE:: FreeBSD-3.5 RELENG_3_4_0_RELEASE:: FreeBSD-3.4 RELENG_3_3_0_RELEASE:: FreeBSD-3.3 RELENG_3_2_0_RELEASE:: FreeBSD-3.2 RELENG_3_1_0_RELEASE:: FreeBSD-3.1 RELENG_3_0_0_RELEASE:: FreeBSD-3.0 RELENG_2_2_8_RELEASE:: FreeBSD-2.2.8 RELENG_2_2_7_RELEASE:: FreeBSD-2.2.7 RELENG_2_2_6_RELEASE:: FreeBSD-2.2.6 RELENG_2_2_5_RELEASE:: FreeBSD-2.2.5 RELENG_2_2_2_RELEASE:: FreeBSD-2.2.2 RELENG_2_2_1_RELEASE:: FreeBSD-2.2.1 RELENG_2_2_0_RELEASE:: FreeBSD-2.2.0 [[mirrors-afs]] == AFS 站点 FreeBSD 的 AFS 服务器运行于下面的站点: 瑞典:: 文件的路径是: [.filename]#/afs/stacken.kth.se/ftp/pub/FreeBSD/# + [.programlisting] .... stacken.kth.se # Stacken Computer Club, KTH, Sweden 130.237.234.43 #hot.stacken.kth.se 130.237.237.230 #fishburger.stacken.kth.se 130.237.234.3 #milko.stacken.kth.se .... + 维护者 mailto:ftp@stacken.kth.se[ftp@stacken.kth.se] [[mirrors-rsync]] == rsync 站点 下面的站点让 FreeBSD 可以通过 rsync 协议下载。 rsync 实用程序和 man:rcp[1] 的工作方式很相像, 但是有更多的选项,使用 rsync 远程更新协议只传输 两份文件的不同之处, 因此能够大幅度的提高网络同步速率。 如果您是 FreeBSD FTP 服务器或者 CVS 仓库的镜像站点, 这一点非常有用。 rsync 套件可以工作在许多种 操作系统上,在 FreeBSD 上,查看 package:net/rsync[] port 或者使用 package。 捷克共和国:: rsync://ftp.cz.FreeBSD.org/ + 可用的 collection: ** ftp: FreeBSD FTP 服务器的 部分镜像。 ** FreeBSD: FreeBSD FTP 服务器的 完整镜像。 荷兰:: rsync://ftp.nl.FreeBSD.org/ + 可用的 collection: ** FreeBSD: 对于 FreeBSD FTP 服务器的完整镜像。 俄罗斯:: rsync://ftp.mtu.ru/ + 可用的 collections: ** FreeBSD: 完整的 FreeBSD FTP 服务器镜像。 ** FreeBSD-gnats: GNATS 问题追踪数据库。 ** FreeBSD-Archive: FreeBSD 档案的 FTP 服务器镜像。 瑞典:: rsync://ftp4.se.freebsd.org/ + 可用的 collections: ** FreeBSD: FreeBSD FTP 服务器的完整镜像。 台湾地区 (中国):: rsync://ftp.tw.FreeBSD.org/ + rsync://ftp2.tw.FreeBSD.org/ + rsync://ftp6.tw.FreeBSD.org/ + 可用的 collection: ** FreeBSD: FreeBSD FTP 服务器的完整镜像。 英国:: rsync://rsync.mirrorservice.org/ + 可用的 collection: ** sites/ftp.FreeBSD.org: FreeBSD FTP 服务器 的完整镜像。 美国:: rsync://ftp-master.FreeBSD.org/ + 服务器只供 FreeBSD 主镜像站点使用。 + 可用的 collection: ** FreeBSD:FreeBSD FTP 服务器的主要存档。 ** acl:FreeBSD 主 ACL 列表。 + rsync://ftp13.FreeBSD.org/ + 可用的 collection: ** FreeBSD:FreeBSD FTP 服务器的完整 镜像。