Como usar o zypper em scripts bash para alguém vindo do apt-get?

12

Eu tenho algumas perguntas sobre como mudar do apt-get para o zypper nos scripts do bash.

Qual é o equivalente disso?

sudo apt-get install curl --assume-yes

(onde ondulação poderia ser qualquer pacote)

Encontrei a Folha de dicas do Zypper - openSUSE . Muito agradável! Mas eu apreciaria a voz da experiência aqui - qual é a maneira correta de usar o zypper em um script em que quero concordar automaticamente com todas as solicitações e não ignorar as coisas que precisam de resposta?

Com a minha inexperiência, ficaria tentado a usar:

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

Mas isso é realmente o equivalente a --assume-yes?

E o equivalente para estes?

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

Isso sugere que não há um ...

Existe um substituto para o gdebi-core? Ou o gdebi nem sempre é necessário com o "poderoso solucionador de satisfação" do zypper? Uso o gdebi para situações em que preciso instalar um pacote em uma versão mais antiga e já tenho um arquivo .deb (mas não todas as dependências).

MountainX
fonte

Respostas:

10

Em geral, você deve usar o --non-interactivemodo, em atalho -n, ao executar o zypper de maneira não interativa:

zypper -n install curl

Isso pode parecer confuso para alguém que vem apt-get install -y curl. Alguns subcomandos do zypper também suportam uma opção -y/ específica do comando --no-confirmcomo um alias para -n/ --non-interactive, mas nem todos os subcomandos o fazem. Como o installcomando implementa isso, esse comando é equivalente ao acima:

zypper install -y curl

Observe que o item -ydeve vir depois install , enquanto a -nopção global vem antes do subcomando ( zypper install -nsignifica algo diferente; leia a página de manual para isso).

[Editar] A seção abaixo não é mais precisa, mas é mantida para referência histórica. O zypper atual suporta a --gpg-auto-import-keysopção de importar e confiar automaticamente nas chaves gpg associadas a um novo repositório.


De acordo com a documentação, não há como aceitar uma chave GPG sem o modo interativo:

uma nova chave pode ser confiável ou importada apenas no modo interativo

Mesmo com --no-gpgp-checksa chave GPG será rejeitado.

Uma solução alternativa para scripts é usar pipe e echo:

zypper addrepo http://repo.example.org my_name | echo 'a'
Tombart
fonte
1
A sério? Há uma  -nopção e uma  -yopção e eles significam a mesma coisa, mas devem ser colocados em posições diferentes na linha de comando? Sim, isso é confuso. (Para ser claro: não estou filmando o messenger; estou dizendo que o desenvolvedor deveria ter pensado mais sobre questões de usabilidade.)
G-Man diz 'Reinstate Monica' em
@ G-Man - bem, mais ou menos. :) zyppertem uma -nopção. O installsubcomando possui uma -yopção que é uma conveniência que se alia à -nopção global e também possui uma -nque é a abreviação --name. É possível instalar pacotes por capacidade. Portanto, zypper install -n blahespecifica apenas resolver o pacote nomeado blahe não considerar os pacotes que fornecem blah . Sem isso, o zypper pode resolver com base na seção fornece de um RPM (incluindo comparações de versões), o que pode facilitar a resolução de dependências. zypper install 'python>3.5'por exemplo.
Dannysauer 19/07/19
O principal uso zypper install -né se você deseja instalar um pacote específico cujo nome é um recurso fornecido por outras pessoas. Por exemplo, talvez haja algumas implementações do vi, e você deseja apenas um pacote específico denominado vi sem que a resolução volte ao gvim (que fornece vi) no caso de o vipacote específico estar, por algum motivo, ausente no seu repositório. Pessoalmente, não gosto da natureza confusa das opções curtas e raramente as uso em scripts ou qualquer outra coisa que alguém (como eu) precise ler mais tarde. : D
dannysauer 19/07/19
8

Você tem a opção --non-Interactive. Na página do 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'.

Não existe um correspondente real para a remoção automática do apt-get. O mais próximo é a --clean-depsopção do removecomando, que limpa as dependências imediatamente (mas não depois).

esteira
fonte
é possível adicionar essa opção zypper.confpara confirmação permanente como em outros gerenciadores de pacotes?
Eu não sei. Não uso suse há algum tempo, então não posso verificar.
mat
parece que é impossível para zypper ao contrário pacman, apt e yum / DNF :-(
3

Essa é uma amostra

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

Claro que você pode incluir mais opções como, --auto-agree-with-licensesmas lembre-se, isso faz diferença se for antes ou depoisinstall

Marcelo Atie
fonte
2

Isso funcionou para mim (verificado no SLES12SP3):

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

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

Agora você pode instalar pacotes:

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