在工作中,我们有几个 Ubuntu Linux 工作站。我正在寻找一种好的/可靠/快速的方法来一次在所有盒子上安装一组软件包。我现在想做的是:
- 在一个全新的机器上安装 Ubuntu 并将其用作主磁盘映像。
- 将分区内容克隆或复制到所有框。
- 当一个包/一组包需要更新时,在主磁盘映像上应用更改。
- 将主磁盘映像转储到中央 NFS 服务器。
- 使用 PXE/无盘引导将所有工作站置于恢复模式。
- 每周一次将主磁盘映像克隆到所有工作站。
- 使用配置管理工具(我应该使用什么?)来设置 /etc 和朋友。
有没有其他人做过类似的事情?你是怎么处理的?
我已经在使用 NFS/NIS,所以我不会丢失任何用户数据。
我认为puppet可以帮助你解决这个问题。您实际上是在管理一组工作站而不是服务器,但它应该以相同的方式工作。这样您就可以根据任何硬件差异等创建不同的组。
您可以将其全部复制给它们,但大多数 linux 发行版都包含一种为安装过程编写脚本的方法。优点是它会询问您是否出现问题,而只是将其重影并没有。
使用 Fedora(以及其他),您可以编写脚本,以便所有工作站登录到中央控制/警报源,以便他们自主执行软件包安装,但在出现差异和问题时询问。
作为替代方案,如果您有混合机器类型,请将它们的 MAC 地址分组到硬件设置组中,并使用实时 CD 进行rsync和安装 grub,具体取决于 MAC/硬件设置。
真的有很多方法。无头安装教程将提供一些带或不带屏幕的好主意。
编写 Fedora/Anaconda 安装过程的脚本
您可以考虑的另一个选择是使用“yum update”等现有流程从您运行的存储库中提取软件包,并强制这些工作站在特定时间全部更新。您需要做的就是更新主工作站,记下您需要分发的软件包,然后将它们放入您的内部存储库。
我建议创建一个APT 存储库。您可以将自己的包添加到存储库,并使用 cronjob 每周使用 apt-get 更新包。apt-get 作业可以自动进行,并且由于存储库是您自己的,因此您可以根据需要更新或不更新它。
您需要做的就是设置存储库并在所有机器上配置 APT 以使用它。我会推荐 cfengine 来配置所有的系统;因此,您不必逐一访问来更新每一个的 APT。
你甚至可以创建一个包含存储库配置的包;事实上,我会推荐它。然后,当您构建一个新环境时,您的本地 APT 配置只是一个 apt-get away。
我很难相信没有人提到过Redhat Spacewalk。
它是等同于 Redhat Network 的 Satellite 系统的免费开源软件。它允许您管理 CentOS、Fedora 或 Scientific Linux 安装的整个基础架构。它本质上是为了你想做的事情。
当然,您使用的是 Ubuntu,而不是 Redhat 派生的发行版。幸运的是,Ubuntu 世界有你在Landscape中寻找的东西。它与支持合同一起免费提供,或者它是 150 美元/节点。昂贵,但这是一个权衡。
如果您不使用 Landscape(或迁移到 RH 进行太空行走),那么 Puppet/CFengine 可能是您最好的选择。
ssh 进入每个盒子并运行“apt-get install whatever”。
考虑让所有客户端都信任来自管理主机的公共 ssh 密钥,因此您无需提供密码即可。
如果您使用的是 Ubuntu 等基于 debian 的发行版,请查看预播:
DebianInstaller 预种子
这允许您指定您在安装期间设置的几乎所有内容,例如网络、apt、软件包等。当您启动安装 cd 时,附加:
到内核启动菜单,它将使用您的预置配置进行安装。
我曾经是我的电气工程计算机实验室的管理员,大约有 20 台计算机,都是 Ubuntu。我喜欢总是使用最新的 Ubuntu 版本,所以我升级了很多。
计算机实验室的设置是这样的,我有一个 Debian master-box(很少更新/升级),我用它来托管学生分支的网页,管理用户帐户(使用 LDAP,允许每个用户坐在任何计算机并使用可用的主文件夹登录),运行维护脚本等。
我用来更新的方法(我认为这有点粗略)包括在发布时用最新版本编写一张 CD,然后手动将它们放入驱动器中,重新启动并完成常规安装过程。安装完成后,我将生成的公共 RSA 密钥(一次)复制到主机(到 /root/.ssh/ 文件夹中),从而让 Debian 机器控制主机机器。所以在主控箱上,我有一个 python 脚本(它当然可以是任何脚本语言),它使主机与我想要的配置同步,将配置文件复制到主机箱(例如 LDAP 配置文件,预先构建的 gnome 配置文件等),apt-get 所需的包(一个漫长的过程),
这个过程虽然粗略且不复杂,但只需要我在场才能从 ubuntu 安装 CD 实际启动“待更新”框并浏览 ubuntu 的几个安装屏幕,配置 /etc/network/interfaces 文件访问网络,然后在主机上运行脚本,然后我就可以去做别的事情了。
如果您想了解更多信息,请更具体地发布您想要自动化的内容,无论是设置当前正在运行的 linux 发行版的新发行版的实际过程,还是设置需要构建源文件等的程序(因为我过去我也为诸如 Eclipse(直接从包管理器中与 Ubuntu 不兼容)、XCircuit(从包存储库中充其量是“错误”、Matlab(需要在 cd 中打孔))等程序构建我自己的包- 键和更多)...
希望有帮助!=)