7

Linux 環境 (Debian-Lenny) で 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) を使用してソース ファイルを暗号化および復号化できますか?

4

2 に答える 2

9

ターゲット システムが Debian の場合は、Debian パッケージ システムを利用して更新を提供する必要があります。コンパイルしたアプリケーションを.debパッケージにパッケージ化して、システムの に含まれる APT アーカイブに配布し、sources.listcron を使用して で定期的な更新チェックをスケジュールしaptます。パッケージには、.debアプリケーションを再起動するインストール後スクリプトを含めることができます。

apt-proxyインターネットにアクセスできる「ゲートウェイ」ノードでキャッシング プロキシを実行し、他のノードにそれをaptソースとして使用させることができます。

この場合、ソース コードを配布することはおそらく適切ではありません。ターゲット システムに完全なコンパイラ ツールチェーンを含める必要があるからです。

于 2013-06-21T08:42:27.317 に答える
1

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

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

于 2013-06-21T08:25:52.680 に答える