我很好奇人们如何在他们的环境中部署 FreeBSD 的端口。我假设大多数使用 FreeBSD 的人确实在使用 Ports(并且经常使用 portupgrade 来升级二进制文件)。但是,我对您如何进行此设置感兴趣,因为我对最近版本的工作方式不满意。我现在运行的是 FreeBSD 9.0 并且遇到了问题。
我已经设置如下:
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. 你可以用Puppet或Chef做类似的事情。这具有使用构建主机的所有优点(一致性、单个服务器上的负载较少),并增加了配置管理的好处。
警告:只有当您的机器“相同”时,这才真正有效——也就是说,您可以在所有机器上安装相同的端口集。如果您有不同的端口集,它可以工作,但这会大大增加管理开销。
免责声明:我是sysutils/radmind. 是的,我非常喜欢它,所以我采用了它。
所有这些都是基于我管理各种大小的 FreeBSD 环境(从 1-2 台机器到 100 多台)的经验。根据我的经验,推送和维护标准化映像的配置/系统管理工具确实是处理此问题的最佳方式。
奇怪的是没有人提到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
| 归档时间: |
|
| 查看次数: |
7088 次 |
| 最近记录: |