¿Cuál es la diferencia entre dependencias y pre-depende?

Respuestas:

20

Tomado de este enlace: https://www.debian.org/doc/debian-policy/#document-ch-relationships

Hay 5 tipos de dependencias:

El significado de los cinco campos de dependencia es el siguiente:

Depende

  • Esto declara una dependencia absoluta. Un paquete no se configurará a menos que todos los paquetes enumerados en su campo Depende se hayan configurado correctamente. El campo Depende debe utilizarse si se requiere el paquete dependiente para que el paquete dependiente proporcione una cantidad significativa de funcionalidad. El campo Depende también se debe usar si las secuencias de comandos postinst o prerm requieren que el paquete dependiente esté desempaquetado o configurado para ejecutarse. En el caso de la configuración posterior, los paquetes dependientes se desempaquetarán y configurarán primero.

  • En el caso de acciones previas u otras acciones posteriores, las dependencias del paquete normalmente se desempaquetarán al menos, pero solo pueden estar "medio instaladas" si falla una actualización previa de la dependencia. Finalmente, el campo Depende debe usarse si el script postrm necesita el paquete dependiente para limpiar completamente después de la eliminación del paquete. No hay garantía de que las dependencias del paquete estarán disponibles cuando se ejecute postrm, pero es más probable que el paquete dependiente esté disponible si el paquete declara una dependencia (particularmente en el caso de la eliminación postrm). El script postrm debe omitir correctamente las acciones que requieren una dependencia si esa dependencia no está disponible.

Recomienda

  • Esto declara una dependencia fuerte, pero no absoluta. El campo Recomienda debe enumerar los paquetes que se encontrarían junto con este en todas las instalaciones, excepto las inusuales.

Sugiere

  • Esto se utiliza para declarar que un paquete puede ser más útil con uno o más. El uso de este campo le dice al sistema de empaquetado y al usuario que los paquetes listados están relacionados con este y tal vez puedan mejorar su utilidad, pero que instalar este sin ellos es perfectamente razonable.

Mejora

  • Este campo es similar a Sugiere pero funciona en la dirección opuesta. Se utiliza para declarar que un paquete puede mejorar la funcionalidad de otro paquete.

Predepende

  • Este campo es como Depende, excepto que también obliga a dpkg a completar la instalación de los paquetes nombrados incluso antes de comenzar la instalación del paquete que declara la dependencia previa . Funciona así, cuando un paquete que declara una dependencia previa está a punto de se desempaquetará, la dependencia previa puede satisfacerse si el paquete dependiente está completamente configurado, o incluso si el (los) paquete (s) dependiente (s) solo se desempaquetan o están en el estado "Medio configurado", siempre que se hayan configurado correctamente en algún momento en el pasado (y no eliminado o eliminado parcialmente desde entonces).

  • En este caso, las versiones configuradas previamente y actualmente desempaquetadas o "semiconfiguradas" deben cumplir con cualquier cláusula de versión en el campo Predepende. Cuando el paquete que declara una dependencia previa está a punto de configurarse, la dependencia previa se tratará como una dependencia normal. Se considerará satisfecho solo si el paquete dependiente se ha configurado correctamente. Sin embargo, a diferencia de Depends, Pre-Depends no permite que se rompan las dependencias circulares. Si se encuentra una dependencia circular al intentar cumplir con las Predependencias, la instalación se cancelará.

  • Los pre-dependientes también son necesarios si el script preinst depende del paquete nombrado. Es mejor evitar esta situación si es posible. Pre-Depends debe usarse con moderación, preferiblemente solo por paquetes cuya actualización o instalación prematura dificulte la capacidad del sistema para continuar con cualquier actualización que pueda estar en progreso.

Versión más pequeña:

  • Tanto depende como predependemencione las dependencias que un paquete necesita antes de instalar, pero las dependencias previas obligan a la instalación y configuración de los paquetes de dependencia incluso antes de comenzar con el paquete que necesita las dependencias. dpkg ni siquiera desempaquetará el paquete principal hasta que se hayan resuelto todos los paquetes dependientes. Con depende, el orden de los paquetes de dependencia y el principal no es importante. Con pre-depende tiene esto en cuenta y también la verificación si los paquetes de pre-depende son configuraciones e instalados o no. Sin esto, el paquete principal ni siquiera se desempaquetará, configurará o instalará. Debe tener las dependencias instaladas antes de comenzar el proceso de trabajar con el paquete principal. De lo contrario, deben descargarse / configurarse / instalarse antes de continuar.
Luis Alvarado
fuente
2
Tenga en cuenta que también hay anti-dependencias como conflictos y rupturas. Y construir dependencias como Build-Depends.
Alexis Wilke
3

El término "dependencia" puede usarse ampliamente para abarcar las relaciones "Depende" y "Predepende" (y, a veces, incluso otras relaciones más débiles), o puede usarse de forma restringida como sinónimo de "Depende".

La diferencia entre las relaciones de paquete "Depende" y "Predepende" es que si X depende de Y, entonces Y debe estar completamente configurado antes de que X se configure. (La configuración es el paso de instalación donde un paquete, una vez que sus archivos se descomprimen en las ubicaciones adecuadas, es decir, una vez "instalado", tiene cualquier otro cambio necesario para que sea posible utilizar el software que proporciona. Por ejemplo , la configuración de un servidor HTTP podría implicar asegurarse de que haya un wwwusuario con las capacidades adecuadas y un /var/wwwdirectorio con los permisos adecuados.) Por el contrario, si X depende previamente de Y, entonces Y debe estar instalado y (generalmente) completamente configurado antes de que X sea uniforme. instalada .

Consulte la Sección 7.2 del Manual de Políticas de Debian para más detalles. Cito las dos secciones más relevantes aquí, pero hay otra información en esa sección (y en el capítulo 7 de manera más general) que ayuda a aclarar cómo funcionan las dependencias.


Depends

Esto declara una dependencia absoluta. Un paquete no se configurará a menos que todos los paquetes enumerados en su Dependscampo se hayan configurado correctamente (a menos que haya una dependencia circular como se describe anteriormente).

El Dependscampo debe usarse si se requiere el paquete dependiente para que el paquete dependiente proporcione una cantidad significativa de funcionalidad.

El Dependscampo también debe usarse si los scripts postinsto prermrequieren que el paquete dependiente se desempaquete o configure para ejecutarse. En el caso de la configuración posterior, los paquetes dependientes se desempaquetarán y configurarán primero. (Si ambos paquetes están involucrados en un bucle de dependencia, esto podría no funcionar como se esperaba; vea la explicación unos pocos párrafos atrás). En el caso de prermu otras postinstacciones, las dependencias del paquete normalmente serán al menos desempaquetadas, pero pueden ser solo "Medio instalado" si falla una actualización previa de la dependencia.

Finalmente, el Dependscampo debe usarse si el postrmscript necesita el paquete dependiente para limpiar completamente después de la eliminación del paquete. No hay garantía de que las dependencias del paquete estarán disponibles cuando postrmse ejecute, pero es más probable que el paquete dependiente esté disponible si el paquete declara una dependencia (particularmente en el caso de postrm remove). El postrmscript debe omitir con gracia las acciones que requieren una dependencia si esa dependencia no está disponible.


Pre-Depends

Este campo es similar Depends, excepto que también obliga dpkga completar la instalación de los paquetes nombrados antes incluso de comenzar la instalación del paquete que declara la dependencia previa, de la siguiente manera:

Cuando un paquete que declara una dependencia previa está a punto de desempacarse, la dependencia previa puede satisfacerse si el paquete dependiente está completamente configurado, o incluso si los paquetes dependientes solo están desempaquetados o en la mitad -Configurado ", siempre que se hayan configurado correctamente en algún momento en el pasado (y no se hayan eliminado o eliminado parcialmente desde entonces). En este caso, las versiones configuradas previamente y actualmente desempaquetadas o "medio configuradas" deben cumplir con cualquier cláusula de versión en el Pre-Dependscampo.

Cuando el paquete que declara una dependencia previa está a punto de configurarse , la dependencia previa se tratará como normal Depends. Se considerará satisfecho solo si el paquete dependiente se ha configurado correctamente. Sin embargo, a diferencia de Depends, Pre-Dependsno permite que se rompan las dependencias circulares. Si se encuentra una dependencia circular al intentar honrar Pre-Depends, la instalación se cancelará.

Pre-Dependstambién son necesarios si el preinstscript depende del paquete nombrado. Es mejor evitar esta situación si es posible.

Pre-Depends debe usarse con moderación, preferiblemente solo por paquetes cuya actualización o instalación prematura dificulte la capacidad del sistema de continuar con cualquier actualización que pueda estar en progreso.

No debe especificar una Pre-Dependsentrada para un paquete antes de que esto se haya discutido en la debian-devellista de correo y se haya alcanzado un consenso sobre cómo hacerlo. Ver dependencias, sección 3.5 .

Eliah Kagan
fuente