我只是添加一些问题,我的Debian虚拟服务器,我添加重新从头开始重新安装。 但是,我仍然可以访问旧版本,我可以检索已安装软件包的列表。
为了方便将来恢复虚拟服务器的过程,我想为每个服务器创build一个特定的包列表。
为了更好地解释我想实现的目标。 我已经有了一个自动化的stream程来创build一个新的虚拟服务器,其中包含了一些基本的包和configuration。 现在我想用这个“骨架”来保存三angular洲,以便重新安装特定的服务器。
一个真正的优点是也将保存更改的configuration文件从默认,但我只能住的包列表。
总之,我想要一种方法来创build一个主机上安装的软件包列表,而不是另一个。
如果列表仅包含手动安装的软件包而不是所有依赖项的列表,那将非常好。
如果你有一些现有的工具是为了完成这个特定的任务而devise的,那么可以自由地提出它们,但是我想保持尽可能小的依赖性。 有关信息,他们不完全是虚拟服务器,但LXC容器。
在参考安装(仅一次)上:
dpkg-query -W -f='${Package}\n' | sort > baselist.txt
(以下假设bash
)
要从参考安装中添加包(这不显示被删除的内容):
comm -1 -3 baselist.txt <(dpkg-query -W -f='${Package}\n' | sort)
更好的是,避免baselist.txt
副本:
comm -1 -3 <(ssh user@refserver cat /path/to/baselist.txt) <(dpkg-query -W -f='${Package}\n' | sort)
在旧服务器上运行:
dpkg –get-selections> old-packages-list
将上面的文件复制到新的服务器并在新的服务器上运行:
dpkg –set-selections <old-packages-list
apt-get更新
dselect更新
另外,还要记得将所有从旧服务器上的/etc/apt/sources.list
的额外存储库添加到新服务器上,在这个软件包迁移之前,就好像你没有这样做,那么大部分软件包都将被卸载。
您可以使用以下命令获取两台服务器上软件包的完整列表:
dpkg -l | sort > old_file dpkg -l | sort > new_file
然后,您可以使用以下方法获得差异:
diff -Nur old_file new_file > changes.txt
您可以使用grep过滤所需的更改。 此外,可以使用diff来获取configuration文件中的更改,并在需要时生成补丁以供应用。 顺便说一下,diff可以比较两个文件夹,而不仅仅是两个文件。
蓝图是专门为您的需要而devise的。 它吐出一个已安装的描述包和configuration文件已被更改。 它能够将这些描述转换成Puppet或Chef脚本,以便将它们应用于清洁盒子。
还发现这个有用的软件包,其描述如下:
一个Bash脚本,它将Debian软件包的文件系统树与当前文件系统树进行比较,为不同的文件打印统一的差异。
https://code.google.com/p/dpkg-diffs/
只要一个bash文件,你可以在你的PATH的某个地方运行 – 似乎适用于我,而且它不是太旧。
希望这有助于某人。