パッケージマネージャーにロックファイルが必要なのはなぜですか?


10

dpkg使用中は、ロックファイル(/var/lib/dpkg/lock)を使用します。

  • なぜこれらのロックファイルが必要なのですか?
  • 複数のインスタンスが使用できないのはなぜですか?

Dpkgはインストールを行います。これは、競合を回避するためのセーフモードです。同時に1つのインストールのみ。
albfan 2014

回答:


15

これは、dpkg特定の問題ではありません(私の編集のタイトルが示唆したとおり)。むしろ、これは(私が知っている)すべてのパッケージマネージャーが行うことです。そして正当な理由で。しかし、それがなぜ混乱を招くのか理解しています。

パッケージマネージャーは、インストール済みパッケージの情報を追跡するためにデータベースに依存しています。複数のユーザーが同時にデータベースに書き込もうとすると、データを破壊する可能性が高くなります(これは実際にシステムに悪影響を及ぼします)。

その結果、多くの(すべての?)パッケージマネージャーはデータベースが書き込まれていることを通知するためにロックファイルに依存しているため、別のクライアントがそうすることを許可すべきではありません。


インテリジェントパッケージマネージャーは、リクエストが読み取り専用で、データベースをロックする必要がない場合を判断できる場合があることに注意してください。結果として; 一部のアクションは、他のアクションが実行されない場所で同時に実行できる可能性があります。


2
Portageとpaludis(Gentooのパッケージマネージャー)は並行して動作できると思います。ロックを使用する場合、インストール済みリストにパッケージを追加するときに簡単にしか機能しません。
Vality 14

Gentooのパッケージマネージャーを見て、まもなく私の回答を更新します。
HalosGhost 14

これに関する最新情報が見つかりません。しかし、少なくともしばらくの間、paludisとportageの両方がロックファイルを利用しました。データの破損を防ぐ唯一の安全な方法の1つであるため、これは非常に一般的な戦略です。Portageやpaludisがまだそのような方法を使用していなかったとしたら、私は驚きます。
HalosGhost 14

1
ああ、それは正しいようですが、これらのロックの範囲は異なります。これらのロックは、パッケージインデックス(利用可能なパッケージの消失)を更新するときにのみ使用されます。実際にパッケージをインストールすると、読み取り専用の操作になるため、ロックは呼び出されません。しかし、はい、私はあなたが何を意味するのか理解しています、それは戦略がとても一般的であることを意味します。
Vality 14

9

ロックファイルは、複数のインスタンスの並列実行防ぐために使用されます。

これがパッケージマネージャーにとってなぜ重要なのですか?

パッケージマネージャは、全体像から見て、ハードディスクに複雑な変更加えるプログラムです。

変更は1つのステップ(「アトミック」)では実行できないため、複数のステップがあります。手順の多くは、前の手順の結果に依存しています。

そのため、パッケージマネージャーは、各ステップを実行する前にハードディスクを分析するか、一度だけ分析して、適用される変更を追跡する必要があります。最初のオプションは非常に遅いです。2番目は、他のインスタンスが変更を加えないことを要求します。

表示される可能性のある他の多くの問題があります。

並行して動作するパッケージマネージャーを実装することは不可能ではありませんが、それだけの価値があるほど複雑です。のように、あなたはどれほど複雑であるか想像することはできません。本当に。


2

dkpg(およびrpm他のほとんどの従来のパッケージマネージャー)は、パッケージをグローバルスペースにインストールすることで機能します。これは、パッケージが互いに競合する可能性があることを意味します(たとえばAB両方がインストールされるため、同時にインストールすることはできません/usr/lib/libfoo.so)。パッケージマネージャーは、システムを一貫した状態に保つために、このような競合を検出し、そのようなインストール要求を拒否する必要があります。パッケージマネージャーの複数のインスタンスを同時に実行すると、非常に複雑になり、エラーが発生しやすくなります。

競合のないパッケージマネージャー(例:http : //0install.net)では、複数のパッケージを並行してインストールできます。A/libfoo.soまた、ロックファイルは必要ありません(B/libfoo.so別のディレクトリに移動します)。


1システムに同時に存在し、利用可能であるという意味で、および同時にダウンロードされ、システムに追加されるという意味で、並列処理。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.