我在Linux环境(Debian-Lenny)上用C语言写了一个程序,希望程序在有更新时进行更新(当有新的更新可用时,程序会得到通知)。我正在寻找一种方法,该程序可以自我更新。
我的想法是,主程序调用一个新程序来处理更新。更新程序将拥有(访问)源代码,并接收关于源代码更改的更新信息,如下所示:
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)对源文件进行加密和解密?
发布于 2013-06-21 16:42:27
如果您的目标系统是Debian,那么您应该利用Debian打包系统来提供更新。将编译后的应用程序打包到.deb
包中,将其分发到包含在系统sources.list
中的APT归档中,然后使用apt
安排定期更新检查。.deb
软件包可以包含一个重新启动应用程序的安装后脚本。
您可以在可以访问internet的“网关”节点上运行apt-proxy
缓存代理,并让其他节点将其用作其apt
源。
在这种情况下分发源代码可能并不合适,因为这样您就需要在目标系统上包含完整的编译器工具链。
发布于 2013-06-21 16:25:53
您所描述的内容与80年代交付Unix源代码的风格非常相似,这种风格因PERL的开发而流行起来。您可以使用diff
获取不同版本源代码之间的更改记录,然后分发这个“补丁”文件,并使用patch
在客户端执行必要的修改。这并没有解决网络通信或版本控制问题。
一个可能的缺点是,第一次下载可能需要应用许多补丁来升级版本。在调查来自nntp:comp.sources.unix的旧源代码时,通常会出现这种情况。
https://stackoverflow.com/questions/17230540
复制相似问题