Linux C - 实现程序可以自我更新的能力

时间:2013-06-21 08:14:42

标签: c linux updates updatemodel

我正在Linux环境下编写一个C程序(Debian-Lenny),并且希望在有更新时更新程序(当有新的更新时程序会收到通知)。我正在寻找程序可以自行更新的方法。

我在想的是主程序调用一个新程序来处理更新。更新程序将拥有(访问)源代码并接收有关源代码更改的更新信息,如下所示:

edit1: line 20, remove column 5 to 20;
edit2: line25, remove column 4-7 then add "if(x>3){" from the column4
edit3: line 26, enter a new line and insert "x++;"

然后终止主进程,重新编译源代码,然后用旧代码替换新的二进制文件。

或者是否有更好(更简单)和标准的方式来实现程序可以自行更新的能力?

我使用该程序来控制具有Linux嵌入式主板的系统。因此,我不希望其他人可以访问源代码(如果系统被黑客攻击或其他东西)。 如果使用源代码更新程序的最佳方法,您如何建议我保护源代码?如果您建议我加密源代码,程序可以使用什么功能(Linux C)来加密和解密源文件?

2 个答案:

答案 0 :(得分:9)

如果您的目标系统是Debian,那么您应该利用Debian打包系统来提供更新。将已编译的应用程序打包到.deb包中,将其分发到系统sources.list中包含的APT存档中,然后使用cron安排apt的定期更新检查。 .deb包可以包含重新启动应用程序的安装后脚本。

您可以在具有互联网访问权限的“网关”节点上运行apt-proxy缓存代理,并让其他节点将其用作apt来源。

在这种情况下分发源代码可能不合适,因为那时您需要在目标系统上包含完整的编译器工具链。

答案 1 :(得分:1)

您所描述的内容非常类似于80年代提供的Unix源代码,并且由PERL的开发推广。您使用diff来获取源代码的不同版本之间的更改记录,然后分发此“修补程序”文件,并使用patch在客户端执行必要的修改。这不涉及网络通信或版本控制问题。

可能的缺点是首次下载可能需要应用许多补丁才能使版本升级。从nntp:comp.sources.unix调查旧源时经常会出现这种情况。