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:
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.
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á? 🙂
Te falta el kernel source o los kernel-headers.
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
Has compilado dahdi al completo o has dejado algún módulo sin compilar?
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
Tienes que coger las que se llamen como uname -a, el kernel que tienes funcionando.
A mi me ha funcionado perfecto. Siguiendo tus instrucciones he podido cargar ztdummy en mi VPS con Xen.
Muchas gracias
Bueno y cuando tienes tarjestas que pasa? o que procedimiento se sigue? (en mi caso tengo una Digium TE410p)
gracias
@Bionicmaster: Es bastante sencillo: http://www.wlug.org.nz/XenPciPassthrough