2013-06-21 15 views
7

我正在Linux環境(Debian-Lenny)的C上編寫一個程序,並希望程序在更新可用時進行更新(程序會在新的更新可用)。我正在尋找一種程序可以自行更新的方式。Linux C - 實現程序自身可以更新的能力

我在想什麼是主程序調用一個新的程序來處理更新。該更新程序將有(獲得)的源代碼,並接收有關源代碼的修改,類似的東西更新信息:

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)來加密和解密源文件?

+0

如何檢查遠程服務器上的更新?這是一個選擇嗎? – Jeff

+0

可能是最簡單的更新svn,git等主幹,然後重新編譯代碼,並讓svn或git等完成骯髒的工作。 – hetepeperfan

+4

我不確定我是否正確地閱讀了這篇文章,但是如果您關心源代碼,則應該在安全的方框中編譯新版本的程序,然後發送二進制文件(或讓客戶端讀取它)。 – Will

回答

9

如果您的目標系統是Debian,那麼您應該利用Debian打包系統來提供更新。將已編譯的應用程序打包在.deb包中,將其分發到系統sources.list中包含的APT存檔中,然後使用cron安排與apt的定期更新檢查。 .deb軟件包可以包含重新啓動應用程序的安裝後腳本。

您可以在可以訪問互聯網的「網關」節點上運行apt-proxy高速緩存代理,並讓其他節點將其用作apt源。

在這種情況下分發源代碼可能不太合適,因爲那時您需要在目標系統上包含完整的編譯器工具鏈。

1

您所描述的與提供Unix源代碼的80年代風格非常相似,由PERL的開發推廣。您使用diff來獲取不同版本的源代碼之間的更改記錄,然後分發此「補丁」文件,並使用patch在客戶端執行必要的修改。這並沒有解決網絡通信或版本控制問題。

可能的缺點是,首次下載可能需要應用許多修補程序才能啓動該版本。從nntp:comp.sources.unix調查舊來源時通常會出現這種情況。

+0

80s-90s Unix歷史記錄:http://catb.org/esr/writings/taoup/html/ch02s01.html#id2880014 –

相關問題