¿Cómo se encuentran las dependencias al instalar el software?

1

En los tutoriales de instalación de software, siempre tienen una larga lista de dependencias. ¿Cómo encuentran esas dependencias?

Por ejemplo, estoy comenzando en un servidor Ubuntu nuevo, siguiendo las instrucciones para instalar rvm. Proporcionan algo como:

sudo apt-get install git-core libreadline5 libncurses5-dev libreadline5-dev build-essential zlib1g-dev libssl-dev libpcre3-dev libxml2-dev libxslt-dev;

Solo quiero entender cómo encuentran todas esas dependencias. Copiar y pegar funciona, pero creo que es más importante entenderlo.

Luke Burns
fuente

Respuestas:

1

por lo general, apt lo hará por usted. Si intenta instalar un paquete binario que tiene dependencias insatisfechas, apt le dirá cuáles faltan y le pedirá permiso para instalarlas también.

la mayoría de las distribuciones de origen le dicen en un archivo README cuáles son las dependencias -dev.

KutscheraIT
fuente
5

Cada paquete viene con una lista de sus propias dependencias. Para debs , que usa Ubuntu, puede hacer: -

[andys@daedalus ~]$ apt-cache depends git-core
git-core
  Depends: git

Las dependencias para un paquete se especifican cuando se crea el paquete. Algunos de ellos son especificados manualmente por el responsable del paquete (la persona responsable de construir el paquete), y otros se determinan automáticamente cuando se construye el paquete. Si se descarga un paquete fuente de Debian, y mira en el debian/controlarchivo, verá una serie de líneas como Depends:, Conflicts:, Replaces:, etc.

Entonces, volviendo al ejemplo, git-coredepende de un solo paquete, que es git. gites probablemente un metapaquete de algún tipo, que a su vez tiene una gran cantidad de dependencias, para asegurarse de que todos los paquetes necesarios para ejecutar git estén instalados, no solo para satisfacer las dependencias de un paquete. Si nos fijamos en el gitpaquete: -

[andys@daedalus ~]$ apt-cache depends git
git
  Depends: libc6
  Depends: libcurl3-gnutls
  <...snip...>
  Suggests: git-cvs
  Suggests: git-svn
  Suggests: git-email
  <...snip...>
  Recommends: rsync
  <...snip...>
  Conflicts: git-core
  <...snip...>
  Breaks: stgit
  Breaks: stgit-contrib
  Replaces: <cogito>
  Replaces: git-core

... verá que gittiene más dependencias. Para complicar aún más las cosas, hay diferentes tipos de dependencia además de solo requerir la instalación de otro paquete ...

  • Conflictos : este paquete entra en conflicto con otro paquete, y probablemente no podrá instalar el paquete conflictivo sin desinstalarlo, y viceversa. En este caso, gitentra en conflicto con git-core. En mi caja aquí, el git-corepaquete está marcado como obsoleto , lo que probablemente sea la razón por la cual se enumera aquí.
  • Interrupciones : este paquete rompe otro paquete e instalarlo, aunque tal vez no requiera que desinstale el paquete que se romperá, causará problemas con el software instalado por ese paquete. Una vez más, mirando nuestro ejemplo, los paquetes stgity stgit-contribse considerarán rotos una vez que gitse haya instalado.
  • Reemplaza : este paquete reemplaza a otro paquete, lo que significa que el otro paquete está obsoleto y probablemente pueda desinstalarse. El git-corepaquete vuelve a aparecer aquí.

También hay tipos de dependencia "suaves", como Recommends y Sugiere , que no son requeridos por el paquete que está instalando, pero son recomendados o sugeridos , como su nombre indica. Una vez más, mirando el ejemplo, los paquetes sugeridos y recomendados son complementos de git, o herramientas no relacionadas directamente que facilitarán su uso.

Al juntar todo esto, el administrador de paquetes que usa comenzará con el paquete (o paquetes) que le ha pedido que instale, y buscará las dependencias para él, y luego cualquier dependencia para esos paquetes, y así sucesivamente. También verificará los paquetes que entren en conflicto, rompan o reemplacen los paquetes solicitados o sus dependencias. Una vez que esté contento de haber encontrado una manera de satisfacer su solicitud original, continuará con la instalación.

Los diferentes administradores de paquetes tienen diferentes formas de hacer esta resolución de dependencia . apt-get, aptitudeY dselect, por ejemplo, todos esencialmente lo mismo, pero la forma en que hacen su decisión diferente. Puede encontrar eso aptitudey dselectfelizmente le presentará una forma de instalar un paquete que apt-getno puede.

Si está interesado en saber más acerca de los paquetes de Debian, eche un vistazo a la Guía de nuevos mantenedores de Debian , que repasa algunas de las entrañas de las deudas.

Andy Smith
fuente
2
+1. Completo, claro.
Sam Halicke