Richtlinien für Konflikte
Autor: Tom 'spot' Callaway
Revision: 0.07
Erster Entwurf: Dienstag, 5. Dezember 2006
Letzte Revision: Mittwoch, 31. Oktober 2012
Konflikte
Benutzer sollten stets die neuesten Pakete aus den Fedora-Paketquellen installieren können, unabhängig davon, welche anderen Fedora-Pakete bereits installiert sind. Daher sollten die neuesten Fedora-Pakete einer Version nach Möglichkeit keine Konflikte miteinander verursachen. Konflikte führen zu einer Fehlermeldung, deren Interpretation sich der Benutzer erschließen und eine Entscheidung treffen muss. Die Fehlermeldung selbst liefert keine Informationen darüber, warum zwei Pakete in Konflikt stehen, und hilft dem Benutzer somit nicht, eine fundierte Entscheidung zu treffen.
Als Fedora-Paketierer bemühen wir uns, die Installation und Ausführung jeder beliebigen Teilmenge der neuesten Fedora-Pakete zu ermöglichen. Leider ist dies nicht immer möglich, aber in der Regel können wir dafür sorgen, dass sich in Konflikt stehende Pakete installieren lassen und der Benutzer anschließend entscheiden kann, welches Paket aktiviert werden soll. In den wenigen verbleibenden Fällen müssen wir Conflicts:-Tags verwenden. Diese Richtlinien veranschaulichen, wie Konflikte in Fedora behandelt werden sollten, insbesondere im Hinblick darauf, wann das Feld Conflicts: verwendet werden sollte und wann nicht.
Akzeptable Anwendungsfälle von „Conflicts“:
Grundsätzlich dürfen Fedora-Pakete das Feld Conflicts: nicht verwenden. Dieses Feld wird häufig falsch verwendet, obwohl Requires: meist angebrachter wäre. Es verwirrt Abhängigkeitsauflöser und Endbenutzer gleichermaßen und unnötigerweise. Es gibt jedoch Fälle, in denen die Verwendung des Felds Conflicts: angemessen und zulässig ist.
Implizite Konflikte
Beachten Sie, dass implizite Konflikte NIEMALS akzeptabel sind. Wenn Ihr Paket mit einem anderen Paket in Konflikt steht, müssen Sie den Konflikt entweder beheben oder ihn mit Conflicts: kennzeichnen.
Optionale Funktionalität
Manche Software kann, falls vorhanden, weitere optionale Softwareanwendungen zur Nutzung heranziehen, benötigt diese aber nicht zwingend. Auch ohne deren Installation funktioniert die Software einwandfrei. Sind diese „optionalen Anwendungen“ jedoch zu alt, funktioniert die Software nicht. Dies ist ein zulässiger Anwendungsfall für das Feld Conflicts:. Der Paketierer muss den Grund dafür in einem Kommentar oberhalb des Feldes Conflicts: dokumentieren:
Beispiel:
Conflicts: unrar < 2.0
Wenn die Software gegen die Bibliotheken eines anderen Pakets gelinkt ist, muss sie Requires: anstelle von Conflicts: verwenden, um diese Abhängigkeit zu kennzeichnen. Ebenso muss sie Requires: anstelle von Conflicts: verwenden, wenn die Software ohne die Installation eines anderen Pakets nicht ordnungsgemäß funktioniert.
Der Paketierer sollte sich Folgendes fragen:
Wenn das Paket (in der korrekten Version) unter „Conflicts:“ nicht aufgeführt ist, ist mein Paket dann noch funktionsfähig?
Lautet die Antwort „Ja“, dann ist die Verwendung von Conflicts: wahrscheinlich zulässig. Lautet die Antwort „Nein“, dann ist Requires: mit ziemlicher Sicherheit die bessere Wahl.
Wenn beispielsweise foo-game zum Ausführen libbar benötigt, aber nicht mit libbar-Versionen älter als 1.2.3 funktioniert:
FALSCH: Conflicts: libbar < 1.2.3
RICHTIG: Requires: libbar >= 1.2.3
Paketierer sollten die Verwendung von Conflicts: auf ein absolutes
Minimum beschränken. Es wird nur eine Aktualisierung von zwei vorherigen
Fedora-Versionen unterstützt. Daher sind Konflikte mit älteren Paketen zwar
technisch korrekt, aber unnötig und sollten nicht aufgeführt werden.
Teilen von Paketen
Werden Inhalte eines Pakets in ein separates Paket ausgelagert, enthält das neue Paket üblicherweise Dateien, die auch im Originalpaket vorhanden sind. Dies kann zu einem impliziten Konflikt zwischen den Dateien im neuen und im Originalpaket führen. Wenn das neue Paket vom Originalpaket abhängt, lässt sich dies mit versionierten „Requires“ beheben:
# In der Spec-Datei des neuen Pakets:
Requires: original-package > EVR_BEFORE_SPLIT
Soll das neue Paket unabhängig davon installierbar sein, ob das Originalpaket installiert ist, ist ein versionierter Konflikt zulässig:
# In der Spec-Datei des neuen Pakets:
Conflicts: original-package <= EVR_BEFORE_SPLIT
In beiden Fällen sollte die neue Version des Originalpakets aktualisiert werden, sodass sie die in Konflikt stehenden Dateien nicht mehr enthält und von dem neuen Paket abhängt (zumindest in allen stabilen Fedora-Versionen). Dadurch lassen sich die neuesten Versionen beider Pakete problemlos installieren. Die Konflikte dienen lediglich dazu, den Fall zu lösen, dass das neue Paket installiert wird und die ältere Version des Originalpakets bereits installiert war.
Konflikte mit Kompatibilitätspaketen
Die Verwendung von Conflicts: ist in bestimmten Fällen im Zusammenhang mit Kompatibilitätspaketen zulässig. Dies sind Fälle, in denen es nicht möglich ist, Anwendungen so zu patchen, dass sie an alternativen Speicherorten nach den -compat-Dateien suchen. In diesem Fall müssen die Pakete foo-devel und foo-compat-devel mit Conflicts: gekennzeichnet werden. Dies sollte jedoch nach Möglichkeit vermieden werden.
Inkompatible Binärdateien mit widersprüchlichen Namen (und störrischen Upstream-Entwicklern)
Falls mehrere Softwarekomponenten gleichnamige (aber inkompatible) Binärdateien erzeugen, sollten Fedora-Paketbetreuer alles daransetzen, die Upstream-Entwickler zur Umbenennung der Binärdateien zu bewegen, um den Konflikt zu beheben (siehe: Konflikte in Namen von Binärdateien). Wenn jedoch keiner der Upstream-Entwickler bereit ist, die Binärdateien umzubenennen UND die Binärdateien keine geeigneten Kandidaten für Alternativen oder Umgebungsmodule sind (inkompatible Laufzeitumgebungen), und solange keine eindeutigen Gründe für die gleichzeitige Installation beider Pakete vorliegen, sind explizite „Conflicts“ nach Ermessen des Paketbetreuers zulässig. In diesem Fall müssen beide Pakete „Conflicts“ enthalten.
Beachten Sie, dass das Hinzufügen expliziter „Conflicts“ dazu führen kann, dass andere Pakete, die von Ihrem Paket abhängen, eine Konfliktkette auslösen, die zu Problemen für die Benutzer führen kann. Bitte ziehen Sie das nur als letzten Ausweg in Betracht.
Häufige Fälle von Dateikonflikten und deren Lösungen
Es gibt viele Dateitypen, die zwischen verschiedenen Paketen in Konflikt geraten können. Fedora rät dringend davon ab, Conflicts: zur Behebung dieser Konflikte zu verwenden. Hier sind einige Vorschläge, die zur Lösung dieser Konflikte beitragen können (beachten Sie, dass nicht alle Dateikonflikte und auch nicht alle möglichen Lösungen aufgeführt sind):
Konflikte in Namen von Handbuchseiten (Man Pages)
-
Benennen Sie die Manpages um, indem Sie das Suffix der Manpage leicht verändern (z.B. man1/check.1.gz zu man1/check.1foo.gz)
-
Benennen Sie die Manpages so um, dass sie ein Präfix des bereitstellenden Pakets enthalten (z. B. foo-check.1.gz und bar-check.1.gz)
Konflikte in Namen von Bibliotheken
Wenn die Bibliothek vollständig ABI-kompatibel ist, können SieUmgebungsmodule verwenden, um dem Benutzer das Umschalten zwischen ihnen zu ermöglichen. Wenn die Bibliothek nicht vollständig ABI-kompatibel ist, fordern Sie einen der Upstream-Entwickler auf, den Namen zu ändern. Siehe Upstream-Ansprachefür Ideen zur Überzeugung. Wenn keiner der Upstream-Entwickler nachgibt, erstellen Sie ein Ticket für das Fedora Packaging Committee, damit dieses prüft, welche zusätzlichen Maßnahmen beide Pakete ergreifen müssten, um Laufzeitkonflikte zu vermeiden.
Konflikte in Namen von Header-Dateien
-
Setzen Sie die Headerdateien in ein Unterverzeichnis von /usr/include.
Konflikte in Namen von Binärdateien
-
Überzeugen Sie die Upstream-Entwickler, die Binärdateien in etwas weniger Generisches (oder einfach weniger Konflikte verursachendes) umzubenennen.
-
Falls die in Konflikt stehenden Binärdateien dieselbe Funktionalität bieten,können Sie die Binärdateien mit einem Präfix umbenennen und mittelsAlternativen dem Systemadministrator die Auswahl des Standardnamens ermöglichen. Beachten Sie, dass dies üblicherweise nicht der Fall ist.
-
In Fällen, in denen die Binärdateien ähnliche Funktionalität bieten, kann die Dokumentation zu den Umgebungsmodulen eine Option sein. Dies ist flexibler als Alternativen und eignet sich für Einstellungen, die einzelne Systembenutzer selbst vornehmen möchten, anstatt eines Systemadministrators.
Upstream-Entwickler ansprechen
Beim Umbenennen oder Verschieben von Dateien in Unterverzeichnisse ist es ratsam, die Upstream-Entwickler zu bitten, die in Konflikt stehenden Dateien umzubenennen (z.B. wenn beide Befehle mit dem Namen %{_bindir}/trash enthalten). Recherchen darüber, welche Version länger existiert, können in diesem Fall hilfreich sein, sind aber möglicherweise nicht überzeugend genug für die Upstream-Entwickler.
Wenn keiner der Upstream-Entwickler die Pakete umbenennt, würden wir uns an andere Distributionen wenden (distributions-list[at]freedesktop.org ist ein guter Ort, um dies zu besprechen), um eine Umbenennung in allen Distributionen zu erzielen. Dies hilft Endbenutzern, die zwischen verschiedenen Distributionen wechseln, für mehr Konsistenz zu sorgen. Die Dauer des Bestehens der Projekte, ihre Popularität und zahlreiche weitere Faktoren können bei dieser Entscheidung eine Rolle spielen. Sobald eine Entscheidung getroffen wurde, würden wir die Fedora-Pakete entsprechend umbenennen.
Potenzielle Konfliktdateien
Wir versuchen nicht nur Konflikte mit bestehenden Paketen in Fedora zu vermeiden, sondern auch potenzielle Konflikte. Denn das erste Paket, das in Fedora aufgenommen wird, ist nicht immer dasjenige, das den Namen behalten sollte. Es gibt mehrere Szenarien, in denen dies relevant werden kann:
-
Es gibt ein in Konflikt stehendes Paket, das noch nicht in Fedora enthalten ist (zum Beispiel durch eine Websuche zu finden)
-
Es besteht noch kein Konflikt, aber der Dateiname wird wahrscheinlich von einem anderen Projekt verwendet (etwa
/usr/bin/parser)
Im ersten Fall, in dem ein konfliktbehaftetes Paket bekannt ist, aber noch nicht in Fedora enthalten ist, sollten wir ermitteln, welches Paket den berechtigteren Anspruch auf den Namen hat, und die Dateien des Pakets, das wir einbinden, umbenennen, falls dieses nicht den berechtigteren Anspruch besitzt. Wenn Sie der Meinung sind, dass Ihre Situation einzigartig ist, erstellen Sie bitte ein Ticket beim Fedora Packaging Committee.
Im zweiten Fall, in dem derzeit kein Paket bekannt ist, mit dem ein Konflikt entstehen könnte, obliegt die Entscheidung dem Paketierer. Es wird jedoch empfohlen, zumindest mit dem Upstream-Projekt über mögliche Konflikte zu sprechen. Wir können hoffen, dass spätere Projekte, die diesen Namen verwenden möchten, aufgrund der längeren Existenz dieses Projekts dazu bewegt werden können, ihn umzubenennen.
Standardbefehle
Für Standardbefehle sind gebräuchliche Namen zulässig, da nur diese die Befehle implementieren. Standardbefehle umfassen Funktionen, die in veröffentlichten und weit verbreiteten Standards wie POSIX und De-facto-Standards definiert sind, beispielsweise Programme, die traditionell mit einem bestimmten Dateinamen als Teil zahlreicher Unix-Varianten ausgeliefert werden. Im Zweifelsfall senden Sie bitte eine Nachricht an fedora-devel-list[at]redhat.com mit folgenden Angaben: In welchen Standards der Befehl enthalten ist, wie lange er auf welchen Unix-Systemen verfügbar ist und ob Sie Programme gefunden haben, die einen wesentlich anderen Befehl mit demselben Dateinamen implementieren.
Namenskonflikte
Genauso wie Dateien Konflikte verursachen können, können dies auch Paketnamen tun. Konfliktierende EN* aufgelöst werden. Auch Paketnamen, die sich nur in der Groß-/Kleinschreibung unterscheiden, gelten als Konflikte. Sie sollten die gleichen grundlegenden Schritte befolgen, die in Upstream-Entwickler ansprechen beschrieben sind.
Das Umbenennen und Ersetzen von Paketen kann sich als schwierig erweisen, wenn dies zu einem späteren Zeitpunkt erfolgen muss (beispielsweise können Aktualisierungspfade in solchen Situationen komplex werden). Daher ist es hier noch wichtiger, potenzielle Konflikte zu beachten als bei Dateinamen.
Weitere Anwendungen von „Conflicts“:
Wenn Sie sich in einer Situation befinden, in der Sie der Meinung sind, dass Ihr Paket mit einem anonflikt steht (entweder explizit oder implizit), aber nicht den oben dokumentierten zulässigen Fällen entspricht, müssen Sie Ihren Fall dem Fedora Packaging Committee vortragen. Nur wenn das Komitee zustimmt, dürfen Sie Conflicts: in einem Fedora-Paket verwenden. Beachten Sie, dass Sie bei jeder Verwendung von Conflicts: die Begründung in einem Kommentar neben dem Eintrag Conflicts: angeben müssen, damit klar ersichtlich ist, warum diese Anweisung notwendig ist.
Want to help? Learn how to contribute to Fedora Docs ›