如何制作下载其新版本的二进制文件?(限制条件)

问题描述:

想征询意见。 有二进制需要有自我更新的机制。让我们想象在主机A和更新服务器上的二进制卷,更新服务器是服务器B.如何制作下载其新版本的二进制文件?(限制条件)

龙虾方法是用wget/ftp/ncftp/etc分叉bash脚本将会下载并替换。但是,呃...... A上没有这样的工具,他们不会被安装。

总之我不能使用任何外部软件工具(外部运行二进制)。我可以只硬编码机制在运行的二进制文件。

由于二进制映像运行时,它可以在tmp文件装载二进制(和MD5文件)只需通过TCP套接字,然后做MD5比较,如果一切OK,然后替换二进制文件,并重新启动本身。它很容易做到,但我有一些奇怪的感觉...不知道。

MB有人可以分享和建议?:)预先感谢您。

条件:二进制文件是用纯c编写的。 freebsd是二进制滚动端,update-serve是centos。所以java/python/C++/any在服务器端可用,但不是免费的。 Y,说实话它是possbile在客户端安装一些工具和openfirewall为FTP,但要避免和硬编码:)

ADDED:必须注意的是,A和B之间的环境是安全的..呃...因为我们认为,无论如何,安全和访问问题和欺骗/嗅探出我们的世界:)它只是本地更新实现机制的一些二进制文件,现在我们通过ssh从期望脚本中心更新。

+2

您可能想考虑让任何用户写入通用二进制文件的安全含义。做到这一点是一个重大问题。 – Flexo

+2

你应该尝试使用平台的标准方法,比如'yum','rpm'或者任何他们在BSD上使用的方法。 –

+1

回复:补充 - 我想到的甚至没有达到嗅探/欺骗可能成为问题的地步。 *简单地让一个非root用户写入'/ usr/bin'中的某个东西是不容易的* – Flexo

如果你想这样做,你将不得不重新实现一大堆功能。我最简单的建议是链接到libcurl,将下载路径硬编码到您的可执行文件中,并将可执行文件的图像写回$ ARGV [0]。但是,您绝对应该重新考虑您的分销概念,大多数分销商都采用某种形式的包管理,并且使用它是所有相关方最容易的选择。

+0

是的,我知道curl,但是curl在服务器端需要至少一些lighhtpd/python simplehttp服务器,任何方式都需要http/ftp/s服务器。听起来像有点开销,但是mb。tnx的答案。 – Glory

+0

接受你的建议。搜索simple java http serve rimplimentatin,tunned a bit [link](http://www.prasannatech.net/2008/10/simple- http-server-java.html),然后在客户端使用curl来安全地下载它。Ty :)致以最好的问候 – Glory

首先检查是否可以在进程正在执行时修改二进制文件,但有些系统不允许它。

你说你不能使用外部工具,以便probbly您不能创建另一个“更新程序”,这将做chenge而不是你的二进制文件。 Probalby你可以下载这个程序(从你想要的地方下载你的更新),执行它(exec,用当前进程替换当前进程) 执行进程将下载并上传你的主进程,然后执行它。

+0

iv选择使用卷曲自制java HTTP存根在服务器side.yp,我下载到临时,然后检查md5,替换正在运行并重新启动..但分叉,然后执行也很好的想法,忘了经典的学校方法:)... Tnhx – Glory