我已经安装并配置了一个 ubuntu 服务器(安装了其他软件包并对一些配置文件进行了修改)。现在我想安装一个几乎相同的系统,只是 IP、主机名或类似的东西不同。是否有任何脚本或工具可以自动执行此过程?
我不需要像 Clonezilla 这样可以制作映像克隆的东西。我不需要像 remastersys 这样可以创建 ISO 映像的东西。我想要这样的东西:http://www.debianadmin.com/clone-your-ubuntu-installation.html或这个:http://ubuntuforums.org/showthread.php?t=525660,而且更加完整和自动化。
基本上,此工具应扫描现有系统并提取已安装的软件包列表。然后将系统上的配置文件与每个软件包的默认配置文件进行比较,并在不同之处生成差异。但是,它还应识别每个服务器的不同配置(如 IP、主机名等),并提供自定义配置的选项。
所有这些都应该自动完成,输出应该是当前系统的非常小的“DNA”。然后应该使用类似 debootstrap 的工具来安装新系统,并将“DNA”上描述的更改应用于它:安装新软件包并修改其配置文件。
关于动机:
我在云中管理一个虚拟 Web 服务器,我曾多次在该服务器上进行配置:与安全、不同的软件包等相关。现在,如果我想构建另一台具有与第一台服务器相同功能和用途的服务器,那么漫长而乏味的方法是再次检查所有安装和配置,而且我仍然可能会遗漏一些东西。我想也许有某种工具可以比较服务器的当前状态和刚安装的服务器的初始状态。这种差异还可以帮助我审核当前系统,我不记得我接触过和弄乱过的所有东西。
如果我的朋友想要构建一个像我这样的系统,这种 diff 也可以作为我可以与朋友分享的秘诀。这比传递巨大的 tarball 或图像要方便和安全得多。
建议用于克隆的工具:
建议的一些工具如下:
但它们都不适合我的情况。
答案1
如果两个系统安装了相同的软件包,并且您对它们的 /etc 目录进行了比较,那么您基本上会得到它们之间的所有配置更改(可能不是 100%,但仍然非常准确)。因此,我审计系统时做了以下事情:
使用 debootstrap 安装最小系统(类似于此处描述的: http://dashohoxha.blogspot.com/2013/02/how-to-set-up-chroot-environment-for.html)。
确保我在 chroot 系统上安装了主系统上安装的所有软件包(如下所述:http://www.debianadmin.com/clone-your-ubuntu-installation.html)
对两个系统的 /etc 目录进行差异分析。
当然,这个 diff 不能轻易地用来安装和配置另一个系统,但了解差异在哪里以及它们是什么,可以帮助构建一个 tklpatch(像这样:https://github.com/dashohoxha/B-Translator/tree/master/tklpatch),这当然不太容易做到,需要做一些工作。
然后,我可以分发/发布这个 tklpatch,每个人都可以轻松构建一个与我的非常相似的系统。
答案2
我认为您可以使用dpkg --get-selections
。然后在新服务器上安装这些软件包。您可以从旧服务器复制配置文件。这并不轻松,但可以访问。