想征求意见。 二进制需要具有自我更新的机制。让我们想象主机A上的二进制卷和更新服务器是服务器B.
龙虾方法是使用wget / ftp / ncftp / etc getter来分叉bash脚本,它将下载并替换。但是......嗯...... A上没有这样的工具,也不会安装它们。
简而言之,我不能使用任何外部软件工具(运行二进制文件外部)。我只能在运行二进制文件时硬编码机制。
当二进制映像运行时,它可以简单地通过tmp文件中的tcp套接字加载二进制(和md5文件),然后执行md5比较,如果一切正常,则替换二进制并重新启动自身。它很容易做到,但我有一些奇怪的感觉......不知道。
有人可以分享和建议吗?:)先谢谢你。条件:二进制是用纯c编写的。 freebsd是二进制滚动端,update-serve是centos。所以java / python / c ++ / any在服务器端可用,但不是免费的。是的,老实说,它可以在客户端和openfirewall上安装一些工具用于ftp,但是要避免和硬编码:)
增加:必须注意A和B之间的环境是安全的......我们认为,无论如何安全和访问问题以及欺骗/嗅探我们的世界:)它只是本地更新实现某些二进制文件的机制,现在我们通过ssh从期望脚本中心更新。
答案 0 :(得分:0)
如果您愿意,您将不得不重新实现一系列功能。我最简单的建议是链接到libcurl,将下载路径硬编码到可执行文件中,并将可执行文件的映像写回$ ARGV [0]。但是,您绝对应该重新考虑您的分发概念,大多数发行版都采用某种形式的包管理,并且使用它是所有相关方的最简单的替代方案。
答案 1 :(得分:0)
首先检查一下进程执行时是否可以修改二进制文件,某些系统不允许这样做。
你说你不能使用外部工具,所以很有可能你不能创建另一个“更新程序”来代替你的二进制文件。 Probalby你可以下载这样的程序(从你想要下载你的更新),执行它(exec,用新的替换当前进程) 执行过程将下载并升级您的主要进程,然后执行它。