Linux: Como usar o dpkg para consertar o apt quando ele quebra

Conteúdo

Bash Shell

Você já quebrou o apt? Para profissionais experientes em Linux, é bastante comum (aproximadamente a cada meio ano) Romper apt. Se você conhece alguns comandos do dpkg, Muitas vezes você pode resolver o problema com mais facilidade! Descobrir como.

Quais são apto e dpkg?

Se você estiver usando uma distribuição baseada em Debian como Ubuntu ou Mint, seu computador usa apto para lidar com pacotes. Apt significa Ferramenta de embalagem avançada, que permite que você instale, Desinstalar, limpar e gerenciar pacotes Debian.

ao mesmo tempo apt (usado na linha de comando), seu computador provavelmente tem um gerenciador de pacotes de desktop de nível superior / em geral, que simplesmente usa apt, ou talvez dpkg, no fundo.

O Gerenciador de Pacotes Debian dpkg é uma alternativa ao gerenciamento de pacotes em instalações baseadas em Debian. É um nível muito mais baixo do que apt, o que te dá mais liberdade, mas também apresenta um risco maior de quebrar coisas.

Isso é por que (a menos que você seja um engenheiro DevOps experiente) Eu recomendo que você use apt sempre, aumentando com dpkg assim que eu tiver problemas.

Essa abordagem passo a passo oferece o melhor dos dois mundos.: a estabilidade e facilidade de uso do apt gerenciador de pacotes, com o poder e granularidade de dpkg Gerenciador de pacotes Debian, quando você precisar.

Digamos, como um exemplo, você tem um pacote que acabou de instalar, que de alguma forma acabou quebrando o apt. O, talvez, a instalação de um pacote foi interrompida acidentalmente.

Seja qual for a causa, apt agora é considerado quebrado, e você já tentou coisas como sudo apt update --fix-missing e sudo apt install --fix-broken em vão. Sim é assim, então …

bem-vindo a dpkg

Quando você apt Está quebrado, não é divertido. Sim é De verdade dentro, é ainda menos divertido. Mesmo se alguém souber o que está fazendo, às vezes é necessário um certo nível de arte, E definitivamente, habilidade, consertar um sistema de embalagem quebrado.

O fim “arte” é bastante aplicável, já que você tem uma ideia ou sentimento enquanto passa por várias etapas de solução de problemas, especialmente se você já fez isso muitas vezes, se algo funcionará ou não durante uma reinicialização.

O risco é sempre que o sistema de embalagem esteja tão danificado que, se você reiniciar, sua instância do Linux pode não reaparecer e uma solução de problemas adicional e potencialmente ainda mais complexa é necessária.

Eu gostaria de dizer neste ponto que tudo isso pode ser facilmente evitado executando alguns comandos simples, mas infelizmente, Esse não é o caso. O fato é que quanto mais você sabe, mais fácil será consertá-lo e mais confiante você terá de saber se está pronto para reiniciar o sistema ou não.

É aqui que viemos dpkg. a dpkg O programa nos permite um controle muito mais granular sobre todos os pacotes instalados, E mesmo quando há um risco maior de algo dar errado, além disso, há muito mais poder para mudar um sistema exatamente da maneira que queremos. Vamos mergulhar.

Se você está interessado em Linux em geral, você também pode ler nossa série de 3 partes Bash Automation & Scripting.

Básico dpkg Usar

Podemos ver os pacotes hoje no sistema simplesmente executando dpkg -l. Como a saída provavelmente será muito detalhada (mesmo quando é regularmente paginado), você pode usar um grep para limitar resultados.

dpkg -l | cabeça -n5 && dpkg -l | grep 'gnome-calculator'
dpkg -l | grep 'gnome-calculator'

Nossa primeira corrida dpkg

o primeiro comando é na verdade uma combinação de dois comandos (separados por &&, o que literalmente significa: só executar o segundo comando se o primeiro comando é bem sucedido).

no primeiro desses dois comandos, pegamos as primeiras cinco linhas (usando um cano | e head -n5), e posteriormente, no segundo comando, procuramos listar a saída que procuramos. Para este caso, estamos procurando o texto gnome-calculator.

A linha / o comando secundário abaixo mostra uma versão que usaríamos regularmente. Uma vez que alguém esteja familiarizado com a sintaxe do dpkg Saída, as primeiras cinco linhas geralmente são desnecessárias. Observe que a primeira coluna se refere a (visualmente) Desired=, com a segunda coluna referindo-se a Status=, e a terceira coluna para Err?=. Se você seguir visualmente as linhas, você verá como eles se conectam rapidamente.

Como o nosso gnome-calculator instalado com sucesso sem erros atuais, não há código de terceira coluna abaixo Err?=. Além disso, notamos aqui que uppercase=badestá escrito nas breves informações relacionadas à terceira coluna. Como afirmado anteriormente, no nosso caso, está em branco.

A primeira coluna mostra o estado desejado e a segunda coluna mostra o estado atual. Ambos são mostrados como i (Install[ed] e Inst[alled] respectivamente, e este (ii) é a sequência mais comum que (vai querer) Assistir. Simplesmente significa que everything is fine, that the package is installed, and that there are no issues.

Observe também que, nas descrições das colunas entre parênteses, a letra maiúscula indica a conexão entre qualquer letra viável vista e o termo relevante. Como um exemplo, considere como f se refere a halF-conf, apontando para letras maiúsculas F no mesmo.

Vamos agora dar uma olhada em outra saída para comparar. Desta vez, deixaremos as primeiras cinco linhas e você poderá se acostumar um pouco mais a ler o resultado mesmo sem os cabeçalhos.

dpkg -l | grep 'mintwelcome'

dpkg -l |  saída grep 'mintwelcome'

Aqui vemos o resultado interessante de rc, Onde ii costumava ser para ele gnome-calculator. Se você está procurando o r em primeiro Desired= descrição da coluna que vimos acima, você pode ver o que isso significa Remove[d], elenco c na segunda coluna representa Conf-files.

Ahá! Está (mintwelcome, um pacote de boas-vindas na Casa da Moeda) é um pacote que desinstalado em algum momento, mas os arquivos de configuração permanecem. Vamos purgar!!

dpkg --purge 'mintwelcome'
sudo dpkg --purge 'mintwelcome'
dpkg -l | grep 'mintwelcome'

Purgação de arquivos de configuração 'mintwelcome' com dpkg

Por favor, note que você também pode usar o -P taquigrafia em vez de usar --purge.

No primeiro comando, podemos tentar purgar mintwelcome não usado sudo. Apesar disto, isso não vai funcionar. Você precisa de privilégios de superusuário / nível raiz para desinstalar (ou instalar ou sangrar) pacotes. Podemos correr novamente usando sudo, e nosso pacote será eliminado.

Observe que o termo purga é usado por ambos apt bem como por dpkg para indicar que queremos absolutamente limpar um pacote em vez de apenas desinstalá-lo, o que vai deixar os arquivos de configuração.

Ter certeza

Espero que você comece a apreciar o poder, o controle e granularidade que dpkg pode fornecer ao gerenciar pacotes em sua distribuição baseada em Debian, como Ubuntu o, para este caso, hortelã. Seria facil, como um exemplo, pesquise por vestígios de arquivos de configuração de pacote desinstalados anteriormente simplesmente executando:

dpkg -l | grep '^ rc'

Saída de listagem do Dpkg para arquivos de configuração javascript comuns

Antes de remover qualquer um desses arquivos de configuração, você vai querer duplamente ter certeza de que não há pacotes instalados com um nome equivalente. Como um exemplo, para este caso, nós podemos correr:

dpkg -l | grep 'javascript'

dpkg -l |  saída grep 'javascript'

Observe como removemos a segunda parte do 'javascript-common' procurar 'javascript'.

É seguro deletar ou não? Você pode ver como grande poder implica grande responsabilidade, como sempre na vida. A decisão de removê-lo ou não é sua. Em geral, há três coisas que você deve sempre ter em mente ao trabalhar com dpkg:

em primeiro lugar, vai querer verificar, verifique duas vezes e três vezes para ter certeza. Como um exemplo, no primeiro passeio acima, Poderíamos ter ido em frente e eliminado indiferentemente javascript-common sem verificar se havia outros pacotes Javascript no sistema.

Foi o melhor curso de ação? Talvez, mas o nível de garantia / a confiança certamente caiu assim que fizemos nossa primeira verificação, uma vez que definitivamente existem outros pacotes Javascript no sistema.

Ao mesmo tempo, note que não há realmente 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á quebrado, não conserte ”certamente parece se aplicar a este caso. É bom ter em mente ao usar dpkg.

em segundo lugar, é essencial lembrar que apt é um gerenciador de pacotes que mantém todas as conexões (Em outras palavras, versões e dependências) entre pacotes em mente ao instalar, desinstalar ou depurar pacotes.

Este não é o caso de dpkg, que é muito mais baseado em pacote. Há mais granularidade, mas também mais risco de quebrar coisas. Se um pacote é baseado em outro ou em uma biblioteca, alguém certamente quebrará as coisas simplesmente desinstalando o pacote principal usando dpkg.

Em terceiro lugar, a maioria dos pacotes Linux tem Muitos dependências. Por isso, não é recomendado simplesmente usar dpkg para gerenciamento de pacote padrão, reiterando nosso conselho original para usar apt padrão e mudar para dpkg quando for necessário.

Remover / desinstale um pacote em vez de purgá-lo (Em outras palavras, deixar os arquivos de configuração), você pode usar o --remove (o -r) opção a dpkg. Para verificar um pacote, usar --verify (o -V). a --audit (o -C) contra um pacote verifica o banco de dados para consistência e sanidade para o pacote (ou para todos os pacotes se nenhum pacote for especificado).

Para mais opções, consulte man dpkg corra do seu terminal. Além disso, existem comandos específicos e mais complexos que podem ser usados ​​para vários problemas do sistema de embalagem.. Por esta, Em geral, é melhor usar seu mecanismo de pesquisa favorito para o problema ou situação específica observada no momento em que ocorre. Frequentemente, outra pessoa já o conheceu e documentou os detalhes. Se você descobrir algo novo, reserve alguns minutos para postar suas descobertas em um fórum ou tópico de discussão relevante.

Final

Neste post, nós começamos a explorar dpkg e como você pode nos ajudar com o gerenciamento granular de pacotes, a diferença de apt, que irá lidar com pacotes e todas as suas dependências. Lembrar, nestas situações complexas depurar problemas de gerenciamento de pacotes, grande poder implica grande responsabilidade.

Também vimos como adotar uma abordagem mais avessa ao risco, ao mesmo tempo em que percebemos que a depuração em profundidade do gerenciamento de pacotes é equivalente à arte, e quanto melhor um pintor é, mais sucesso é pintar; Ahem, o reinício será.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.