Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg

Manutenção (instalação, remoção, limpeza, pacotes quebrados, etc) de sistemas Linux Debian e derivados (Ubuntu, Linux Mint, etc) dirimindo dúvidas entre as ferramentas apt-get, apt, aptitude e dpkg. A idéia básica pode ser adaptada para outras distribuições, pois o que muda são somente as ferramentas.

[ Hits: 2.427 ]

Por: Buckminster em 22/04/2024


Comandos 1



Nas primeira e segunda partes veremos majoritariamente os comandos e na última parte têm maiores explicações sobre as ferramentas e seus comandos. A ideia básica pode ser adaptada para outras distribuições, pois o que muda são somente as ferramentas.

O APT (Advanced Package Tool), além de ser uma biblioteca, é um projeto amplo cujos planos originais incluem uma interface gráfica e outras funcionalidades. Ele é baseado numa biblioteca que contém as aplicações principais e o 'apt-get' é a primeira interface — em linha de comando — que foi desenvolvida dentro do projeto.

O 'apt-get' é a ferramenta de linha de comando (terminal) para lidar com pacotes e pode ser considerado o "back-end" dos usuários para outras ferramentas que usam a biblioteca APT.
O 'apt' é uma interface de linha de comandos de alto nível para o sistema de gestão de pacotes e também é uma interface para a biblioteca APT.
O 'aptitude' é uma interface de linha de comando para o sistema de pacotes Debian GNU/Linux. Ele permite ao usuário visualizar a lista de pacotes e executar tarefas de gerenciamento de pacotes, como instalação, atualização e remoção de pacotes. O aptitude tem uma interface modo texto e uma gráfica — que ainda não está completa.
O 'dpkg' é uma ferramenta de nível médio para instalar, compilar, remover e gerir pacotes .deb. O próprio dpkg é controlado inteiramente via parâmetros de linha de comandos o que consiste exatamente de uma ação com zero ou mais opções. A ação diz ao dpkg o que fazer e as opções, quando tiver, controlam o comportamento da ação. O 'dpkg' pode também ser usado como "front-end" para dpkg-deb e dpkg-query.

Exemplo:
# dpkg --configure -a
onde '--configure' é a ação e '-a' é a opção (comumente chamado de parâmetro).

O dpkg é o comando básico para lidar com pacotes Debian no sistema. Se você tem pacotes '.deb' é com o dpkg que você instala ou analisa seu conteúdo, mas este programa tem apenas uma visão parcial do universo Debian: ele sabe o que está instalado no sistema e o que for dado na linha de comando, mas não sabe nada dos outros pacotes disponíveis. Assim, ele vai falhar se uma dependência não for satisfeita. Ferramentas como o apt e aptitude, ao contrário, criarão uma lista de dependências para instalar tudo o mais automaticamente possível.

Vemos, logo de início, que o apt-get é o "back-end", o apt-get é propriamente a linha de comandos para a biblioteca APT e o apt e o aptitude são interfaces de texto para a biblioteca APT. A interface mais recomendada atualmente nos manuais do Debian (links ao final) é o apt, porém, a sintaxe de linha de comando do apt-get e aptitude são muito semelhantes ao apt. Tanto o apt-get quanto o apt e o aptitude instalam pacotes .deb também.

É importante também discorrer sobre o arquivo '/etc/apt/sources.list' que é o arquivo dos repositórios. Os repositórios são servidores onde ficam os pacotes de onde as ferramentas citadas buscam tais pacotes através de URIs (grosso modo, links) dentro do arquivo '/etc/apt/sources.list'. Importantíssimo também é frisar e destacar que se deve usar somente repositórios oficiais de cada distribuição, no caso, os links dentro do arquivo sources.list. Não mescle e/ou misture repositórios de distribuições diferentes, não use PPAs de uma distribuição em outra, pois isso pode quebrar o sistema.

No diretório /etc/apt/sources.list.d é onde ficam os arquivos dos repositórios externos para atualizações de pacotes/programas como PostgreSQL, Google-chrome, Opera, Skype, etc. Quando for necessário criar um arquivo '.list' para um programa que você está instalando, sempre crie-o dentro de /etc/apt/sources.list.d.

Da mesma maneira quando for instalar algum programa manualmente sempre instale a partir de /usr/local/src ou /opt, ou seja, 'a partir de' significa fazer o download dentro de um desses diretórios, descompactar (se for o caso) e instalar a partir dele; ou quando, numa instalação automática com apt-get, apt ou aptitude solicitar um local, prefira /opt ou /usr/local/src, pois assim o sistema 'se encontra' melhor para distinguir entre instalações do próprio sistema e instalações feitas pelo usuário.

O diretório /usr/local traz por padrão algumas pastas como bin, etc, games, include, lib, man, sbin, share, src, que podem e devem ser utilizadas para instalações manuais, cujas pastas devem ser indicadas nos arquivos de configuração como, por exemplo, os fontes (o download do arquivo) fica em src, as outras pastas você indica no '.configure' antes de 'make' e/ou 'make install'.

O diretório /opt também serve para estas instalações manuais ou quando for solicitado e, desta forma, você organiza melhor as instalações e o sistema agradece.
No diretório /opt você tem a liberdade de criar diretórios/pastas para melhor organização, mas basta, por exemplo, você criar pastas com o nome do programa e dentro de cada pasta/diretório a instalação criará automaticamente suas pastas e seus arquivos.

Exemplos:

debian@usuario:/opt$ ls
google skypeforlinux

$ cd google
$ ls
chrome

$ cd chrome
$ ls
chrome_100_percent.pak locales
chrome_200_percent.pak MEIPreload
chrome_crashpad_handler product_logo_128.png
chrome-management-service product_logo_16.png


Acima tem uma parte dos arquivos e diretórios, somente para ilustração.

Pesquise sempre algum repositório oficial que contenha o programa que você deseja e, caso não encontrar, é porque tal programa não tem para a sua distribuição ou está disponível somente para instalação manual.
Sobre os repositórios 'backports', mantenha-os sempre comentados dentro do sources.list e use-os somente quando não encontrar algum pacote/programa nos repositórios normais/estáveis e volte a comentar.

Uma sequência sugerida para manutenção regular do sistema é a seguinte (com sudo ou como root):

apt -f install
apt -f remove
apt autoremove
apt autoclean
dpkg --configure -a
apt update
apt upgrade


Sequência para corrigir pacotes quebrados:

apt -f install
apt -f purge
apt autopurge
apt --fix-broken install
apt clean
dpkg --configure -a
apt update
apt upgrade


A diferença entre 'autoclean' e 'clean' é que 'clean' limpa completamente o diretório e 'autoclean' remove apenas os pacotes que não podem mais ser baixados (por terem sumido dos espelhos Debian). A diferença entre 'remove' e 'purge' é que 'remove' remove apenas o pacote/programa e deixa os arquivos de configurações e 'purge' apaga tudo, inclusive os arquivos de configurações. Na última parte tem maiores explicações sobre os comandos acima.

A manutenção regular não tem um tempo específico para se executar, pois isso varia de sistema para sistema e de usuário para usuário.
O sugerido é que você execute-a quando o sistema começa a acusar um 'probleminha' tal como uma lentidão aqui, um 'travamentozinho' acolá, algum erro em vermelho no reiniciar ou desligar, etc, em suma, problemas iniciais.

ATUALIZAÇÃO DO SISTEMA

Execute a atualização do sistema no terminal, no mínimo, uma vez por semana e a sequência de atualização é sempre esta:

$ sudo apt-get update
$ sudo apt-get upgrade

ou
# apt-get update
# apt-get upgrade


Com aptitude:

$ sudo aptitude update
$ sudo aptitude safe-upgrade


O aptitude não está vindo mais como padrão em algumas distribuições; portanto, você deve instalá-lo caso quiser usar:

# apt-get install aptitude

Ou você pode utilizar:
# apt update
# apt upgrade


Os manuais recomendam esta última, pois o 'apt upgrade' faz a mesma coisa que o 'aptitude safe-upgrade' (faz uma atualização segura), mas por uma questão de tradição eu continuo usando o aptitude somente para esta ação de atualização do sistema como um todo. Maiores explicações na última página.

Não é aconselhável você intercalar as interfaces, ou seja, uma hora utilizar apt para instalar/remover pacotes e outra hora utilizar apt-get ou aptitude; escolha um deles e utilize-o sempre; ou numa semana utilize um e em outra semana outro. Porém, caso você tiver que intercalar apt-get e apt, por exemplo, em determinada situação sempre execute primeiro:

# apt-get update
ou
# apt update
ou
# aptitude update

e logo em seguida o comando desejado (install, remove, etc) com a outra interface.

Por exemplo, você usou 'apt-get update' e logo após 'apt-get install pacote' para instalar um determinado pacote, mas o apt-get não encontrou o pacote nos repositórios, então antes de você tentar instalar com o apt você deve, obrigatoriamente, executar antes 'apt update' e depois 'apt install pacote' por uma simples questão de sincronização. Apesar de que o arquivo da lista de índices é o mesmo para o apt-get, o apt e o aptitude, isso significa que o arquivo de índices atualizado por um valerá para os outros dois, mas apesar disso recomenda-se utilizar 'update' sempre antes de executar install, remove, etc.

***A ação update, em qualquer dos casos (apt-get, apt ou aptitude), somente sincroniza os arquivos de índices de pacotes (atualiza a lista de pacote disponíveis e baixa somente alguns arquivos de informações) e sempre deve ser usada antes de qualquer comando com apt-get, apt ou aptitude. A ação upgrade é a que realmente atualiza os pacotes.***

"Para qualquer trabalho com o APT, a lista de pacotes disponíveis precisa ser atualizada; isto pode ser feito simplesmente com um apt update. Dependendo da velocidade de sua conexão e sua configuração, a operação pode demorar um pouco, pois ela baixa alguns arquivos (normalmente comprimidos) Packages (pacotes), Sources (fontes), Traduções, etc, que tornaram-se gradualmente cada vez maiores com o desenvolvimento do Debian (pelo menos 10-16 MB de dados para a seção main)."

Podemos "automatizar" o processo:

Crie o arquivo:
$ sudo vim /bin/atualize <<< use teu editor preferido e dê o nome que quiser para o arquivo

Coloque dentro:
#!/bin/bash
apt update
apt upgrade


Salve e saia.

Dê permissão de execução
$ sudo chmod +x /bin/atualize

Depois é só executar
$ sudo atualize
ou
# atualize

Você pode também criar um alias em .bashrc ou em /etc/bashrc, caso o shell for o Bash. O .bashrc tem definições de cada usuário e o /etc/bashrc tem as definições do sistema usadas por todos os usuários.

Para sincronizar no Cron:
$ crontab -e

E, por exemplo, para executar o update às 10h da manhã e upgrade às 10h e 5m em toda segunda-feira, insira a seguinte linha:
0 10 * * 1 /usr/bin/apt update
5 10 * * 1 /usr/bin/apt upgrade -q -y


Eu prefiro executar manualmente os comandos para ter controle e ver se tudo deu certo ou ocorreu algum erro.

O Windows, por exemplo, até hoje, volta e meia, dá uma encrenca nas atualizações automáticas, porém, desde o Windows 10 em diante não é aconselhável desabilitar as atualizações automáticas sob o risco de dar mais encrenca ainda se ficar muito tempo (umas duas semanas) sem atualizar; depois vem aquele monte de atualizações, KBs, etc e vira uma salada mista onde uma atualização que deveria ser instalada antes é instalada depois e resulta no tal "Não foi possível concluir as atualizações, estamos desfazendo as alterações" (o que corresponde, mais ou menos, ao 'Você manteve pacotes quebrados...') e fica meia hora nisso até entrar no sistema.

Podemos usar 'apt list ?automatic' para listar todos os pacotes automaticamente instalados.
Para encontrar pacotes automaticamente instalados que não dependem mais de pacotes instalados manualmente é possível utilizar '?garbage':

# apt list ?automatic
# apt list ?garbage


Alguém pode querer saber porque um pacote foi automaticamente instalado no sistema. Para obter esta informação na linha de comando você pode usar 'aptitude why pacote' (apt e apt-get não tem recurso semelhante):

$ aptitude why python3-debian
i aptitude Suggests apt-xapian-index
p apt-xapian-index Depends python3-debian (>= 0.1.14)


Outro diferencial do aptitude, nesse caso, é que se você digitar apenas 'aptitude' no terminal, aparecerá uma janela com a distinção de todos os pacotes e no menu em cima você pode navegar e escolher uma ação:

$ aptitude
Linux: Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg

Para sair digite a letra 'q' ou use o mouse e clique em 'Ações'.

ENCONTRAR E DESMARCAR PACOTES RETIDOS

Aproveitando o ensejo, é desejável às vezes para deixar o sistema mais "limpo" remover quaisquer retenções (holds) em pacotes, principalmente se você for fazer um upgrade de uma versão para outra do sistema todo. E mesmo que não for fazer upgrade é recomendável para saber se tem pacotes quebrados (você manteve [hold] pacotes quebrados).

Encontrando:
$ sudo apt-mark showhold

Caso não tiver, não retorna nada.

Desmarcando:
$ sudo apt-mark unhold nome_do_pacote

E daí pode remover, caso quiser.

Outra sugestão é você usar a opção '--mark-auto' em conjunto com install:
$ sudo apt install --mark-auto pacote
ou
$ sudo apt-get install --mark-auto pacote
ou
$ sudo aptitude install markauto pacote

A opção '--mark-auto' ou 'markauto' marca o pacote instalado como instalado automaticamente e isso fará com que tal pacote seja removido quando mais nenhum pacote/programa instalado manualmente depender dele.

Atualmente os três (apt-get, apt e aptitude) distinguem entre pacotes/programas instalados por eles ou manualmente, mas se você quiser, para reforçar, pode acrescentar 'markauto' ou '--mark-auto' junto com install.

Mais opções em 'man apt-mark', man apt, man apt-get e man aptitude.

    Próxima página

Páginas do artigo
   1. Comandos 1
   2. Comandos 2
   3. Explanações
Outros artigos deste autor

Compilação do Squid 3 no Debian Wheezy

Instalação do Comodo Antivirus para Linux (CAVL) resolvendo o problema de dependências

Configuração do sistema, DHCP, compartilhamento e DNS no Debian Squeeze

Instalando e Configurando o pgAgent no Linux (pgAdmin e PostgreSQL)

Instalar Minecraft, League of Legends e Fortnite no Linux

Leitura recomendada

Recebendo notificações do Nagios via Jabber

Como fazer o seu servidor Linux enviar avisos em seu celular Claro sem custo

Apache + SSL + PostgreSQL + Mod_auth_pgsql + PHP

Instalando Wine no Fedora sem mistério

O que é Software Livre?

  
Comentários
[1] Comentário enviado por maurixnovatrento em 23/06/2024 - 22:33h

Bem completo, muito bom.
______________________________________________________________________
Inscreva-se no meu Canal: https://www.youtube.com/@LinuxDicasPro
Repositório GitHub do Canal: https://github.com/LinuxDicasPro
Grupo do Telegram: https://t.me/LinuxDicasPro
Meu GitHub Pessoal: https://github.com/mxnt10


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts