Como gerenciar de forma correta os pacotes em debian e distribuições derivadas
2. tutorfreebr.blogspot.com.br 1/16 Gerenciamento de Pacotes no Debian
Como gerenciar de forma correta os pacotes em Debian e Distribuições Derivadas
A gestão de pacotes em sistema GNU/Linux é uma das suas maiores virtudes, no
entanto o formato do empacotamento e a sua correspondente gestão varia de distribuição para
distribuição e por isso mesmo seria muito extenso falar de todos os métodos possíveis. Em Debian e
distribuições derivadas, o .deb é utilizado como sendo o formato de empacotamento e o apt e dpkg
são as ferramentas de trabalho.
Os mais céticos pensam no Synaptic como a forma de resolução para todas as tarefas
relacionadas com a gestão de pacotes, ou até numa outra GUI qualquer. Mesmo o Synaptic
Package Manager como sendo uma das melhores GUIs para estes procedimentos não responde de
forma satisfatória em algumas situações e por isso temos de ir para a CLI (Command Line
Interface).
apt-get
Muito provavelmente o apt-get é um dos comandos mais utilizados no Debian e
distribuições derivadas. O principal objetivo do apt-get é interagir com os repositórios remotos, os
quais são mantidos pela equipe de empacotamento da distribuição e depois realizar a execução de
ações sobre esses pacotes disponíveis.
O apt e suas variantes realizam a pesquisa de informações nos repositórios
remotamente numa cache mantida no sistema local. Também é utilizado para instalação e/ou
remoção de um determinado pacote ou vários no sistema.
O apt-get é largamente utilizado para atualizar a cache localmente e ao mesmo tempo
realizar todas as alterações necessárias ao sistema.
apt-cache
O apt-cache utiliza a cache local para consultar informações sobre todos os pacotes
disponíveis e as suas respectivas propriedades. Se for necessário realizar uma pesquisa por um
determinado pacote ou até uma ferramenta que executa uma determinada função no sistema, o apt-
3. tutorfreebr.blogspot.com.br 2/16 Gerenciamento de Pacotes no Debian
cahe é extremamente útil. Ao mesmo tempo, o apt-cache pode dar um manancial de informações
sobre qual a versão do pacote exato que vai ser o alvo desse mesmo procedimento. Também
devemos pensar em dependências e dependências reversas onde precisamente o apt-cache é a
melhor escolha.
aptitude
O aptitude tem a particularidade de combinar muitas das funcionalidades quer do nosso
já conhecido apt-get bem como do apt-cache.
No entanto, quando o aptitude se encontra a ser executado via CLI, a maioria dos
comandos vai espelhar de forma correta todas as potencialidades do apt-get e do apt-cache. Assim,
devido a esta capacidade conhecida como mirroring está de momento fora dos propósitos deste
artigo.
dpkg
As 3 ferramentas anteriormente descritas possuem o seu foco na gestão dos pacotes
mantidos nos repositórios, no entanto o dpkg pode ser utilizado para operar nos pacotes .deb
individuais, mas também é importante descrever, que o dpkg é o responsável pela maior parte dos
acontecimentos em backgroung via os comandos descritos acima.
Sendo assim, contrariamente aos comandos apt-*, o comando dpkg não possui a
capacidade de resolução de dependências de forma automática.
Mas então qual o trabalho do dpkg?
A sua principal característica é a capacidade que possui de poder trabalhar de forma
fácil com os pacotes .deb de forma totalmente direta e ainda ao mesmo tempo a capacidade de
poder dissecar qualquer pacote e descobrir toda a sua estrutura.
Embora seja possível ao dpkg recolher algumas informações sobre os pacotes instalados
no sistema, o seu objectivo principal reside sobre o nível do pacote individualmente.
tasksel
O tasksel é de um tipo de classe diferente de ferramentas existentes para a gestão de
software. Em lugar de exercer uma gestão de pacotes de forma individual, o tasksel, concentra-se
unicamente em grupos de software necessário para a realização de tarefas específicas (tasks).
Pessoalmente... não tenho muito adoração pelo tasksel, pois não permite uma
abordagem cirúrgica ao que desejamos realizar, no entanto pode ser bastante útil para se iniciar o
trabalho de uma forma bastante rápida.
VARIAÇÕES DO APT
Como alguns sabem, existem mais ferramentas para a gestão de pacotes que oferecem
diferentes funcionalidades ou até informações presentes em diferentes formas. Estou claramente
4. tutorfreebr.blogspot.com.br 3/16 Gerenciamento de Pacotes no Debian
referndo-me às ferramentas que se enquadram nesta categoria: apt-file, dselect e gdebi. Mais uma
vez lamento, mas está totalmente fora deste artigo, detalhar estas mesmas ferramentas.
Depois desta introdução, é o momento de passar às explicações práticas...
1. Atualizar a Cache de Pacotes e o Sistema
1.1 Atualizar a Cache de Pacotes Locais
Os repositórios remotos que empacotam as suas ferramentas contam com as
informações dos pacotes a serem atualizados em determinados intervalos de tempo. No entanto, é
importante referir que a grande maioria das ferramentas destinadas para a gestão de pacotes trabalha
com a informação existente previamente na cache local.
Assim sendo, uma das melhores práticas é precisamente a cada início da nossa sessão,
atualizar a cache de pacotes, antes de você executar outros comandos relacionados com pacotes.
A nossa finalidade aqui é assegurar que temos o nosso sistema Debian o mais atualizado
possível relativamente ao software disponível existente nessa máquina para evitar más surpresas.
Importa ao mesmo tempo evidenciar que alguns comandos podem falhar se estivermos operando
com informações de pacotes obsoletos.
1.2 Atualização de Pacotes sem a Remoção de Pacotes
Vale lembrar que o apt distingue dois tipos de procedimentos diferentes de atualização.
O primeiro procedimento pode e deve ser utilizado para atualizar quaisquer componentes do
sistema que não necessitem de remoção de componentes. Para se atualizar a cache local, executar:
sudo apt-get update
No momento será apresentada uma listagem devidamente atualizada com a totalidade
dos pacotes disponíveis existentes nos repositórios.
Este procedimento pode ser de enorme importância quando não desejamos a remoção de
quaisquer dos pacotes instalados em qualquer circunstância. A título de exemplo, posso nem estar
interessado em atualizar os drivers da minha placa de vídeo, nem sempre os drivers mais novos são
os que dão as maiores garantias.
1.3 Atualização / Remoção de Pacotes
Algumas atualizações envolvem a substituição de componentes do sistema ou a
realização da remoção de pacotes em regime de conflito. Este é por si mesmo um procedimento que
vai ignorar toda e qualquer atualização ou atualizações que requerem a remoção do pacote,
executar:
sudo apt-get upgrade
Logo após ter sido executada esta tarefa, qualquer atualização que não envolva a
remoção de pacotes vais ser de imediato aplicada ao sistema no seu todo.
5. tutorfreebr.blogspot.com.br 4/16 Gerenciamento de Pacotes no Debian
Este é o procedimento que atualizará a totalidade dos pacotes, mesmo aqueles que
exijam a remoção de pacotes, portanto isto é muita das vezes necessário realizar relativamente às
dependências que esses pacotes vão mudar / alterar.
Os pacotes a serem removidos são substituídos por outros pacotes equivalentes durante o
procedimento de atualização. Este é sem dúvidas um procedimento totalmente seguro de ser
executado.
Mas convém também recordar que é uma boa prática estarmos com a máxima atenção
sobre os pacotes a serem removidos, apenas no caso de alguns componentes essenciais se
encontrarem marcados para remoção. Logo devo executar:
sudo apt-get dist-upgrade
Agora que foi realizado o procedimento acima, a totalidade de pacotes existentes no
sistema serão atualizados na íntegra. Vale lembrar que este é o procedimento de atualização mais
completo, quando em comparação com o “apt-get upgrade”.
2. Download e Instalação de Pacotes
Uma das principais funções existentes nas ferramentas destinadas à gestão de pacotes é
facilitar o download e a instalação de um ou mais pacotes nesse sistema.
2.1 Pesquisar por Pacotes
Quando estamos realizando o download e instalação de pacotes, o primeiro
procedimento é a análise dos repositórios da nossa distribuição GNU/Linux para que dessa forma se
pesquise por pacotes de softwares.
A grande maioria dos comandos apt operam na cache de informações que é mantida na
máquina local, sendo que este procedimento permite uma execução mais rápida e menos tráfego de
rede.
A pesquisa por pacotes é uma operação que tem o seu alvo: a cache de informações dos
pacotes referentes à lista de repositórios do seu sources.list que encontra-se em “etc/apt/”.
O apt-cache search é o recurso necessário para a execução de pesquisa de pacotes
disponíveis. Logo é necessário garantir que a cache local se encontra devidamente atualizada antes
de se iniciar a pesquisa de pacotes, portanto para pesquisar, executar:
apt-cache search NomeDoPacote
Então não se utiliza o sudo?
Não são necessários privilégios especiais. Este procedimento apenas
consultará a informação e nada mais do que isso.
Utilizarei pesquisa sobre o pacote htop como exemplo demonstrativo, executar:
apt-cache search htop
6. tutorfreebr.blogspot.com.br 5/16 Gerenciamento de Pacotes no Debian
2.2 Instalação de Pacotes via Repositórios
Para que seja executada a instalação de um determinado pacote via repositórios, bem como ainda
todas as suas dependências obrigatórias e necessárias para a sua correta execução, utilizamos o
“apt-get install” + o nome do pacote, executar:
sudo apt-get install NomeDoPacote
É possível a instalação de vários pacotes, sendo que para se instalar múltiplos pacotes deve ser
inserido sempre um espaço entre cada pacote a ser instalado, executar:
sudo apt-get install package1 package2 package3 package4 package5
Vamos pensar se esses mesmos pacotes ou conjunto de pacotes a serem instalados requerem
obrigatoriamente dependências adicionais, assim estas vão certamente serem apresentadas, sendo
para tal necessário confirmar o procedimento. Para exemplo vou utilizar a instalação do Apache,
executar:
sudo apt-get install apache2
Vejamos o output com muita atenção:
Reading package lists... Done Building dependency tree Reading state information... Done The
following extra packages will be installed: apache2-data Suggested packages: apache2-doc
apache2-suexec-pristine apache2-suexec-custom apache2-utils The following NEW packages will
be installed: apache2 apache2-data 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 236 kB of archives. After this operation, 1,163 kB of additional disk space will be used.
Do you want to continue [Y/n]?
Embora o meu objetivo seja instalar o Apache, o pacote apache2-data, entre outros, são
necessários como dependências, ou seja, é necessária a instalação destes outros pacotes para que o
Apache venha a funcionar corretamente. Neste caso podemos continuar com a instalação
pressionando [ENTER], existe também a possibilidade de se abortar esse mesmo processo de
instalação, digitando n e teclando [ENTER].
2.3 Instalação de uma Versão Especifica de um Pacote via Repositórios
Sempre que existe a necessidade de se instalar uma versão específica de um determinado pacote,
essa mesma informação pode ser fornecida com a introdução do sinal de igualdade (=), executar:
sudo apt-get install NomeDoPacote=version
NOTA: 'version' deve coincidir com um dos números da versão do pacote disponível nesse
repositório.
2.4 Processo de Reconfiguração de Pacotes
Muitos pacotes possuem os seus próprios scripts de configuração pós-instalação, os
quais são sempre executados imediatamente após a instalação se encontrar completa. Estes incluem
muitas das vezes prompts para que o administrador do sistema possa realizar as escolhas
necessárias de acordo com as suas necessidades.
Caso exista a necessidade de serem executadas estas ou outras etapas de configuração
7. tutorfreebr.blogspot.com.br 6/16 Gerenciamento de Pacotes no Debian
num momento posterior, devemos utilizar o “dpkg-reconfigure”.
O dpkg-reconfiure analisará o pacote em causa e depois executará todos os comandos
de pós-configuração incluídos dentro da especificação desse mesmo pacote, executar:
sudo dpkg-reconfigure NomeDoPacote
IMPORTANTE: este procedimento apresentará uma quantidade substancial de perguntas para
serem respondidas.
2.5 Simulação de Execução do Pacotes
Aqui certamente vamos entrar numa das capacidades mais emblemáticas do apt.
Muitas, mas muitas vezes mesmo temos a necessidade de ver quais os efeitos colaterais de um
determinado procedimento, ainda antes de este ser executado para evitar o comprometimento do
sistema na sua globalidade.
Adicionando o parâmetro “-s”, o apt permite a simulação desse procedimento. Executar:
apt-get install -s package
Veremos todas as dependências e alterações no sistema. Mas tem
mais, um dos benefícios deste procedimento é que podemos verificar todos os
resultados de um processo que normalmente requerem privilégios de root, sem a
utilização do sudo.
Por exemplo, vamos novamente voltar ao Apache. Vamos avaliar o que iria ser instalado com o
apache2. Executar:
apt-get install -s apache2
NOTE: This is only a simulation! apt-get needs root privileges for real execution. Keep also in mind
that locking is deactivated, so don't depend on the relevance to the real current situation! [...]The
following extra packages will be installed: apache2-data Suggested packages: apache2-doc
apache2-suexec-pristine apache2-suexec-custom apache2-utils The following NEW packages will
be installed: apache2 apache2-data 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
[...]
Está demonstrado que foi possível a obtenção de todas as informações sobre os pacotes
e versões que seriam instalados, sem a necessidade de ser concluído o processo real.
Para os usuários mais curiosos: verifiquem a saída do “apt-get -s dist-upgrade”.
2.7 Correção de Dependências Quebradas
Existem situações em que uma instalação não pode ser concluída devido a dependências
ou outros problemas similares. Isto pode acontecer quando o dpkg não tem a capacidade de cuidar
das dependências da forma devida.
Mais uma vez o apt-get pode tentar resolver estes problemas com a inclusão do parâmetro -f.
Executar:
8. tutorfreebr.blogspot.com.br 7/16 Gerenciamento de Pacotes no Debian
apt-get install -f
O procedimento realizado acima vai apresentar quais são as dependências que não se
encontram satisfeitas e tentar instalar na tentativa de resolver o problema.
2.8 Download de Pacotes dos Repositórios
Existe situações em que pode ser bastante útil realizar o download de um pacote de um
repositório sem a necessidade de este ser instalado, sendo que este procedimento pode ser realizado
através do “apt-get download pacote”.
Como trata-se apenas de um simples download de um arquivo e não terá impacto algum no sistema,
os privilégios de administrador não são necessários, executar:
apt-get download pacote
O download vai ser realizado no diretório atual.
2.9 Download das sources via Repositório
Sabemos que o apt trabalha principalmente com pacotes no formato .deb, no entanto
existe a possibilidade de se obter somente o código fonte dos pacotes, desde que seu sources.list se
encontre devidamente configurada com essa opção. Assim para se realizar o download da source é
necessário existir a diretiva deb-src no repositório da sua sources.list.
Depois de termos os repositórios das sources devidamente configurados, é possível
realizar o download das sources de um pacote, para tal executar:
sudo apt-get source package
O procedimento executado acima realizará o download dos arquivos para o diretório
atual.
2.10 Instalação de um Pacote .deb
A grande maioria das distribuições GNU/Linux nos dias de hoje recomenda a instalação
de software a partir de seus repositórios oficiais. Mas isto não impede que um desenvolvedor
ofereça seu software para download no formato apropriado para uma fácil instalação. Para instalar
um pacote .deb de terceiros vamos utilizar o dpkg.
O dpkg é utilizado essencialmente para trabalhar com pacotes individuais, portanto não devemos
tentar em caso algum a execução da instalação via repositórios, por isso mesmo executar:
sudo dpkg --install Pacote.deb
É importa lembrar que o dpkg não implementará qualquer tipo de manipulação de
dependências, significando que se existirem quaisquer dependências não satisfeitas, a instalação vai
falhar ou mostrar alguma mensagem de alerta.
Mas nem tudo se encontra perdido, visto que o dpkg vai marcar as dependências necessárias, por
isso, se todas as dependências se encontrarem disponíveis nos repositórios, podemos de uma forma
9. tutorfreebr.blogspot.com.br 8/16 Gerenciamento de Pacotes no Debian
bastante fácil, solucionar este problema recorrendo novamente ao dpkg. Executar:
sudo apt-get install -f
O procedimento realizado acima executará a instalação da totalidade das dependências
não satisfeitas, as mesmas que foram anteriormente marcadas pelo dpkg.
2.11 Tasks e Tasksel
É possível executar a instalação de grandes conjuntos de grupos de pacotes de software
que estabelecem um ambiente quando instalado em conjunto. Assim e para ficarem mais cientes de
exemplos de tasks, estas incluem LAMP servers, ambientes desktop, servers de aplicações, etc.
Caso o tasksel não se encontre instalado nessa máquina, executar (como ROOT):
apt-get update
apt-get install tasksel
É possível selecionar diferentes grupos de pacotes de forma interativa, para tal executar:
tasksel
O procedimento realizado acima apresentará uma interface que permite selecionar
diferentes grupos de pacotes e aplicar as alterações necessárias.
Também existe a possibilidade de se visualizar uma lista de tasks disponíveis e o seu respectivo
estado. Executar:
tasksel --list-task
Seguidamente é possível optar por instalar as tasks via CLI, executar:
sudo tasksel install nome_da_task
3. Remoção de Pacotes
Obviamente que a execução de operações inversas à instalação e download de pacotes
também são possíveis de serem realizadas com o que se denomina por package managers.
3.1 Desinstalar um Pacote
Para remover um pacote previamente instalado devemos utilizar o “apt-get remove”,
sendo que este comando removerá a maioria dos arquivos desse mesmo pacote instalado no sistema,
mas com uma exceção notável.
IMPORTANTE: quando executamos o “apt-get remove” estamos somente removendo
esses pacotes, pois serão deixados os arquivos de configuração desses pacotes no seu devido lugar,
para que desse modo a configuração prévia fique sempre disponível, caso seja necessário voltar a
instalar posteriormente essa mesma aplicação.
Pessoalmente, acho bastante útil, porque significa que os arquivos de configuração previamente
personalizados não serão removidos, mesmo que esse mesmo pacote tenha sido apagado, executar:
sudo apt-get remove NomeDoPacote
10. tutorfreebr.blogspot.com.br 9/16 Gerenciamento de Pacotes no Debian
O pacote (package) serão integralmente desinstalados, mas os seus arquivos de
configuração continuarão perfeitamente disponíveis.
3.2 Desinstalar um Pacote e todos os arquivos de Configuração
Sempre que for necessário realizar a remoção de um pacote e todos os arquivos de
configuração que se encontrem associados devemos usar o “apt-get purge”.
Contrariamente à utilização do 'apt-get remove', o 'apt-get purge' remove tudo, tudo
mesmo, sendo este procedimento bastante útil, caso não se deseje guardar os arquivos de
configuração ou executar uma instalação limpa.
NOTA: Vale lembrar que uma vez estes arquivos de configuração terem sido excluídos,
NÃO HÁ a hipótese destes serem recuperados (a menos que exista um backup), executar:
sudo apt-get purge NomeDoPacote
Agora, se for necessário novamente a reinstalação do pacote, a configuração padrão vai
ser utilizada.
3.3 Remoção de Dependências Automáticas não Necessárias
Quando se remove pacotes do sistema com “apt-get remove” ou com “apt-get purge”, o
meta pacote também será removido. No entanto, nem todas as dependências que foram instaladas de
forma automática são descartadas completamente.
Com a finalidade de se remover de forma automática todos os pacotes que foram
instalados como dependências, deve ser usado o “apt-get autoremove”. Executar:
sudo apt-get autoremove
3.4 Apagar Pacotes Obsoletos
Como alguns pacotes são adicionados, mas não são removidos pelos responsáveis por
esses mesmos pacotes para essa mesma distribuição, alguns pacotes ficarão obsoletos.
Existe uma outra opção que deve ser realizada conjuntamente com o apt-get, usando para tal o
“autoclean”, sendo que este procedimento vai liberar espaço na máquina e ainda permitir que a
cache seja atualizada. Executar:
sudo apt-get autoclean
4. Obtenndo Informações dos Pacotes
Cada pacote contém uma enorme variedade de metadados que podem ser acessados
utilizando o conjunto apt.
11. tutorfreebr.blogspot.com.br 10/16 Gerenciamento de Pacotes no Debian
4.1 Apresentar as Informações de um Pacote
Para ser possível apresentar informações detalhas sobre um pacote presente nos repositórios da
nossa distribuição, podemos usar o show com o 'apt-cahe', executar:
apt-cache show NomeDoPacote
O comando acima informará os dados dos candidatos em questão. Assim cada candidato terá
informações sobre as suas dependências, versão, arquitetura, conflitos, novo do arquivo do pacote
real, o tamanho desse pacote, instalação e outras descrições mais detalhadas.
Para que seja possível apresentar as informações adicionais sobre cada um dos candidatos,
incluindo uma listagem completa das dependências reversas (lista de pacotes que dependem do
pacote consultado), utilizamos o showpkg. Isto incluirá uma quantidade de informações sobre este
pacote relativamente a outros. Executar:
apt-cache showpkg NomeDoPacote
4.2 Mostrar Informações sobre um Pacote .deb
Para se apresentar os detalhes sobre um pacote .deb, podemos utilizar o parâmetro --info, com o
dpkg, sendo que o alvo deste comando deve ser o caminho (/path) para o arquivo .deb, executar:
dpkg --info debfile.deb
O procedimento realizado acima apresentará alguns metadados sobre o pacote. Isso
inclui o nome do pacote e a sua versão, a arquitetura para o qual foi desenvolvido, o tamanho e as
dependências necessárias, descrição e conflitos.
4.3 Apresentação das Dependências e das Dependências Reversas
Para obter a lista de todas as dependências dee um determinado pacote e suas
dependências reversas utilizaremos o “apt-cache depends”.
Para visualizar as dependências de um determinado pacote, executar:
apt-cache depends NomeDoPacote
O procedimento realizado acima exibirá as informações sobre cada pacote que é
apresentado como sendo uma dependência, sugestão, recomendação ou conflito.
Caso seja necessário descobrir quais os pacotes dependem de um outro, devemos utilizar o
rdepends. Portanto executar:
apt-cache rdepends NomeDoPacote
4.4 Apresentar Pacotes Instalados e Versões Disponíveis
Muitas das vezes existem várias versões de um pacote dentro do repositório com um único pacote
padrão. Assim para se ver as versões de um pacote podemos utilizar o argumento policy, executar:
apt-cache policy NomeDoPacote
O comando acima apresentará a versão se encontra instalada (se existir), o candidato
12. tutorfreebr.blogspot.com.br 11/16 Gerenciamento de Pacotes no Debian
que será instalado por padrão junto a uma tabela de versões de pacotes indicando a prioridade de
cada uma delas. Mostra qual a versão vai ser instalada e quais as alternativas se encontram
disponíveis.
O procedimento também apresentará uma listagem sobre os repositórios onde cada
versão se encontra localizada, então este pode ser usado se existir algum repositório extra ou PPA
em substituição aos pacotes dos repositórios padrão.
4.5 Apresentação de Pacotes Instalados com o dpkg -l
Para que seja possível apresentar os pacotes instalados no sistema existem duas opções,
as quais dependem do formato e do output que iremos escolher. Podemos utilizar o dpkg ou o
dpkg-query com o parâmetro -l, sendo que o output de ambos é idêntico.
Sem a introdução de argumentos será apresentara uma listagem de todos os pacotes instalados no
sistema. Executar:
dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conffiles/Unpacked/halFconf/Halfinst/trigaWait/Trigpend
|/ Err?=(none)/Reinstrequired (Status,Err: uppercase=bad)
||/ Name Version
Architecture Description
+++=============================================
[...]
ii lyx 2.0.61build amd64 document processor
ii lyxcommon 2.0.61build all architectureindependent files fo
ii lyxdbg 2.0.61build amd64 debugging symbols for LyX
[...]
Esta saída é bastante extensa.
No início da saída do comando é possível visualizar o significado dos 3 primeiros caracteres em
cada linha. O primeiro caractere indica o estado desse mesmo pacote, o qual pode ser:
u -> desconhecido;
i -> instalado;
r -> removido;
p -> purge executado;
h -> versão realizada.
O segundo caractere indica o estado atual do pacote, como ele é conhecido pelo sistema de
empacotamento, os quais podem ser os seguintes:
n -> não instalado;
i -> instalado;
c -> existem arquivos de configuração presentes, mas a aplicação está desinstalada;
u -> descompactado, sendo que os arquivos estão descompactados mas não configurados ainda;
f -> pacote parcialmente instalado, o que desde já significa que existe uma grande probabilidade de
esse mesmo pacote, ser suspenso devido a alguma operação do sistema;
w -> o pacote encontra-se à espera de um desencadeamento de um pacote em separado;
p -> o pacote foi desencadeado por outro pacote.
13. tutorfreebr.blogspot.com.br 12/16 Gerenciamento de Pacotes no Debian
O terceiro caractere é um espaço em branco, para a grande maioria de pacotes tendo somente, uma
opção potencial:
r -> reinstalação necessária, sendo que isto por norma tende a significar que se encontra quebrado e
não se encontra funcional.
As colunas restantes contem o nome do pacote, versão, arquitetura e uma descrição.
4.6 Apresentar o Estado da Instalação e Pacotes Filtrados
Se formos adicionar um padrão de pesquisa após o -l, o dpkg apresentará todos os pacotes
(instalados ou não) que contêm esse mesmo padrão. Vamos pesquisar por Iceweasel, executar:
dpkg -l iceweasel*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conffiles/Unpacked/halFconf/Halfinst/trigaWait/Trigpend
|/ Err?=(none)/Reinstrequired (Status,Err: uppercase=bad)
||/ Nome Versão Arquitectura Descrição
+++=======================================================================
ii iceweasel 31.8.0esr1~ amd64 Web browser based on Firefox
un iceweasell10n <nenhuma> <nenhuma> (nenhuma descrição disponível)
ii iceweasell10n 1:31.8.0esr all Portuguese (Brazil) language pack
4.7 Apresentar os Pacotes Instalados com dpkg --get selections
Uma forma alternativa, para serem apresentados os pacotes que se encontram
instalados no sistema é precisamente recorrer ao parâmetro “--get selections” junto ao dpkg.
Isto fornecerá uma listagem de todos os pacotes instalados ou removidos, mas não os “purgados”,
executar:
dpkg --get-selections
Então, para se poder diferenciar entre dois estados, vou utilizar o awk para filtrar por estado e assim
para se visualizar somente os pacotes instalados, executar:
dpkg --get-selections | awk '$2 ~ /^install/`
Para obter uma lista de pacotes removidos que não tiveram os seus arquivos de configuração
purgados, executar:
dpkg --get-selections | awk '$2 !~ /^install/'
4.8 Pesquisa por Pacotes Instalados
Para procurar um pacote base instalado de um pacote específico é possível adicionar uma sequência
de filtros após a opção --get-selections e ainda recorrer à utilização de curingas. Novamente, este
procedimento vai apresentar todos os pacotes que se encontram instalados ou que ainda possuem
arquivo de configuração do sistema, executar:
dpkg --get-selections libz*
14. tutorfreebr.blogspot.com.br 13/16 Gerenciamento de Pacotes no Debian
4.9 Listagem de arquivos Instalados por Pacotes
Se for necessário descobrir qual pacote é responsável por um determinado pacote devemos utilizar o
parâmetro “-L” com o dpkg, executar:
dpkg -L NomeDoPacote
Será apresentado o path (caminho) absoluto de cada arquivo que é controlado pelo pacote em causa.
4.10 Pesquisar o que um Pacote Instala
Para pesquisar o que um pacote instala devemos utilizar o parâmetro “-S”, executar:
dpkg -S /path/to/file
4.11 Descobrir qual Pacote é Dono de Arquivo de Instalação
Para descobrir qual pacote é dono de um determinado arquivo de instalação, devemos
utilizar o parâmetro “-S”. No entanto, existem momentos em que é necessário saber qual o pacote
que fornece determinado arquivo ou comando, mesmo que o pacote associado não se encontre
instalado.
Para este procedimento é necessário a instalação do “apt-file”. Isto manterá a sua
própria BD de informações, o qual inclui o path de cada arquivo controlado por um pacote nessa
BD, executar:
sudo apt-get update
sudo apt-get install apt-file
Em seguida atualize o seu BD e faça a pesquisa, executar:
sudo apt-file update
sudo apt-file search /path/to/file
IMPORTANTE: só vai funcionar para os locais dos arquivos que são instalados diretamente por
um determinado pacote. Qualquer arquivo que seja criado via scripts de pós-instalação, não será
encontrado.
5. Transferência de Listas de Pacotes entre Sistemas
Algumas vezes é necessário realizar um backup da lista de pacotes instalados nesse
sistema e depois usar esse mesmo backup para se instalar um conjunto idêntico de pacotes numa
outra máquina.
5.1 Exportação da Lista de Pacotes
Para que seja possível replicar o conjunto de pacotes instalados num determinado
sistema para outro é necessário que seja exportada a lista de pacotes. Para esse mesmo efeito é
necessário o dpkg --get-selections, executar:
dpkg --get-selections > ~/packagelist.txt
15. tutorfreebr.blogspot.com.br 14/16 Gerenciamento de Pacotes no Debian
E tudo pronto para ser copiado para a segunda máquina.
Também é possível realizar um backup da lista de sources e de todas as keys confiáveis, executar:
mkdir ~/sources cp -R /etc/apt/sources.list* ~/sources
Relativamente às keys confiáveis, o backup, deve ser realizado da seguinte forma, executar:
apt-key exportall > ~/trusted_keys.txt
Agora é possível transferir o arquivo packagelist.txt, o diretório das sources e o trusted_keys.txt.
5.2 Importar Lista de Pacotes
Vamos imaginar que foi criado uma listagem de pacotes com “dpkg --get-selections”
como o realizado acima, agora é possível importar os pacotes para outra máquina com a ajuda do
dpkg.
Primeiramente é necessário adicionar as keys e implementar a sources.list que foi copiada da
primeira máquina. Assumindo que todos os dados dos quais foi realizado o backup foram
devidamente copiados para o diretório “home” da nova máquina, executar:
sudo apt-key add ~/trusted_keys.txt sudo cp -R ~sources/* /etc/apt/
Seguidamente devemos limpar todos os pacotes não essenciais nessa máquina. Este procedimento
irá assegurar que se aplicarão todas alterações de uma forma completamente limpa. Para se realizar
este procedimento é necessário realizar o procedimento como administrador, executar:
sudo dpkg --clear-selections
IMPORTANTE: todos os pacotes não essenciais vão ser marcados para serem desinstalados. É
altamente recomendável a realização de um update à lista de pacotes locais para que a instalação
possa ter os registros de todo o software que serão instalados. A atual instalação e o procedimento
de upgrade ficará a cargo do dselect.
O dselect deve estar instalado na máquina previamente. No entanto, vale lembrar que o dselect
mantém a sua própria base de dados, por isso mesmo é necessário realizar o update antes, executar:
sudo apt-get update
Em seguida, executar:
sudo apt-get install dselect
sudo dselect update
Seguidamente é possivel executar:
sudo dpkg --set-selections <packagelist.txt>
Para se aplicar as alterações é necessário realizar o dselect-upgrade, executar:
sudo apt-get dselect-upgrade
Será realizado o download e instalação de todos os pacotes necessários e ao mesmo
tempo removerá todos os pacotes marcados como não selecionados. Por fim, a lista de pacotes tem
de coincidir com a da máquina anterior, embora os arquivos de configuração devem ser necessários
16. tutorfreebr.blogspot.com.br 15/16 Gerenciamento de Pacotes no Debian
copiar ou até modificar.
6. Adicionar Repositórios e PPAs
Este é um tema que dá uma longa conversa e até motivo para algumas especulações,
sendo que umas com mais fundamento que outras. O conjunto padrão de repositórios fornecidos
pela maioria das distribuições de hoje contém no meu entendimento os pacotes suficientes para a
grande maioria dos usuários exercerem um excelente trabalho.
Existem momentos em que adicionar sources de “terceiros” pode ser a única opção,
como no caso de drivers proprietários para algum hardware ou em alguma aplicação especial.
6.1 Adicionar PPAs
Pessoalmente e para um sistema Debian like, NÃO aconselho a instalação de PPAs
existentes, sem que previamente seja realizada uma análise criteriosa relacionada à equipa de
desenvolvimento desse mesmo PPA. Além dos comentários de outros usuários relativos a questões
de segurança e as implicações no sistema como um todo.
Vale lembrar que os PPAs tiveram a sua gênese para a distribuição Ubuntu e NÃO para
a distribuição Debian, apesar de o Ubuntu apresentar o mesmo formato de empacotamento (.deb),
existem grandes diferenças em termos de filosofia.
Para que seja possível adicionar determinado PPA é necessário o comando “add-apt-repository”, o
qual tem de obedecer à sintaxe seguinte:
sudo add-apt-repository endereçoDoPPA
Seguidamente será solicitado que seja adicionado uma key para esse mesmo PPA e
depois esse PPA será de imediato adicionado ao sistema. A partir desse momento é possível a
instalação de toda e qualquer aplicação existente nesse mesmo repositório com a ajuda dos
comandos normais do apt.
Antes de ser realizada a pesquisa e/ou a instalação de um determinado pacote desse PPA, a cache
local deve ser atualizada, para tal executar:
sudo apt-get update
NOTA: por norma, são sempre mais credíveis em termos de segurança as aplicações existentes nos
repositórios oficiais da sua distribuição de trabalho, do que os repositórios de terceiros,
ressalvando, como é obvio, todas as exceções peculiares como sejam: kernel e drivers
proprietários, pois há um único fornecedor de cada um deles. Ao mesmo tempo, é importante que
se diga, que nem sempre as aplicações mais recentes obedecem aos critérios reais em termos de
performance e rentabilidade, mas cabe ao usuário fazer sua escolha.
6.2 Adicionar RepositóriosManualmente
Neste ponto específico, até onde sei, duas abordagens diferentes e ambas válidas. A
primeira dessas abordagens é precisamente editar a sources.list de forma direta, podendo ser
editado o arquivo /etc/apt/sources.list ou colocar essa nova lista no diretório
17. tutorfreebr.blogspot.com.br 16/16 Gerenciamento de Pacotes no Debian
/etc/apt/sources.list.d.
Se formos optar pela segunda opção, o nome do arquivo a ser criado deve SEMPRE terminar em
.list, executar:
sudo nano /etc/apt/sources.list.d/novoRepositorio.list
Dentro desse arquivo podemos adicionar a localização desse novo repositório, utilizando para tal a
sintaxe seguinte, executar:
deb url repositório NomeDaRelease component_names
ONDE:
deb (ou deb-src) -> identifica sempre o tipo de repositório, sendo que os repositórios convencionais
são marcados como deb, enquanto os repositórios relativos às sources começam sempre com deb-
src;
url -> identifica a URL (Uniform Resource Location) principal para esse repositório, sendo esta por
isso mesmo a localização desse repositório;
release name (ou suite) -> por norma este é sempre o nome do código de lançamento relativo à
distribuição, mas também pode ser qualquer outro nome para assim identificar um conjunto
específico de pacote ou pacotes criados para a versão dessa distribuição.
component names -> são as labels (man, contrib e non-free) para a seleção de pacotes que
desejamos ter disponível. Muitas das vezes contém informações da equipe de manutenção desse
repositório para assim informar sobre vários aspectos e como exemplo podem ser: confiança ou
licenciamento restrito do software que ele contém.
A segunda abordagem é via a utilização do comando add-apt-repository.
Na distribuição Ubuntu se encontra definido como sendo padrão previamente. Em Debian, deve ser
instalado com o pacote software-properties-common, então para Debian executar:
sudo apt-get update
sudo apt-get install software-properties-common
O repositório deve se encontrar no mesmo formato que foi utilizado para a adição em modo manual:
sudo add-apt-repository 'deb url release component'
A cache local de pacotes deve ser sempre atualizada depois de ser aplicado qualquer atualização de
repositórios para que dessa forma o sistema possa ter a noção dos novos pacotes disponíveis,
executar:
sudo apt-get update
Concluindo… eu sei que existem excelentes GUIs, mas nem sempre oferecem as mais variadas
funcionalidades que se deseja para os fins desejados.
Mais e melhores informações neste link.
Visite: tutorfreebr.blogspot.com.br