Gostaria de escrever um script de instalação, onde gostaria de instalar o servidor MySQL.
No Linux Mint, eu segui o código:
apt-get -y --force-yes install mysql-server-5.6
mas eu instalei o novo Debian 8 e não existe mysql-server
- em vez disso existe mariadb
.
Como posso descobrir se o pacote existe?
Eu só sei que existe o dpkg -s
que deve dizer se um pacote está instalado.
--force-yes
desativa toda a segurança, para que você realmente possa danificar seu sistema a ponto de não ser reparado. Além disso:--force-yes
substitui (desativa)-y
. onde o último poderia ser a opção de escolha: uma forma longa de-y
é--assume-yes
e é isso que ele faz; Dizer sim até que ele poderia ficar muito feio, com o risco de estragos entre elementos centrais, fundamentos, etc.--force
segurança sobrepõe breaks (aprendi isso da maneira mais difícil)--simulate
opção deapt-get
, para fazer um--dry-run
, apenas no caso/etc/apt/sources.list
, certo?Respostas:
(o abaixo é do Ubuntu, mas a mesma técnica obviamente também funciona no Debian)
Se o pacote existir, as informações serão exibidas. Caso contrário, você verá algo como:
Além disso, o código de saída
apt-cache
será diferente de zero se nenhum pacote correspondente for encontrado.Nota adicional: se você estiver usando
apt-cache show package
onde pacote é virtual (um que não existe, mas é, por exemplo, referenciado por outros pacotes), você obtém:O valor
exit code
é zero (o que é um pouco enganador na minha opinião.)fonte
sources.list
com este comando:apt-cache search *searchstring*
. Esse comando também pesquisará a descrição dos pacotes e poderá ajudá-lo a encontrar pacotes onde você não sabe o nome exato do pacote.apt-cache search ...
retorna qualquer tipo de correspondência e o aplicativo. retorna 0 mesmo que nada seja encontrado, o que não é prático em um script bash.Eu usaria
dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed"
.Ele verificará se o
mysql-server
pacote está instalado e, se estiver, imprime esse fato na tela. Uma solução mais sofisticada seria, no bash (não testado):Então, pode-se fazer em um script:
fonte
Em uma linha:
apt-cache pkgnames | grep -q "\<$your_package_name\>"
sai com 0 se estiver presente, 1 se não estiver.
Bônus: verificação eficiente de vários pacotes, listados no arquivo "packages_we_want", um por linha, classificado com
sort
:apt-cache --no-generate pkgnames | sort | comm -13 - packages_we_want
lista todos os pacotes que você deseja, mas não existem nos repositórios.apt-cache --no-generate pkgnames | sort | comm -12 - packages_we_want
lista todos os pacotes que você deseja e existe nos repositórios.fonte