¿Cómo usar zypper en scripts de bash para alguien que viene de apt-get?

12

Tengo algunas preguntas sobre cómo pasar de apt-get a zypper en los scripts de bash.

¿Cuál es el equivalente de esto?

sudo apt-get install curl --assume-yes

(donde curl podría ser cualquier paquete)

Encontré la hoja de trucos de Zypper - openSUSE . ¡Muy agradable! Pero agradecería la voz de la experiencia aquí: ¿cuál es la forma correcta de usar zypper en un script en el que quiero aceptar automáticamente todas las indicaciones y no omitir las cosas que necesitan una respuesta?

Con mi inexperiencia, estaría tentado a usar:

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

¿Pero es eso realmente el equivalente de --assume-yes?

¿Qué pasa con el equivalente de estos?

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

Esto sugiere que no hay uno ...

¿Hay un reemplazo para gdebi-core? ¿O nunca se necesita gdebi con el "poderoso solucionador de satisfacción" de zypper? Uso gdebi para situaciones en las que necesito instalar un paquete en una versión anterior y ya tengo un archivo .deb (pero no todas las dependencias).

MountainX
fuente

Respuestas:

10

En general, debe usar el --non-interactivemodo, en acceso directo -n, cuando ejecuta zypper de forma no interactiva:

zypper -n install curl

Eso puede parecer confuso para alguien que viene apt-get install -y curl. Algunos subcomandos zypper también admiten una opción -y/ específica de comando --no-confirmcomo un alias para -n/ --non-interactive, pero no todos los subcomandos lo hacen. Como el installcomando implementa eso, este comando es equivalente al anterior:

zypper install -y curl

Tenga en cuenta que -ydebe aparecer después install , mientras que la -nopción global aparece antes del subcomando ( zypper install -nsignifica algo diferente; lea la página del manual para eso).

[Editar] La siguiente sección ya no es precisa, pero se conserva como referencia histórica. Current zypper admite la --gpg-auto-import-keysopción de importar y confiar automáticamente en las claves gpg asociadas a un nuevo repositorio.


Según la documentación, no hay forma de aceptar una clave GPG sin el modo interactivo:

solo se puede confiar o importar una nueva clave en el modo interactivo

Incluso con --no-gpgp-checksla clave GPG será rechazado.

Una solución alternativa para los scripts es usar pipe y echo:

zypper addrepo http://repo.example.org my_name | echo 'a'
Tombart
fuente
1
¿Seriamente? Hay una  -nopción y una  -yopción y significan lo mismo, pero deben colocarse en diferentes posiciones en la línea de comando. Sí, eso es confuso. (Para que quede claro: no estoy matar al mensajero; estoy diciendo que el promotor debería haber pensado más en problemas de usabilidad.)
G-hombre dice 'Restablecer Mónica'
@ G-Man, bueno, más o menos. :) zyppertiene una -nopción. El installsubcomando tiene una -yopción que es una conveniencia que alias a la -nopción global , y también tiene su propia -nabreviatura --name. Es posible instalar paquetes por capacidad. Entonces, zypper install -n blahespecifica solo resolver el paquete nombrado blahy no considerar los paquetes que proporcionan blah . Sin eso, zypper puede resolverse en función de la sección de ofertas de un RPM (incluidas las comparaciones de versiones), lo que puede facilitar la resolución de dependencia. zypper install 'python>3.5'por ejemplo.
dannysauer
El uso principal para zypper install -nes si tal vez desea instalar un paquete específico cuyo nombre es una capacidad proporcionada por otros. Por ejemplo, tal vez hay algunas implementaciones de vi, y solo desea un paquete específico llamado vi sin resolución recurriendo a gvim (que proporciona vi) en el caso de que el vipaquete específico falte por alguna razón en su repositorio. Personalmente, no me gusta la naturaleza confusa de las opciones cortas y rara vez las uso en scripts o cualquier otra cosa que alguien (como yo) necesite leer más tarde. : D
dannysauer
8

Tiene la opción --no interactiva. Desde la página del manual:

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

No existe una correspondencia real con el movimiento automático de apt-get. La más cercana es la --clean-depsopción del removecomando, que limpia las dependencias de inmediato (pero no después).

estera
fuente
¿Es posible agregar una opción zypper.confpara la confirmación permanente como en otros gestores de paquetes?
No lo sé. No he usado suse en mucho tiempo, así que no puedo verificarlo.
mat
parece imposible para zypper a diferencia de pacman, apt y yum / dnf :-(
3

Esa es una muestra

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

Por supuesto, puede incluir más opciones como, --auto-agree-with-licensespero recuerde que hace la diferencia si es antes o despuésinstall

Marcelo Atie
fuente
2

Esto funcionó para mí (comprobado en SLES12SP3):

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

Nota -C/--no-checkpara zypper ar.

Ahora puedes instalar paquetes:

zypper in -y --auto-agree-with-licenses vim
amaslenn
fuente