Mi Brain-Training Personal

Para que no se me olviden las cosas…

HowTo: Compilar Zaptel/DAHDI en un entorno Xen

A raiz del comentario de un usuario me he acordado de un post que tenía en mente pendiente desde hace tiempo: un pequeño HowTo para compilar Zaptel o DAHDI en un equipo con Xen.

El problema que tenemos a la hora de compilar ztdummy o dahdi_dummy en Xen es la fuente de timming. En las versiones actuales de Zaptel y DAHDI el timming (cuando no tenemos tarjetas) se puede obtener de tres fuentes:

  1. El HPET.
  2. El RTC.
  3. El tick del sistema (opción CONFIG_HZ)

En Xen (si usamos el kernel oficial 2.6.18 parcheado) no tenemos disponibles ni la primera ni la segunda opción, pero Zaptel se cree que SÍ que tenemos acceso al RTC, y por tanto falla.

Para solucionarlo tenemos que editar el fichero ztdumy.c o dahdi_dumy.c y localizar la siguiente sección:

/*
* NOTE: (only applies to kernel 2.6)
* If using an i386 architecture without a PC real-time clock,
* the #define USE_RTC should be commented out.
*/
#if defined(__i386__) || defined(__x86_64__)
#if LINUX_VERSION_CODE >= VERSION_CODE(2,6,15)
/* The symbol hrtimer_forward is only exported as of 2.6.22: */
#if defined(CONFIG_HIGH_RES_TIMERS) && LINUX_VERSION_CODE >= VERSION_CODE(2,6,22)
#define USE_HIGHRESTIMER
#else
#define USE_RTC
#endif
#else
#if 0
#define USE_RTC
#endif
#endif
#endif

Si os fijáis el comentario ya nos indica lo que tenemos que hacer: comentar las líneas correspondientes para que no se defina el flag USE_RTC. Para ello modificamos el código anterior dejándolo así:

/*
* NOTE: (only applies to kernel 2.6)
* If using an i386 architecture without a PC real-time clock,
* the #define USE_RTC should be commented out.
*/
#if defined(__i386__) || defined(__x86_64__)
#if LINUX_VERSION_CODE >= VERSION_CODE(2,6,15)
/* The symbol hrtimer_forward is only exported as of 2.6.22: */
#if defined(CONFIG_HIGH_RES_TIMERS) && LINUX_VERSION_CODE >= VERSION_CODE(2,6,22)
#define USE_HIGHRESTIMER
#else
//#define USE_RTC
#endif
#else
#if 0
//#define USE_RTC
#endif
#endif
#endif

De esta manera, Zaptel o DAHDI compilarán sin problemas en un entorno Xen y podremos utilizar el dummy driver necesario para MeetMe o el IAX trunking.

  • http://www.voztovoice.org Andrea

    Muchas gracias por la guía, pero creo que estoy fallando en algo.

    Instalé el kernel-xen-devel via yum y bajé la ultima versión de dahdi (2.1.0). Modifiqué el archivo que indicas en el post y luego intenté compilar las fuentes.

    Me sale el mismo error de siempre

    “You do not appear to have the sources for the 2.6.18-xen kernel installed”

    Creo que me estoy equivocando en algo…

    Que será? :)

  • saghul

    Te falta el kernel source o los kernel-headers.

  • http://www.voztovoice.org Andrea

    Seguimos con la telenovela :)
    Ahora, modificando el Makefile, logré instalar Dadhi (versión 2.1.0.1) Antes del make comenté la lineas indicadas en el archivo dahdi_dumy.c

    Todo sale bien. He compilado nuevamente Asterisk y me sale con dahdi, meetme y todo lo demás.

    He modificado el archivo /etc/dahdi/modules y comentado todo lo que aparece (ya que no tengo tarjetas instaladas)

    El problema es que cuando intento arrancar dahdi
    /etc/init.d/dahdi start
    me sale:
    Loading DAHDI hardware modules:
    FATAL: Module dahdi not found.
    y en el log de asterisk:

    ERROR[3861] codec_dahdi.c: Failed to open /dev/dahdi/transcode: No such file or directory

    Que será?

    Gracias de antemano

  • http://saghul.net saghul

    Has compilado dahdi al completo o has dejado algún módulo sin compilar?

  • http://www.voztovoice.org Andrea

    He compilado primero dahdi-linux-2.1.0.1 con make, luego dahdi-tools-2.1.0.1 pero sin pasar por el make menuselect.

    Cuando he vuelto a compilar asterisk 1.6.0.1 todos los módulos y aplicaciones relacionadas con dahdi salían ya preseleccionadas.

    El problema aparece solamente cuando arranco el daemon de dahdi y asterisk

    para compilar dahdi en la carpeta /lib/modules tenia dos carpetas:

    2.6.18-92.1.18.el5 2.6.18-92.1.18.el5xen 2.6.18-xen

    Escogí 2.6.18-92.1.18.el5xen

    En /usr/src/kernels tenia

    2.6.18-92.1.18.el5-x86_64 2.6.18-92.1.18.el5-xen-x86_64

    escogí

    2.6.18-92.1.18.el5-x86_64

    Quizás me equivoqué en eso :)

    La verdad ya no se por donde andar…

    Pero, a pesar de todo, soy optimista :)

    Chao y muchas gracias de antemano

  • http://saghul.net saghul

    Tienes que coger las que se llamen como uname -a, el kernel que tienes funcionando.

  • http://www.lolacolay.com ramoncio

    A mi me ha funcionado perfecto. Siguiendo tus instrucciones he podido cargar ztdummy en mi VPS con Xen.

    Muchas gracias

  • Bionicmaster

    Bueno y cuando tienes tarjestas que pasa? o que procedimiento se sigue? (en mi caso tengo una Digium TE410p)

    gracias

  • http://saghul.net saghul

    @Bionicmaster: Es bastante sencillo: http://www.wlug.org.nz/XenPciPassthrough

  • Pingback: DAHDI 2.2 mejora el soporte en entornos virtualizados | Mi Brain-Training Personal