【发布时间】:2015-08-24 04:33:24
【问题描述】:
我在这里有一个相当令人头疼的问题。我们在相距数百公里的场地上有多个 Raspberry Pi。我们需要能够安全地(ish)远程升级它们,因为本地访问的价格可能高达几百欧元。
raspis 运行 rasbian,/ 位于安装在 RO 中的 SD 卡上,以防止断电时损坏(通常每天一次)。 SD 卡从相同的基本映像克隆而来,但包含手动安装的包和修改过的文件,这些文件可能因设备而异。 raspis 都有一个 USB 闪存作为更耐腐蚀的 RW 驱动器和一个脚本,用于在启动时对其进行格式化,以防驱动器损坏。他们通过 GPRS 连接以不同的可靠性打电话回家。
对系统的要求如下:
- 配置文件、脚本和二进制文件的简单版本控制,至少 /etc、/root 和 home 最好是 Git
- 通过 GPRS 从任何版本高效升级/降级到其他版本 -> 仅传输文件增量
- 如果连接不再有效,可以自动回滚最近应用的补丁
- 下载更改时,根文件系统不能处于 RW 模式,更改需要先存储在本地,然后再应用到 /
简单的方法可能是将文件系统的完整副本保存在远程 git 存储库中,在提交之间生成一个差异文件,将补丁上传到该字段并应用它。但是,目前不同 raspis 上的文件并不相同。这意味着,至少在安装系统时,必须通过类似于 rsync -a 的方式来同步文件。
该过程应遵循“将 / 和 ssh 文件夹之间的差异保存到 U 盘上的文件,挂载 / RW,从文件应用差异,挂载 / RO”。 Rsync 同时进行 diff-getting 和 apply,所以我的第一个问题变成了:
1 是否存在类似 rsync 的东西可以从本地和远程保存文件增量并在以后应用它们?
另外,我从来没有做过这样的系统,而且drawt是“我能想到的最接近合法的”。这里有很多活动部件,我很害怕我事先没有想到的事情会导致事情发生可怕的错误。我剩下的问题是:
- 我是不是离基地很远,实际上是否有更智能/更安全的方法来做到这一点?
- 如果不是,我应该遵循什么样的最佳实践以及需要非常小心的事情(不让设备变砖)?
- 如何处理诸如安装新程序之类的事情?绕过数据包管理器,安装在 /opt 中?
- 如何管理权限/所有者(应用程序逻辑的 root+1 用户)?只需以 root 身份运行所有内容并希望获得最好的结果?
【问题讨论】:
-
这是一个有趣的问题,所以 +1,但我认为目前的形式过于宽泛,无法简洁地回答。
标签: linux git deployment embedded rsync