yum Paket installieren, ohne andere Pakete zu aktualisieren oder fehlschlagen ...?

10

Gibt es eine Möglichkeit, die yumInstallation eines Pakets anzugeben und eine Version dieses Pakets auszuwählen, die von den derzeit installierten Abhängigkeiten erfüllt wird?

Zum Beispiel, wenn ich ein pecl-Paket installiere und es derzeit installiert habe, php-5.4.11aber ein neueres php-5.4.14verfügbar ist. Anstatt das neue Paket zu installieren (und alle PHP-Pakete auf 5.4.14 zu aktualisieren), möchte ich nur eine ältere Version des Pakets auswählen, dessen Installation ich angefordert habe, ohne alle anderen zu aktualisieren (oder fehlschlagen, wenn dies nicht möglich ist).

Dies ist ein spezieller Fall, in dem ich weiß, dass ich das PHP-Paket ausschließen oder reparieren könnte, aber ich suche nach einer generischen Option, die für jede Installation gelten würde.

Etwas wie:

yum install php-pecl-xxxx --no-updates
Clint Priest
quelle

Antworten:

10

Vorübergehende Lösung:

Verwendung -CFlagge:

sudo yum install foobar -C

Permanente Lösung:

Verwenden Sie das metadata_expireFlag in Ihrer yum.conf , um dies zu steuern.

Bearbeiten /etc/yum.confund einstellen

metadata_expire=15d

Mit d, h oder m können Sie die Zeit in Tagen, Stunden oder Minuten konfigurieren .

Bonus: Hier ist die Dokumentation:

metadata_expire ist die Zeit (in Sekunden), nach der die Metadaten ablaufen. Wenn die aktuell heruntergeladenen Metadaten weniger als so viele Sekunden alt sind, aktualisiert yum die Metadaten nicht für das Repository. Wenn Sie feststellen, dass yum nicht so oft Informationen zu Updates herunterlädt, wie Sie möchten, verringern Sie den Wert dieser Option. Sie können auch von der Standardeinstellung der Verwendung von Sekunden zur Verwendung von Tagen, Stunden oder Minuten wechseln, indem Sie die Anzeige h bzw. m anhängen. Der Standardwert ist 6 Stunden, um yum-updatesd zu ergänzen, das einmal pro Stunde ausgeführt wird. Es ist auch möglich, das Wort "nie" zu verwenden, was bedeutet, dass die Metadaten niemals ablaufen. Beachten Sie, dass bei Verwendung einer Metalink-Datei der Metalink immer neuer sein muss als die Metadaten für das Repository. Aufgrund der Validierung gilt dieses Zeitlimit auch für die Metalink-Datei. Beachten Sie auch, dass "nie" "yum clean expire-cache" nicht überschreibt.

Shubham Chaudhary
quelle
0

Ich bin noch nicht auf eine solche Option gestoßen. Wenn Sie das Paket jedoch ohne Upgrade installieren möchten, würde ich empfehlen, eine Drehzahl derselben Version herunterzuladen und dann zu installieren.

Aazim Parkar
quelle
0

Im yum-utilsPaket befindet sich ein Tool namens yumdownloader. Sie können es zum Herunterladen von Repos ohne Installation verwenden. Es gelten alle Standardschalter wie --disablerepo. Weitere Informationen finden Sie in der Manpage .

Ich denke, Sie können das RPM herunterladen und dann mit RPM direkt das tun, was Sie wollen.

slm
quelle
1
Dies ist Teil eines automatischen Paketinstallationssystems. Das Problem ist, dass yum nicht "das Neueste installieren" und "alles aktualisieren soll, was benötigt wird". Wir möchten wirklich nur, dass eine Version des Pakets installiert wird, die mit den bereits installierten kompatibel ist. Grundsätzlich nur eine Option zum Installieren oder Installieren von xxx -no-updates.
Clint Priest
0

Wenn sich die ältere Version des Pakets noch in Ihren yum-Repositorys befindet, können Sie sie einfach ausführen yum install packagename-version-release.archund die ältere Version installieren, ohne zu versuchen, auf die neueste Version zu aktualisieren. Sie müssen den vollständigen Namen, die Version, das Release und den Arch verwenden, wenn Ihr Yum Repo mehrere Versionen und Architekturen enthält. Sie können all diese Informationen yum list available 'packagename*'abrufen, indem Sie nach allen Paketen suchen, die mit 'Paketname' beginnen. Wenn Sie es geschafft haben, Ihre Pakete zu aktualisieren und ein Downgrade auf die ältere Version durchführen möchten, können Sie sie ausführen yum downgrade packagename1 packagename2. Sie müssen die Liste aller Pakete einschließen, die Sie downgraden möchten, da dies wahrscheinlich viele Abhängigkeiten mit sich bringt.

Wenn sich die ältere Version nicht in Ihrem yum-Repository befindet, laden Sie sie einfach von der Stelle herunter, an der Sie das alte Paket gefunden haben, und installieren Sie sie mit yum install /path/to/package.rpm, obwohl ich davor warnen würde, Pakete aus nicht vertrauenswürdigen Quellen zu installieren.

jsbillings
quelle
Es wäre jedoch viel nützlicher, wenn Sie yumnur die neueste kompatible Version auswählen könnten.
Forcefsck
Es kann, aber es ist Sache des Packagers, die entsprechenden Anforderungen zu definieren.
jsbillings
Manchmal werden die Anforderungen mit einem älteren Paket abgedeckt, aber yum besteht darauf, nur das Neueste auszuwählen. Z.B. in dem oben beschriebenen fall sollte es yum möglich sein, php-pecl-5.4.11 automatisch auszuwählen, wenn das system auf php-5.4.11 versioniert ist. Dies kann ein Problem für die Automatisierung sein.
Forcefsck
Yum wird nur dann auf die neueste Version aktualisiert, wenn keine Abhängigkeiten von der alten Version bestehen. Im obigen Fall wurde die Versionsanforderung vom pecl-Paket nie benötigt. Yum kann Ihre Gedanken nicht lesen und eine beliebige Version auswählen, es sei denn, Sie geben an, welche Version in einer Version erforderlich ist, oder indem Sie die Pakete pecl und php versionieren.
jsbillings
In diesem Beispiel kann yum die neueste Version von pecl auswählen, für die kein PHP-Upgrade erforderlich ist, sofern PHP nicht aktualisierbar ist (entweder versioniert oder keine neueren Pakete auf Repos verfügbar). Es ist nicht gerade Gedankenlesen, ich glaube, apt-get macht das schon. Auch dies ist ein Problem für die Automatisierung, wenn Sie ein zusätzliches Paket installieren müssen, ohne die Hälfte Ihres Systems zu aktualisieren, und Sie müssen intelligent genug sein, um die Anforderung zu bearbeiten. Wenn also mehrere Versionen vorhanden sind, wählen Sie die neueste Version aus, die mit den bereits installierten Paketen kompatibel ist dass aus irgendeinem Grund nicht aktualisiert werden kann.
Forcefsck