OpenVox G400P en Debian
This post is also available in english.
Éste post también se encuentra redactado en inglés.
Instalando un servidor de telefonía IP no tuve mejor idea que adquirir una placa OpenVox G400P para conectarme a la red GSM sin buscar lo suficiente en la web antes. Mi error.
**[Los problemas]{.underline}**:
- Al momento de adquirir la placa (hace apenas \~6 meses) no existía soporte oficial para [Dahdi](http://www.voip-info.org/wiki/view/DAHDI).
- Cuando el mismo [apareció](http://www.chan-extra.org/index.php/OpenVox_G400P_User_Manual_for_dahdi), resulta ser que no constaba de unos simples parches, sino un script que supone que uno usa un sistema basado en RPMs, baja y modifica las fuentes de Dahdi y [Asterisk](http://www.asterisk.org/), los compila e instala, sin dejar lugar a modificaciones por parte del usuario.
- Al preguntar al soporte, me dijeron que me lo instalaban ellos mismos... si les daba acceso SSH (de no creer). Me tomé el trabajo de explicarles que pedir acceso SSH a sus clientes era una **mala idea**, pero me parece que [no entendieron](http://bbs.openvox.cn/viewthread.php?tid=1463&page=1#pid6399).
**[Desarmando el script:]{.underline}**
Mi idea entonces fué instalar una máquina virtual con la versión de Elastix o Trixbox que ellos pedían para hacer correr el script, obtener el código fuente parcheado, revisarlo y compilarlo en mi Debian. Llegué a bajar tres versiones distintas de ésas distros... y parece ser que ninguna de ellas era la que el script esperaba. Para ese momento decidí hacer lo que debía haber hecho desde un principio: imprimir el script, desarmarlo y armar ése código fuente yo mismo.
Por supuesto, usé [git](http://git-scm.com/) para el proceso :)
[**El código fuente resultante:**]{.underline}
Dahdi:
Asterisk: (puede estar incompleto, todavía lo tengo que chequear).
En el caso de Dahdi, la rama *openvox-g400p* contiene las modificaciones de chan-extra, la rama *oslec* contiene el soporte para el cancelador de eco [OSLEC](http://www.rowetel.com/blog/?page_id=454). Finalmente la rama *master* es un merge de ambas. Todavía no probé que la placa funcione con oslec, pero está ahí porque la uso en la otra placa que tengo en el servidor.
**[Recomendaciones para la gente de OpenVox:]{.underline}**
Si bien me parece excelente que quieran proveer a sus clientes de un script "automágico", un usuario de otras distribuciones y/o un usuario avanzado va a encontrar mejor que le proporcionen un patch para el código fuente. Lo bueno es que gracias a git ésto no es complicado.
Les sugiero el siguiente workflow:
1.- Descomprimir el código fuente original de Dahdi, renombrar el directorio y crear un repositorio git del mismo.
[\$ tar -xf dahdi-x.y.z.tar.gz]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
[\$ mv dahdi-x.y.z dahdi]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
[\$ cd dahdi]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
[\$ git init]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
[\$ git add -A]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
[\$ git commit -m "Original Dahdi source code version x.y.z."]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
2.- Crear una rama *upstream* para seguir el desarrollo de Dahdi.
[\$ git checkout -b upstream]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
3.- Taggear la release específica de Dahdi en la rama upstream.
[\$ git tag -a dahdi-x.y.z]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
4.- Volver a la rama *master* y realizar el desarrollo del driver en la misma.
[\$ git checkout master]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
[\[... desarrollo...\]]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
5.- Una vez terminada una release, taggearla.
[\$ git tag -a chan-extra-x.y.z]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
6.- Crear un parche a partir de ambas ramas (aunque sería mejor publicar el repositorio git directamente):
[\$ git diff upstream master \> chan-extra-x.y.z.patch]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
Nota: hay mejores formas para obtener un parche que ésta manera... pero no es algo que haya explorado lo suficiente. Se aceptan comentarios ;)
7.- Cuando se deba desarrollar para una nueva versión de Dahdi, basta con actualizar la rama correspondiente y hacer un merge:
[\$ git checkout upstream]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
[\$ git rm '\*']{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
[\$ git clean -xdff]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
[\$ tar zxfv ../../dahdi-x.y.z+1.tar.gz --strip=1]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
[\$ git add -A]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
[\$ git commit -m "Import upstream x.y.z+1 release."]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
[\$ git checkout master]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
[\$ git merge upstream]{.Apple-style-span style="font-family: 'Courier New', Courier, monospace;"}
Luego el usuario podrá aplicar el parche usando *patch* y compilar. Basta con seguir el mismo workflow para crear parches para Asterisk.
Por supuesto, se aceptan comentarios sobre éste workflow :-)
Comments
There are no comments yet.