2013-06-21 12 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

あなたが説明していることは、Perlの開発によって普及したUnixソースコードを提供する80sスタイルに非常に似ています。 diffを使用して、さまざまなバージョンのソースコード間で変更の記録を取得し、この「パッチ」ファイルを配布し、patchを使用してクライアント側で必要な変更を実行します。これは、ネットワーク通信やバージョン管理の問題には対処しません。

可能性のある欠点は、初回のダウンロードでバージョンアップを行うために多数のパッチを適用する必要がある可能性があることです。これは、古いソースをnntp:comp.sources.unixから調べる場合によく見られます。

+0

80年代〜90年代のUNIX履歴:http://catb.org/esr/writings/taoup/html/ch02s01.html#id2880014 –

関連する問題