Esta pergunta é semelhante a Como posso descobrir por que um pacote foi instalado? , mas, no meu caso, gostaria de saber antes de instalar um pacote, por que ele instalará uma dependência específica.
Então, por exemplo, eu posso correr
sudo apt-get install superfoo
e a saída dirá algo como:
The following extra packages will be installed:
foo bar baz ... libderp libjunk
E essa pode ser uma lista realmente enorme. Em alguns casos, verei algo que será instalado que realmente não faz sentido para mim, considerando o que estou instalando, então quero saber por que essa dependência específica será instalada.
No exemplo acima, digamos que eu gostaria de entender por que libderp
seria instalado. Eu sei que de alguma forma existe uma cadeia de dependências entre superfoo
e libderp
mas a enorme lista de pacotes a serem instalados torna difícil ver o que esta cadeia é.
Depois de conhecer a cadeia de dependência, posso decidir se realmente quero instalar o pacote original ou não, e / ou se devo entrar em contato com o mantenedor desse pacote para ver se ele realmente precisa ter essas dependências.
fonte
Respostas:
O que você realmente parece estar se perguntando é "Como faço para diagramar dependências?" para que você possa ver quais pacotes extraem quais dependências.
Você obtém as dependências em texto e em diagrama do
apt-cache
comando (incluído no pacote apt, parte da instalação padrão).Aqui está um exemplo do apt-cache para listar dependências do pacote 'hello' em formato de texto. A saída de texto sempre será apenas um nível.
Você pode ler o diagrama usando qualquer visualizador de arquivos dotfile, como
dotty
(incluído no pacote graphviz, também parte da instalação padrão)Aqui está um exemplo de como obter a árvore de dependência completa em formato gráfico e exibi-la. A saída gráfica sempre será a árvore completa.
Examinando, você pode ver que o pacote 'olá' gera uma tonelada de pacotes Perl ... e qual a dependência.
fonte
apt-cache depends --recurse
fornecerá uma imagem completa, mas o apt-rdepends abaixo é melhor porque segue apenas dependências reais, não recomendadas ou sugeridas.--no-install-recommends
sinalizador.|
apt-rdepends
faz isso, sem instalar mais de 50 bibliotecas de cruftubuntu-dev-tools
.Na minha instalação limpa do servidor ubuntu,
apt-rdepends
necessária apenaslibapt-pkg-perl
para a instalação. É muito mais leveubuntu-dev-tools
, e ainda assim é recursivo, então você obtém todas as dependências, e não apenas as dependências de primeira ordem, comoapt-cache depends
devoluções.fonte
Pode haver uma maneira mais fácil de fazer isso, mas isso pode ser feito se você usar a dependência inversa. Você precisará instalar o pacote ubuntu-dev-tools fazendo
apt-get install ubuntu-dev-tools
Ou clicando neste botão:
Uma vez instalado, você pode usar o reverse-depende para ver o que depende de um pacote específico. Por exemplo, se você tentar instalar algo que deseja instalar um monte de pacotes extras e quiser ver por que "libsmpeg0" está sendo instalado, execute
O que produziria o seguinte.
Dê uma olhada e veja se o pacote que você deseja instalar está nessa lista. Caso contrário, outro pacote que está sendo puxado durante a instalação inicial aparecerá nessa lista e você precisará executar a inversão - depende desse pacote. Eventualmente, você verá o pacote inicial que deseja instalar nessa lista. Nesse ponto, você deve ter uma cadeia mostrando exatamente por que esse pacote foi instalado.
Como observação adicional, acredito que o recomendável está ativado por padrão, portanto, se algo estiver definido como recomendado, ele será puxado. Sugere se desativado, mas a dependência inversa também pode mostrar essas informações.
fonte
ubuntu-dev-tools
resulta na instalação dos seguintes pacotes.bzr bzr-builddeb dctrl-tools debian-archive-keyring debian-keyring debootstrap devscripts diffstat distro-info distro-info-data dput genisoimage gettext hardening-includes intltool-debian libapt-pkg-perl libarchive-zip-perl libasprintf-dev libassuan0 libauthen-sasl-perl libautodie-perl libclone-perl libcommon-sense-perl libcroco3 libdigest-hmac-perl libdistro-info-perl libemail-valid-perl libencode-locale-perl liberror-perl
python-launchpadlib python-lazr.restfulclient python-lazr.uri python-oauth python-paramiko python-reportbug python-secretstorage python-simplejson python-soappy python-support python-wadllib python3-debian python3-magic quilt reportbug t1utils unzip wdiff xdelta
(Nota: Os itens acima foram apenas os pacotes necessáriossudo apt-get install ubuntu-dev-tools
em uma instância do servidor ubuntu bastante limpa). Se você está tentando evitar a instalação de grandes quantidades de lixo, essa provavelmente é a pior solução possível.