zypper instala versão principal específica sem especificar a versão secundária

4

Estou escrevendo um script que instala alguns pacotes e faz alguns trabalhos de configuração. Eu quero que o script para instalar uma versão principal específica de um pacote, mas eu não me importo com qual versão secundária do pacote é.

Mais ao ponto, eu quero que ele instale a versão 2.y.z mais recente do pacote, mas não 1.y.z ou 3.y.z (ou qualquer outro número de versão principal).

Eu tentei (sem sucesso)

  • zypper install 'mypackage=2'
  • zypper install 'mypackage>1<3'
  • zypper install 'mypackage>1' 'mypackage<3'
  • zypper install 'mypackage>=2.0.0' 'mypackage<3.0.0'

O último parece promissor, porque então zypper reclama:

'mypackage>=2.0.0' not found in package names. Trying capabilities. No provider of 'mypackage >= 2.0.0' found.

No entanto, após essa mensagem, continua a instalação do mypackage-1.5.0, porque isso satisfaz a segunda edição do pacote especificada.

    
por Tomas Creemers 08.06.2015 / 19:42

1 resposta

1

Da página do manual

install (in) [options] name|capability|rpm_file_uri...
           Install or update packages.

           The packages can be selected by their name or by a capability they provide.

               A capability is formed by "NAME[.ARCH][ OP EDITION]", where ARCH is an architecture code, OP is one of =, or > and EDITION is "VERSION[-RELEASE]". For example: zypper=0.8.8-2 The NAME component of a
               capability is not only a package name but any symbol provided by packages: /bin/vi, libcurl.so.3, perl(Time::ParseDate). Just remember to quote to protect the special characters from the shell, for example:
               zypper\>0.8.10 or 'zypper>0.8.10'.

               If EDITION is not specified, the newest installable version will be installed. This also means that if the package is already installed and newer versions are available, it will get upgraded to the newest installable
               version.

               If ARCH is not specified, or the last dot of the capability name string is not followed by known architecture, the solver will treat the whole string as a capability name. If the ARCH is known, the solver will select
               a package matching that architecture and complain if such package cannot be found.

Como diz um dos seguintes e não vejo nenhum operador de conjunção, direi que isso não pode ser feito de forma nativa.

Você pode sempre criar scripts com algo como

zypper se -n -s package | grep " package " | grep " MIN_NUM" | cut -d '|' -f 4

Observe: que o texto acima é muito preguiçoso e deve ser melhor escrito.

Observe também: você deve fazer uma solicitação de recurso. :)

    
por 11.06.2015 / 20:44