OpenMandriva: Mageia (Mageia 9) 20/Agosto/2023 - Anuncio, Descargas.
Blogdrake recomienda descargar las imágenes de instalación (iso) vía torrent para evitar corrupción de datos, aprovechar mejor su ancho de banda y mejorar la difusión de las distribuciones.
¿Cómo crear un paquete que dependa bien del paquete X, bien del paquete Y?
Buenas,
estoy preparando un paquete (que tan pronto como lo tenga será publicado, claro está ;) ) para utilizar el DNI electrónico español con Mageia 2 (sí, 2. Por qué 2 y no 1 es algo que explicaré con más detalle en su momento; por ahora digamos simplemente que en Mageia 1 el DNIe falla mucho más).
De la que estaba especificando las dependencias del paquete en el SPEC me surgió una duda: ¿cómo digo que el paquete que estoy creando depende bien del paquete X, bien del paquete Y? Es decir, que el paquete se pueda instalar si ya está instalado el paquete X pero no el Y, o el Y pero no el X, o ambos, o que si no hay ninguno me pregunte si quiero instalar el X o el Y.
La sintaxis que encontré por Internet usando or entre cada nombre de paquete no me funcionó, ya que rpmbuild se quejaba de no encontrar el paquete or.
Por otra parte, sé que si dos o más paquetes declaran que proporcionan la funcionalidad F, y en el paquete que estoy creando pongo que requiere la funcionalidad F, la instalación se haría tal y como acabo de describir. Pero el problema es que los paquetes de los que depende no declaran proporcionar una funcionalidad F común a todos.
Bueno, dejémonos de letritas y vamos con el problema en sí. Estoy modificando el script de configuración incluido en dnie-0.1-2bdk2010.1.i586.rpm (aunque no encontré el src.rpm para ver cómo estaba hecho el tema de las dependencias ahí). El script muestra diálogos usando kdialog, zenity y, en la modificación que estoy haciendo, Xdialog. Usa uno u otro dependiendo de cuál esté instalado y el entorno de escritorio en el que se ejecute. Así pues, necesito que el paquete dependa o de kdialog, o de zenity, o de Xdialog.
En Mageia los paquetes de zenity y Xdialog proporcionan la funcionalidad xmsg-dialog, aunque no lo hace el paquete de kdialog. Podría pedir en bugzilla que le añadiesen a éste un Provides, pero preferiría no depender de un paquete virtual al que podrían añadírsele otros paquetes sin que lo supiese (debido a lo cuál podría ocurrir que el paquete se instalase bien, pero que el script no mostrase diálogos). Vamos, me gustaría poner dependencias explícitas.
También podría seguir un esquema similar al de pinentry y generar varios scripts y varios paquetes, uno para cada sistema de diálogos, y hacer un paquete base que utilice uno u otro según cuál esté instalado, y que dependa de una funcionalidad definida en todos esos paquetes (algo como dnie-configurador-gui). En este caso depender de un paquete virtual sí sería aceptable ya que sería yo mismo quien los controlaría. Pero prefería algo más sencillo y, sobre todo, rápido de hacer.
Así que... ¿hay alguna forma sencilla de declarar en el SPEC lo que quiero? O alguna otra idea sobre todo esto, bueno.
Muchas gracias.
P.D.: no tenía claro dónde poner esto, si aquí o en Servicio Técnico, porque en Reglas del foro de empaquetadores se indica que
Dudas sobre como empaquetar ¿quieres colaborar pero no sabes como? pregunta aqui y trataremos de guiarte.
Si aún así tenía que haberlo puesto en Servicio Técnico... no me larteéis muy fuerte, por favor ;)
BOFH
# 118156 Hola, intento responderte
Hola, intento responderte paso a paso
De la que estaba especificando las dependencias del paquete en el SPEC me surgió una duda: ¿cómo digo que el paquete que estoy creando depende bien del paquete X, bien del paquete Y? Es decir, que el paquete se pueda instalar si ya está instalado el paquete X pero no el Y, o el Y pero no el X, o ambos, o que si no hay ninguno me pregunte si quiero instalar el X o el Y.
Es importante la parte 'el paquete X pero no el Y, o el Y pero no el X, o ambos,'
Si lo que quieres es que instale el x y no el y. Debes meter un
Requires: X
Conflicts: Y
Pero me parece que lo que quieres es mas complicado.Lo que quieres es comprobar antes de poner las Requires si hay algun paquete instalado.Entonces debes usar condicionales en las Requires.
Algo asi como
%if mi_scriptito !=0
Requires: X
%else
Requires: Y
%Endif
Esto lo puedes poner también, aquí tienes una guía que lo explica
http://www.rpm.org/max-rpm/s1-rpm-specref-conditionals.html
Bueno, dejémonos de letritas y vamos con el problema en sí. Estoy modificando el script de configuración incluido en dnie-0.1-2bdk2010.1.i586.rpm (aunque no encontré el src.rpm para ver cómo estaba hecho el tema de las dependencias ahí). El script muestra diálogos usando kdialog, zenity y, en la modificación que estoy haciendo, Xdialog. Usa uno u otro dependiendo de cuál esté instalado y el entorno de escritorio en el que se ejecute. Así pues, necesito que el paquete dependa o de kdialog, o de zenity, o de Xdialog.
Ahora te entiendo mejor, me faltaba leer esto
Es complicado, porque si preguntas en la %post por el entorno grafico mediante %if , y si te devuelve kde metes la Require kdialog, o metes zenity si devuelve gnome o metes Xdialog si no devuelve ninguno de los anteriores. Esto no funciona.
Ya que las Requires las mete el empaquetador, no puedes meter Requires según las necesidades del usuario.Las Requires ya vienen con el paquete. Cuando descargas un paquete ya tiene sus Requires, no son variables.
Lo que tienes que hacer es meter las 3 Requires fijas kdialog, zenity y Xdialog. Y luego usas uno u otro en funcion de lo que te devuelva el %if que pregunta por el entorno grafico en la %post. No hay manera de solucionar esto, así son los spec-tillos.
En Mageia los paquetes de zenity y Xdialog proporcionan la funcionalidad xmsg-dialog, aunque no lo hace el paquete de kdialog. Podría pedir en bugzilla que le añadiesen a éste un Provides, pero preferiría no depender de un paquete virtual al que podrían añadírsele otros paquetes sin que lo supiese (debido a lo cuál podría ocurrir que el paquete se instalase bien, pero que el script no mostrase diálogos). Vamos, me gustaría poner dependencias explícitas.
Esto no lo he entendido, en perticular no entiendo esta parte
pero preferiría no depender de un paquete virtual al que podrían añadírsele otros paquetes
Ya que kdialog no es un metapaquete, este paquete no es un paquete vacio, sino que trae ejecutables y librerias.
¿a que te refieres con paquete virtual?
También podría seguir un esquema similar al de pinentry y generar varios scripts y varios paquetes, uno para cada sistema de diálogos, y hacer un paquete base que utilice uno u otro según cuál esté instalado, y que dependa de una funcionalidad definida en todos esos paquetes (algo como dnie-configurador-gui). En este caso depender de un paquete virtual sí sería aceptable ya que sería yo mismo quien los controlaría. Pero prefería algo más sencillo y, sobre todo, rápido de hacer.
Hacer esto es algo demasiado complicado, aunque la idea es cojonuda.
Así que... ¿hay alguna forma sencilla de declarar en el SPEC lo que quiero? O alguna otra idea sobre todo esto, bueno.
No que yo sepa, nunca vi nada asi. Y la verdad tengo vistos cientos de specs.
P.D.: no tenía claro dónde poner esto, si aquí o en Servicio Técnico, porque en Reglas del foro de empaquetadores se indica que
Si aún así tenía que haberlo puesto en Servicio Técnico... no me larteéis muy fuerte, por favor ;)
Creo que es el lugar correcto, ningun problema con esto.De todas maneras yo no soy un Taliban de las normas, puede que estemos ambos equivocados.
Espero haberte aclarado algo... Por cierto te he generado tus paquetes de mageia 1 en mageia 2, los tienes aquí
http://ftp.blogdrake.net/incoming/MGA/mga2/subir/noarch/
http://ftp.blogdrake.net/incoming/MGA/mga2/subir/srpms/
Échales un ojo por si se me ha escapado algun detalle.
Gracias
Un Saludo
Muy Suyo
Her DoctorBOFH
BOFH
# 118169 Lo de los paquetes virtuales es justo lo que explica Katnatek
Con paquete virtual me refería precisamente a lo que indica katnatek.
Y al problema al que me refiero es el siguiente: supongamos que pido en bugzilla que añadan al paquete kdialog que satisfaga la dependencia virtual xmsg-dialog (que actualmente es satisfecha por zenity y Xdialog). Por el momento todo funcionaría bien, pero podría ocurrir que en el futuro se indicase que otro paquete, por ejemplo gtkdialog, también satisface esa dependencia virtual. En ese caso, podría ocurrir que alguien que sólo tuviese instalado gtkdialog instalase el paquete del DNIe. La dependencia de xmsg-dialog se cumpliría, por lo que no se instalarían ni kdialog, ni zenity ni Xdialog. Pero cuando fuese a ejecutar el configurador se encontraría con un error, ya que éste no soporta gtkdialogs.
Por ese motivo entiendo que depender de un paquete virtual que tú no controlas debe hacerse sólo cuando esa dependencia se refiera a algo con una API que vaya a ser común a todos los paquetes que la satisfagan, como puede ser una biblioteca. En el caso de estas utilidades que muestran diálogos eso no se cumple, ya que cada una tiene su propia forma de ser invocada.
Por lo arriba mencionado es por lo que pensé en esta alternativa. Teniendo un paquete virtual propio podría usarlo sin ningún problema. Y, de hecho, creo que es precisamente lo que hace Tuningdrake. Pero mucho me temo que no tengo tiempo para ponerme a hacer algo así con el script de configuración del DNIe (lo cierto es que ya invertí muchas más horas en ello de lo que pensaba inicialmente... esto de no haber programado nunca en Bash es lo que tiene ;) ).
Así que, por el momento, creo que meteré dependencias explícitas a kdialog, zenity y Xdialog. Y mira que no me gusta nada tener que instalar paquetes que no se van a usar (y por dependencias a saber los que serán :S ), pero es lo mejor que puedo ofrecer por ahora ;) En cualquier caso, el paquete es GPLv3, así que quien quiera es libre de meterle mano ;)
Sí, que si un empaquetador experto no sabe cómo puedo hacerlo fácilmente y bien tendré que quedarme con una solución fácil aunque cutre por ahora. Pero qué le vamos a hacer ;) Gracias por la información.
¿Hiciste algún cambio o simplemente recompilaste en Mageia 2? En cualquier caso, cuando tenga algo de tiempo intentaré revisar cómo están los archivos desktop en Mageia 2 por si necesito hacer algún ajuste al menú. A ver si puedo hacerlo antes de que se publique la versión final, aunque no lo veo nada claro :S
# 118160 A ver si es esto
http://blogdrake.net/index.php?q=blog/katnatek/creando-paquetes-rpm-con-dependencias-opcionales
¿lo usas?, ¿la lees?, ¿las conoces?,Herramienta útil
BOFH
# 118162 ¿porque nunca antes vi
¿porque nunca antes vi esto?
http://blogdrake.net/index.php?q=blog/katnatek/creando-paquetes-rpm-con-dependencias-opcionales
Me da que es eso lo que quiere Kalvy. Muy buen tuto Katnatek.
Gracias, me lo apunto
Muy Suyo
Her DoctorBOFH
BOFH
# 118170 Sí, era eso
Eso mismo. Aunque como ya le comenté al DoctorBOFH presenta algunos problemillas. Lástima que no se pueda hacer más fácil. Gracias igualmente.