Installation bestimmter Versionen, wenn repo neuere Versionen hat?


13

Lassen Sie uns ein Metapaket erstellen, das von den folgenden Paketen abhängt

Depends: A (=2),
 B (=2),
 C (=2)

Beachten Sie das '=' - Ich möchte diese speziellen Versionen installieren, nicht die neuesten.

Zusätzlich:

B hängt von A ab (> = 1)

C ist abhängig von B (> = 1) und A (> = 1)

Wenn die neuesten Versionen von A, B, C im Repository 2 sind, funktioniert dies.

Da ich Version 3 von A und Version 3 von B in das Repo Sudo apt-get install gestellt habe, verweigert mein Metapaket das Beenden mit den folgenden Informationen:

The following packages have unmet dependencies:
  my-meta-package: Depends: B (= 2) but 3 is to be installed
                   Depends: A (= 2) but 3 is to be installed

Wenn ich die Versionen 2 von A und B manuell installiere, wird das Metapaket korrekt installiert, was stark darauf hindeutet, dass es keine versteckte Abhängigkeit von A3 oder B3 gibt. Dies ist keine Lösung für das Problem, da das Metapaket auf vielen Computern automatisch installiert wird.

FRAGE: Was ist zu tun, damit sudo apt-get die my-meta-package Installationsversionen 2,2,2 installiert?

Gibt es eine Möglichkeit, eine erweiterte Information zu erhalten, die den Bedarf für Version 3 von A und Version 3 von B tatsächlich schafft?


Oh, ich habe die ganze Frage nicht gelesen, bevor ich sie beantwortet habe. Können Sie das Metapaket einfach neu verpacken?
int_ua

2
@int_ua Ich verstehe nicht, was das Umpacken des Metapakets bewirken würde.
Tymtam

@belacqua - ich bin bei dir, aber wir brauchen eine solide Antwort, die abdeckt, was passiert, wenn es Umkehrungen und gebrochene Abhängigkeiten usw. usw. gibt
RobotHumans

Enthält die Steuerdatei Ihres Metapakets eine explizite Versionsnummer abhängiger Pakete, wie z (a=2), (b=2).
Anwar

Antworten:


11

Sie müssen die zu installierenden Versionen auswählen und alle gleichzeitig mit der Installation des Metapakets installieren.

sudo apt-get install meta-package package1=2 package2=2 package3=2

Wie die Antwort von int_ua sagt, können Sie damit umgekehrte Abhängigkeiten herausfinden:

apt-cache rdepends package

Wenn Sie weitere Informationen zu diesen Paketen ( verfügbare Versionen, Abhängigkeiten und vieles mehr ) benötigen , verwenden Sie Folgendes:

apt-cache show package

Nachdem Sie die Installation abgeschlossen haben und diese Versionen während der Systemaktualisierung beibehalten möchten , müssen Sie apt-pinning verwenden, wie von belacqua vorgeschlagen .

APT-Fixierung

Mit der APT-Fixierungsfunktion können Administratoren APT zwingen, bestimmte Versionen von Paketen auszuwählen, die in verschiedenen Versionen aus verschiedenen Repositorys verfügbar sein können. Auf diese Weise können Administratoren sicherstellen, dass Pakete nicht auf Versionen aktualisiert werden, die möglicherweise mit anderen Paketen auf dem System in Konflikt stehen oder die nicht ausreichend auf unerwünschte Änderungen getestet wurden. Dazu müssen die Pins in der Voreinstellungsdatei von APT (/ etc / apt / preferences) geändert werden.


Ich glaube, das ist die richtige Antwort. Setzen Sie das = und dann den Paketnamen mit der Version
LnxSlck

1
Ich bin Tymeks Kollege und das löst das Problem. Schade, dass wir das Metapaket zurückentwickeln müssen, um es umzusetzen. Etwas kreatives Python ist in Ordnung. Vielen Dank für die Antwort.
Igor Zevaka

1
Ich frage mich, ob es eine bessere Lösung gab, seit die Zeit vergangen ist.
Ygrek

1

Sie können zunächst versuchen, Abhängigkeiten mit zu installieren

sudo apt-get install package=2 wo 2 ist die version

Mit können Sie herausfinden, welche Pakete vom Paket abhängen

apt-cache rdepends package


1
rdepends liefert keine Details zu Versionen, oder?
Tymtam

2
Das Installieren von Abhängigkeiten als Erstes würde dem Metapaket trotzen. Es ist eine Lösung, aber nicht die, nach der ich suche.
Tymtam

1
Damit dies funktioniert, müssen die Repositorys über eine verfügbare Version der von Ihnen angegebenen Version verfügen. Andernfalls tritt ein Fehler auf.
Thomas Ward
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.