Linux: como usar o dpkg para consertar o apt quando ele quebrar

Você já quebrou o apt? Para profissionais experientes em Linux, é bastante comum (a cada semestre) involuntariamente quebrar o apt. Se você conhece alguns comandos no dpkg, geralmente pode corrigir o problema mais facilmente! Descubra como.
O que são apt e dpkg?
Se você estiver usando uma distribuição baseada em Debian como Ubuntu ou Mint, seu computador usa apt para lidar com pacotes. Apt significa Advanced Packaging Tool, que permite que você instale, desinstale, purgue e gerencie pacotes Debian.
Além do apt (usado na linha de comando), seu computador provavelmente tem um gerenciador de pacotes baseado em Desktop de nível superior / abrangente, que simplesmente usa apt, ou talvez dpkg, em segundo plano.
O gerenciador de pacotes para Debian dpkg é uma alternativa para gerenciar pacotes em instalações baseadas em Debian. É muito mais baixo nível do que apt, dando a você mais liberdade, mas também apresentando um maior risco de quebrar coisas.
Este é o motivo pelo qual (a menos que você seja um engenheiro de DevOps experiente) eu recomendo que você use o apt em todos os momentos, aumentando-o com o dpkg assim que tiver problemas.
Seguir essa abordagem passo a passo oferece o melhor dos dois mundos: a estabilidade e facilidade de uso do gerenciador de pacotes apt, com o poder e granularidade do gerenciador de pacotes Debian dpkg, assim que você precisar.
Digamos, por exemplo, que você tem um pacote que acabou de instalar, que de alguma forma acabou quebrando o apt. Ou, talvez, a instalação de um pacote foi interrompida acidentalmente.
Seja qual for a causa, o apt agora é considerado quebrado, e você já tentou coisas como sudo apt update --fix-missing e sudo apt install --fix-broken sem sucesso. Se sim, então …
Bem-vindo ao dpkg
Quando seu apt está quebrado, não é divertido. Se estiver realmente quebrado, será ainda menos divertido. Mesmo que alguém saiba o que está fazendo, às vezes é necessário um certo nível de arte e, definitivamente, habilidade, para consertar um sistema de embalagem quebrado.
O termo “ arte ” é bastante aplicável, conforme você tem uma ideia ou sensação enquanto executa as várias etapas de solução de problemas — especialmente se você &’ já fez isso com frequência — independentemente de algo funcionar ou não durante uma reinicialização.
O risco é sempre de que o sistema de empacotamento esteja tão danificado que, se você reinicializar, sua instância do Linux pode não ser ativada novamente, e uma solução de problemas ainda mais complexa e potencialmente mais complexa será necessária.
Gostaria de afirmar neste ponto que tudo isso pode ser facilmente evitado executando alguns comandos simples — mas, infelizmente, não é esse o caso. O fato é que, quanto mais você sabe, mais fácil será consertar e mais confiança você terá para descobrir se está pronto para reiniciar o sistema ou não.
É aqui que chegamos ao dpkg. O programa dpkg nos permite um controle muito mais granular sobre todos os pacotes instalados e, embora haja mais risco de que algo dê errado, também há muito mais poder para alterar um sistema exatamente da maneira que desejamos . Vamos mergulhar nisso.
Se você estiver interessado no Linux em geral, também poderá ler nosso Bash Automation & Criação de scripts para séries de três partes.
Uso básico do dpkg
Podemos ver os pacotes atualmente no sistema simplesmente executando dpkg -l. Como a saída é provavelmente muito detalhada (embora normalmente paginada), você pode usar um grep para limitar os resultados.
dpkg -l | head -n5 & & dpkg -l | grep 'gnome-calculator' dpkg -l | grep 'gnome-calculator'
O primeiro comando é na verdade uma combinação de dois comandos (separados por & & amp ;, que literalmente significa: Somente execute o segundo comando se o primeiro for bem-sucedido).
No primeiro desses dois comandos, pegamos as primeiras cinco linhas (usando um pipe | e head -n5) e, em seguida, no segundo comando, procuramos listar a saída que estamos procurando. Nesse caso, estamos pesquisando o texto gnome-calculator.
A linha / comando secundário abaixo dele mostra uma versão que normalmente usaríamos. Uma vez que alguém esteja familiarizado com a sintaxe da saída do dpkg, as primeiras cinco linhas são freqüentemente desnecessárias. Observe que a primeira coluna se refere a (visualmente) Desejado =, a segunda coluna se refere a Status = e a terceira coluna a Err? =. Se você seguir as linhas visualmente, verá como elas se conectam rapidamente.
Como nosso gnome-calculator foi instalado com sucesso sem nenhum erro atual, não há nenhum código de terceira coluna em Err? =. Também observamos aqui que maiúsculo = bad é escrito na informação curta relacionada à terceira coluna. Conforme declarado anteriormente, em nosso caso, está em branco.
A primeira coluna mostra o status desejado e a segunda coluna mostra o status atual. Ambos aparecem como i (Install [ed] e Inst [alled] respectivamente, e esta (ii) é a sequência mais comum que você (deseja) ver. Basicamente, significa que está tudo bem, que o pacote está instalado , e que não há problemas.
Observe também que, nas descrições das colunas entre parênteses, a letra maiúscula indica a conexão entre qualquer letra possível vista e o termo relevante. Por exemplo, considere como f se refere a halF-conf, observando o F maiúsculo no mesmo.
Vamos agora dar uma olhada em outro resultado para comparar. Desta vez, deixaremos as primeiras cinco linhas e você poderá se acostumar um pouco mais a ler a saída, mesmo sem os cabeçalhos.
dpkg -l | grep 'mintwelcome'

Aqui, vemos o resultado interessante de rc, onde ii costumava ser para a calculadora-gnome. Se você pesquisar por r na primeira descrição da coluna Desired = que vimos acima, você verá que significa Remover [d] e que c na segunda coluna significa Arquivos de configuração.
Aha! Este (mintwelcome, um pacote de boas-vindas no Mint) é um pacote que desinstalamos em algum momento, mas os arquivos de configuração para o mesmo permanecem. Vamos eliminá-lo!
dpkg --purge 'mintwelcome' sudo dpkg --purge 'mintwelcome' dpkg -l | grep 'mintwelcome'
Observe que você também pode usar a abreviação -P em vez de --purge.
No primeiro comando, podemos tentar limpar o mintwelcome sem usar o sudo. No entanto, isso não funcionará. Você precisa de privilégios de nível de superusuário / root para desinstalar (ou instalar ou limpar) pacotes. Podemos executar novamente usando sudo, e nosso pacote será removido.
Observe que o termo purge é usado tanto pelo apt quanto pelo dpkg para indicar que queremos purificar completamente um pacote em vez de apenas desinstalá-lo, o que deixará quaisquer arquivos de configuração.
Certificando-se
Espero que você comece a apreciar o poder, o controle e a granularidade que o dpkg pode fornecer ao gerenciar pacotes em sua distribuição baseada em Debian, como Ubuntu ou, neste caso, Mint. Seria fácil, por exemplo, verificar se há vestígios de arquivos de configuração de pacotes desinstalados anteriormente simplesmente executando:
dpkg -l | grep '^ rc'

Antes de remover qualquer um desses arquivos de configuração, você &’ vai querer ter a certeza de que não há pacotes instalados com um nome semelhante. Por exemplo, neste caso, podemos executar:
dpkg -l | grep 'javascript'

Observe como removemos a segunda parte de 'javascript-common' para pesquisar por 'javascript'.
É seguro remover ou não? Você pode ver como grande poder vem com grande responsabilidade, como sempre na vida. A decisão de removê-lo ou não é sua. Geralmente, há três coisas para sempre ter em mente ao trabalhar com o dpkg:
Em primeiro lugar, você deseja verificar, verificar e verificar três vezes para ter certeza. Por exemplo, na primeira saída acima, podemos ter ido em frente e removido despreocupadamente o javascript-common sem verificar se havia algum outro pacote Javascript no sistema.
Foi o melhor curso de ação? Talvez, mas o nível de segurança / confiança certamente caiu assim que fizemos nossa primeira verificação, já que definitivamente existem outros pacotes Javascript no sistema.
Além disso, observe que realmente não há nada quebrado aqui. Não há problema em deixar os arquivos de configuração para este pacote aparentemente removido. O velho ditado “ Se não está &’ não quebrou, não conserte ” certamente pareceria se aplicar neste caso. É bom ter em mente ao usar o dpkg.
Em segundo lugar, é importante lembrar que o apt é um gerenciador de pacotes que mantém todas as conexões (ou seja, versões e dependências) entre os pacotes ao instalar, desinstalar ou limpar pacotes.
Este não é o caso do dpkg, que é muito mais baseado em pacotes. Há mais granularidade, mas também mais risco de quebrar coisas. Se um pacote depende de outro ou de uma biblioteca, alguém certamente quebrará as coisas simplesmente desinstalando o pacote principal usando dpkg.
Em terceiro lugar, a maioria dos pacotes Linux tem muitas dependências. Portanto, não é recomendado simplesmente usar dpkg para gerenciamento de pacote padrão, reiterando nosso conselho original para usar o apt por padrão e trocar para dpkg quando for necessário.
Para remover / desinstalar um pacote em vez de purgá-lo (ou seja, deixar os arquivos de configuração), você pode usar a opção --remove (ou -r) para dpkg. Para verificar um pacote, use --verify (ou -V). A opção --audit (ou -C) em um pacote faz verificações de consistência e sanidade do banco de dados para o pacote (ou para todos os pacotes se nenhum pacote for especificado).
Para mais opções, veja man dpkg executado em seu terminal. Existem também comandos específicos e mais complexos que podem ser usados para vários problemas do sistema de empacotamento. Para isso, geralmente é melhor empregar seu mecanismo de pesquisa favorito para o problema ou situação específica observada no momento em que ocorre. Freqüentemente, outra pessoa já encontrou e documentou os detalhes. Se você descobrir algo novo, reserve alguns minutos para registrar suas descobertas em algum fórum ou tópico de discussão relevante.
Concluindo
Neste artigo, começamos a explorar o dpkg e como ele pode nos ajudar com o gerenciamento granular de pacotes, ao contrário do apt, que irá lidar com pacotes e todas as suas dependências. Lembre-se, nessas situações complexas de depuração de problemas de gerenciamento de pacotes, com grande poder vem uma grande responsabilidade.
Também vimos como seguir uma abordagem mais avessa ao risco, ao mesmo tempo em que percebemos que a depuração de gerenciamento de pacotes em profundidade é semelhante à arte, e quanto melhor um pintor, mais bem-sucedido a pintura — aham, a reinicialização será.
Nenhum comentário