Wie verwende ich Zypper in Bash-Skripten für jemanden, der von apt-get kommt?


10

Ich habe ein paar Fragen zum Wechsel von apt-get zu zypper in Bash-Skripten.

Was ist das Äquivalent dazu?

sudo apt-get install curl --assume-yes

(wo Curl jedes Paket sein könnte)

Ich habe das Zypper Cheat Sheet gefunden - openSUSE . Sehr schön! Aber ich würde die Stimme der Erfahrung hier schätzen - was ist der richtige Weg, um zypper in einem Skript zu verwenden, in dem ich automatisch allen Eingabeaufforderungen zustimmen und keine Dinge überspringen möchte, die eine Antwort benötigen?

Mit meiner Unerfahrenheit wäre ich versucht zu verwenden:

sudo zypper --non-interactive --no-gpg-checks --quiet install --auto-agree-with-licenses curl

Aber ist das wirklich das Äquivalent von --assume-yes?

Was ist mit dem Äquivalent für diese?

sudo apt-get autoremove -y
sudo apt-get autoclean -y

Dies deutet darauf hin, dass es keinen gibt ...

Gibt es einen Ersatz für gdebi-core? Oder wird Gdebi mit Zyppers "leistungsstarkem Erfüllbarkeitslöser" nie benötigt? Ich verwende gdebi für Situationen, in denen ich ein Paket auf einer älteren Version installieren muss und bereits eine .deb-Datei habe (aber nicht alle Abhängigkeiten).

Antworten:


9

Im Allgemeinen sollten Sie den --non-interactiveModus als Verknüpfung verwenden -n, wenn Sie zypper nicht interaktiv ausführen:

zypper -n install curl

Das mag für jemanden, der von kommt, verwirrend erscheinen apt-get install -y curl. Einige zypper-Unterbefehle unterstützen auch eine befehlsspezifische Option -y/ --no-confirmals Alias ​​für -n/ --non-interactive, aber nicht alle Unterbefehle. Da der installBefehl dies implementiert, entspricht dieser Befehl dem oben genannten:

zypper install -y curl

Beachten Sie, dass die -ykommen , müssen nach install , während die globale -nOption kommt vor dem Unterbefehl ( zypper install -nMittel etwas anderes, die man - Seite für das Lesen).

[Bearbeiten] Der folgende Abschnitt ist nicht mehr korrekt, wird jedoch als historische Referenz beibehalten. Der aktuelle Zypper unterstützt die --gpg-auto-import-keysOption, die mit einem neuen Repository verknüpften GPG-Schlüssel automatisch zu importieren und ihnen zu vertrauen.


Laut Dokumentation gibt es keine Möglichkeit, einen GPG-Schlüssel ohne interaktiven Modus zu akzeptieren:

Ein neuer Schlüssel kann nur im interaktiven Modus als vertrauenswürdig eingestuft oder importiert werden

Auch mit --no-gpgp-checksdem GPG-Schlüssel wird abgelehnt.

Eine Problemumgehung für Skripte ist die Verwendung von Pipe und echo:

zypper addrepo http://repo.example.org my_name | echo 'a'

1
Ernsthaft? Es gibt eine  -nOption und eine  -yOption und sie bedeuten dasselbe , müssen aber an verschiedenen Positionen in der Befehlszeile platziert werden? Ja, das ist verwirrend. (Um es klar zu sagen: Ich schieße nicht auf den Messenger. Ich sage, der Entwickler hätte mehr über Usability-Probleme nachdenken sollen.)
G-Man sagt 'Reinstate Monica'

@ G-Man - na ja, irgendwie. :) zypperhat eine -nOption. Der installUnterbefehl verfügt sowohl über eine -yOption, die sich auf die globale -nOption bezieht , als auch über eine eigene Option, -ndie für kurz steht --name. Es ist möglich, Pakete nach Funktionen zu installieren. Also, zypper install -n blahzu lösen gibt an nur das Paket mit dem Namen blahund nicht die Pakete, die zur Verfügung stellen blah . Ohne dies kann zypper basierend auf dem Abschnitt "Bereitstellungen" aus einem RPM (einschließlich Versionsvergleichen) aufgelöst werden, was die Auflösung von Abhängigkeiten vereinfachen kann. zypper install 'python>3.5'beispielsweise.
Dannysauer

Die Hauptanwendung für zypper install -nist, wenn Sie möglicherweise ein bestimmtes Paket installieren möchten, dessen Name eine von anderen bereitgestellte Funktion ist. Beispielsweise gibt es möglicherweise einige vi-Implementierungen, und Sie möchten nur dann ein bestimmtes Paket mit dem Namen vi ohne Auflösung, das auf gvim (das vi bereitstellt) zurückgreift, falls das bestimmte viPaket aus irgendeinem Grund in Ihrem Repo fehlt. Persönlich mag ich die verwirrende Natur der kurzen Optionen nicht und verwende sie selten in Skripten oder anderen Dingen, die jemand (wie ich) später lesen muss. : D
dannysauer

8

Sie haben die Option --non-interactive. Von der Manpage:

Switches  to  non-interactive  mode. 
In this mode zypper doesn't ask user to type answers to various prompts, but uses default answers automatically. 
The  behaviour of this option is somewhat different than that of options like '--yes', since zypper can answer different answers to different questions. 
The answers  also  depend on other options like '--no-gpg-checks'.

Es gibt keine echte Entsprechung zum Autoremove von apt-get. Am nächsten ist die --clean-depsOption des removeBefehls, mit dem Abhängigkeiten sofort (jedoch nicht danach) bereinigt werden.


Ist es möglich, eine solche Option zypper.confzur dauerhaften Bestätigung wie bei anderen Paketmanagern hinzuzufügen ?

Ich weiß es nicht. Ich habe seit einiger Zeit keine Suse mehr benutzt, daher kann ich das nicht überprüfen.
Matte

es scheint unmöglich für zypper im Gegensatz zu pacman, apt und yum / dnf :-(

3

Das ist ein Beispiel

zypper --non-interactive --quiet addrepo --refresh -p 90 http://packman.inode.at/suse/openSUSE_Leap_15.0/ 'packman'
zypper --gpg-auto-import-keys refresh
zypper --non-interactive dist-upgrade --allow-vendor-change --from packman
zypper --non-interactive install vlc vlc-codecs

Natürlich können Sie weitere Optionen wie --auto-agree-with-licenseshinzufügen, aber denken Sie daran, dass dies einen Unterschied macht, ob es vorher oder nachher istinstall


1

Dies hat bei mir funktioniert (auf SLES12SP3 überprüft):

zypper --non-interactive --quiet ar -C http://myrepo myrepo
zypper --gpg-auto-import-keys ref

Hinweis -C/--no-checkfür zypper ar.

Jetzt können Sie Pakete installieren:

zypper in -y --auto-agree-with-licenses vim
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.