7

我正在 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)来加密和解密源文件?

4

2 回答 2

9

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

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

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

于 2013-06-21T08:42:27.317 回答
1

您所描述的内容与 80 年代交付 Unix 源代码的风格非常相似,这种风格因 PERL 的发展而得到普及。您用于diff获取源代码不同版本之间的更改记录,然后分发此“补丁”文件,并用于patch在客户端执行必要的修改。这不能解决网络通信或版本控制问题。

一个可能的缺点是,首次下载可能需要应用许多补丁来提升版本。在调查来自 nntp:comp.sources.unix 的旧源时,通常会出现这种情况。

于 2013-06-21T08:25:52.680 回答