我很好奇人们如何在他们的环境中部署FreeBSD的端口。 我假设大多数使用FreeBSD的人都在使用Ports(通常使用portupgrade来升级二进制文件)。 不过我对你如何设置这个设置感兴趣,因为我对最近版本的工作方式并不满意。 我现在正在运行FreeBSD 9.0并遇到问题。
我已经设置如下:
ENV['LOCALINDICES'] ||= '/var/db'
ENV['PORTS_INDEX'] ||= ENV['LOCALINDICES'] + '/INDEX.local'
我可以成功运行portupgrade -p package
来构build一个包,然后portupgrade -P package
来在其他节点上安装二进制文件。
但是,有时我收到以下问题: /var/db/INDEX.local:23265:dbm_store failed
: /var/db/INDEX.local:23265:dbm_store failed
: /var/db/INDEX.local:23265:dbm_store failed
我不能想象我可以对系统进行任何其他的优化,因为索引现在驻留在本地,唯一真正导出的是ports-tree,并且从节点没有任何东西被写入到那里。
在一个大的环境中,我从来没有完全满意过港口系统 – 看起来你总是需要对它进行一些外部pipe理,以使其运行良好。
我最好的提示(按照上升的优先顺序,“最差的”解决scheme,以“最好”的解决scheme):
如果你在每个主机上build立, 不要 。
如果你必须的话,不要通过像读者所描述的读写挂载的NFS来实现:如果你提供备用的工作目录,你通常可以信任端口做正确的事情,而不是在端口树上跺脚,但总是更好比对不起,要安全:运行一个本地的CVS / csup镜像,并从这个盒子中取出你所有的主机,然后在本地构build,就像它们是单独的机器一样。
是的,我知道这意味着在主机上拥有更多的磁盘空间和一个额外的步骤。 这也几乎保证没有问题。
警告:您可能想要从指定的“configuration主机”同步软件包configuration文件(rsync或类似软件)以确保每台计算机的一致性(如果需要,甚至可以同步rsync整个端口树,而不是在每个节点上使用csup) 。
使用生成主机,创build包并安装它们。
比在每台机器上构build更好的解决scheme:使用构build主机创build包,并将工具指向这些包。
这意味着为每个运行的架构(或者交叉编译)保留一个构build主机,但是对于目标机器来说最终会更好(不需要大的编译工作,保证一致性)
使用configuration/系统pipe理工具。
这是我解决的解决scheme – 我build立一个标准的服务器映像,并使用radmind
将其部署在我的环境中。 你可以用木偶或厨师做类似的事情。 这具有使用构build主机的所有优点(一致性,在单个服务器上的负载较less),并增加了configurationpipe理的好处。
注意事项:如果你的机器是“完全相同的”,这只能工作得很好 – 也就是说你可以在所有的机器上安装相同的端口。 它可以工作,如果你有不同的端口集,但会大大增加pipe理开销。
免责声明:我是sysutils/radmind
的端口维护者。 是的,我喜欢那个我通过它。
所有这一切都是基于我pipe理各种规模的FreeBSD环境(从1-2台到超过100台)的经验。 configuration/系统pipe理工具,推动和维护一个标准化的形象是真正的最好的方式来处理我的经验。
奇怪的是,没有人提到ports-mgmt / tinderbox :
Tinderbox是FreeBSD端口的一个包构build系统,基于Pointyhat构build集群上使用的官方Portbuild脚本。 Tinderbox是由Joe Marcus Clarke写的。
您可以定义多个jail(基本系统版本)和多个portstrees。 jail和portstree的组合被称为build。 Tinderbox监狱并不是FreeBSD中的监狱,它实际上是chroot中的一个给定的世界。 Tinderbox支持自动跟踪依赖关系,只重build自上次运行后更改的包。 Tinderbox支持邮件通知失败的版本。 Tinderbox也很好地与ccache集成。
Tinderbox旨在轻松提供您需要的套件端口,用于您需要的平台和体系结构。 Tinderbox也是testing新端口和端口升级的优秀工具,尤其是testing依赖性和装箱单。 在FreeBSD的各种版本上testing端口也很有用,因为你可以在FreeBSD 7.X / 8.X主机上运行FreeBSD 6.X世界作为监狱。
还切换到pkgng大大简化了包的部署。
在github上检查一下: https : //github.com/pkgng/pkgng
我已经pipe理了100多台FreeBSD服务器,只需通过经过良好调整的NFS共享/ usr只读,将软件包数据库从/ var移动到/ usr和symlinking(不是绝对必要的,但启用了pkg_info等)。 可能有一个或两个其他文件需要在一个方向或另一个方向上移动,但是整个设置花费了我大约一个小时的时间。 它工作得非常好。 如果我遇到扩展问题,我会添加额外的NFS服务器,并拆分工作量,但它从来没有出现。 性能对我来说从来都不是问题(实际上它很棒),但是我想你可以把NFS服务器的/ usr(或其副本)放在md上。
看来,没有人能很好的解决这个问题。 这很可能是由于下层工具的限制。
下面是我想到的:我放弃了将整个端口树导出的想法。 相反,我在每个节点上放置了一个完整的端口树。 然后,我通过NFS安装“包”(以启用包的分发)。
我也打算利用caching代理(可能是Squid)来加快portnap进程。 我写了一篇关于如何在我的博客上设置的短文章 。
参考文献: