Come usare zypper negli script bash per qualcuno proveniente da apt-get?


12

Ho alcune domande sul passaggio da apt-get a zypper negli script bash.

Qual è l'equivalente di questo?

sudo apt-get install curl --assume-yes

(dove curl potrebbe essere qualsiasi pacchetto)

Ho trovato il cheat sheet di Zypper - openSUSE . Molto bella! Ma apprezzerei la voce dell'esperienza qui: qual è il modo giusto di usare Zypper in uno script in cui voglio accettare automaticamente tutte le istruzioni e non saltare le cose che richiedono una risposta?

Con la mia inesperienza sarei tentato di usare:

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

Ma è davvero l'equivalente di --assume-yes?

Che dire dell'equivalente per questi?

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

Questo suggerisce che non ce n'è uno ...

Esiste un sostituto di gdebi-core? O gdebi non è mai necessario con il "potente risolutore di soddisfazioni" di zypper? Uso gdebi per le situazioni in cui devo installare un pacchetto su una versione precedente e ho già un file .deb (ma non tutte le dipendenze).

Risposte:


10

In generale, è necessario utilizzare la --non-interactivemodalità, in collegamento -n, quando si esegue zypper in modo non interattivo:

zypper -n install curl

Potrebbe sembrare confuso per qualcuno che viene apt-get install -y curl. Alcuni sotto-comandi zypper supportano anche un'opzione -y/ specifica al comando --no-confirmcome alias per -n/ --non-interactive, ma non tutti i comandi secondari lo fanno. Poiché il installcomando lo implementa, questo comando è equivalente al precedente:

zypper install -y curl

Si noti che -ydeve venire dopo install , mentre l' -nopzione globale viene prima del sottocomando ( zypper install -nsignifica qualcosa di diverso; leggere la pagina man per quello).

[Modifica] La sezione seguente non è più accurata, ma è conservata per riferimento storico. L'attuale zypper supporta l' --gpg-auto-import-keysopzione per importare e fidare automaticamente delle chiavi gpg associate a un nuovo repository.


Secondo la documentazione non c'è modo di accettare una chiave GPG senza modalità interattiva:

una nuova chiave può essere considerata attendibile o importata solo nella modalità interattiva

Anche con --no-gpgp-checksla chiave GPG verrà rifiutata.

Una soluzione alternativa per gli script consiste nell'utilizzare pipe e echo:

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

1
Sul serio? C'è  -nun'opzione e  -yun'opzione e significano la stessa cosa ma devono essere posizionate in posizioni diverse nella riga di comando? Sì, è confuso. (Per essere chiari: non sto sparando al messaggero; sto dicendo che lo sviluppatore avrebbe dovuto pensare di più ai problemi di usabilità.)
G-Man dice 'Reinstate Monica' il

@ G-Man - beh, una specie di. :) zypperha -nun'opzione. Il installcomando secondario ha sia -yun'opzione che è una comodità che alias -ndell'opzione globale , sia anche un'opzione -nche è l'abbreviazione --name. È possibile installare pacchetti per funzionalità. Quindi, zypper install -n blahspecifica di risolvere solo il pacchetto denominato blahe di non considerare i pacchetti che forniscono blah . Senza di ciò, zypper può risolvere in base alla sezione fornisce da un RPM (inclusi i confronti di versioni), che può semplificare la risoluzione delle dipendenze. zypper install 'python>3.5'per esempio.
dannysauer,

L'uso principale zypper install -nè se forse si desidera installare un pacchetto specifico il cui nome è una funzionalità fornita da altri. Ad esempio, forse ci sono alcune implementazioni di vi, e si desidera solo un pacchetto specifico chiamato vi senza risoluzione che ricada su gvim (che fornisce vi) nel caso in cui il vipacchetto specifico sia per qualche motivo mancante nel repository. Personalmente, non mi piace la natura confusa delle opzioni brevi e raramente le uso negli script o in qualsiasi altra cosa qualcuno (come me) potrebbe aver bisogno di leggere in seguito. : D
dannysauer,

8

Hai l'opzione --non-interactive. Dalla pagina man:

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

Non esiste una vera corrispondenza con l'autoremove di apt-get. La più vicina è l' --clean-depsopzione del removecomando, che pulisce le dipendenze immediatamente (ma non in seguito).


è possibile aggiungere tale opzione zypper.confper la conferma permanente come in altri gestori di pacchetti?

Non lo so. Non uso Suse da un po 'di tempo, quindi non posso verificarlo.
mat

sembra impossibile per zypper a differenza di pacman, apt e yum / dnf :-(

3

Questo è un esempio

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

Ovviamente puoi includere più opzioni come --auto-agree-with-licensesma ricorda che fa la differenza se è prima o dopoinstall


2

Questo ha funzionato per me (controllato su SLES12SP3):

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

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

Ora puoi installare i pacchetti:

zypper in -y --auto-agree-with-licenses vim
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.