/usr/ports
的一个子目录来存储的。警告:在安装和使用 Ports Collection 之前,请注意通常不建议将 Ports Collection 与通过 pkg 提供的二进制包一起使用来安装软件。pkg 默认会跟踪 ports 树的季度分支版本,而不是 HEAD。与季度分支版本中的 port 相比,HEAD 中的依赖关系可能有所不同,这可能导致 pkg 安装的依赖关系与 Ports Collection 中的依赖关系发生冲突。如果必须同时使用 Ports Collection 和 pkg ,那么请确保你的 Ports Collection 和 pkg 在 ports 树的同一个分支版本上。
pkg-message
或其他文件来处理特殊情况。关于这些文件以及一般的 ports 的更多细节,请参考 FreeBSD Porter 的手册。/usr/ports/distfiles
。Procedure: Portsnap 方法FreeBSD 的基本系统包括 Portsnap。这是一个用于检索 Ports Collection 的快速且用户友好的工具,是大多数不运行 FreeBSD-CURRENT 的用户的推荐选择。这个工具可以连接到 FreeBSD 站点,验证安全密钥,并下载 Ports Collection 的新副本。这个密钥被用来验证所有下载文件的完整性。请注意,Portsnap 更新是从 Ports Collection 主分支的快照生成的,不能配置为使用不同的分支(例如,quarterly
)。如果有必要使用 Ports Collection 的不同分支(例如前面提到的与二进制包有关的分支),则必须使用 Git 方法。1.要将 Ports Collection 的压缩快照下载到/var/db/portsnap
:1# portsnap fetchCopied!
/usr/ports
:1# portsnap extractCopied!3.在如上所示完成了对 Portsnap 的第一次使用后,可以通过运行/usr/ports
来根据需要更新:1# portsnap fetch2# portsnap updateCopied!当使用 fetch 时,提取或更新操作可以连续运行,像这样:1# portsnap fetch updateCopied!
Procedure:Git 方法如果需要对 ports 树进行更多的控制,或需要维护本地的修改,或者运行 FreeBSD-CURRENT,可以使用 Git 来获取 Ports Collection。请参阅 Git Primer 以了解关于 Git 的详细介绍。1.在用来检查 ports 树之前,必须先安装 Git。如果已经有了 ports 树的副本,请像这样安装 Git:1# cd /usr/ports/devel/git2# make install cleanCopied!如果 ports 树不可用,或者正在使用 pkg 管理软件包,那么可以将 Git 作为一个包来安装:1# pkg install gitCopied!2.查看一下 ports 树的 HEAD 分支的副本:1# git clone https://git.FreeBSD.org/ports.git /usr/portsCopied!3.或者,查看一份季度分支构建的副本:1# git clone https://git.FreeBSD.org/ports.git -b 2020Q3 /usr/portsCopied!4.根据需要,在最初的 Git 签出后更新/usr/ports
:1# git -C /usr/ports pullCopied!5.根据需要,将/usr/ports
切换到不同的季度分支:1# git -C /usr/ports switch 2020Q4Copied!
警告:在编译任何 ports 之前,请务必按照前一节所述更新 Ports Collection。由于安装任何第三方软件都可能引入安全漏洞,因此建议首先检查 https://vuxml.freebsd.org/,以了解与该 port 有关的已知安全问题。另外,在安装一个新的 port 之前,可以运行pkg audit -F
。这个命令可以被配置为在每日安全系统检查中自动执行安全审计和漏洞数据库的更新。更多信息,请参阅 pkg-audit(8) 和 periodic(8)。
make install
。提示消息会显示进度:lsof
是一个以增加权限运行的程序,所以在安装时将显示一个安全警告。安装完成后,将返回提示。PATH
环境变量中列出的目录中可用的命令的缓存,以加快对这些命令的可执行文件的查找操作。tcsh shell 的用户应该输入rehash
,这样就可以在不指定完整路径的情况下使用一个新安装的命令。在 sh shell 中使用hash -r
来代替。更多信息请参考 shell 的文档。1# make clean2===> Cleaning for lsof-88.d,83#Copied!
注意:为了节省这个额外的步骤,在编译 port 时应使用make install clean
。
www/firefox
、 security/gpgme
和 mail/sylpheed-claws
。如果这个 port 依赖于其他有可配置选项的 port,它可能会因为用户的互动而暂停数次,因为默认行为是提示用户从菜单中选择选项。为了避免这种情况,并在一个批次中完成所有的配置,可以在 port 的骨架中运行 make config-recursive
。然后,运行 make install [clean]
来编译和安装这个 port。提示:当使用config-recursive
时,要配置的 port 列表是由all-depends-list
目标收集的。建议运行make config-recursive
直到所有依赖的 ports 选项都被定义,并且不再出现 ports 选项屏幕,以确定所有的依赖选项都被配置了。
cd
进入包含 port 的目录,然后输入 make config
。另一个方法是使用 make showconfig
。另一个方法是执行 make rmconfig
,它将删除所有选定的选项并允许你重新开始。所有这些选项,以及其他选项,在 ports(7) 中都有详细的解释。FTP_PASSIVE_MODE
、FTP_PROXY
和 FTP_PASSWORD
这些变量。请参阅 fetch(3) 以了解支持的变量的完整列表。make fetch
可以在 /usr/ports
中运行,以获取所有的 distfiles,或在一个类别中,例如 /usr/ports/net
,或在特定的 port 骨架中运行。请注意,如果一个 port 有任何依赖关系,在一个类别或 port 骨架中运行此命令将不会获取另一个类别中的 port 的 distfiles。相反,使用 make fetch-recursive
来获取一个 port 的所有依赖关系的 distfiles。WRKDIRPREFIX
和PREFIX
变量可以覆盖默认的工作目录和目标目录。比如说:/usr/home/example/ports
中编译 port,并在 /usr/local
中安装一切:/usr/ports
中编译这个 port,并将其安装在 /usr/home/example/local
。还有:pkg delete
来卸载。使用这一命令的例子可以在 pkg-delete(8) 手册中找到。make deinstall
。重要:在尝试升级之前,请从文件的顶部阅读/usr/ports/UPDATING
,以确定与上次升级 port 或安装系统最接近的日期。这个文件描述了用户在更新 port 时可能遇到的各种问题和需要执行的额外步骤,包括诸如文件格式的变化、 配置文件位置的变化,以及与先前版本不兼容的情况。请注意任何与需要升级的 port 相匹配的说明,并在执行升级时遵循这些说明。
ports-mgmt/portmaster
是一个非常迷你的工具,用于升级已安装的 ports。它被设计用来使用 FreeBSD 基本系统中安装的工具,而不需要依赖其他 ports 或数据库。要把这个工具作为一个 port 来安装:注意:在默认情况下,Portmaster 在删除现有 ports之前会做一个备份包。如果新版本的安装成功,Portmaster 将删除备份。使用-b
可以指示 Portmaster 不自动删除备份。添加-i
可以在交互式模式下启动 Portmaster,在升级每个 port 之前提示确认。还有许多其他选项可用。请阅读 portmaster(8) 的手册以了解它们的详细用法。
-f
来升级和重建所有ports:ports-mgmt/portupgrade
是另一个可以用来升级 ports 的工具。它安装了一套可以用来管理ports的应用程序。然而,它依赖于 Ruby。要安装这个ports:pkgdb -F
扫描已安装的 port 列表,并修正它报告的所有不一致之处。portupgrade -a
。另外,也可以使用-i
来确认每一次的升级:portupgrade pkgname
。包括-R
是非常重要的,它可以首先升级指定应用程序所需的所有 ports:-P
,Portupgrade 会在 PKG_PATH
中列出的本地目录中搜索可用的软件包。如果本地没有可用的软件包,它就会从远程站点获取软件包。如果在本地找不到软件包或无法从远程获取,Portupgrade 将使用 ports。要完全避免使用 ports,请指定 -PP
。这最后一组选项告诉 Portupgrade,如果没有可用的包,就放弃:-P
,则只需获取 port distfiles 或 packages,而不需要编译或安装任何东西,请使用 -F
。关于所有可用开关的进一步信息,请参考 portupgrade 的手册。make clean
将清理临时工作目录。如果使用 Portmaster 来安装一个 port,它将自动删除这个目录,除非指定了 -K
。如果安装了 Portupgrade,这个命令将删除在 Ports Collection 本地副本中发现的所有工作目录:/usr/ports/distfiles
中积累起来。要使用 Portupgrade 来删除所有不再被任何 ports 引用的 distfiles:ports-mgmt/pkg_cutleaves
还会自动删除已安装的、不再需要的 ports