Método para verificar e instalar pacotes

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

[ Hits: 15.368 ]

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

Nmap,traceroute,ssh,ftp e nbtscan, tudo junto nesse script basicão.

Script para criação de usuários do Samba

Converter animes em .mp4 para .avi (e outros) com qualidade perfeita

Renomear Arquivos

edit_file


  

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