2013-06-21 1 views
7

Ich schreibe ein Programm in C auf Linux-Umgebung (Debian-Lenny) und möchte das Programm aktualisiert werden, wenn ein Update verfügbar ist (das Programm wird benachrichtigt, wenn a neues Update ist verfügbar). Ich suche nach einer Möglichkeit, das Programm selbst zu aktualisieren.Linux C - Implementierung der Fähigkeit, dass ein Programm sich selbst aktualisieren kann

Was ich denke ist, dass das Hauptprogramm ein neues Programm aufruft, um das Update zu behandeln. Das Aktualisierungsprogramm wird (Zugang zu) dem Quellcode und erhält die Update Informationen über die Änderungen auf dem Quellcode, so ähnlich:

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++;" 

dann den Hauptprozess töten, den Quellcode neu kompiliert und dann ersetzen die neue Binärdatei mit der alten.

oder gibt es eine bessere (leichtere) und standardmäßige Möglichkeit, die Fähigkeit zu implementieren, dass ein Programm sich selbst aktualisieren kann?

Ich benutze das Programm, um ein System mit einem Linux Embedded Board zu steuern. Daher möchte ich nicht, dass der Quellcode für eine andere Person zugänglich ist (wenn das System gehackt wird oder so). Wenn Sie den besten Weg finden, ein Programm mithilfe des Quellcodes zu aktualisieren, wie empfehlen Sie mir, den Quellcode zu sichern? Wenn Sie mir vorschlagen, den Quellcode zu verschlüsseln, welche Funktion (Linux C) kann das Programm zum Verschlüsseln und Entschlüsseln der Quelldatei verwenden?

+0

Wie wäre es mit der Suche nach einem Update auf einem Remote-Server? Ist das eine Option? – Jeff

+0

könnte am einfachsten sein, ein Svn, Git etc. Trunk zu aktualisieren und dann den Code neu kompilieren, und haben die Svn oder Git usw. die Drecksarbeit zu tun. – hetepeperfan

+4

Ich bin mir nicht sicher, ob ich das richtig lese, aber wenn Sie sich um den Quellcode kümmern, sollten Sie die neue Version des Programms auf einer sicheren Box kompilieren und einfach die Binärdatei senden (oder vom Client holen lassen). – Will

Antwort

9

Wenn Ihr Zielsystem Debian ist, sollten Sie nur das Debian-Paketsystem nutzen, um Updates bereitzustellen. Verpacken Sie Ihre kompilierte Anwendung in einem .deb-Paket, verteilen Sie sie auf einem APT-Archiv, das in Ihrem System sources.list enthalten ist, und verwenden Sie einfach Cron, um eine regelmäßige Update-Überprüfung mit apt zu planen. Das Paket .deb kann ein Post-Installationsskript enthalten, das Ihre Anwendung neu startet.

Sie können einen apt-proxy Caching-Proxy auf Ihren "Gateway" -Knoten mit Internetzugang ausführen, und die anderen Knoten verwenden diese als ihre apt-Quelle.

Das Verteilen von Quellcode ist in diesem Fall wahrscheinlich nicht angebracht, da Sie dann eine vollständige Compiler-Toolchain auf Ihr Zielsystem einbeziehen müssen.

1

Das, was Sie beschreiben, ist dem 80s-Stil der Lieferung von Unix-Quellcode sehr ähnlich, der durch die Entwicklung von PERL populär geworden ist. Sie verwenden diff, um eine Aufzeichnung der Änderungen zwischen verschiedenen Versionen des Quellcodes zu erhalten, verteilen Sie dann diese "Patch" -Datei und verwenden Sie patch, um die erforderlichen Änderungen am Client-Ende durchzuführen. Dies betrifft nicht die Netzwerkkommunikations- oder Versionskontrollprobleme.

Ein möglicher Nachteil ist, dass ein erstmaliger Download möglicherweise viele Patches anwenden muss, um die Version hochzuladen. Dies ist häufig der Fall, wenn alte Quellen von nntp: comp.sources.unix untersucht werden.

+0

80er-90er Unix-Geschichte: http://catb.org/esr/writings/taoup/html/ch02s01.html#id2880014 –

Verwandte Themen