Método para verificar e instalar pacotes

Publicado por Jonathan Wolff Andrade (última atualização em 03/12/2012)

[ Hits: 14.716 ]

Homepage: http://wolffwebmaster.com.br | https://localhost:3128

Download verifica_instala_pacote




Método criado para verificar e instalar pacotes através do apt-get de forma interativa e fácil.

Criei para utilizar no meu TCC como uma função, ano que vem vou postar meu TCC completo, por enquanto vou disponibilizar alguns pedaços aqui no VOL.

Dica:
* para usuários iniciantes - utilizar como quiser.
* para usuários avançados - você pode saber como fazer isto, mas eu acho uma mão na roda este "método", alterei ele em diferentes partes do meu TCC e economizei muito código.

  



Esconder código-fonte

#!/bin/bash
#Criado por: Jonathan Wolff Andrade - 2012
###Metodo que verifica/instala pacote
echo "Este script verifica se o pacote esta ou nao instalado,posteriormente instala o mesmo se necessario"
echo
echo -n "Informe o nome do Pacote: "
read nome
pacote=$(dpkg --get-selections | grep "$nome" ) 
echo 
echo -n "Verificando se o Pacote $nome esta instalado."
sleep 2
if [ -n "$pacote" ] ;
then echo
     echo "Pacote $nome ja instalado"
else echo
     echo "Pacote $nome Necessario-> Nao instalado"
     echo "Instalando Automaticamente Pacote Dialog..."
     sudo apt-get install $nome
fi
echo -n "Pressione qualquer tecla para sair..."
read
exit
#Observação - > sem Acentos para não rodar "bugado" com usuários iniciantes que não configuraram corretamente o Terminal utilizado.

Scripts recomendados

Calculador de números primos

Grep em loop infinito

Ts client básico com YAD

Limpar logs do sistema

Troca automatica de papel de parade no fluxbox


  

Comentários
[1] Comentário enviado por franksouza183 em 03/12/2012 - 20:20h

Ok, gostei, mas preciso de mais uma característica: E se o pacote não for encontrado nos repositórios?

[2] Comentário enviado por jwolff em 04/12/2012 - 08:05h


[1] Comentário enviado por franksouza183 em 03/12/2012 - 20:20h:

Ok, gostei, mas preciso de mais uma característica: E se o pacote não for encontrado nos repositórios?


Opa Sr franksouza183
Poderia ser criado um método que identifique qual a Distro,se é 64 ou 32 bits e o tipo do pacote (.deb ou .rpm) e posteriormente Adiciona a linha no sources.list e de um "upgrade" ou um apt-get direto...

Mas enfim,devido a quantidade de variáveis e o nível de tratamento que necessita esta função (e minha limitação,pois sou um analista e não um programador) não existe esta função nem no meu TCC,onde criei uma pasta com .deb "genéricos" utilizados para isto... Mas fica o apelo,se alguém conseguir criar esta função,que funcione. Favor compartilhar. Obrigado.

Observação - pequeno erro que não afeta o funcionamento na linha 17.

Correção:
echo "Instalando Automaticamente Pacote $nome..."

[3] Comentário enviado por jacksonsantana em 04/12/2012 - 10:45h

Muito bom, pode se ainda, fazer um menu, e colocar essa funcao, dentro do case, com opcao de procurar e instalar varios pacotes... Realmente é uma mão na roda!

J

[4] Comentário enviado por jwolff em 04/12/2012 - 10:52h


[3] Comentário enviado por jacksonsantana em 04/12/2012 - 10:45h:

Muito bom, pode se ainda, fazer um menu, e colocar essa funcao, dentro do case, com opcao de procurar e instalar varios pacotes... Realmente é uma mão na roda!

J


Fico feliz com a repercussão do meu primeiro Script,era este mesmo o objetivo. Vou esperar mais dicas,ou quem sabe alguém resolva o problema citado pelo franksouza183. E ai vou postar uma versão 2.0

Valeu.

[5] Comentário enviado por genilsondasilva em 18/02/2013 - 01:29h

para ver se o pacote existe nos repositórios, pode tentar isso:

se_repo=$(apt-cache search $nome | grep ^"$nome ")
if [ -n "$se_repo" ]
then
echo "pacote existe nos repositorios"
else
echo "pacote desconhecido"
exit 1
fi

[6] Comentário enviado por jwolff em 18/02/2013 - 08:30h


[5] Comentário enviado por genilsondasilva em 18/02/2013 - 01:29h:

para ver se o pacote existe nos repositórios, pode tentar isso:

se_repo=$(apt-cache search $nome | grep ^"$nome ")
if [ -n "$se_repo" ]
then
echo "pacote existe nos repositorios"
else
echo "pacote desconhecido"
exit 1
fi


As duas formas são válidas,a sua "apt-cache é uma ferramenta simples usado para consultar informações a partir de arquivos binários do APT em cache" . Demora mais tempo para processar,além de trazer em tela muitas outras informações. Se necessário é um recurso mais completo,mas para saber se o pacote (.deb) já foi instalado é mais fácil utilizar o "dpkg --get-selections".

[7] Comentário enviado por genilsondasilva em 18/02/2013 - 11:13h

jwolff

São duas coisas diferentes. O "apt-cache search" tem a ver com o comentário do franksouza183. Você pode inserir essas linhas dentro do seu código para verificar se o pacote existe no repositório. O grep ^"$nome " (com espaço antes da aspa final) mostra só o que interessa.

Veja:


#!/bin/bash
#Criado por: Jonathan Wolff Andrade - 2012
###Metodo que verifica/instala pacote
echo "Este script verifica se o pacote esta ou nao instalado,posteriormente instala o mesmo se necessario"
echo
echo -n "Informe o nome do Pacote: "
read nome
pacote=$(dpkg --get-selections | grep "$nome" )
echo
echo -n "Verificando se o Pacote $nome esta instalado."
sleep 2
if [ -n "$pacote" ] ;
then echo
echo "Pacote $nome ja instalado"
else echo

#acrescentado aqui (so a parte que interessa)
se_repo=$(apt-cache search $nome | grep ^"$nome ")
if [ ! -n "$se_repo" ]
then
echo
echo "pacote nao instalado e nao existe nos repositorios"
acho
exit 1
fi

echo "Pacote $nome Necessario-> Nao instalado"
echo "Instalando Automaticamente Pacote Dialog..."
sudo apt-get install $nome
fi
echo -n "Pressione qualquer tecla para sair..."
read
exit
#Observação - > sem Acentos para não rodar "bugado" com usuários iniciantes que não configuraram corretamente o Terminal utilizado.

[8] Comentário enviado por jwolff em 18/02/2013 - 13:20h


[7] Comentário enviado por genilsondasilva em 18/02/2013 - 11:13h:

jwolff

São duas coisas diferentes. O "apt-cache search" tem a ver com o comentário do franksouza183. Você pode inserir essas linhas dentro do seu código para verificar se o pacote existe no repositório. O grep ^"$nome " (com espaço antes da aspa final) mostra só o que interessa.



Você acrescentou uma rotina que faz a mesma coisa que a minha: "verifica se o pacote está instalado,ou não" só que com recursos diferentes.
A pergunta do franksouza183 é: rondando o meu script inicial,caso o "apt-get install" execute e não encontre o pacote necessário.Ai seria necessário adicionar os endereços(que possuam os repositórios) na lista do /etc/apt/sources.list ,para automaticamente -> adicionar,atualizar e dar um novo "apt-get install".Desta vez instalando,pois encontra o novo repositório.

O Script não contempla isto e sinceramente acho bem complexo contemplar ; pois seria necessário uma lógica bem maior para obter este resultado.
O que eu infelizmente não contemplei

[9] Comentário enviado por genilsondasilva em 18/02/2013 - 14:10h


[8] Comentário enviado por jwolff em 18/02/2013 - 13:20h:


[7] Comentário enviado por genilsondasilva em 18/02/2013 - 11:13h:

jwolff

São duas coisas diferentes. O "apt-cache search" tem a ver com o comentário do franksouza183. Você pode inserir essas linhas dentro do seu código para verificar se o pacote existe no repositório. O grep ^"$nome " (com espaço antes da aspa final) mostra só o que interessa.



Você acrescentou uma rotina que faz a mesma coisa que a minha: "verifica se o pacote está instalado,ou não" só que com recursos diferentes.
A pergunta do franksouza183 é: rondando o meu script inicial,caso o "apt-get install" execute e não encontre o pacote necessário.Ai seria necessário adicionar os endereços(que possuam os repositórios) na lista do /etc/apt/sources.list ,para automaticamente -> adicionar,atualizar e dar um novo "apt-get install".Desta vez instalando,pois encontra o novo repositório.

O Script não contempla isto e sinceramente acho bem complexo contemplar ; pois seria necessário uma lógica bem maior para obter este resultado.
O que eu infelizmente não contemplei


No meu sistema que é Ubuntu, e baseado em debian ele funciona bem, eu testei antes de comentar.

Usando o seu scritp, com o meu acréscimo, se eu colocar por exemplo o pacote "firefox" ele diz que já tá instalado e pronto, se não tiver irá instalar, agora se eu errar no nome (parte do acréscimo), por exemplo "firefox18" (só a título de exemplo, algo que não existe) ele diz que além de não estar instalado ele não existe no repositório. Eu entendi que o franksouza183 quando disse "E se o pacote não for encontrado nos repositórios?" ele tava se referindo a isso, não que o script adicionasse automaticamente no sources.list o repositório certo, porque isso seria impossível!

Se vc testar o comando "apt-cache search" vai ver que ele mostra todos os pacotes inclusive que não estejam instalados.
Tenta colocar o nome de um pacote que não está instalado no seu sistema e ve se ele aparece (apt-cache search pacote_não_instalado) você vai ver que mesmo não estando instalado aparece lá uma linha com o nome do pacote e mais informações.

Veja um exemplo em:
http://www.debian.org/doc/manuals/apt-howto/ch-search.pt-br.html

[10] Comentário enviado por jwolff em 18/02/2013 - 15:20h


[9] Comentário enviado por genilsondasilva em 18/02/2013 - 14:10h:


[8] Comentário enviado por jwolff em 18/02/2013 - 13:20h:


[7] Comentário enviado por genilsondasilva em 18/02/2013 - 11:13h:

jwolff

São duas coisas diferentes. O "apt-cache search" tem a ver com o comentário do franksouza183. Você pode inserir essas linhas dentro do seu código para verificar se o pacote existe no repositório. O grep ^"$nome " (com espaço antes da aspa final) mostra só o que interessa.



Você acrescentou uma rotina que faz a mesma coisa que a minha: "verifica se o pacote está instalado,ou não" só que com recursos diferentes.
A pergunta do franksouza183 é: rondando o meu script inicial,caso o "apt-get install" execute e não encontre o pacote necessário.Ai seria necessário adicionar os endereços(que possuam os repositórios) na lista do /etc/apt/sources.list ,para automaticamente -> adicionar,atualizar e dar um novo "apt-get install".Desta vez instalando,pois encontra o novo repositório.

O Script não contempla isto e sinceramente acho bem complexo contemplar ; pois seria necessário uma lógica bem maior para obter este resultado.
O que eu infelizmente não contemplei

No meu sistema que é Ubuntu, e baseado em debian ele funciona bem, eu testei antes de comentar.

Usando o seu scritp, com o meu acréscimo, se eu colocar por exemplo o pacote "firefox" ele diz que já tá instalado e pronto, se não tiver irá instalar, agora se eu errar no nome (parte do acréscimo), por exemplo "firefox18" (só a título de exemplo, algo que não existe) ele diz que além de não estar instalado ele não existe no repositório. Eu entendi que o franksouza183 quando disse "E se o pacote não for encontrado nos repositórios?" ele tava se referindo a isso, não que o script adicionasse automaticamente no sources.list o repositório certo, porque isso seria impossível!

Se vc testar o comando "apt-cache search" vai ver que ele mostra todos os pacotes inclusive que não estejam instalados.
Tenta colocar o nome de um pacote que não está instalado no seu sistema e ve se ele aparece (apt-cache search pacote_não_instalado) você vai ver que mesmo não estando instalado aparece lá uma linha com o nome do pacote e mais informações.

Veja um exemplo em:
http://www.debian.org/doc/manuals/apt-howto/ch-search.pt-br.html


Pois eh,desde o seu primeiro comentário respondi que as duas opções são funcionais(após ter testado a minha solução e a sua trazem a mesma solução). Só estava esclarecendo se você sabia algo para "adicionar automaticamente no sources.list" o que você considerou impossível. Até acho possível,mas é inviável,a quantidade de testes e o nível de programação para tal finalidade. Obrigado pela contribuição. Quem sabe alguém já tenha feito uma solução para adicionar no sources.list


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts