[HOW-TO] WebTV: Aplicaciones en Segundo Plano

Una colección de documentos útiles sobre algún tema en concreto.
Severeal useful docs about a specific subject.

Moderador: Moderadores voluntarios

[HOW-TO] WebTV: Aplicaciones en Segundo Plano

Notapor alex » Mié Dic 15, 2010 12:56 pm

Este documento describe el mecanismo que permite al usuario avanzado ejecutar sus propias aplicaciones en segundo plano en la WebTV. Para su utilización es necesario tener ciertos conocimientos sobre Linux.
Las aplicaciones se ejecutan en un entorno chroot, con usuario default:default (1000:1000).

Material necesario
  1. Pendrive o disco USB.
  2. PC con alguna distribución de Linux instalada.

Preparando el entorno
Para ejecutar una aplicación en segundo plano es necesario seguir los siguientes pasos. Nótese que estamos trabajando en un PC Linux (no en WebTV):
  1. Formatear el pendrive o disco USB en ext3 (vfat podría funcionar pero dado que no maneja enlaces simbólicos la integración sería mucho más difícil). Podéis seguir estos pasos si dudáis sobre cómo hacerlo.
  2. Crear un directorio llamado bg_apps en su directorio raíz. Éste será el directorio raíz para el sistema de archivos bajo el chroot.
  3. Poblar el sistema de archivos y crear un script o ejecutable llamado init (ver más abajo).
  4. Probar la aplicación y depurar el sistema de archivos si se necesita (ver más abajo).
Lo más cómodo es utilizar el archivo bg_apps.template.tgz adjunto a este documento, que al ser descomprimido en el directorio raíz del dispositivo USB genera una estructura básica a utilizar como punto de partida:
Código: Seleccionar todo
bg_apps/
bg_apps/bg_apps_install_pc.sh
bg_apps/init

El script bg_apps_install_pc.sh permite instalar paquetes directamente desde el repositorio Debian. Es un script pensado para ser ejecutado directamente en el PC. La distribución lenny-mipsel es plenamente compatible con WebTV. Es importante hacer notar que este script necesita que se tenga instalado el paquete alien en nuestro sistema Linux.
Alternativamente, también se puede hacer uso del adjunto bg_apps.template.webtv.tgz, que es similar al anterior pero además incluye un script a mayores llamado bg_apps_install_webtv.sh que está pensado para ser ejecutado directamente en WebTV (pero que será severamente más lento)
El script init de ejemplo lanza un servidor telnet en el puerto 3333 para facilitar la depuración.

Contenidos por defecto del sistema de archivos y proceso de inicio
Cuando se inserta el disposito USB en la WebTV se crean varios archivos de forma automática:
Código: Seleccionar todo
/lib
/bin
/dev:
     zero null random urandom tty ptmx pty* pts*
/etc:
    resolv.conf passwd group
/home
/usr/bin

Además, los siguientes directorios se montan desde el sistema de archivos principal de la WebTV:
Código: Seleccionar todo
/proc
/dev/pts

Por defecto, si no se encuentra el archivo bg_apps/no_base_system en el USB, se copian también los archivos básicos del sistema:
Código: Seleccionar todo
/bin:
    bash cat catv chmod cp date echo egrep false fgrep getopt grep
    gunzip gzip hostname ip kill ln ls mkdir mktemp more mountpoint mv
    netstat nice pidof ping ping6 printenv ps pwd rm rmdir run-parts sed sh
    sleep stat stty sync tar touch true uname usleep vi watch zcat
/lib
    ld-2.8.so               libm-2.8.so            libnss_nis.so.2
    ld.so.1                 libmemusage.so         libpcprofile.so
    libanl-2.8.so           libm.so.6              libpthread-2.8.so
    libanl.so.1             libncurses.so          libpthread.so.0
    libBrokenLocale-2.8.so  libncurses.so.5        libresolv-2.8.so
    libBrokenLocale.so.1    libncurses.so.5.2      libresolv.so.2
    libc-2.8.so             libnsl-2.8.so          librt-2.8.so
    libcidn-2.8.so          libnsl.so.1            librt.so.1
    libcidn.so.1            libnss_compat-2.8.so   libSegFault.so
    libcom_err.so           libnss_compat.so.2     libssl.so
    libcom_err.so.2         libnss_dns-2.8.so      libssl.so.0.9.8
    libcom_err.so.2.1       libnss_dns.so.2        libstdc++.so
    libcrypt-2.8.so         libnss_files-2.8.so    libstdc++.so.6
    libcrypto.so            libnss_files.so.2      libstdc++.so.6.0.10
    libcrypto.so.0.9.8      libnss_hesiod-2.8.so   libthread_db-1.0.so
    libcrypt.so.1           libnss_hesiod.so.2     libthread_db.so.1
    libc.so.6               libnss_nis-2.8.so      libutil-2.8.so
    libdl-2.8.so            libnss_nisplus-2.8.so  libutil.so.1
    libdl.so.2              libnss_nisplus.so.2
/usr/bin:
    [ [[ awk basename chvt cksum clear cmp crontab cut deallocvt diff
    dirname dos2unix du env expr find fold ftpget fuser head hexdump hostid
    id install ipcrm ipcs killall killall5 last length less logger logname
    md5sum mesg mkfifo nohup nslookup od openvt printf readahead readlink
    realpath renice reset resize seq setsid sha1sum sort strings sum tail
    taskset tee telnet test tftp time top tr traceroute tty uniq unix2dos
    uptime vlock wc wget which who whoami xargs yes

El propietario del sistema de archivos se cambia recursivamente a default:default, y finalmente se lanza el ejecutable init utilizando chroot.

Poblando el sistema de archivos
El usuario debe proporcionar todos los archivos necesarios para que la aplicación funcione (excepto los creados automáticamente).
Por simplicidad, se recomienda el uso del script bg_apps_install_pc.sh (desde un PC), que permite añadir nuevos paquetes Debian obteniéndolos de los repositorios online y descomprimiéndolos adecuadamente en el sistema de ficheros a poblar:
Código: Seleccionar todo
Uso: bg_apps_install_pc.sh (<archivo .deb>|<nombre del paquete>)

Alternativamente, también se pueden instalar estos paquetes de los repositorios Debian desde WebTV mediante el script alternativo bg_apps_install_webtv.sh, cuyo modo de uso es equivalente al anterior. Esta opción es funcional pero no recomendada ya que será mucho más lenta que la versión para correr en PC.
Una vez instalados todos los paquetes necesarios, se deben crear o editar los archivos de configuración que la aplicación necesite.
Finalmente, se debe añadir el script /bg_apps/init para lanzar la aplicación. Este script podría parecerse a:
Código: Seleccionar todo
#!/bin/bash -x

exec &>/bg_apps.log

export LD_LIBRARY_PATH=/usr/lib
export HOME=/home

busybox telnetd -p 3333 -F -l /bin/bash &  # Para depuración: eliminar si no se necesita

# Poner aquí los comandos que se quieren lanzar

exit 0

El script anterior tiene la depuración activada (-x) para facilitar la fase de prueba. Al ejecutarse creará el archivo /bg_apps/bg_apps.log con información útil. Además, se podrá acceder al sistema chroot desde el PC con:
Código: Seleccionar todo
telnet <IP de la WebTV> 3333


Probando la aplicación
Con todos los archivos necesarios en el dispositivo USB se puede comenzar la fase de prueba y depuración.
  1. Conectar el USB a la WebTV.
  2. En el PC, abrir la interfaz web de acceso remoto en un navegador: http://<IP de la WebTV>
  3. Ir a la sección External apps. Ahí se pueden ver los procesos que se ejecutan el segundo plano y es posible matarlos si se quiere.
  4. Abrir una conexión telnet al sistema chroot (ver apartado anterior).
  5. Probar y finalizar la instalación.
También se puede compartir el directorio bg_apps desde la interfaz de acceso remoto. Así este directorio se puede montar por NFS en el PC para editar sus contenidos cómodamente:
Código: Seleccionar todo
mount -t nfs <IP WebTV>:/mnt/by-id/<ID USB>/bg_apps /mnt/bg_apps


Solución de problemas (depuración del sistema de archivos)

La sección External apps no aparece en la interfaz web de acceso remoto
  • Comprobar que el archivo /bg_apps/init existe en el dispositivo USB y tiene permiso de ejecución.

No aparece ningún proceso listado en la sección External apps de la interfaz web de acceso remoto
  • Comprobar si se ha creado un log de error /bg_apps/bl_error.log en el dispositivo USB y examinar su contenido.
  • Si el script init tiene un log de error examinarlo (bg_apps.log en nuestro ejemplo).
  • Si aún así no se tiene suficiente información, modificar el script init para escribir más mensajes de depuración.
Fallos comunes son dependencias incumplidas en el sistema de archivos, archivos de configuración incorrectos o parámetros de línea de comandos incorrectos.

Al usar python los paquetes instalados no se encuentran
Ejecutar update-python-modules desde el acceso telnet.

Las librerías no se encuentran o fallan
Probar a ejecutar ldconfig desde el acceso telnet o ldconfig -N -r <ruta al directorio bg_apps> en el PC. Esto creará los enlaces simbólicos a las librerías que sean necesarios.
Adjuntos
bg_apps.template.webtv.tgz
Versión con script para ejecutar en WebTV
(1.4 MiB) 787 veces
bg_apps.template.tgz
Versión con script para ejecutar en PC (recomendada)
(1.47 KiB) 788 veces
alex
 
Mensajes: 1390
Registrado: Jue Dic 02, 2010 11:59 am

Re: [HOW-TO] WebTV: Aplicaciones en Segundo Plano

Notapor raster » Mié Jun 15, 2011 1:18 am

He intentado hacerlo en un disco duro externo con varias particiones, y no funciona. ¿Funciona si el directorio se pone en otra partición que no sea la primera? Gracias.
raster
 
Mensajes: 356
Registrado: Dom Jun 12, 2011 10:24 pm

Re: [HOW-TO] WebTV: Aplicaciones en Segundo Plano

Notapor alex » Mié Jun 15, 2011 9:34 am

El hecho de que existan varias particiones no supone un problema, ya que cada una se trata como si fuese un disco diferente.
¿Le has echado un ojo al apartado de Solución de Problemas a ver si te aclara algo?
Un saludo, gracias.
alex
 
Mensajes: 1390
Registrado: Jue Dic 02, 2010 11:59 am

Re: [HOW-TO] WebTV: Aplicaciones en Segundo Plano

Notapor raster » Jue Jun 16, 2011 2:00 am

Hola de nuevo:

He hecho varias pruebas y la verdad es que el resultado es, cuanto menos, chocante:

Si pongo vuestros archivos en un pincho flash, funciona todo perfectamente.

Sin embargo, si los pongo en un disco duro externo, no. Lo he probado con dos diferentes, uno de 500GB y otro de 1TB. Probé incluso a hacer una partición de 1 GB al principio, a ver si era algo del tamaño de bloque del sistema EXT3, o así, y lo mismo: no funciona.

Probé con varias particiones tanto en el pincho como en los discos duros, y lo mismo: en el pincho va, en los discos duros no.

He comprobado los permisos de los ficheros y de los directorios abriendo dos terminales, uno junto a otro, y comparando los del pincho y los de la unidad de disco duro: son exactamente iguales, pero el pincho flash ejecuta la aplicacion, mientras que el disco duro no :?

Por supuesto, las tres unidades son reconocidas perfectamente por el WebTV, y puedo navegar por ellas sin problemas; la única diferencia es que en los discos duros externos se niega a ejecutar la aplicación en segundo plano, mientras que en la unidad Flash sí lo hace.

También he probado apagando y encendiendo la WebTV antes de cada prueba, y lo mismo.

Sinceramente, no lo entiendo.

Un saludo.
raster
 
Mensajes: 356
Registrado: Dom Jun 12, 2011 10:24 pm

Re: [HOW-TO] WebTV: Aplicaciones en Segundo Plano

Notapor alex » Jue Jun 16, 2011 9:29 am

Hola raster,
Pues sí que es misterioso tu problema. Honestamente no conocíamos este problema y no se nos ocurre una buena hipótesis, así que lo que vamos a hacer es probar con un HDD también nosotros a ver si nos pasa y luego te comento, ¿ok?
Un saludo
alex
 
Mensajes: 1390
Registrado: Jue Dic 02, 2010 11:59 am

Re: [HOW-TO] WebTV: Aplicaciones en Segundo Plano

Notapor raster » Jue Jun 16, 2011 2:19 pm

Gracias.

Por cierto, una sugerencia: sería interesante que en el entorno chroot existiese un directorio /media, con acceso a todas las unidades montadas (o, al menos, a la misma unidad en la que está la aplicación en segundo plano). La idea es que dicha aplicación pueda acceder a todo el disco duro, y no sólo al directorio bg_apps.

No se si puede ser un problema de cara a seguridad (ya leí el hilo sobre la clave SSH), pero dado que hablamos sólo de acceder al disco externo en sí, en el que está la propia aplicacion, y no a todo el sistema, no debería ser un problema ¿no?

Un saludo.
raster
 
Mensajes: 356
Registrado: Dom Jun 12, 2011 10:24 pm

Re: [HOW-TO] WebTV: Aplicaciones en Segundo Plano

Notapor raster » Vie Jun 17, 2011 10:09 pm

Ah, y otra sugerencia es que si se detecta una partición swap en un disco externo, activarla. Puede venir bien para picos de trabajo, por ejemplo si utilizamos Periscope (que está escrito en python) para buscar subtítulos de una película.

Un saludo.
raster
 
Mensajes: 356
Registrado: Dom Jun 12, 2011 10:24 pm

Re: [HOW-TO] WebTV: Aplicaciones en Segundo Plano

Notapor alex » Lun Jun 20, 2011 12:55 pm

Ok, raster, anoto estas sugerencias y se las hago saber a nuestro experto en este campo, a ver qué se puede hacer.
Gracias.
alex
 
Mensajes: 1390
Registrado: Jue Dic 02, 2010 11:59 am

Re: [HOW-TO] WebTV: Aplicaciones en Segundo Plano

Notapor marcelinomd » Lun Dic 12, 2011 11:35 am

alex escribió:Ok, raster, anoto estas sugerencias y se las hago saber a nuestro experto en este campo, a ver qué se puede hacer.
Gracias.


Un minimo de usabilidad para las aplicaciones en este modo es poder montar las unidades si no mal vamos, por que si me quiero montar el chroot en la memoria usb y acceder a un disco duro usb con ntfs para mantener la portabilidad con el equipo con windows de mi mujer estamos en un problema.
marcelinomd
 
Mensajes: 11
Registrado: Vie Dic 09, 2011 5:53 pm

Re: [HOW-TO] WebTV: Aplicaciones en Segundo Plano

Notapor alex » Lun Dic 12, 2011 7:59 pm

marcelinomd escribió:
alex escribió:Ok, raster, anoto estas sugerencias y se las hago saber a nuestro experto en este campo, a ver qué se puede hacer.
Gracias.


Un minimo de usabilidad para las aplicaciones en este modo es poder montar las unidades si no mal vamos, por que si me quiero montar el chroot en la memoria usb y acceder a un disco duro usb con ntfs para mantener la portabilidad con el equipo con windows de mi mujer estamos en un problema.

Correcto :?
Estas aplicaciones han quedado un poco en segundo plano (jaja, no pretendía hacer un juego de palabras) dado a la popularidad de las aplicaciones javascript, pero está claro que hay que darles un empujos a estas también.
Un saludo.
alex
 
Mensajes: 1390
Registrado: Jue Dic 02, 2010 11:59 am

Siguiente

Volver a Guías y tutoriales - Guides and tutorials

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados