Linux C - реализация возможности, которую программа может обновлять сама

Я пишу программу на C в среде Linux (Debian-Lenny) и хотел бы, чтобы программа обновлялась, когда доступно обновление (программа получает уведомление, когда доступно новое обновление). Я ищу способ, которым программа может обновить себя.

Я думаю, что основная программа вызывает новую программу для обработки обновления. Программа обновления будет иметь (доступ) к исходному коду и получать информацию об обновлении об изменениях в исходном коде, что-то вроде этого:

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) программа может использовать для шифрования и расшифровки исходного файла?


person Angs    schedule 21.06.2013    source источник
comment
Как насчет проверки обновлений на удаленном сервере? Это вариант?   -  person Jeff    schedule 21.06.2013
comment
может быть проще всего обновить магистраль svn, git и т. д., а затем перекомпилировать код, а svn или git и т. д. сделают грязную работу.   -  person hetepeperfan    schedule 21.06.2013
comment
Я не уверен, что правильно это прочитал, но если вам важен исходный код, вам следует скомпилировать новую версию программы в безопасном ящике и просто отправить двоичный файл (или позволить клиенту получить его).   -  person Will    schedule 21.06.2013
comment
Узлы связаны друг с другом через ad-hoc wlan, это будет закрытая сеть, но будут узлы-шлюзы, имеющие доступ в Интернет, узлы GW будут уведомлять клиентов о наличии доступного обновления, но мне интересно, как мне реализовать обновление процедура на стороне клиента   -  person Angs    schedule 21.06.2013


Ответы (2)


Если вашей целевой системой является Debian, вам следует просто воспользоваться преимуществами системы пакетов Debian для предоставления обновлений. Упакуйте скомпилированное приложение в пакет .deb, распространите его в архиве APT, который включен в пакет sources.list вашей системы, и просто используйте cron, чтобы запланировать регулярную проверку обновлений с помощью apt. Пакет .deb может включать сценарий после установки, который перезапускает ваше приложение.

Вы можете запустить apt-proxy кэширующий прокси-сервер на своих "шлюзовых" узлах, имеющих доступ к Интернету, и заставить другие узлы использовать его в качестве своего apt источника.

Распространение исходного кода в этом случае, вероятно, нецелесообразно, потому что тогда вам нужно будет включить полный набор инструментов компилятора в вашу целевую систему.

person caf    schedule 21.06.2013

То, что вы описываете, очень похоже на стиль доставки исходного кода Unix в стиле 80-х, популяризированный разработкой PERL. Вы используете diff для получения записи об изменениях между различными версиями исходного кода, затем распространяете этот файл «заплатки» и используете patch для выполнения необходимых модификаций на стороне клиента. Это не решает проблемы сетевого взаимодействия или контроля версий.

Возможным недостатком является то, что при первой загрузке может потребоваться применение множества исправлений для обновления версии. Это часто бывает при исследовании старого исходного кода из nntp:comp.sources.unix.

person luser droog    schedule 21.06.2013
comment
История Unix 80–90-х годов: catb.org/esr/writings/taoup/ html/ch02s01.html#id2880014 - person luser droog; 21.06.2013