OpenDomo SDK

Tal como se ha comentado en otros artículos, existe un entorno de desarrollo pensado para facilitar las tareas de desarrollo de OpenDomo desde Linux/Unix, el llamado ODSDK (OpenDomo Software Development Kit). Este entorno se basa en un script que automatiza las principales etapas del proceso de creación de una distribución completa, incluso las etapas requeridas para lanzar las versiones oficiales.

Aunque la intención de ODSDK es hacer para el desarrollador lo más fácil posible completar este proceso, el ensamblado de un Sistema Operativo completo dista de ser trivial, por lo que en este manual intentaremos resolver las dudas que puedan aparecer.

 

Empezando

En primer lugar, debemos dar por hecho que los archivos fuente han sido correctamente descargados, tal como se indica paso a paso en el artículo Primeros pasos con OpenDomo: aún más fácil. Si no es así, deberemos empezar por descargar el código fuente desde el SVN mediante el siguiente comando:

$ svn checkout https://opendomo.googlecode.com/svn/trunk/ opendomo --username usuario
$ cd opendomo
$ ./odsdk.sh update

El comando "update" descargará todos los archivos del buildroot necesarios, y actualizará el código si es necesario. Es una buena práctica ejecutar este comando antes de empezar a trabajar. Una vez descargado el script odsdk.sh, recomendamos probarlo con el comando "help":

$ ./odsdk.sh help

El script incorpora varias páginas de documentación (accesibles a través del comando "./odsdk.sh man"), que intentan hacer más claro su funcionamiento.

 

Un poco de perspectiva

Ahora que ya tenemos el entorno de desarrollo a punto, vamos a desglosar el proceso de creación de una distribución OpenDomo en cuatro pasos principales:

  1. Creación del núcleo (kernel Linux) y del sistema base (Busybox)
  2. Compilación de los paquetes de software internos y externos
  3. Selección de los paquetes y controladores a incluír
  4. Empaquetado de la distribución en ISO

El primer paso puede ejecutarse mediante los comandos  "brmc" y "brmake" (el primero para propagar el archivo de configuración, y el segundo para realizar la compilación), si se desea emplear la configuración por defecto; si, por lo contrario, deseamos ajustar algunas opciones del buildroot deberemos ejecutar antes el comando "br-menuconfig". Si por alguna razón no queremos recompilar el sistema base ni el kernel (por ejemplo, porque solamente queremos probar alguno de los paquetes complementarios), podremos emplear el script extract_basefiles.sh (dentro de opendomo-distro) indicándole la ubicación del archivo ISO que contenga el sistema base que queramos utilizar.

El segundo paso incluye la compilación de los paquetes propios de OpenDomo y los paquetes externos "portados" a esta plataforma. Compilaremos los paquetes propios mediante el comando "packages" y los externos mediante "external" (o uno a uno lanzando manualmente los scripts mkpkg incluidos en opendomo-distro/external). El resultado será una serie de archivos tar.gz en las ubicaciones packages y external/packages respectivamente.

En el tercer paso deberemos decidir qué paquetes vamos a incluir en nuestra distribución; podemos eliminar aquellos que no consideremos necesarios del directorio packages. Para seleccionar también los controladores, recomendamos hacer una ejecución previa del comando "mkiso", que generará dentro del directorio drivers una lista con todos los archivos encontrados dentro del sistema base (files.all) y los archivos tar.gz con los controladores que se detallan en los archivos .lst.

Hecha esta selección, podremos ejecutar de nuevo el comando "mkiso" para completar nuestra distribución. Recomendamos lanzar la batería de tests automáticos (mediante el comando "test") para garantizar el funcionamiento mínimo de la distribución creada. Este paso es indispensable si lo que queremos hacer es crear una distribución oficial (mediante el comando "release").

 

Personalizando la distribución

Si estás familiarizado con los entornos de desarrollo de Linux, tal vez quieras modificar algunas de las opciones de compilación usadas. Puedes hacerlo del siguiente modo:

$ ./odsdk.sh knmc

El comando anterior abre el menú de configuracion del kernel. Si lo que deseas es modificar las opciones del buildroot, lo puedes hacer mediante el siguiente comando:

$ ./odsdk.sh brmc

Una vez aplicados los cambios, sera necesario ejecutar la compilación:

$ ./odsdk.sh brmake

NOTA: Hay que tener presente que algunas modificaciones requieren ejecutar el temido "distclean", o lo que es lo mismo, borrar todos los archivos fuente de buildroot y volver a ejecutar "update".

 

Actualización de archivos fuente

El entorno de desarrollo debe ser actualizado antes de cada sesión de trabajo. Para hacerlo bastará con ejecutar el comando "update", y se procederá a actualizar los archivos fuente de OpenDomo y, si es necesario, el buildroot.

Comments

añadir paquetes externos

Estoy intentando bajar los paquetes externos de email y espeak para instalarlos en el ODNetwork y los ensaces que hay en la web tampoco están accesibles.

No sería conveniente subir al SVN los paquetes estables con los que se trabaja para que no haga falta compilarlos pero que se incluyan en la iso?

Un saludo,

Lo estuvieron

Hace tiempo los scripts que generaban los paquetes externos se lanzaban desde el propio SDK, pero detectamos numerosos problemas con las actualizaciones y finalmente los dejamos aparte. Estos scripts siguen estando accesibles aunque no se lancen directamente al generar la ISO.

No, en un SVN no es conveniente subir paquetes compilados, ya que para ello tenemos los repositorios.

problema en "make" por no poder descargar la librería "libcgi"

Durante la compilación el script no ha podido descargar el paquete "libcgi-1.0.tar.gz", hay algún path donde lo pueda dejar una vez descargado de otro sito para que no necesite descargarlo durante el proceso?

Debería descomprimirlo de alguna forma antes de volver a ejecutar make?

Un saludo

Problema del buildroot

Esta parte de la compilación queda en manos del buildroot de busybox, y poco podemos hacer al respecto. Es cierto que a veces las fuentes de código que usa se encuentran sobrecargadas y puede dar algún problema. Te recomiendo intentarlo otra vez más tarde, a ver si por fin consigue descargarse todo lo que necesita. Por suerte, solo es necesario hacerlo una vez, y no a cada compilación!

link no disponible

parece que el problema es que este enlace ya no está disponible:

http://easynews.dl.sourceforge.net/sourceforge/libcgi/libcgi-1.0.tar.gz

 

 

cambiar el link de descarga en el script

Parece que lo que está mal es el link de descarga, puesto que el link de descarga publicado por los desarrolladores del proyecto libcgi es;

http://prdownloads.sourceforge.net/libcgi/libcgi-1.0.tar.gz

Como puedo corregir el link en el script?

Solucionado

He cambiado a mano el link de la fuente en el archivo de configuración del paquete y ya se ha instalado y continua con los demás paquetes.

Por si le pasa a alguien más la dirección donde se pueden encontrar los paquetes y sus archivos de configuración es Buildroot/package/X/X.mk

Donde X es el nombre del paquete.

El sistema sigue compilando, ya veremos cuando termina porque la máquina virtual es mucho más lenta que un pc real, lleva ya 4 horas de compilación.

Salu2

 

Edito: También me han dado problemas los paquetes "libusb" y "libusb-compat". He podido solucionarlos con este procedimiento, aunque libusb he tenido que descargarlo a mano otra vez y sobreescribir el paquete que había descargado automáticamente porque se había corrompido.

La verdad es que como el proceso es bastante detallado y explica muy bien lo que está haciendo en cada momento es bastante fácil buscar y solucionar el problema.

errores en paquetes externos

Continuando con la compilación me he encontrado diversos errores con los paquetes externos.

Hay paquetes en los que el link de descarga es incorrecto, por lo que he tenido que bajarlos a mano para colocar los archivos en "Downloads".

En algunos como avrdude el sistema devuelve un error de que "staging_dir".

Convendría revisar los scripts y ponerlos al día, puesto que así es muy complicado compilar una distro desde cero.

Me ha dado error en más de la mitad de los paquetes externos.

Es normal puesto que algunos de los paquetes de los utilizados son tan viejos que incluso los links de descarga han desaparecido de internet.

Mañana continuaré revisando la compilación, que ahora es tarde (o temprano, según se mire)

salu2

Paquetes externos

¿Podrías indicarnos en qué paquetes externos te has encontrado con problemas? Algunos ya no los mantenemos porque han quedado obsoletos o sus licencias son incompatibles con OpenDomo. Los únicos que, a día de hoy, mantenemos son:

  • cherokee
  • email
  • espeak

El resto, los hemos dejado ahí para quién disponga de tiempo para mantenerlos. Por ejemplo, "motion" ha sido reemplazado por "odvision", "avrdude" no sirve para la nueva arquitectura basada en Ethernet, "heyu" y "gsmlib" no los mantenemos al no disponer del hardware necesario para su verificación. A "ripple" creo que le faltaban algunas dependencias en el último cambio de buildroot, pero no ha sido adaptado aún.

Todos estos paquetes son extras, no son necesarios para el funcionamiento de OpenDomo, aunque en su momento los usamos y hemos conservado el script en el SVN por razones históricas. Aunque si alguien puede hacerlos funcionar (en especial "ripple") los volveremos a incorporar a producción.

Paquetes externos con errores

a ver, los resultados de las compilaciones de los paquetes han sido los siguientes:

- Avrdude: falla
- Cherokee: OK, pero con 4 warnings que dicen que no funcionan los comandos fundamentales de los servicios (start, stop, status ni restart)
- email: OK, pero con diversos errores en el log, uno de ellos de que no lo puede compilar.
- espeak: da diversos errores, desde que no es un tar.gz valido hasta que no puede entrar en algún directorio que es parte de la instalación.
- flite: da un error similar
- gsmlib: falla
- heyu: ok
- motion: falla
- riple: falla

Supongo que si algunos de estos paquetes ya no son parte de la instalación deberían renombrarse los escripts añadiendo ".old" al nombre para que no los intente compilar.

Cuando tenga un rato revisaré los tres que han de instalarse para intentar serolver los errores, aunque si los tenéis resueltos quizá lo suyo sería subir los escripts nuevos del SDK al repositorio.

En cuanto a los paquetes internos, todos dan resultado OK, excepto soundtrack que de 2 warnings:

- configmushic.sh no es un ejecutable
- type not found in addplaylist.sh

Ahora no tengo tiempo para complobar más logs, luego los reviso.

Ninguno es necesario

Ninguno de estos paquetes es necesario para OpenDomo, y de hecho mantenemos los scripts en un SVN aparte, donde es algo más complicado realizar las compilaciones, pero donde podemos verificar su funcionamiento. Para los usuarios de OpenDomo los paquetes van dentro de la ISO o pueden descargarse desde los repositorios.

En cuanto a Cherokee, el warning que da es porque no usamos esos scripts. OpenDomo tiene sus propios scripts, adaptados a la sintaxis necesaria.

Sountrack, ciertamente, necesita aún algunos ajustes, ya que se encuentra en fase experimental, pero algunas de las funciones ya están estables.

SVN a parte?

Me estas haciendo durar... hay dos SVN?

El comando que yo he ejecutado para bajar el SDK es el siguiente:

svn checkout https://opendomo.googlecode.com/svn/trunk/ opendomo

Estoy usando el correcto?

En caso de que sí, me olvido de los errores de compilación y tiro para adelante?

Lo que estoy intentando es montar la distro en un USB para arrancar mi portatil con wifi y poder realizar las pruebas de desarrollo desde el.

Una vez que haya conseguido encender y apagar bombillas desde el netdevkit, subir y bajar persianas y mejorar el interface web, realizaré la instalación doméstica y adquiriré el ODNetwork.

Quizá lo más sencillo sería utilizar el otro procedimiento y cargar la iso de la version 0.9.0 y recompilar el kernel para incorporar los drivers pero no tener que compilar todos los paquetes, ¿no?

---------------------------

Por otra parte, estoy obteniendo un error en la compilación del paquete espeak y parece ser que es porque el paquete que se genera se llama "odspeech_espeak" y el archivo que busca luego para copiar el paquete es "espeak".

Puedo corregir el script para que llame al paquete simplemente "espeak" y esperar que todo funcione correctamente?

Olvídate de los externos

No pierdas tiempo en la compilación de paquetes externos desde el SDK. No son necesarios y es muy complicado conseguir que compilen bien. De hecho -y contestando otra pregunta- sí, hay otro SVN que usamos internamente para esta clase de trabajos, que nos agiliza el trabajo. El SVN de GoogleCode es muy lento, tiene capacidad limitada, y no podemos realizar backups profesionales, y es por esa razón que lo usamos para publicar el código, pero no para el trabajo "duro" diario.

Para las pruebas que comentas, lo que te recomiendo es que lo hagas funcionar en virtual directamente desde la ISO, y en cuanto estés satisfecho con los resultados, hagas el salto al ODNetwork. Compilar una distro completa para ciertas arquitecturas suele ser una odisea interminable (cuando no hay problemas con los controladores de red los hay con los de disco, y si estos van bien falla el sonido), y además hay que hacer un montón de ajustes en la configuración.

errores encontrados en configuración y script odsdk.sh

Oriol,

entiendo perfectamente lo que dices, así que utilizaré la máquina virtual para trabajar soble el netdevkit.

Por otra parte, y ya que me gusta cacharrear un montón, os comento un par de errores que he encontrado en el SDK disponible al público.

- El mirror easynews de sourceforge ya no está disponible, por lo que recomiendo cambiar la configuración, yo he utilizado el heanet y me ha descargado todos lo paquetes sin problemas.

- Por otra parte, en el script odsdk.sh dentro de la función "external | expkg" hay un error en la ubicación de la línea donde se copian los paquetes a la carpeta "packages", debería estar después de las dos lineas "cd .." y no antes. Está dando error porque no encuentra la ruta para copiar los paquetes al estar en el directorio incorrecto.

Seguiré intentando compilar la ISO personalizada, ya que me encantan los retos.

Sólo espero poder aportar algo al proyecto e impulsar la inciativa de código abierto, además de dejar mi casa bien chula y poder decir "eso, lo he hecho yo"

salu2

¿Dónde tenemos "easynews"?

Voy a intentar arreglar estos puntos que comentas. En principio la función "external" será deshabilitada para no crear confusión. Respecto al servidor "easynews", ¿dónde está indicado?

brmc

en la configuración del toolchain que se realiza a través de brmc.

En uno de los menús ubicados en la parte superior del menú principal hay un sitio donde se especifican las fuentes de donde se descargan los paquetes.

Siento no ser más específico, pero es que ahora no estoy en casa. Si necesitas más detalles te los doy luego.

Es posible que sea un mirror

Es posible que sea un mirror de los usados por buildroot. En ese caso es al proyecto buildroot al que habría que notificar. 

De todas formas, no te desesperes, les suele pasar. Es una consecuencia de tener que tratar con gran cantidad de paquetes que se descargan de urls de internet. Si se guardasen una copia en su servidor no les pasaría, pero imagino que no tienen los recursos necesarios.

Saludos y gracias igualmente por el aviso.

--
Daniel Lerch

Cambiado y en pruebas

He encontrado lo del mirror y lo he cambiado, pero esperaré a poder efectuar las pruebas oficiales antes de subir este cambio al SVN.

Muchas gracias!

Problema al instalar el sdk.


Tengo ubuntu 10.04 LTS y despues de realizar svn checkout https://opendomo.googlecode.com/svn/trunk/ opendomo –username

No me crea la carpeta buildroot.

Tambien al ejecutar el script, no me funciona el update

ODSDK> update
svn: No se pudo abrir el archivo «.svn/lock»: Permiso denegado
  OpenDomo SVN ... svn: No se pudo abrir el archivo «.svn/lock»: Permiso denegado
  Buildroot ...    (updating)ERROR: no se pudo descargar

Alguien sabe por que no me deja instalarlo?

Prueba con esto

Prueba a ejecutar el comando siguiente:

# ./odsdk.sh update

Tal vez es un problema con la ruta por defecto, pero de momento no lo he podido reproducir. Por favor, avísame si el problema persiste.

Gracias por tu feedback!

Me pasa lo

Me pasa lo mismo:


/opendomo$ ./odsdk.sh update
  OpenDomo SVN ... svn: No se pudo abrir el archivo «opendomo-cgi/.svn/lock»: Permiso denegado
  Buildroot ...    (updating)ERROR: no se pudo descargar


Teneis la solución?

Solucionado, tenía problemas con los permisos...