Para o Debian GNU / Linux, isso se refere às ferramentas apt, apt-get, aptitude, apt-cache, apt-Depends, 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 pacotes de software diferentes. Hoje, o software é bastante complexo, por isso é comum dividir o software em vários pacotes únicos. Esses pacotes podem ser categorizados por funcionalidade ou função, como pacotes binários, bibliotecas, documentação, exemplos de uso, bem como coleções específicas de idioma e fornecem apenas uma parte selecionada do software. Não existe uma regra fixa para isso, e a divisão é feita pela equipe de desenvolvimento de uma ferramenta ou pelo mantenedor do pacote que cuida do pacote de software para sua distribuição Linux. Usando o aptitude, a Figura 1 lista os pacotes que contêm as traduções para os diferentes idiomas para o navegador Mozilla Firefox.
Figura 1: aptitude-firefox.png
Esta forma de trabalhar permite que cada pacote seja 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 façam uso dele para seus próprios fins também. Uma funcionalidade necessária pode ser aplicada e não precisa ser reinventada.
Organização do Pacote
As ferramentas de gerenciamento de pacotes na distribuição Debian GNU / Linux cuidam constantemente para que as dependências dos pacotes instalados sejam atendidas completamente. Este é especialmente o caso se um pacote de software se destina a ser instalado, atualizado ou excluído em ou de seu sistema. Os pacotes que faltam 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 e sinalizadores de embalagem
Durante o seu trabalho, as ferramentas de gerenciamento de pacotes respeitam os sinalizadores e marcas dos pacotes que são definidos. Eles são configurados automaticamente ou configurados manualmente pelo administrador do sistema. Especialmente este comportamento refere-se ao sinalizador 'pacote essencial' que é definido para pacotes que não devem ser removidos. Um aviso claro é emitido antes de você fazer isso (consulte a Figura 3).
Figura 3: apt-get-remove.png
Além disso, as três marcas 'automático', 'manual' e 'espera' são levadas em consideração. Eles marcam um pacote como sendo instalado automaticamente, instalado manualmente ou não deve ser atualizado (manter a versão atual). Um pacote de software é marcado como 'automático' ou 'manual', mas não ambos.
Entre outros, o comando 'apt-mark' lida com as marcas e sinalizadores usando os seguintes subcomandos:
- auto: define um pacote como instalado automaticamente
- hold: mantém a versão atual do pacote
- manual: define um pacote como instalado manualmente
- showauto: mostra os pacotes instalados automaticamente
- showmanual: mostra os pacotes instalados manualmente
- showhold: lista os pacotes que estão em espera
- desbloquear: remove o sinalizador de bloqueio do pacote fornecido
Para listar todos os pacotes instalados manualmente, emita este comando:
$ apt-mark showmanualuma palavra-chave
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 mcmc colocado em espera
#
O subcomando 'showhold' lista os pacotes que estão em espera (no nosso caso, é o pacote 'mc', apenas):
# apt-mark showholdmc
#
Usando um método alternativo intitulado 'apt pinning', os pacotes são classificados por prioridades. Apt os aplica a fim de decidir como lidar com este pacote de software e as versões que estão 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. Apt os aplica a fim de decidir como lidar com este pacote de software e as versões que estão disponíveis no repositório de software.
Cada pacote de software vem com sua própria descrição de pacote que é padronizada. Entre outros campos, esta descrição especifica explicitamente de quais pacotes adicionais depende. 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 'poppler-utils' (veja a Figura 4).
Figura 4: package-description-poppler-utils.png
A descrição do pacote contém uma seção chamada 'Depends'. Esta seção lista os outros pacotes de software mais o número da versão da qual o pacote atual depende. Na Figura 4, esta seção está destacada em vermelho e mostra que 'poppler-utils' depende dos pacotes 'libpoppler64', 'libc6', 'libcairo2', 'libfreetype6', 'liblcms2-2', 'libstdc ++ 6' e 'zlib1g'.
Mostra as dependências do pacote
Ler a descrição do pacote é a maneira mais difícil de descobrir as dependências do pacote. A seguir, mostraremos como simplificar isso.
Existem várias maneiras de mostrar as dependências do pacote 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 'Depends'. O exemplo abaixo demonstra isso para o pacote 'skypeforlinux-64.deb ':
$ dpkg-deb -f Downloads / skypeforlinux-64.deb Dependsgconf-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 dependeDepende: 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 Depends xpdf' irá relatar a mesma informação.
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 do xpdfxpdf
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 encurtada usando a opção '-i' (abreviação de '-important'):
$ apt-cache Depende -i xpdfxpdf
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 de versão, se especificado na descrição:
$ apt-rdepends xpdfLendo listas de pacotes ... Concluído
Construindo árvore de dependência
Lendo informações de estado ... Concluído
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 'aptitude' também funciona com opções. Para dependências, use a opção '~ R' seguida do nome do pacote. A Figura 5 mostra isso para o pacote 'xpdf'. A letra 'A' na segunda coluna da saída do 'aptitude' identifica o pacote como sendo instalado automaticamente.
Figura 5: aptitude-rdepends.png
Dependências de pacote podem ser um pouco complicadas. Pode ajudar a mostrar as dependências do pacote graficamente. Use o comando 'debtree' seguido do nome do pacote para criar uma representação gráfica das dependências do pacote. A ferramenta 'ponto' do pacote Graphviz transforma a descrição em uma imagem da seguinte maneira:
$ debtree xpdf | dot -Tpng> gráfico.pngNa Figura 6 você vê a imagem PNG criada que contém o gráfico de dependência.
Figura 6: ponto.png
Mostra as dependências reversas
Até agora, mostramos que respondemos à questão de 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. O exemplo número um usa 'apt-cache' com o subcomando 'rdepends' da seguinte forma:
$ apt-cache rdepends xpdfxpdf
O reverso depende:
| octave-doc
xpdf: i386
libfontconfig1: i386
| xmds-doc
xfe
wiipdf
| vim-latexsuite
python-scapy
| rubi-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 barra vertical. Estes pacotes não precisam ser instalados em seu sistema, mas devem ser listados no banco de dados de pacotes.
O próximo exemplo usa 'aptitude' para listar os pacotes que têm uma referência direta ao pacote 'xpdf' (veja a Figura 7).
Figura 7: aptitude-search.png
Valide a instalação para pacotes ausentes
'Apt-get' oferece o subcomando 'check' que permite validar a instalação. Se você vir a seguinte saída, nenhum pacote está faltando:
# apt-get checkLendo listas de pacotes ... Concluído
Construindo árvore de dependência
Lendo informações de estado ... Concluído
#
Conclusão
Encontrar dependências de pacotes funciona bem com as ferramentas certas. Usá-los corretamente ajuda a entender porque 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 /