Dependências do Pacote Debian

Dependências do Pacote Debian
Para distribuições Linux, como Debian GNU/Linux, existem mais de 60.000 pacotes de software diferentes. Todos eles têm um papel específico. Neste artigo, explicamos como o gerenciamento de pacotes gerencia com segurança esse grande número de pacotes de software durante uma instalação, uma atualização ou uma remoção para manter seu sistema funcionando e totalmente estável.

Para o Debian GNU/Linux, isso se refere às ferramentas apt, apt-get, aptidão, apt-cache, apt dependes, apt-rdepends, dpkg-deb e APT-Mark.

Disponibilidade de pacotes de software

Como já foi dito acima, uma distribuição Linux consiste em toneladas de diferentes pacotes de software. A partir de hoje, o software é bastante complexo, e é por isso que é comum dividir o software em vários pacotes únicos. Esses pacotes podem ser categorizados por funcionalidade ou por função como pacotes binários, bibliotecas, documentação, exemplos de uso, bem como coleções específicas de idioma e fornecem uma parte selecionada do software, apenas. Não há regra fixa para ela, e a divisão é feita pela equipe de desenvolvimento de uma ferramenta ou pelo mantenedor de pacotes que cuida do pacote de software para sua distribuição Linux. Usando aptidão, a Figura 1 lista os pacotes que contêm as traduções para os diferentes idiomas para o Webbrowser Mozilla Firefox.

Figura 1: Aptitude-Firefox.png

Essa maneira de trabalhar torna possível que cada pacote possa ser mantido por um desenvolvedor diferente ou como uma equipe inteira. Além disso, a divisão em componentes únicos permite que outros pacotes de software também usem para seus próprios propósitos. Uma funcionalidade necessária pode ser aplicada e não precisa ser reinventada.

Organização de pacotes

As ferramentas de gerenciamento de pacotes na distribuição do Debian GNU/Linux tomam constantemente cuidar de que as dependências dos pacotes instaladas sejam atendidas completamente. Este é especialmente o caso se um pacote de software deve ser instalado, atualizado ou excluído no ou do seu sistema. Pacotes ausentes são adicionados ao sistema ou os pacotes instalados são removidos do sistema, caso não sejam mais necessários. A Figura 2 demonstra isso para a remoção do pacote 'MC-Data' usando 'apt-get'. O pacote 'MC-Data' recomenda remover automaticamente o pacote 'MC' também, porque não faz mais sentido ser instalado sem 'MC-Data'.

Figura 2: APT-GET-REMOVE-MC.png

Marcas de pacote e bandeiras

Durante seu trabalho, as ferramentas de gerenciamento de pacotes respeitam as bandeiras e marcas de pacotes que são definidas. Eles são definidos automaticamente ou definidos manualmente pelo administrador do sistema. Especialmente esse comportamento refere -se ao 'pacote essencial' da bandeira que está definido para pacotes que não devem ser removidos. Um aviso claro é emitido antes de fazer isso (veja a Figura 3).

Figura 3: APT-GET-REMOVE.png

Além disso, as três marcas 'automáticas', 'manual' e 'hold' são levadas em consideração. Eles marcam um pacote como sendo instalado automaticamente, instalado manualmente ou não devem ser atualizados (mantenha a versão atual). Um pacote de software é marcado 'automático' ou 'manual', mas não ambos.

Entre outros, o comando 'Apt-Mark' lida com as marcas e bandeiras usando os seguintes subcomandos:

  • Auto: defina um pacote conforme instalado automaticamente
  • Segure: mantenha a versão atual do pacote
  • Manual: defina um pacote como instalado manualmente
  • Showauto: mostre os pacotes instalados automaticamente
  • ShowManual: mostre os pacotes instalados manualmente
  • Holhold: Liste os pacotes que estão em espera
  • Desfonte: Remova a bandeira de espera para o pacote fornecido

Para listar todos os pacotes instalados manualmente, emitem este comando:

$ apt-mark ShowManual
abiword
ABS-guia
ACK-GREP
ACL
ACPI
..
$

Para manter uma versão do pacote, use o subcomando 'Hold'. O exemplo abaixo mostra isso para o pacote 'MC'.

# APT-Mark Hold MC
MC colocado em espera
#

O subcomando 'Hasthold' lista os pacotes que estão em espera (no nosso caso, é o pacote 'MC', apenas):

# APT-Mark Holdhold
mc
#

Usando um método alternativo intitulado 'Apt Pinning', os pacotes são classificados por prioridades. O APT os aplica para decidir como lidar com este pacote de software e as versões disponíveis no repositório de software.

Descrição do pacote

Usando um método alternativo intitulado 'Apt Pinning', os pacotes são classificados por prioridades. O APT os aplica para decidir como lidar com este pacote de software e as versões disponíveis no repositório de software.

Cada pacote de software vem com sua própria descrição do pacote que é padronizada. Entre outros campos, essa descrição especifica explicitamente de quais embalagens adicionais depende de depende. As ferramentas específicas de distribuição extraem essas informações da descrição do pacote e calculam e visualizam as dependências para você, então. O próximo exemplo usa o comando 'apt-cache show' para exibir a descrição do pacote do pacote 'Poppler-utils' (veja a Figura 4).

Figura 4: Pacote-Poppler-Utils.png

A descrição do pacote contém uma seção chamada 'depende'. Esta seção lista os outros pacotes de software mais número de versão da qual o pacote atual depende. Na Figura 4, esta seção é enquadrada em vermelho e mostra que 'Poppler-Utils' depende dos pacotes 'libpoppler64', 'libc6', 'libcairo2', 'libfreeType6', 'liblcms2-2', 'libstdc ++ 6' e 'zlib1g'.

Mostre as dependências do pacote

Ler a descrição do pacote é a maneira mais difícil de descobrir as dependências do pacote. Em seguida, mostraremos como simplificar isso.

Existem várias maneiras de mostrar as dependências da embalagem na linha de comando. Para um pacote Deb como um arquivo local, use o comando 'dpkg -deb' com dois parâmetros - o nome do arquivo do pacote e a palavra -chave 'depende'. O exemplo abaixo demonstra isso para o pacote 'SkypeForLinux-64.Deb ':

$ dpkg-deb -f Downloads/skypeForLinux-64.Deb depende
Gconf-Service, Libasound2 (> = 1.0.16), libatk1.0-0 (> = 1.12.4), libc6 (> = 2.17),
libcairo2 (> = 1.2.4), libcups2 (> = 1.4.0), libexpat1 (> = 2.0.1),
libfreeType6 (> = 2.4.2), libgcc1 (> = 1: 4.1.1), libgconf-2-4 (> = 3.2.5),
libgdk-pixbuf2.0-0 (> = 2.22.0), libglib2.0-0 (> = 2.31.8), libgtk2.0-0 (> = 2.24.0),
libnspr4 (> = 2: 4.9-2 ~), libnss3 (> = 2: 3.13.4-2 ~), libpango-1.0-0 (> = 1.14.0),
libpangocairo-1.0-0 (> = 1.14.0), LibSecret-1-0 (> = 0.7), libv4l-0 (> = 0.5.0),
libx11-6 (> = 2: 1.4.99.1), libx11-xcb1, libxcb1 (> = 1.6), libxcomposite1 (> = 1: 0.3-1),
libxcursor1 (>> 1.1.2), libxdamage1 (> = 1: 1.1), libXext6, libxfixes3,
libxi6 (> = 2: 1.2.99.4), libxrandr2 (> = 2: 1.2.99.3), libxrender1, libxss1,
libxtst6, apt-transport-https, libfontconfig1 (> = 2.11.0), libdbus-1-3 (> = 1.6.18),
libstdc ++ 6 (> = 4.8.1)
$

Para fazer o mesmo para um pacote instalado, use 'apt-cache'. O primeiro exemplo combina o subcomando 'show' seguido pelo nome do pacote. A saída é enviada para o comando 'grep' que filtra a linha 'depende':

$ apt-cache show xpdf | Grep depende
Depende: libc6 (> = 2.4), libgcc1 (> = 1: 4.1.1), libpoppler46 (> = 0.26.2),
libstdc ++ 6 (> = 4.1.1), libx11-6, libxm4 (> = 2.3.4), libxt6
$

O comando 'Grep -status -f Package -s depende do XPDF' relatará as mesmas informações.

Mais específico, o segundo exemplo usa novamente 'Apt-Cache', mas com o subcomando 'depende', em vez disso. O subcomando é seguido pelo nome do pacote:

$ apt-cache depende xpdf
xpdf
Depende: libc6
Depende: libgcc1
Depende: libpoppler46
Depende: libstdc ++ 6
Depende: libx11-6
Depende: libxm4
Depende: libxt6
Recomenda: Poppler-Utils
Poppler-Utils: i386
Recomenda: Poppler-Data
Recomenda: GSFONTS-X11
Recomenda: CUPS-BSD
CUPS-BSD: i386
Colide com:
Colide com:
Colide com:
Colide com:
Substitui:
Substitui:
Substitui:
Substitui:
Colide com: xpdf: i386
$

A lista acima é bastante longa e pode ser reduzida usando o interruptor '-i' (abreviação de '-Iportant'):

$ apt -cache depende -i xpdf
xpdf
Depende: libc6
Depende: libgcc1
Depende: libpoppler46
Depende: libstdc ++ 6
Depende: libx11-6
Depende: libxm4
Depende: libxt6
$

O comando 'apt-rdepends' faz o mesmo, mas com informações da versão, se especificado na descrição:

$ apt-rdependes xpdf
Listas de pacote de leitura… Feito
Árvore de dependência de construção
Lendo as informações do estado… feito
xpdf
Depende: libc6 (> = 2.4)
Depende: libgcc1 (> = 1: 4.1.1)
Depende: libpoppler46 (> = 0.26.2)
Depende: libstdc ++ 6 (> = 4.1.1)
Depende: libx11-6
Depende: libxm4 (> = 2.3.4)
Depende: libxt6
libc6
Depende: libgcc1
..
$

O comando 'aptidão' funciona com interruptores também. Para dependências, use o interruptor '~ r' seguido pelo nome do pacote. A Figura 5 mostra isso para o pacote 'xpdf'. A letra 'A' na segunda coluna da saída de 'aptidão' identifica o pacote como sendo instalado automaticamente.

Figura 5: Aptitude-Rdepends.png

Dependências de pacotes podem ser um pouco complicadas. Pode ajudar a mostrar dependências de pacotes graficamente. Use o comando 'Debtree' seguido pelo nome do pacote para criar uma representação gráfica das dependências do pacote. A ferramenta 'DOT' do pacote GraphViz transforma a descrição em uma imagem da seguinte forma:

$ debtree xpdf | DOT -TPNG> Gráfico.png

Na Figura 6, você vê a imagem PNG criada que contém o gráfico de dependência.

Figura 6: DOT.png

Mostre as dependências reversas

Até agora, exibimos, respondemos à pergunta quais pacotes são necessários para um pacote. Há também o contrário, as chamadas dependências reversas. Os próximos exemplos lidam com o pacote, bem como com os pacotes que dependem dele. Exemplo número um usa 'apt-cache' com o subcomando 'rdependes' da seguinte forma:

$ apt-cache rdepende xpdf
xpdf
Depende reverso:
| Octave-Doc
xpdf: i386
libfontConfig1: i386
| XMDS-Doc
xfe
Wiipdf
| Vim-LatexSuite
Python-Scapy
| Ruby-tioga
| Python Tables-Doc
| Page-Crunch
| Octave-Doc
| Muttprint-manual
Mozplugger
mlPost
libmlpost-ocaml-dev
..
$

Pacotes, que dependem de outros pacotes são marcados com um símbolo de tubo. Esses pacote não precisam ser instalados no seu sistema, mas precisam ser listados no banco de dados de pacotes.

O próximo exemplo usa 'Aptidão' para listar os pacotes que têm uma referência difícil ao pacote 'xpdf' (veja a Figura 7).

Figura 7: Pesquisa de aptidão.png

Validar a instalação para pacotes ausentes

'Apt-get' oferece a verificação de subcomando 'que permite validar a instalação. Se você vir a seguinte saída, não há pacotes:

# verificação apt-get
Listas de pacote de leitura… Feito
Árvore de dependência de construção
Lendo as informações do estado… feito
#

Conclusão

Encontrar as dependências do pacote funciona bem com as ferramentas certas. Usá -los adequadamente ajuda você a entender por que os pacotes estão instalados e quais podem estar faltando.

Links e referências

  • Axel Beckert, Frank Hofmann: Das Debian-Paketmanagement-Buch, https: // www.DPMB.org/