0

他にもアプリケーションがあることは知っていますが、yum/apt-get/aptitude/pacman が Linux ディストリビューションのコア パッケージ マネージャーであることを考慮してください。

今日、fedora 13 ボックスで見ました。

(7/7): yum-3.2.28-4.fc13_3.2.28-5.fc13.noarch.drpm       |  42 kB     00:00     

そして、そのようなパッケージ自体がどのように更新されるのか疑問に思い始めました。プログラムが自分自身を更新できるようにするには、どのような設計が必要ですか?

おそらくこの質問は一般的すぎるかもしれませんが、プログラマーよりも SO の方が適切だと感じました。この質問に適切な場所があれば、遠慮なくお知らせください。私が閉じるか、モデレーターが移動できます。

ありがとう。

4

2 に答える 2

1

それらの特定のシステムがどのように機能するかはわかりませんが...

  • 最近の UNIX システムは一般に、実行中の実行可能ファイルを問題なく上書きすることを許容するため、理論上はそのまま実行できます。
  • chroot監獄でそれを実行してから、システムが脆弱である時間を短縮するために移動するか、同様のことを行うことができます. ジャーナリング ファイルシステムを追加すると、さらに安全になります。

package-manager は、パッケージ アクセス データベースをメモリ内に保持して、競合状態を回避する必要があると思います。繰り返しになりますが、リスクの低い代替手段として、chroot jail と copy オプションを使用できます。

于 2010-10-15T18:26:38.213 に答える
0

そして、そのようなパッケージ自体がどのように更新されるのか疑問に思い始めました。プログラムが自分自身を更新できるようにするには、どのような設計が必要ですか?

多くの場合、この問題を解決するために特に「設計」する必要はありませんが、特定の「落とし穴」に注意する必要があります。

たとえば、Unix は inode を参照カウントすることで、「あなた」がまだ使用しているファイルを削除できるようにします。ただし、これは、たとえば、プラグインがある場合、トランザクションを開始する前にそれらをすべてロードする必要があるなど、いくつかのことを意味します...プラグインがトランザクションの最後にのみ実行される場合でも(最後に別のバージョンがあります)。

また、更新しようとしているものが確実に機能するようにするために、次のようなことを行う必要があります。 古いファイルを削除する前に、新しいファイルを配置します。また、古いファイルを切り捨てずに、リンクを解除してください。しかし、それらもあなたを助けます:)。

通信する外部の問題を使用することは、注意が必要な場合があります (更新後に古いバージョンの新しいコピーを実行できないため)。しかし、これは頻繁に行われるわけではありません。ダウンロードなどの場合は、更新の前に簡単に行うことができます。

yum/apt のような cmd ライン クライアントでは問題にならないものもあります。たとえば、2 回以上の「更新」を実行するプログラムがある場合、最初の更新がパッケージに対するものであった場合に問題が発生する可能性があります。マネジャー。ダウングレードすると、これがさらに楽しくなります:)。また、デーモンのようなプロセスは、基本的にパッケージマネージャーを「ロード」するべきではありませんが、他の問題と同様に、他の理由から、とにかくこれに従いたいと思う傾向があります。

于 2010-10-27T15:03:47.140 に答える