我希望能够将已启用systemd
单元的列表从一台机器复制到另一台机器。
systemd
根据符号链接的存在(或缺乏)启用或禁用单元。在这个时候,我能想到的最好的工具是tree
或者find
?所以,理论上,我可以编写一些东西;但是不是已经有一个工具可以做到这一点吗?
在一个完美的世界中,它将扫描创建此类符号链接的所有各种目录(我知道 3: /etc/systemd /run/systemd ~/.config/systemd/user
)并呈现一个可读文件,该文件可用于在另一台计算机上重播设置。也可用于备份。
要创建已启用的系统服务列表,我们可以使用
这将为我们留下带有启用服务列表的变量ENABLED_SERVICES ,每行一个。
要启用此列表中的所有服务,我们可以使用
您可能希望在命令实际执行之前对其进行检查。你可以通过运行来做到这一点
(注意额外的echo语句)。
唯一剩下的就是从系统A获取变量ENABLED_SERVICES到系统B,以便它们可以用于启用那里的服务。有几种选择可以做到这一点。例如,您可以将第一个命令的输出重定向到一个文件,将其传输到系统B,并将来自该文件的cat命令的输出分配给一个名为ENABLED_SERVICES的变量。
但是,使用第一个命令的修改版本可能更简单
并复制输出并将其粘贴到系统B上的终端中。此命令产生多行输出,非常好。
你知道开发人员开的老笑话“没有错误,它可以在我的笔记本电脑上运行!” 所以发现错误的同事回复“所以我们会运送你的笔记本电脑”?当您尝试制作生产系统的精确副本时,您正在危险地接近那个深渊。
与其重用(实际上通常部分是无意的)未记录的系统状态修改的工件,不如将您的预期状态放入您可以使用的最具表现力和一致且免提的可部署语言中(ansible 是您的朋友),并将其存储在版本控制中(git是你的朋友)。使用有效状态的快照(为此,rsync 可能已经足够好了)来验证您至少已经完善了该方法一次(将自动设置的新系统与您手工制作的系统进行比较),否则仅用于诊断和灾难恢复目的。