如何进行快速、可重复的 Linux 安装

尚无读者喜欢此内容。
Two different business organization charts

Opensource.com

我最近的一些文章是关于 Linux 哲学及其对像我这样的系统管理员日常活动的影响。Linux 哲学的 基本原则之一是使用软件杠杆,而该原则的一个重要推论是自动化一切。

大量安装

我一直有多台计算机(最多一次有 14 或 15 台),随着 VMware 和 VirtualBox 的出现,还有相同数量的虚拟机用于测试。我还为客户系统安装 Linux。因此,我经常安装 Linux,有时一天安装多次。这就需要进行快速、可重复的安装。

例如,我有一套最喜欢的配置,用于诸如 Midnight Commander 之类的工具。我还有许多我喜欢安装的字体,这些字体不是大多数默认安装的一部分。我可以每次安装都使用 YUM 手动安装每种字体,并手动更改 Midnight Commander 的配置,但这会花费大量时间,并且变得乏味且无聊。

当我手动完成所有这些操作时,我经常忘记事情。我开始记录待办事项清单,但这仍然很耗时。因此,多年来,我开发了一个流程,以确保快速、可靠地完成安装,并且不会忘记安装或配置任何内容。

我首先进行一个非常基本的安装。我按照我想要的方式配置磁盘分区和逻辑卷,并且(可能)安装 KDE 桌面。我浏览可用软件包或组的整个列表,并试图记住我要安装哪些软件包才能在我的计算机上获得我想要的工具。

编写重复性任务的脚本

多年来,我开发了一个最初相当简单的 Bash 脚本,我运行该脚本来完成配置和安装我想要的其他 RPM 软件包。

随着时间的推移,这个简单的脚本不断发展,使我能够根据它们是桌面、服务器还是教室系统来定制标准安装。我添加了选项,使我能够选择一个或多个可用的桌面环境进行安装。我创建了需要安装的各种配置文件,并确定最好的方法是创建一个 RPM 软件包,其中包含这些文件,其中一些文件是我多年来创建的更多脚本,用于执行各种其他重复性任务以及我的安装后脚本。

我还扩展了我的脚本,以便像 Fedora 一样为 CentOS 启用相同的功能。RPM 软件包本身就是一种自动化形式,因为它使我无需记住要安装哪些文件以及安装位置。RPM 软件包现在安装大约二十几个文件,而我一直在改进的安装后脚本已有大约 10 年的历史,代码行数超过 1,300 行,注释行数超过 800 行。

即使使用 RPM 和安装后脚本,完成将我安装的许多计算机中的每一台都达到我的标准所需的所有工作也可能需要一个多小时。我当然不怀念手动键入所有这些指令并等待每个指令完成再键入下一个指令的日子。

从期望变为必需

一切都进展顺利。虽然我可以手动完成所有这些工作,但使用我的自动化工具要容易得多。Fedora 21 在几个月前问世,而我多年来创建的自动化现在已成为必需。

对于那些不熟悉 Fedora 21 的人来说,此版本的安装发生了巨大变化。现在有三个独立的安装 ISO 映像:桌面版、服务器版和云版。我使用过桌面版和服务器版 ISO 进行安装,但我非常不喜欢它们。我认为新的安装对于绝大多数 Fedora 用户来说都非常有限制。

没有简单的安装映像。桌面版 ISO 是一个 live 映像。除了 live 映像 ISO 中的软件包外,在安装过程中没有安装任何软件包的选项。一个都没有。如果我想安装 KDE 或任何其他桌面环境而不是 GNOME(我确实想这样做),我必须下载 KDE spin 或在初始安装后安装它。我无法从主要的安装介质 Live 映像中进行安装。

我甚至无法选择安装 LibreOffice。在安装过程中无法做到这一点。我必须在初始安装后安装它和许多其他东西。我认为这对许多潜在的 Linux 用户,尤其是新手来说,是一个巨大的绊脚石。

幸运的是,我的安装后 RPM 和脚本使我能够轻松地做到这一点。是的,我不得不对我的脚本进行一些调整——就像我对每个新版本所做的那样——以适应版本之间的一些变化。

我坚持遵循 Linux 哲学 的习惯对我来说非常有利。因为我花时间自动化一切,所以我个人几乎没有因 Fedora Linux 处理安装方式的重大变化而受到干扰。

这就是我通过自动化安装所获得的好处

  • 我节省了每次安装的时间。
  • 安装具有一致性。
  • 当引入发行版安装的重大更改时,几乎不会或完全不会中断。

当然,还有其他方法可以自动化 Linux 安装和配置,并且有许多工具可以应用于该任务,例如 Kickstart、Puppet、Satellite Server 等。我 广泛 使用过 Kickstart,但我的脚本在我当前的环境中运行良好,并且满足我的需求——这就是 Linux 的游戏规则。

 

警告: 本文描述的 Bash 程序始终在不断完善中,可能包含错误。 此脚本对您的系统所做的一些更改,例如禁用 SELinux,可能会使您的系统更容易受到入侵。 它可能无法按预期或描述的方式工作,您应该仅在本文的上下文中将其用作学习工具,而不是在生产环境中使用,直到您对其进行了彻底的测试并根据自己的需求和环境进行了必要的修改为止

David Both
David Both 是一位开源软件和 GNU/Linux 倡导者、培训师、作家和演讲者。自 1996 年以来,他一直从事 Linux 和开源软件工作,自 1969 年以来一直从事计算机工作。他是“系统管理员 Linux 哲学”的坚定支持者和传播者。

8 条评论

dd if=/dev/sda of=- | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd)

David,文章写得不错。我以前也遇到过同样的问题。我建议您制作自己的自定义 livecd,其中包含您想要的所有内容。我以前使用过 uck,它多次救了我的命。这是一篇您可能会喜欢的文章。

http://community.linuxmint.com/tutorial/view/1784

UCK: apt-get install uck

谢谢。

是的,我做过自己的 spins,这绝对是另一种自动化安装的方法。由于我的脚本中有许多选项,我要么需要大量的 spins,要么需要两到三个 spins,并且仍然需要一个安装后脚本。我选择完全使用脚本,它确实很好地满足了我的需求。

回复 作者 Giovanni Caligaris

啊哈!我也这样做。我有一个配置文件,其中包含很多“#”,如果机器应该具有我可能使用的某些功能,则取消注释。我进行不带任何 GUI 的裸 Debian 安装,挂载包含我的本地镜像(通过 apt-mirror)的外部硬盘驱动器,编辑我的配置文件,运行我的脚本,然后半小时后再回来。

使用带有基本 OS 系统的 PXE,然后混合使用脚本、ssh-copy-id 和“Ansible”,解决了我们在安装具有不同自定义设置的不同机器时维护大量脚本的许多问题。

扩展 RPM 的使用,它们可以用于各种用途,例如配置管理(配置文件)和元软件包以引入其他软件包(在 spec 文件的 Requires 字段中列出它们)。然后设置一个 repo,kickstart 可以直接使用它,并在系统启动时安装软件包。可以制作许多专用软件包,以便系统首次启动时就已具有所需的配置。无需在事后使用像 Puppet 这样的第三方系统来推倒重来。这样,rpm -V 也可以在本地用于验证配置的完整性。任何已被手动更改的系统都可以使用原始软件包重新配置,以将系统重置为正常状态。考虑一下。

我经常使用 Puppet,我只安装一个最小化的操作系统,安装 Puppet,其余的配置和软件包安装都完成了。最大的好处是它在任何地方都是一样的!

我不得不怀疑您为什么不使用 Remastersys 或 System Back?

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.