您如何在大型环境中管理和部署 FreeBSD 的端口?

vpe*_*son 19 freebsd

我很好奇人们如何在他们的环境中部署 FreeBSD 的端口。我假设大多数使用 FreeBSD 的人确实在使用 Ports(并且经常使用 portupgrade 来升级二进制文件)。但是,我对您如何进行此设置感兴趣,因为我对最近版本的工作方式不满意。我现在运行的是 FreeBSD 9.0 并且遇到了问题。

我已经设置如下:

  • /usr/ports 从一个节点通过 NFS 共享(每晚使用“portsnap fetch update”)。
  • 每个节点以读写方式挂载 /usr/ports
  • 我在所有节点上的 /etc/make.conf 中设置了“WRKDIRPREFIX=/usr/tmp”
  • 我已将 Portsnap 配置为使用本地索引,方法是将以下内容添加到 /usr/local/etc/pkgtools.conf:

ENV['LOCALINDICES'] ||= '/var/db'

ENV['PORTS_INDEX'] ||= ENV['LOCALINDICES'] + '/INDEX.local'

我可以成功运行portupgrade -p package以构建包,然后portupgrade -P package在其他节点上安装二进制文件。

然而,有时我会收到以下问题: /var/db/INDEX.local:23265:dbm_store failed

我想不出我可以对系统做任何其他优化,因为索引现在驻留在本地,唯一真正导出的是端口树,并且没有从节点写入任何内容。

vor*_*aq7 13

我从来没有对大型环境中的端口系统感到完全满意——似乎总是需要对其进行一些外部管理才能使其正常工作。

我最好的提示(按偏好升序,“最差”解决方案到“最佳”解决方案):


如果您在每个主机上构建,请不要
如果必须,请不要像您描述的那样通过具有读写挂载的 NFS 执行此操作:如果您提供备用工作目录,您通常可以相信端口会做正确的事情而不是踩在端口树上,但总是更好安全起见:运行本地 CVS/csup 镜像并从那个盒子 csup 所有主机,然后像在本地构建它们一样,如果它们是单独的机器。
是的,我知道这意味着主机上有更多的磁盘空间和一个额外的步骤。它也几乎可以保证没有问题。
警告: 您可能希望从指定的“配置主机”同步包配置文件(rsync 或类似文件)以确保每台机器上的一致性(如果需要,您甚至可以 rsync 整个端口树,而不是在每个节点上使用 csup)。


使用构建主机,创建包并安装它们。
比在每台单独的机器上构建更好的解决方案:使用构建主机创建包,并将您的工具指向这些包。
这意味着为您运行(或交叉编译)的每个架构保留一个构建主机,但它最终对您的目标机器更好(没有大型编译作业,保证一致性)


使用配置/系统管理工具。
这是我最终采用的解决方案——我构建了一个标准的服务器映像,并使用radmind. 你可以用PuppetChef做类似的事情。这具有使用构建主机的所有优点(一致性、单个服务器上的负载较少),并增加了配置管理的好处。

警告:只有当您的机器“相同”时,这才真正有效——也就是说,您可以在所有机器上安装相同的端口集。如果您有不同的端口集,它可以工作,但这会大大增加管理开销。

免责声明:我是sysutils/radmind. 是的,我非常喜欢它,所以我采用了它。


所有这些都是基于我管理各种大小的 FreeBSD 环境(从 1-2 台机器到 100 多台)的经验。根据我的经验,推送和维护标准化映像的配置/系统管理工具确实是处理此问题的最佳方式。


Sav*_*btz 6

奇怪的是没有人提到ports-mgmt/tinderbox

Tinderbox 是 FreeBSD 端口的包构建系统,基于用于 pointyhat 构建集群的官方 Portbuild 脚本。Tinderbox 由乔·马库斯·克拉克 (Joe Marcus Clarke) 编写。

您可以定义多个监狱(基本系统版本)和多个端口树。jail 和 porttree 的组合称为构建。Tinderbox jail 并不是 FreeBSD 中所理解的监狱,它实际上是 chroot 中的一个给定世界。Tinderbox 支持自动跟踪依赖项,并且只重建自上次运行以来更改的包。Tinderbox 支持构建失败的电子邮件通知。Tinderbox 还与 ccache 很好地集成。

Tinderbox 旨在为您需要的平台和架构轻松提供您需要的端口包集。Tinderbox 也是测试新端口和端口升级的绝佳工具,尤其是测试依赖项和装箱单。它对于在 FreeBSD 的各种版本上测试端口也很有用,因为您可以在 FreeBSD 7.X/8.X 主机上将 FreeBSD 6.X 世界作为监狱运行。

切换到pkgng 也大大简化了包部署。
在 github 上查看:https : //github.com/pkgng/pkgng

  • 如果您是从源代码构建或使用二进制包,Portupgrade 将完全执行您必须执行的操作 - 必须先运行 `pkg_delete`,然后安装新版本。OpenBSD 通过在 `pkg_add` 中包含一个升级选项来更好地处理这个问题。不确定 Portupgrade,但 portmaster 可以只使用 INDEX 而不是完整的端口树。 (2认同)