そして、そのようなパッケージ自体がどのように更新されるのか疑問に思い始めました。プログラムが自分自身を更新できるようにするには、どのような設計が必要ですか?
多くの場合、この問題を解決するために特に「設計」する必要はありませんが、特定の「落とし穴」に注意する必要があります。
たとえば、Unix は inode を参照カウントすることで、「あなた」がまだ使用しているファイルを削除できるようにします。ただし、これは、たとえば、プラグインがある場合、トランザクションを開始する前にそれらをすべてロードする必要があるなど、いくつかのことを意味します...プラグインがトランザクションの最後にのみ実行される場合でも(最後に別のバージョンがあります)。
また、更新しようとしているものが確実に機能するようにするために、次のようなことを行う必要があります。 古いファイルを削除する前に、新しいファイルを配置します。また、古いファイルを切り捨てずに、リンクを解除してください。しかし、それらもあなたを助けます:)。
通信する外部の問題を使用することは、注意が必要な場合があります (更新後に古いバージョンの新しいコピーを実行できないため)。しかし、これは頻繁に行われるわけではありません。ダウンロードなどの場合は、更新の前に簡単に行うことができます。
yum/apt のような cmd ライン クライアントでは問題にならないものもあります。たとえば、2 回以上の「更新」を実行するプログラムがある場合、最初の更新がパッケージに対するものであった場合に問題が発生する可能性があります。マネジャー。ダウングレードすると、これがさらに楽しくなります:)。また、デーモンのようなプロセスは、基本的にパッケージマネージャーを「ロード」するべきではありませんが、他の問題と同様に、他の理由から、とにかくこれに従いたいと思う傾向があります。