Translation(s): none
This page summarizes several Debian package transition scenarios which require some coordinated tweaks on debian/control file of newly uploaded packages.
Recent Debian Policy (>> 3.8.0) updates on "Breaks" field is accounted here.
Contents
Package Transition
Basic scenarios
Let's assume package version to be
- old package: 1.0
- new package: 2.0
case |
Package (transition) situation |
Flags for new A package |
Flags for new B package |
#1 |
Conflicts: never work together |
Conflicts: B |
Conflicts: A |
#2 |
Resolved conflicts: old A and B conflicted with each other and with new ones; only newer A and B can coexist |
Breaks: B (<<2) |
Breaks: A (<<2) |
#3 |
Virtual package: normal virtual package which avoids Conflicts using update-alternatives(8) etc. |
Provides: virt |
Provides: virt |
#4 |
Exclusive virtual package: exclusive virtual package such as mail-transport-agent |
Provides: virt |
Provides: virt |
Conflicts: virt |
Conflicts: virt |
||
Replaces: virt |
Replaces: virt |
||
#5 |
Rename: only A existed; move everything from A into B; make A a transitional package without real contents |
Depends: B |
Breaks: A (<<2) |
Replaces: A (<<2) |
|||
optional* -- Provides: A |
|||
#6 |
Merge: A and B existed; merge everything from A into B; make A a transitional package without real contents |
Depends: B (>=2) |
Breaks: A (<<2) |
Replaces: A (<<2) |
|||
optional* -- Provides: A |
|||
#7 |
Split: only A existed; move some files from A to B; new A does not require new B |
|
Breaks: A (<<2) |
Replacess: A (<<2) |
|||
#8 |
Split: only A existed; move some files from A to B; new A always requires new B |
Depends: B |
Breaks: A (<<2) |
Replacess: A (<<2) |
|||
#9 |
Reorg: A and B existed; move some files from A to B; new A does not require new B |
Breaks: B (<<2) |
Breaks: A (<<2) |
Replaces: A (<<2) |
|||
#10 |
Reorg: A and B existed; move some files from A to B; new A always requires new B |
Depends: B (>=2) |
Breaks: A (<<2) |
Replaces: A (<<2) |
|||
#11 ?? |
Merge and remove: A and B existed; merge everything from A into B; A does not exist in new archive; B is the functioning package |
(non-existing) |
Breaks: A (<<2) (for backport ease) |
Replaces: A (<<2) |
|||
optional* -- Provides: A |
|||
#12 ?? |
Remove transitional: A existed as a transitional package without real contents in previous release; A does not exist in new archive; B is the functioning package |
(non-existing) |
optional* -- Provides: A (?? is this enough ??) |
*) Provides are needed only when there are some packages which depend on A.
Breaks in the above table may be substituted by Conflicts. Use of Conflicts for these cases are older style and deprecated.
?? marks needs to be checked. #11 and #12 may be wrong.
See also
This document is based on following references and mailing list messages:
Debian Policy Manual, Chapter 7 - Declaring relationships between packages
- manual page: deb-control(5)
Package renaming, and transitional dependencies (before introduction of Breaks)
http://lists.debian.org/debian-ctte/2010/05/msg00012.html and following messages.
http://lists.debian.org/debian-policy/2010/06/msg00222.html explaining why Breaks is needed for dist-upgrade.
conflicts/replaces/provides vs. breaks/replaces/provides under policy 3.9.1 and following messages.
guessing ... (Replacing as much versioned Conflicts with Breaks)
