Esta pregunta es similar a ¿Cómo puedo averiguar por qué se instaló un paquete? , pero en mi caso me gustaría saber antes de instalar un paquete, por qué instalará una dependencia particular.
Entonces, por ejemplo, podría correr
sudo apt-get install superfoo
y la salida dirá algo como:
The following extra packages will be installed:
foo bar baz ... libderp libjunk
Y esta podría ser una lista realmente enorme. En algunos casos, veré algo que se instalará que realmente no tiene sentido dado lo que estoy instalando, por lo que quiero saber por qué se instalará esa dependencia particular.
En el ejemplo anterior, digamos que me gustaría entender por qué libderp
se instalaría. Sé que de alguna manera hay una cadena de dependencias entre superfoo
y, libderp
pero la enorme lista de paquetes que se instalarán hace que sea difícil ver qué es esta cadena.
Una vez que conozco la cadena de dependencias, puedo decidir si realmente quiero instalar el paquete original o no, y / o si debo ponerme en contacto con el mantenedor de ese paquete para ver si realmente necesitan tener esas dependencias allí.
fuente
Respuestas:
Lo que realmente parece estar preguntando es "¿Cómo diagrama las dependencias?" para que pueda ver qué paquetes extraen qué dependencias.
Obtiene dependencias de texto y diagramas del
apt-cache
comando (incluido en el paquete apt, parte de la instalación predeterminada).Aquí hay un ejemplo de apt-cache para enumerar las dependencias del paquete 'hola' en formato de texto. La salida de texto siempre será de un solo nivel.
Puede leer el diagrama utilizando cualquier visor de
dotty
archivos de puntos, como (incluido en el paquete graphviz, que también forma parte de la instalación predeterminada)Aquí hay un ejemplo de cómo obtener el árbol de dependencias completo en formato gráfico y luego mostrarlo. La salida gráfica siempre será el árbol completo.
Al mirarlo, puede ver que el paquete 'hola' extrae una tonelada de paquetes de Perl ... y qué dependencia lo hace.
fuente
apt-cache depends --recurse
le dará la imagen completa, pero apt-rdepends a continuación es mejor porque solo sigue dependencias reales, no recomendadas ni sugeridas.--no-install-recommends
indicador.|
apt-rdepends
hace esto, sin instalar más de 50 bibliotecas de cruft likeubuntu-dev-tools
.En mi instalación limpia del servidor ubuntu,
apt-rdepends
solo se requierelibapt-pkg-perl
para la instalación. Es mucho más liviano entoncesubuntu-dev-tools
, y aún así es recursivo, por lo que obtienes todas las dependencias, en lugar de solo las dependencias de primer orden, como losapt-cache depends
retornos.fuente
Puede haber una manera más fácil de hacer esto, pero se puede hacer si usa la función inversa. Necesitará instalar el paquete ubuntu-dev-tools haciendo
apt-get install ubuntu-dev-tools
O haciendo clic en este botón:
Una vez instalado, puede usar la función de inversión inversa para ver qué depende de un paquete específico. Por ejemplo, si intenta instalar algo que quiere instalar un montón de paquetes adicionales y quiere ver por qué se está instalando "libsmpeg0", ejecuta
Lo que daría como resultado lo siguiente.
Eche un vistazo y vea si el paquete que desea instalar está en esa lista. De lo contrario, aparecerá otro de los paquetes que se está introduciendo durante esa instalación inicial en esa lista, y deberá ejecutarlo en reversa, depende de ese paquete. Eventualmente verá el paquete inicial que desea instalar en esa lista. En ese punto, debe tener una cadena que muestre exactamente por qué se instaló ese paquete.
Como nota adicional, creo que recomienda está activado de forma predeterminada, por lo que si algo se configura como recomendado, se activará. Sugiere si está desactivado, pero la dependencia inversa también puede mostrar esa información.
fuente
ubuntu-dev-tools
da como resultado la instalación de los siguientes paquetes.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: lo anterior era solo los paquetes necesarios desudo apt-get install ubuntu-dev-tools
una instancia de servidor ubuntu bastante limpia). Si está tratando de evitar la instalación de grandes cantidades de cruft, esta es probablemente la peor solución posible.