¿Qué se entiende por "depende" y "pre-depende", y la diferencia entre esos 2 tipos de requisitos de paquete cuando estoy instalando algo en Ubuntu?
¿Qué se entiende por "depende" y "pre-depende", y la diferencia entre esos 2 tipos de requisitos de paquete cuando estoy instalando algo en Ubuntu?
Respuestas:
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:
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.
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:
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 www
usuario con las capacidades adecuadas y un /var/www
directorio 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
Depends
campo se hayan configurado correctamente (a menos que haya una dependencia circular como se describe anteriormente).El
Depends
campo debe usarse si se requiere el paquete dependiente para que el paquete dependiente proporcione una cantidad significativa de funcionalidad.El
Depends
campo también debe usarse si los scriptspostinst
oprerm
requieren 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 deprerm
u otraspostinst
acciones, 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
Depends
campo debe usarse si elpostrm
script 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 cuandopostrm
se ejecute, pero es más probable que el paquete dependiente esté disponible si el paquete declara una dependencia (particularmente en el caso depostrm remove
). Elpostrm
script 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 obligadpkg
a 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-Depends
campo.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 deDepends
,Pre-Depends
no permite que se rompan las dependencias circulares. Si se encuentra una dependencia circular al intentar honrarPre-Depends
, la instalación se cancelará.
Pre-Depends
también son necesarios si elpreinst
script 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-Depends
entrada para un paquete antes de que esto se haya discutido en ladebian-devel
lista de correo y se haya alcanzado un consenso sobre cómo hacerlo. Ver dependencias, sección 3.5 .