Meu binário depende dessas bibliotecas de impulso e respectivos pacotes:
NAME | PACKAGE:
--------------------------------------+-----------------------------------
libboost_serialization.so.1.55.0 | libboost-serialization1.55.0
libboost_thread.so.1.55.0 | ibboost-thread1.55.0
libboost_date_time.so.1.55.0 | libboost-date-time1.55.0
libboost_signals.so.1.55.0 | libboost-signals1.55.0
Então, eu gostaria de definir uma lista de pacotes:
boostlibnames="libboost-serialization1.55.0 libboost-thread1.55.0 libboost-date-time1.55.0 libboost-signals1.55.0"
E agora eu gostaria de verificar se todos eles estão instalados e só então são executados de verdade apt-get install
. Eu sei que o apt verificará automaticamente se os pacotes já estão instalados, mas eu gostaria de informar o usuário se ele deseja instalar as bibliotecas ausentes antes de fazê-lo.
Existe uma boa maneira de verificar se todas as bibliotecas listadas (na variável acima) estão instaladas?
Respostas:
O
dpkg -s
comando retorna o status dos pacotes instalados. Por exemplo, no meu sistema, se eu executá-lo para ofirefox
que está instalado e onedit
que não está, recebo:Portanto, você pode usar esse comando para verificar se um pacote está instalado:
fonte
installed = installed || isInstalled(libArray[i])
. Da mesma forma, eu gostaria de colocar false em uma variável se um ou mais não foram instalados. Eu acho que posso fazer isso comif
, mas isso é muito código para nada.apt-get install
em todos eles. Qualquer um que esteja instalado será simplesmente ignorado. Deixe-me saber o que você quer e eu vou editar isso. Basicamente, você precisará alterar o|| echo ...
para|| installed=1
ou algo assim.if
instrução feia , mas a variável seria preferida. Eu pretendo envolvê-lo em uma função.dpkg -s
pode verificar vários pacotes ao mesmo tempo.Eu fiz essa função para um sistema CentOS hoje.
Bem, modifiquei levemente a função. Mais rápido e não precisa mais de um loop.
O equivalente do Debian / Ubuntu:
fonte
A seguir, é apresentada uma lista de todos os pacotes relevantes que não estão instalados:
Isso pula
dpkg -l
as linhas do cabeçalho e, em seguida, imprime as linhas em que o dpkg-query reclama sobre um pacote desconhecido, e as linhas que não começam comhi
ouii
(Hold Inst ou Install Inst).Normalmente, eu faria algo como
awk 'NR<=5 {next} ; ...'
oused -e '1,5d'
para se livrar dasdpkg -l
linhas de cabeçalho, mas, neste caso, estamos redirecionando o stderr para o stdout, a fim de capturar reclamaçõesdpkg-query
e tambémdpkg -l
as saídas, para que não possamos simplesmente excluir a primeira 5 linhas.Isso mostrará os pacotes nunca instalados, removidos, eliminados ou onde a instalação falhou / foi parcialmente concluída devido a erro.
fonte
Eu uso o seguinte código no meu trabalho chamado Easy Bash , que ajuda a instalar os pacotes mais populares rapidamente nos servidores Ubuntu. Este código irá verificar os pacotes listados instalados ou não.
Resultado:
fonte
fonte