fragen stichworte

yum install local rpm löst einen Fehler aus, wenn er aktuell ist

Wenn RPM-Pakete aus dem lokalen Dateiverzeichnis installiert werden, wird es beim ersten Mal

problemlos ausgeführt
sudo yum install packages/* -y --disablerepo=*

Wenn dasselbe zum zweiten Mal als Teil automatisierter Skripts ausgeführt wird, wird ein Fehler ausgegeben (Beendigungscode 1)

packages/package.rpm: does not update installed package.
Error: Nothing to do

Ich kann das Update ausführen (Exitcode 0)

sudo yum update packages/* -y --disablerepo=*
...
No packages marked for update

Das Problem dabei ist, dass das Update die nicht installierten Pakete überspringt.

Ich möchte den Exit-Code nicht ignorieren, wenn es hier wirklich Probleme gibt, und ich möchte nur install-or-update tun. Gibt es eine rpm -i Entsprechung, die das erreichen würde? Bitte beachten Sie, dass dies für eine Gruppe von RPM-Paketen gemacht wird, die zu einem beliebigen Zeitpunkt weitere enthalten können.

Ich denke, eine Möglichkeit wäre, sie in einem Shell-Skript zu durchlaufen und zu prüfen, ob sie installiert sind oder nicht. Die Auflösung der Abhängigkeiten kann jedoch sehr schmerzhaft werden und klingt wie ein Fahrrad neu zu erfinden.

UPDATE:
rpm --install gibt den Exit-Code abhängig von der Anzahl der fehlerhaften Pakete zurück. https://www.redhat.com/archives/rpm-list/2005-July/msg00071.html

rpm --freshen ignoriert alle zuvor nicht installierten RPMS, gibt jedoch überhaupt keine Ausgabe aus.

antworten

auf meinem System (centos6, centos7) "yum localinstall" gibt den Code 0 zurück, selbst wenn "Error: Nothing to do" angezeigt wird, während "yum install" den Wert 1 zurückgibt.

sudo yum localinstall packages/* -y --disablerepo=*

Wie auch immer, Sie können auch das Nachrichtenergebnis überprüfen, um dies als "normalen Fehler" in Ihren Automatisierungsskripten zu ignorieren, wie zum Beispiel mit bash:

sudo yum install packages/* -y --disablerepo=* 2>&1 | tee/tmp/yum.output
grep -q "Error: Nothing to do"/tmp/yum.output
if [ $? -eq 0 ]; then
  ... code for no error
else 
  ... code for error
fi