Comment utiliser zypper dans les scripts bash pour quelqu'un venant d'apt-get?


12

J'ai quelques questions sur le passage d'apt-get à zypper dans les scripts bash.

Quel est l'équivalent de cela?

sudo apt-get install curl --assume-yes

(où curl pourrait être n'importe quel paquet)

J'ai trouvé la feuille de triche Zypper - openSUSE . Très agréable! Mais j'apprécierais la voix de l'expérience ici - quelle est la bonne façon d'utiliser zypper dans un script où je veux accepter automatiquement toutes les invites et ne pas sauter les choses qui nécessitent une réponse?

Avec mon inexpérience, je serais tenté d'utiliser:

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

Mais est-ce vraiment l'équivalent de --assume-yes?

Qu'en est-il de leur équivalent?

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

Cela suggère qu'il n'y en a pas un ...

Existe-t-il un remplacement pour gdebi-core? Ou est-ce que gdebi n'est jamais nécessaire avec le "puissant solveur de satisfiabilité" de zypper? J'utilise gdebi pour les situations où j'ai besoin d'installer un paquet sur une ancienne version et j'ai déjà un fichier .deb (mais pas toutes les dépendances).

Réponses:


10

En général, vous devez utiliser le --non-interactivemode, en raccourci -n, lorsque vous exécutez zypper de manière non interactive:

zypper -n install curl

Cela peut sembler déroutant pour quelqu'un qui vient apt-get install -y curl. Certaines sous-commandes zypper prennent également en charge une option -y/ spécifique à une commande --no-confirmcomme alias pour -n/ --non-interactive, mais pas toutes les sous-commandes. Comme la installcommande l'implémente, cette commande est équivalente à la précédente:

zypper install -y curl

Notez que le -ydoit venir après install , tandis que l' -noption globale précède la sous-commande ( zypper install -nsignifie quelque chose de différent; lisez la page de manuel pour cela).

[Modifier] La section ci-dessous n'est plus précise, mais est conservée pour référence historique. Le zypper actuel prend en charge l' --gpg-auto-import-keysoption d'importer et d'approuver automatiquement les clés gpg associées à un nouveau référentiel.


Selon la documentation, il n'y a aucun moyen d'accepter une clé GPG sans mode interactif:

une nouvelle clé ne peut être approuvée ou importée qu'en mode interactif

Même avec --no-gpgp-checksla clé GPG sera rejetée.

Une solution de contournement pour les scripts consiste à utiliser pipe et echo:

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

1
Sérieusement? Il y a une  -noption et une  -yoption et ils signifient la même chose mais ils doivent être placés à des positions différentes dans la ligne de commande? Oui, c'est déroutant. (Pour être clair: je ne tire pas sur le messager; je dis que le développeur aurait dû penser davantage aux problèmes de convivialité.)
G-Man dit 'Reinstate Monica'

@ G-Man - enfin, en quelque sorte. :) zyppera une -noption. La installcommande sub a à la fois une -yoption qui est une commodité qui alias à l' -noption globale , et a également sa propre -nqui est l'abréviation de --name. Il est possible d'installer des packages par fonctionnalité. Ainsi, zypper install -n blahspécifie de résoudre uniquement le package nommé blahet de ne pas considérer les packages qui fournissent blah . Sans cela, zypper peut résoudre en fonction de la section fournit à partir d'un RPM (y compris les comparaisons de versions), ce qui peut faciliter la résolution des dépendances. zypper install 'python>3.5'par exemple.
dannysauer

L'utilisation principale de zypper install -nest si vous souhaitez peut-être installer un package spécifique dont le nom est une capacité fournie par d'autres. Par exemple, il existe peut-être quelques implémentations de vi, et vous ne voulez qu'un package spécifique nommé vi sans résolution retomber sur gvim (qui fournit vi) dans le cas où le vipackage spécifique manque pour une raison quelconque dans votre référentiel. Personnellement, je n'aime pas la nature déroutante des options courtes et les utilise rarement dans les scripts ou tout ce que quelqu'un (comme moi) pourrait avoir besoin de lire plus tard. : D
dannysauer

8

Vous avez l'option --non interactive. Depuis la page de manuel:

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'.

Il n'y a pas de véritable correspondance avec la suppression automatique d'apt-get. La plus proche est l' --clean-depsoption de la removecommande, qui nettoie les dépendances tout de suite (mais pas après).


est-il possible d'ajouter une telle option dans zypper.confla confirmation permanente comme dans d'autres gestionnaires de paquets?

Je ne sais pas. Je n'ai pas utilisé suse depuis un moment, donc je ne peux pas le vérifier.
mat

cela semble impossible pour zypper contrairement à pacman, apt et yum / dnf :-(

3

Voilà un échantillon

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

Bien sûr, vous pouvez inclure plus d'options comme, --auto-agree-with-licensesmais n'oubliez pas que cela fait la différence si c'est avant ou aprèsinstall


2

Cela a fonctionné pour moi (vérifié sur SLES12SP3):

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

Remarque -C/--no-checkpour zypper ar.

Vous pouvez maintenant installer des packages:

zypper in -y --auto-agree-with-licenses vim
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.