Как сделать двоичный файл, который загружает его более новую копию? (Ограниченные условия) - PullRequest
0 голосов
/ 20 сентября 2011

Хотел бы попросить совета.для бинарного файла необходим механизм самообновленияДавайте представим, что двоичные рулоны на хосте A и сервер обновлений - это сервер B.

Метод Lobster - это форк-скрипт bash с геттером wget / ftp / ncftp / etc, который загрузит и заменит.Но эм ... на А нет таких инструментов, и они не будут установлены.

Короче говоря, я не могу использовать какие-либо внешние программные инструменты (внешние по отношению к исполняемым двоичным файлам). Я могу просто запустить механизм жесткого кода при запускеДвоичный файл.

При запуске двоичного образа он может загрузить двоичный файл (и файл md5) просто через сокеты tcp в файле tmp, затем выполнить сравнение md5 и, если все в порядке, заменить двоичный файл и перезапустить сам.Это легко сделать, но у меня есть какое-то странное чувство ... не знаю.

Мб кто-то может поделиться и посоветовать? :) Заранее спасибо.

Условия: двоичный код написан на чистом c,freebsd - это бинарная сторона, а update-serve - это centos.Так что java / python / c ++ / any доступен на стороне сервера, но не на бесплатной.Да, если честно, возможно установить некоторые инструменты на стороне клиента и openfirewall для ftp, но хочу избежать и жесткого кода:)

ДОБАВЛЕНО: должно быть отмечено, что среда между А и В защищена..эммм.... как мы думаем, в любом случае проблема безопасности и доступа и подделка / вынюхивание из нашего мира там :) это просто локальный механизм реализации обновлений для некоторого двоичного файла, который в настоящее время мы обновляем из центра в ожидаемых сценариях через ssh.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2011

Прежде всего, проверьте, можете ли вы изменить двоичный файл, когда процесс выполняет его, какая-то система не позволяет этого.

Вы говорите, что не можете использовать внешний инструмент, так что, вероятно, вы не сможете создать другой "модуль обновления"программа ", которая будет делать ченге вместо вашего двоичного файла.Probalby Вы можете загрузить такую ​​программу (откуда вы хотите загрузить свое обновление), выполнить ее (exec, заменяет текущий процесс новым), который выполненный процесс загрузит и обновил ваш основной, а затем выполнить exec.

0 голосов
/ 20 сентября 2011

Вам придется переопределить целый набор функций, если вы хотите это сделать. Моим самым простым предложением было бы сделать ссылку на libcurl, жестко закодировать путь загрузки в ваш исполняемый файл и записать образ вашего исполняемого файла обратно в $ ARGV [0]. Однако вам определенно следует переосмыслить концепцию дистрибуции, большинство дистрибутивов используют ту или иную форму управления пакетами, и ее использование является самой простой альтернативой для всех вовлеченных сторон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...