我想知道一般偏好是什么,它来自哪里。在积极使用 FreeBSD 几年后,我倾向于使用 Gentoo,但我有过浪费宝贵时间的不愉快经历,因为 Gentoo 安装在一台非常旧的机器上,构建时间很不愉快。
如果它是基于预构建包的东西,那么浪费的时间就会更少。(我知道 FreeBSD 有二进制包,但这些包的问题是它们似乎在版本发布之后没有维护,获得新东西的唯一方法是自己编译它。真的不了解 Gentoo)。
您对此有何看法,您是否有任何经验使您从基于源的发行版切换到其他发行版?
编辑:认为我应该澄清这个最近的“我的经验”
故事是这样的。换工作后,我必须维护一台相当旧的机器,它承载带有办公室用户登录信息的 LDAP (OpenLDAP)。我不得不重新启动野兽(它没有重新启动 8 个月)。重启后,OpenLDAP 没有上线。似乎 slapd 和其他一些二进制文件在系统运行时以某种方式被删除。第一次构建 ldap 包后,我想知道为什么我没有 slapd 二进制文件(花了 15 分钟)。一段时间后,我将问题追踪到默认情况下打开“最小”标志,它只构建库,没有服务器二进制文件。最终结果 - 大约 1 小时的办公效率下降,同事们以“我没有这样做,因为我们的主服务器停机”为借口。
--
非常感谢您的回答,但到目前为止,还没有令人信服的论据来使用基于源的与基于预构建包的。如今,存储空间不再是问题。
我维护着相当多的 Gentoo 机器。
不是因为我们关心幼稚的 funroll-loops 速度调整。我们关心的是精确安装我们想要的东西的灵活性,而不是贡献者认为我们有一天可能想要的每个包特性和依赖项。我们对 Linux、编译和库的工作方式非常满意。我们不希望一切都从我们身上抽象出来,变成一个黑盒子。
你应该选择使用你觉得最舒服的东西。这里有一些细节可能有助于减轻你对 Gentoo 的恐惧。
在现代硬件上,构建时间相对可以忽略不计。如果您的机器具有 N+1 冗余,则更是如此。
你可以对 portage 的行为方式很挑剔,比如
MAKEOPTS="-l 1.0"
在你的 make.conf 中放置以确保当平均负载高得令人不安时新构建的回退。如果您愿意,可以使用 Portage 的二进制包。这些镜像提供了许多常见的包,或者您可以使用
--buildpkgonly
.如果您有大量机器,那么您可以从指定的构建主机或分布式编译中受益。
现在正在使用的最新稳定版本的 Portage 在执行升级时不太可能让您高枕无忧。冲突和阻碍的故事几乎已成为过去。
如果你要照顾这么多机器升级变得痛苦,那么你应该看看 Puppet/BCFG/cfengine 无论如何;)
更新以响应问题编辑:
虽然我对您描述的情况表示同情,但这并不是基于源代码的发行版的症状,也不是通过使用基于包的发行版来防止的。它是以下结果:
说实话,我已经有一段时间没有广泛使用任何其他 Linux 发行版了。出于这个原因,如果您将一台 Debian 机器(例如)放在我的腿上并告诉我 OpenLDAP 在重新启动后无法工作,那么我也可能会花费 15 分钟或一个小时来解决这个问题。不是因为我对 Linux 没有很好的理解或者 Debian 不是一个好的操作系统,而是主要是因为我不记得 Debian 的 RC 脚本或软件包系统的细节。这就是为什么内部文档在组织中至关重要。它应该有助于启动不熟悉的事物并填补其他人的空白。即使他们什么都知道。
只是一个关于 Gentoo 的简短说明。Portage 的 USE 标志非常有用,“最小”是我经常使用的东西。例如,我不希望将软件包的服务器二进制文件安装在在其生命周期内只会成为客户端的机器上。让它们不必要地出现可能会增加复杂性甚至是安全问题。从来都不是空间问题。您可以在使用参数开始编译之前查看包将采用哪些 USE 标志和依赖项(以及哪些不是)
-av
。所以你不应该得到惊喜。GNUix> 对不起,啪!
我不会评论你是否应该使用 Gentoo - 或者从源代码构建是否“值得”
我要说的是我使用 Gentoo 和 Ubuntu。我曾经在我所有的 GNU/Linux 机器上使用 Gentoo,但我认为桌面上的 Ubuntu 更易于管理。我站在管理员的一边,他们认为将 Gentoo 用于服务器是一个好主意——并将它用于我几乎所有的个人服务器。
除此之外,除了从源代码构建东西或调整 CFLAGS 之外,我更喜欢的是 Portage。Portage 是我用过的用于 GNU/Linux 的最好的包和系统管理工具。我可以只用我需要的东西而不是其他东西来创建一个精确的环境,而且我可以在不超出我的包管理系统的情况下做到这一点。我不必安装 postfix 仅仅因为一些包装老兄认为它是“必要的”。我不需要安装单声道,因为我想运行 Gnome,我根本不安装 Tomboy。在这个 Ubuntu 桌面上快速浏览已安装的包,显示它已经安装了 bind?为什么?它没有任何作用,我没有在这台计算机上运行 DNS 服务器,我当然不需要它的文档,但它就在这里。
缺点……时间。不仅需要时间来构建软件包,还需要维护系统。我可以非常确定我可以运行 sudo aptitude update {upgrade} 并且不用担心这个世界......另一方面,当你更新 Gentoo 机器时,你必须非常小心一些小细节,并确保你需要(并且已经准备好)它想做的事情。关于我为什么将桌面切换到 Ubuntu 的“压倒骆驼的稻草”是 udev 的升级,它破坏了我的设置——而不是尝试修复它,我想完成我想做的工作完毕。所以我想我真的不在乎绑定文档是否占用了我桌面上的空间,因为我有空间。
然而,在我的服务器上,情况完全不同。我想控制关于环境的一切,安装的软件包,我想控制的每一个小细节——Gentoo 让我轻松地做到这一点。
对于基于源的发行版来说,生命太短了。我还有更重要的事情要做。就像使用电脑一样。
您始终可以结合使用这两种方法 - 使用预编译的发行版作为基础,并具有良好的工作集成环境和快速无痛更新的优势,同时使用需要处于领先地位的自编译软件该软件的开发。要么通过一些自律(使用带有前缀选项的配置),要么自己打包源代码。您始终可以“重用”构建指令(例如 rpm 规范文件或 debian 子目录)。
我不会直接在生产服务器上使用构建机制。从我的 Gentoo 时代开始,我就知道有可能拥有一个构建主机并在该主机上创建所需的包,这样您就可以在具有适合您需要的编译标志的专用主机上刻录 CPU 周期。
总的来说,没有太大的区别,几乎我们所有的服务器都运行 Debian,但我们最终还是有了一个构建主机。我们需要一些不能作为 debs 使用的软件包,所以我们为我们的需要设置了一个 reprepro 和一个 buildhost,buildhost 几乎没有维护(就“它是否工作”而言),因为重新部署只是一个问题几分钟,因为我们可以启动它,它会自动重新部署自己。
无论是 BSD 端口/Gentoo/Debian,使用系统(如在提供业务价值的不同主机上收集服务)所带来的实际利润并不重要,该系统将最大限度地减少资源浪费并且可维护。我们选择 Debian 是因为安全更新很简单,而且它们是预编译的,因此我们不必在安全更新出现时“浪费”时间重建软件包。对于基于源的发行版与基于二进制的发行版,这是我能想到的唯一缺点。
我是 MythTV 机器的狂热 Gentoo 用户,但由于升级 Gentoo 机器需要时间,我最近切换到了 Debian。很好,你只需要每 6 个月左右真正升级一次,但正如你提到的,编译时间可能有点太多了。
两全其美的是 ArchLinux,它有二进制发行版,但有一个简单的构建系统,允许几乎 Gentoo 风格的包构建。您可以手动选择要编译的内容。
对于生产系统,就个人而言,我会远离源发行版并坚持使用稳定且可能受支持的东西(取决于您的技术人员),无论是 Debian 还是 RHEL。
坦率地说,除了教育目的(也许)之外,我想不出一个很好的理由来使用基于源的发行版。
我的发行版为他们所有的二进制包提供了源包,所以我可以在我想要的时候自由地构建我想要的东西,更重要的是我有能力不必一直构建所有东西。
Gentoo 之所以令人惊叹,不仅是因为基于源代码的发行版的优势,还因为它的每一步都是为定制而设计的。
配置文件永远不会更新,带有前缀 ._cfg000 的副本放在 /etc 中,并显示一条消息让您移动新的配置文件来代替现有的配置文件。
我发现,只要稍加努力,gentoo 就可以让复杂的事情变得非常容易。
我将成为最近的约翰尼,因为我搜索了这个主题,我相信其他人也会这样做。
我们在所有可用的服务器上都使用 Debian,因为:
易于系统管理是我们书中的第一名。专家手中的简单系统等于高可靠性和可用性。
我已经有几年没用过Gentoo了,但是我有限的经验让我得出结论,编译软件包所获得的(几乎不明显的)速度提升远远超过了构建系统所花费的时间的劣势。从那时起,我一直使用预编译的基于包的系统。我知道,就个人而言,我不希望在服务器上花费这么长时间编译源代码——尤其是当需要随着时间的推移升级软件包时。