2

Debian ポリシー マニュアルのセクション7.47.6.1では、Debian パッケージを 2 つに分割する適切な方法について説明しています。ただし、もう少し複雑な状況があります。

現在、たとえばバージョン 1.2.3 の 2 つのパッケージがあります。

Package: foo-base

Package: foo-dbserver
Depends: foo-base (>= 1.2.3)

当初、この関係は理にかなっていましたが、時間が経つにつれて、そして偶然にも、foo-baseの要素がfoo-dbserverの要素に依存するようになりました。さらに悪いことに、現実にはfoo-base Pre-dependの要素がfoo-dbserverの要素に依存しています。したがって、バージョン 1.2.4 では、次のようにfoo -basefoo-essentialfoo- base に分割する必要があります。

Package: foo-essential
Replaces: foo-base (<< 1.2.3)
Breaks: foo-base (<< 1.2.3)

Package: foo-dbserver
Depends: foo-essential (>= 1.2.4)

Package: foo-base
Pre-Depends: foo-dbserver (>= 1.2.4)

これら 3 つのパッケージは、新しいインストールでは問題なくインストールされますが、完全にアップグレードされません。

dpkg: regarding foo-base_1.2.4_all.deb containing foo-base, pre-dependency problem:
 foo-base pre-depends on foo-dbserver (>= 1.2.4)
  foo-dbserver latest configured version is 1.2.3
dpkg: error processing foo-base_1.2.4_all.deb (--install):
 pre-dependency problem - not installing foo-base
dpkg: regarding foo-essential_1.2.4_all.deb containing foo-essential:
 foo-essential breaks foo-base (<< 1.2.3)
  foo-base (version 1.2.3) is present and installed.
dpkg: error processing foo-essential_1.2.4_all.deb (--install):
 installing foo-essential would break foo-base, and
 deconfiguration is not permitted (--auto-deconfigure might help)
(Reading database ... 39107 files and directories currently installed.)
Preparing to replace foo-dbserver 1.2.3 (using foo-dbserver_1.2.4_all.deb) ...
Unpacking replacement foo-dbserver ...
dpkg: dependency problems prevent configuration of foo-dbserver:
 foo-dbserver depends on foo-essential (>= 1.2.4); however:
  Package foo-essential is not installed.
dpkg: error processing foo-dbserver (--install):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 foo-base_1.2.4_all.deb
 foo-essential_1.2.4_all.deb
 foo-dbserver

アップグレードが可能になるように、この関係を適切に表現する方法はありますか? foo-base を別の名前に完全に変更する (およびfoo-essentialfoo-dbserverfoo- base2 という名前を使用する) ことは、より良い解決策でしょうか?

4

1 に答える 1

2

私が見つけた解決策は、パッケージを他の方向に分割することです。つまり、元のパッケージ名を Pre-Depended on として残し、Pre-Depending を実行するパッケージには新しいパッケージ名を使用します。

Package: foo-base

Package: foo-dbserver
Depends: foo-essential (>= 1.2.4)

Package: foo-extra
Pre-Depends: foo-dbserver (>= 1.2.4)
Replaces: foo-base (<< 1.2.3)
Breaks: foo-base (<< 1.2.3)
于 2013-01-03T03:25:35.260 に答える