/ / preinst Debianメンテナンススクリプトの新しいバージョンを入手する - debian、パッケージ

preinstで新しいバージョンを入手するDebianの保守スクリプト - debian、パッケージ

私は古いDebianパッケージが新しいバージョンのDebianパッケージを踏みにじらないようにしたいのです。

電流を比較してこれをやろうとしているdebian / preinstメンテナンススクリプトに現在インストールされているものに対するDebianパッケージのバージョン。理想的には、警告と(Continue y / n?)プロンプトを表示します。

この質問は密接に関連しています Debianのpostinstスクリプト内で新しくインストールされたバージョンを入手するにはどうすればいいですか?。その問題は「09」で作成されたので、その質問に自分の質問を追加するのが適切かどうかはわかりません。

以前の質問に対する回答は、「なぜパッケージのバージョンを単純にハードコードできないのですか」というものでした。

私の答えは、私はそのバージョンをさらに別の場所で管理したくないということでしょう。そのバージョンはすでにdebian / changelogおよびPythonモジュールに入っています。 その中に.pyスクリプトとして バージョン。このロジックもまた複製する必要があります。私たちが維持管理している他のいくつかの内部Debianパッケージ。理想的には、Debianパッケージを構築するプロセスからステップを削除することによってこれを可能な限り単純にしたいです。

関連するDebianのドキュメントを読みました http://www.debian.org/doc/debian-policy/ch-maintainerscripts.html 古いバージョンを入手することはできますが、現在インストールしているバージョンを入手する方法はありません。

私はdebian / preinst内の環境をエコーし​​てそれをSUDO_COMMAND = / usr / bin / dpkg -i python-mypkg_1.9.3-2_all.debというバージョンを含む環境変数が提供されます。私はこの方法でバージョンを入手することができますが、このパッケージがデプロイされるすべてのディストリビューションに存在するためにこの変数に頼ることができるかどうかはわかりません。

私はdpkg-parsechangelogを知っています。これは素晴らしいツールです!しかし、パッケージが解凍されたときにのみ機能します。ドキュメントにもこれが明記されています。

私は "pckg_resources.require(" mypkg ")[0]でバージョンを発見するためにPythonのpckg_resourcesモジュールを使っても試しました。バージョン。モジュールがまだターゲットマシンにインストールされていない場合は失敗します - これは絶対に意味があります。

debian / controlファイルか、ホイールを再発明せずにこれが起こらないようにするために使用できるツールのいずれかにオプションがあるはずです。皆さんありがとう!

回答:

回答№1は0

私はSUDO_COMMANDを使います。 これは少なくとも私がそのバージョンをpreinstメンテナンススクリプトにハードコードする必要がないようにするためです(それはもう2つの場所に存在します!!)それは極端なハックです、しかし私はすることができませんでしたより賢明なアプローチに私を導くかもしれないどんな有用なドキュメンテーションも見つけてください。

参考までに、env変数SUDO_COMMANDは私が使ってきたあらゆるDebian環境に存在するようです。


回答№2の場合は0

試してください:

dpkg-query --show --showformat="${Version}" packagename