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/control
archivo, verá una serie de líneas como Depends:
, Conflicts:
, Replaces:
, etc.
Entonces, volviendo al ejemplo, git-core
depende de un solo paquete, que es git
. git
es 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 git
paquete: -
[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 git
tiene 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,
git
entra en conflicto con git-core
. En mi caja aquí, el git-core
paquete 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
stgit
y stgit-contrib
se considerarán rotos una vez que git
se haya instalado.
- Reemplaza : este paquete reemplaza a otro paquete, lo que significa que el otro paquete está obsoleto y probablemente pueda desinstalarse. El
git-core
paquete 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
, aptitude
Y dselect
, por ejemplo, todos esencialmente lo mismo, pero la forma en que hacen su decisión diferente. Puede encontrar eso aptitude
y dselect
felizmente le presentará una forma de instalar un paquete que apt-get
no 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.