通过GPRS部署到嵌入式设备

时间:2015-06-09 11:24:47

标签: linux git deployment embedded rsync

我在这里抓得很厉害。我们在距离数百公里的地方有多个Raspberry Pis。我们需要能够安全地(远程)升级它们,因为本地访问的价格可能高达几百欧元。

raspis运行rasbian,/在SD卡上安装在RO中,以防止断电时的损坏(通常每天一次)。 SD卡是从相同的基本映像克隆的,但包含手动安装的软件包和可能因设备而异的修改文件。 raspis都有一个USB闪存作为一个更耐腐败的RW驱动器和一个脚本,以便在驱动器损坏的情况下在启动时格式化它。他们通过GPRS连接呼叫家庭,具有不同的可靠性。

系统要求如下:

  • 配置文件,脚本和二进制文件的简易版本,至少/ etc,/ root和home,最好是Git
  • 通过GPRS从任何版本高效/升级到其他版本 - >仅传输文件增量
  • 如果连接不再有效,可以自动回滚最近应用的补丁
  • 下载更改时根文件系统不能处于RW模式,更改需要在应用于/
  • 之前存储在本地

简单方法可能是在远程git存储库中保留文件系统的完整副本,在提交之间生成diff文件,将补丁上载到字段并应用它。但是,目前不同raspis上的文件不相同。这意味着,至少在安装系统时,文件必须通过类似于rsync -a的东西进行同步。

程序应该是“将/和ssh文件夹之间的差异保存到USB记忆棒上的文件,mount / RW,从文件应用diff,mount / RO”。 Rsync同时进行差异化并应用,因此我的第一个问题变为:

1是否存在类似rsync的东西,可以从本地和远程保存文件增量并在以后应用它们?

另外,我从来没有制作过类似这样的系统,而且画面“最接近合法,我可以提出”。这里有很多活动部件,我害怕事先没有想到的事情会导致事情发生可怕的错误。我的其余问题是:

  1. 我离开这里的基地是否真的有更智能/安全(r)的方式来做这件事?
  2. 如果没有,我应该遵循什么样的最佳做法以及要特别注意哪些事情(不要将设备弄砖)?
  3. 我如何处理安装新程序之类的事情?绕过数据包管理器,安装在/ opt?
  4. 如何管理权限/所有者(root + 1用户的应用程序逻辑)?只是以root身份运行所有内容并希望获得最佳效果?

1 个答案:

答案 0 :(得分:1)

是的,这是一个非常广泛的问题。这不是您问题的直接答案,而是为您的研究提供指导。

防止文件系统损坏的一种方法是使用覆盖文件系统(例如,AUFS,UnionFS),其中根文件系统以只读方式挂载,并且基于tmpfs(基于RAM)或基于闪存的读写装载“ “只读根。这需要您自己的init脚本,包括使用 pivot_root 命令。由于没有任何关键的安装RW,该系统可以稳健地处理停电。要点在pivot_root之前,FS看起来像

/      read-only root (typically flash)
/rw    tmpfs overlay
/aufs  AUFS union overlay of /rw over /

在pivot_root之后

/      Union overlay (was /aufs
/flash read only root (was /)

/ flash文件系统的更新是通过重新安装读写,执行更新和重新安装只读来完成的。例如,

mount -oremount,rw <flash-device> /flash
cp -p new-some-script /flash/etc/some-script
mount -oremount,ro <flash-device> /flash

您可能会也可能不会立即看到/ etc中反映的更改,具体取决于tmpfs overlay中的内容。

您可能会发现自己大量使用 chroot 命令,尤其是在您决定使用包管理器时。快速样本

mount -t proc none /flash/proc
mount -t sysfs none /flash/sys
mount -o bind /dev /flash/dev
mount -o bind /dev/pts /flash/dev/pts
mount -o bind /rw /flash/rw  # 
mount -oremount,rw <flash-device> /flash
chroot /flash
# do commands here to install packages, etc
exit # chroot environment
mount -oremount,ro <flash-device> /flash

学习使用修补程序命令。有二进制补丁命令How do I create binary patches?

对于出现问题时的超级恢复,您需要具有监视程序计时器的硬件支持以及从备用(辅助)根文件系统进行故障安全启动的能力。

如果你想要防弹产品,预计会花费大量的时间和金钱。没有捷径。