Pautas de Conflictos

Autor: Tom 'spot' Callaway
Revisión: 0.07
Borrador inicial: martes, 5 dic, 2006
Última revisión: miercoles, 31 oct, 2012

Conflictos

Los usuarios siempre deben poder instalar los paquetes más recientes desde los repositorios de Fedora, independientemente de qué otros paquetes de Fedora tengan instalados. Por lo tanto, siempre que sea posible, se debe evitar que los paquetes más recientes de Fedora de una versión entren en conflicto. Los conflictos generan un conjunto de transacciones donde el usuario debe descifrar el mensaje de error y tomar una decisión. El conjunto de transacciones no proporciona información al usuario sobre el motivo del conflicto entre dos paquetes para ayudarle a tomar una decisión informada.

Como empaquetadores de Fedora, intentamos que cualquier subconjunto de los paquetes más recientes de Fedora se instale y ejecute. Desafortunadamente, esto no siempre es posible, pero generalmente podemos lograr que los paquetes conflictivos se instalen y el usuario pueda decidir qué paquete habilitar posteriormente. En los pocos casos restantes, debemos usar las etiquetas Conflicts:. Estas pautas ilustran cómo se deben gestionar los conflictos en Fedora, específicamente sobre cuándo y cuándo no usar el campo Conflicts:.

Usos Aceptables de Conflictos:

Como regla general, los paquetes de Fedora NO deben contener el uso del campo Conflicts:. Este campo se suele usar incorrectamente, cuando Requires: sería más apropiado. Confunde a los depsolvers y a los usuarios finales sin motivo aparente. Sin embargo, en algunos casos, el uso del campo Conflicts: es apropiado y aceptable.

Conflictos Implícitos

Tenga en cuenta que los conflictos implícitos NUNCA son aceptables. Si su paquete entra en conflicto con otro, debe resolverlo o marcarlo con Conflicts:.

Funcionalidad Opcional

Algunos programas pueden utilizar otras aplicaciones opcionales si están presentes, pero no requieren su instalación. Si no están instaladas, el software seguirá funcionando correctamente. Sin embargo, si esas otras «aplicaciones opcionales» son demasiado antiguas, el software no funcionará. Este es un uso aceptable del campo Conflicts:. El empaquetador debe documentar el motivo en un comentario sobre el campo Conflicts::

Ejemplo:

Conflictos: unrar < 2.0

Si el software enlaza con las bibliotecas de otro paquete, debe usar Requires: en lugar de Conflicts: para marcar esa dependencia. Además, si el software no funciona correctamente sin otro paquete instalado, debe usar Requires: en lugar de Conflicts:.

El paquete preguntaría:

Si el paquete (en la versión correcta) en Conficts: no está presente, ¿mi paquete será funcional?

Si la respuesta es sí, probablemente sea un uso válido de Conflicts:. Si la respuesta es no, casi con toda seguridad es mejor usar Requires:.

Por ejemplo, si tal-juego necesita libbar para ejecutar, pero no funcionará con libbar que es más antiguo que 1.2.3:

INCORRECTO: Conflictos: libbar < 1.2.3
CORRECTO: Requiere: libbar >= 1.2.3
Los empaquetadores deberían minimizar el uso de Conflictos:. Solo se permite la actualización desde dos versiones anteriores de Fedora, por lo que los conflictos con paquetes anteriores, aunque técnicamente correctos, son innecesarios y no deberían incluirse.

Particionar Paquetes

Si el contenido de un paquete se divide en un paquete independiente, el nuevo paquete suele contener archivos que también aparecen en el paquete original, lo que podría generar un conflicto implícito entre los archivos del nuevo paquete y los del original. Si el nuevo paquete depende del original, esto se puede resolver con un Requires versionado:

# En el archivo de especificaciones del nuevo paquete:
Requires: original-package > EVR_BEFORE_SPLIT

Si el nuevo paquete debe poder instalarse independientemente de si el paquete original está instalado, se permite un conflicto de versiones:

# En el archivo de especificaciones del nuevo paquete:
Conflicts: original-package <= EVR_BEFORE_SPLIT

En ambos casos, la nueva versión del paquete original debe actualizarse para que no contenga los archivos conflictivos y dependa del nuevo paquete (al menos en todas las versiones estables de Fedora). Esto permite instalar las últimas versiones de ambos paquetes sin problemas. Los conflictos solo existen para resolver el caso en que se instala el nuevo paquete y la versión anterior del paquete original ya estaba instalada.

Conflictos de Paquetes de Compatibilidad

Es aceptable utilizar Conflicts: en algunos casos relacionados con paquetes de compatibilidad. En estos casos, no es posible parchear las aplicaciones para que busquen los archivos -compat en ubicaciones alternativas, por lo que los paquetes foo-devel y foo-compat-devel deben usar Conflict:. Siempre que sea posible, esto debe evitarse.

Archivos Binarios Incompatibles con Nombres Conflictivos (y superiores persistentes)

En el caso específico de que varios componentes de software generen binarios con nombres idénticos (pero incompatibles), los empaquetadores de Fedora deben hacer todo lo posible para convencer a los desarrolladores originales de renombrar los binarios para resolver el conflicto (véase: Conflictos de nombres binarios). Sin embargo, si ninguno de los desarrolladores originales está dispuesto a renombrar los binarios para resolver el conflicto, Y los binarios no son candidatos viables para alternativas o módulos de entorno (tiempos de ejecución incompatibles), siempre que no haya casos claros para que ambos paquetes se instalen simultáneamente, se permiten conflictos explícitos a discreción del empaquetador. En este caso, ambos paquetes deben tener conflictos.

Tenga en cuenta que añadir conflictos explícitos implica que, si otros paquetes dependen del suyo, podría estar creando una cadena de conflictos que podría causar problemas al usuario. Considere esto como último recurso.

Casos y Soluciones de Archivos Conflictivos Comunes

Hay muchos tipos de archivos que pueden entrar en conflicto entre varios paquetes. Fedora desaconseja encarecidamente el uso de Conflicts: para resolver estos casos. A continuación, se ofrecen algunas sugerencias para resolver estos conflictos (tenga en cuenta que no se enumeran todos los casos de conflicto de archivos ni todas las posibles soluciones):

Conflictos del Nombre de Página Man

  • Cambie el nombre de las páginas del manual para modificar ligeramente el sufijo de la página del manual (por ejemplo, man1/check.1.gz y man1/check.1foo.gz)

  • Cambie el nombre de las páginas del man para incluir un prefijo del paquete que las proporciona (por ejemplo, foo-check.1.gz y bar-check.1.gz)

Conflictos del Nombre de Biblioteca

Si la biblioteca es totalmente compatible con ABI, puede usar Módulos del Entorno para permitir al usuario alternar entre ellos. Si la biblioteca no es totalmente compatible con ABI, solicite a uno de los desarrolladores principales que cambie el nombre. Consulte Acercándose a Desarrollo para obtener ideas sobre cómo persuadir. Si ninguno de los desarrolladores principales cede, abra una solicitud al Fedora Packaging Committee para evaluar qué tipo de requisitos deberían implementar ambos paquetes para evitar conflictos en tiempo de ejecución.

Conflictos del Nombre de Cabecera

  • Ponga las cabeceras dentro de un subdirectorio de /usr/include.

Conflictos de Nombre Binario

  • Convencer al servidor principal para que cambie el nombre de los binarios a algo menos genérico (o simplemente menos conflictivo).

  • Si los binarios en conflicto ofrecen la misma funcionalidad, puede renombrarlos con un prefijo y usar Alternativas para que el administrador del sistema seleccione el nombre genérico predeterminado. Tenga en cuenta que esto no suele ocurrir.

  • En los casos en que los binarios ofrecen una funcionalidad similar, EnvironmentModules puede ser una opción. Esto es más flexible que las alternativas y se aplica a elementos que cada usuario del sistema podría preferir elegir, en lugar de un administrador del sistema.

Acercándose a Desarrollo

Al renombrar o colocar archivos en subdirectorios, conviene contactar con el servidor principal para renombrar los archivos conflictivos (por ejemplo, si ambos tenían comandos llamados %{_bindir}/trash). Investigar cuál lleva más tiempo disponible puede ser útil en este caso, pero puede que no sea convincente para el servidor principal.

Si ninguno de los desarrolladores principales cambia el nombre, contactaríamos con otras distribuciones (distributions-list[at]freedesktop.org es un buen lugar para hablar sobre esto) para que el cambio de nombre sea posible en todas las distribuciones. Esto ayuda a los usuarios finales a mantener la coherencia al cambiar de una distribución a otra. La antigüedad de los proyectos, su popularidad y muchos otros factores pueden influir en esta decisión. Una vez tomada la decisión, renombraremos los paquetes de Fedora para que coincidan.

Archivos Potencialmente Conflictivos

Intentamos evitar conflictos no solo con los paquetes existentes en Fedora, sino también con los potenciales. Esto se debe a que el primer paquete que entra en Fedora no siempre es el que debería adoptar el nombre. Existen varios escenarios en los que esto podría ocurrir:

  1. Hay un paquete conflictivo que aún no está en Fedora (se encontró haciendo una búsqueda web, por ejemplo)

  2. Todavía no hay ningún conflicto, pero es probable que otro proyecto utilice el nombre del archivo (algo así como /usr/bin/parser)

En el primer caso, cuando se sabe que existe un paquete conflictivo, pero aún no está en Fedora, debemos determinar qué paquete tiene una reclamación más válida para el nombre y renombrar los archivos del paquete que incluimos si no la tiene. Si considera que su situación es única, abra un ticket con el Fedora Packaging Committee.

En el segundo caso, si no se conoce ningún paquete con el que haya conflicto en este momento, la decisión recae en el empaquetador. Tenga en cuenta que se recomienda al menos hablar con el equipo de desarrollo sobre la posibilidad de conflictos. Sin embargo, esperamos que cualquier proyecto posterior que intente usar ese nombre pueda ser persuadido a cambiarlo, considerando la mayor antigüedad del proyecto.

Comandos Estándar

Se permiten nombres comunes para los comandos estándar, ya que estos serán los únicos que los implementarán. Los comandos estándar incluyen elementos previstos en estándares publicados y ampliamente implementados, como POSIX, y estándares de facto, como un programa que tradicionalmente se ha distribuido con un nombre de archivo específico en numerosas variantes de Unix. En caso de duda, envíe un mensaje a fedora-devel-list[at]redhat.com con detalles sobre en qué estándares aparece el comando, cuánto tiempo lleva disponible en qué sistemas Unix y si ha encontrado algún programa conflictivo que implemente un comando sustancialmente diferente con el mismo nombre de archivo.

Nombres de Paquetes Conflictivos

Al igual que los archivos, los nombres de los paquetes pueden entrar en conflicto. Los nombres de paquetes conflictivos DEBEN resolverse. Los nombres de paquetes que difieren solo en mayúsculas y minúsculas se consideran conflictivos. Debe seguir los mismos pasos básicos descritos en Approaching Upstream.

Renombrar paquetes y reemplazarlos por otros puede ser difícil si esto tiene que ocurrir más adelante (por ejemplo, las rutas de actualización pueden volverse complejas en estas situaciones), por lo que es incluso más importante estar al tanto de los posibles conflictos aquí que con los nombres de archivos.

Otros usuarios en conflicto:

Si se encuentra en una situación en la que considera que su paquete entra en conflicto con otro (explícita o implícitamente), pero no se ajusta a los casos aceptados documentados anteriormente, debe presentar su caso ante el Comité de Empaquetado de Fedora. Si están de acuerdo, solo entonces podrá usar Conflicts: en un paquete de Fedora. Recuerde que, siempre que use Conflicts:, también debe incluir el razonamiento en un comentario junto a la entrada Conflicts:, para que quede perfectamente claro por qué es necesario.