VDR para el Siemens Gigaset M740/M750
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.
Proyecto movido a GitHub

Miér 7 Abr 2021 - 19:23 por bittor

Comentarios: 0

Buscar
 
 

Resultados por:
 


Rechercher Búsqueda avanzada

Flujo RSS


Yahoo! 
MSN 
AOL 
Netvibes 
Bloglines 



Mejoras arranque Mediatomb

2 participantes

Ir abajo

Mejoras arranque Mediatomb Empty Mejoras arranque Mediatomb

Mensaje por alazan Mar 19 Ene 2021 - 20:36

Hola a todos,

Quería contribuir con un granito de arena con una pequeña "peora" Very Happy en el arranque del Mediatomb de nuestro querido VDR.

Me explico, si no estoy equivocado actualmente el mediatomb requiere para su arranque, además de activarlo en la variable mediatomb_start del rc.local.conf, el que tengamos activo un disco en uno de los puertos USB (primero comprueba si está activo el sda1 y en caso negativo lo intenta con el sda2). El script que se ejecuta en el arranque es /usr/bin/start_mediatomb

Las comprobaciones de estos dispositivos se reintentan un máximo de 10 veces dejando tres segundos entre comprobación y comprobación. O eso es lo que aparentemente se pretende, pero hay una errata y si no se cumplen las condiciones (no hay ningún disco conectado a los puertos usb, aunque el mediatomb se activó en el rc.local.conf) el script se queda "eternamente" reintentando. Ello es debido a que la sentencia:
Código:
if [ ! -z $DISK_VOLUME -o $NUM_CYCLES -eq 10 ]; then

debería ser:

Código:
if [ ! -z "$DIR_MOUNT" -o ${NUM_CYCLES} -eq 10 ]; then
es decir, la variable que se comprueba si es nula debe ir entrecomillada. Hay casos en los que esto no es imprescindible, pero sí en este caso. Yo cuando tengo que preguntar con -z o -n, siempre las entrecomillo para evitar tener problemas.

Al margen de esta pequeña errata, esta configuración excluye el uso como medio para grabar/reproducir un disco conectado por red y en caso de que tengamos dos discos pinchados por cualquier circunstancia, siempre será el sda1 el que tomará para almacenar la información con la base de datos que requiere el mediatomb.

En realidad fue así como me di cuenta de la errata que antes mencioné, por razones varias, he decidido quitar el disco que utilizaba con el Giga (lo requiero para otra cosa) y utilizar una carpeta de red a la que accedo con CIFS. Me di cuenta que el mediatomb no me funcionaba y tirando, tirando del hilo, fue cuando descubrí este script y además me di cuenta que se quedaba en un bucle infinito porque la condición de finalización no se cumplía por el problema que he mencionado. De paso vi que nunca tendría en cuenta mi directorio de red.

He creado un nuevo script que como no puede sustituir al anterior puesto que está en una partición read only, lo he colocado en /etc/mediatomb/start_mediatomb y he modificado rc.local.net, para que el directorio de arranque del script sea /etc/mediatomb/ en vez del /usr/bin/

Este nuevo script lo he basado en el directorio de grabaciones que tenemos configurado en la variable vdr_videodirs del rc.local.conf. Es decir, si dicha variable no es nula, compruebo si ese directorio está montado en "algún sitio", ya sea un disco conectado a USB (con independencia de que sea el sda1 o el sda2) o en red. Por lo demás, hago una comprobación similar a la anterior, es decir, entro en un bucle para dar tiempo a los retardos que pueda haber en los montajes (pero corrigiendo la errata claro). El resto es prácticamente igual a lo que hacía el anterior script (he añadido un mensaje al log cuando todo ha ido bien indicando que el mediatomb ha quedado activo).

A mi me está funcionando bien y si os agrada la idea y dado que según indicó bittor tiene pensado liberar una nueva versión, quizá pueda ser interesante utilizarlo, o tomarlo como base con los cambios que se os ocurran, para incluirlo en la nueva versión.

Un saludo a todos y ¡larga vida a nuestros Gigas! Very Happy Very Happy



Adjunto el script completo:
Código:
#!/bin/ash

set -o nounset

CONTINUE_WAITING="TRUE"
NUM_CYCLES=0

VIDEO_DIR=$(grep vdr_videodirs= /etc/rc.local.conf 2>/dev/null | cut -d'"' -f2)

if [ -z "${VIDEO_DIR}" ]; then
    logger -s -p user.err Mediatomb necesita la configuracion del directorio de videos
    exit 1
fi

while [ $CONTINUE_WAITING == "TRUE" ]; do

    DIR_MOUNT=$(mount | grep $VIDEO_DIR 2>/dev/null | cut -d' ' -f1)
    if [ ! -z "$DIR_MOUNT" -o ${NUM_CYCLES} -eq 10 ]; then
        CONTINUE_WAITING="FALSE"
    else
        NUM_CYCLES=$(expr $NUM_CYCLES + 1)
        sleep 3
    fi
done

if [ -z "$DIR_MOUNT" ]; then
    logger -s -p user.err Mediatomb no dispone del directorio de los videos
    exit 1
fi

if [ ! -d $VIDEO_DIR/mediatomb ]; then
    mkdir $VIDEO_DIR/mediatomb || exit 2
fi

if [ ! -f $VIDEO_DIR/mediatomb/mediatomb.db ]; then
    cp /etc/mediatomb/mediatomb.db $VIDEO_DIR/mediatomb/mediatomb.db
fi

cp /etc/mediatomb/config.xml $VIDEO_DIR/mediatomb/

/usr/bin/mediatomb -p 49152 -m $VIDEO_DIR -f mediatomb -P /var/run/mediatomb.pid &

logger -s -p user.info El servicio Mediatomb queda activado
alazan
alazan

Cantidad de envíos : 10
Fecha de inscripción : 17/11/2012
Localización : Madrid

Volver arriba Ir abajo

Mejoras arranque Mediatomb Empty Re: Mejoras arranque Mediatomb

Mensaje por bittor Jue 21 Ene 2021 - 17:39

Hola,

el script "start-mediatomb" lo modifiqué hace años para poder usar discos de red, pero fue posterior a la versión 0.7 (por eso tienes la versión vieja).
¿Puedes bajarte la versión actualizada de aquí y decirme si te funciona correctamente?

A ver si la semana que viene termino de hacer el traspaso a GitHub con todos los cambios que tengo pendientes.

Uno de los cambios tiene que ver con ese script porque he extraído la parte que establece la variable del directorio de grabación en otro script para poder usarlo desde otros scripts para guardar datos relativos con la EPG.
bittor
bittor
Desarrollador

Cantidad de envíos : 3661
Fecha de inscripción : 25/06/2008
Localización : Zaragoza

https://github.com/bittor7x0/VDR-M7x0

Volver arriba Ir abajo

Mejoras arranque Mediatomb Empty Re: Mejoras arranque Mediatomb

Mensaje por alazan Jue 21 Ene 2021 - 23:29

¡Vaya, estoy desfasado! Smile 

He probado el script que me indicas y tiene alguna pequeña errata. He tenido que poner alguna traza para ver el problema.

El dispositivo de red no estaba disponible cuando se intenta el arranque del mediatomb. Eso no debería representar un problema porque se supone que está prevista esa circunstancia y hace hasta diez reintentos.

La pega es que debido a la sentencia "set -o nounset", si una variable no se ha definido previamente no estará disponible ni para preguntar si tiene contenido, ello provoca un error que detiene el script.

Y eso precisamente lo que ocurre cuando en la primera iteración del bucle, al no estar la red disponible, tampoco lo está el directorio y a la variable DISK_VOLUME no se le dará valor, luego al preguntar si dicha variables está vacía en if [ ! -z $DISK_VOLUME ]; then, se produce un error y finaliza la ejecución.

Para evitarlo, he inicializado la variable al inicio del script con DISK_VOLUME=""

De todas formas, al volver a probar, ha seguido sin funcionar porque parece ser que en la shell "ash" da algún problema la sentencia for i in {1..10}; do (aunque en bash si funciona correctamente).

Reconozco que no me he complicado mucho la vida, he sustituido esa sentencia por for i in 1 2 3 4 5 6 7 8 9 10; do ¡y así ya ha funcionado! En la segunda iteración del bucle el directorio ya está disponible y el mediatomb arranca con normalidad.

Lo que si sugiero en cualquier caso es mandar un mensajito al log indicado que el mediatomb se arranca cuando ello se produzca, así si se está analizando alguna situación extraña, en el log veremos que se ha producido esa circunstancia, por si fuera importante.

¡¡Gracias por tu ayuda bittor!!
alazan
alazan

Cantidad de envíos : 10
Fecha de inscripción : 17/11/2012
Localización : Madrid

Volver arriba Ir abajo

Mejoras arranque Mediatomb Empty Re: Mejoras arranque Mediatomb

Mensaje por bittor Vie 22 Ene 2021 - 17:53

Gracias por probarlo tan rápido.

Supongo que los errores que te ha dado ha sido porque el BusyBox es otra versión y ash también.

En la nueva versión he actualizado todos los programas, entre ellos BusyBox, así que a ver si la semana que viene subo una versión para probarla y detectar errores o mejorarla.
bittor
bittor
Desarrollador

Cantidad de envíos : 3661
Fecha de inscripción : 25/06/2008
Localización : Zaragoza

https://github.com/bittor7x0/VDR-M7x0

Volver arriba Ir abajo

Mejoras arranque Mediatomb Empty Re: Mejoras arranque Mediatomb

Mensaje por alazan Vie 22 Ene 2021 - 19:11

Buenas tardes Bittor,

es muy probable que como indicas, el problema del "for" se solucione con otra versión del busybox, puesto que como comenté al menos en bash la sintaxis que has utilizado funcionaría correctamente.

Pero mucho me temo que lo de inicializar la variable sí has de hacerlo, puesto que el comportamiento es precisamente el que se espera si utilizas "set -o nounset".

Como ya te indiqué cuando me ayudaste a recuperar mi VDR, si necesitas colaboración con la nueva versión (pruebas, sugerencias, ..., y todo aquello que buenamente pueda) estoy a tu disposición.

¡¡Disfruta del fin de semana!!
alazan
alazan

Cantidad de envíos : 10
Fecha de inscripción : 17/11/2012
Localización : Madrid

Volver arriba Ir abajo

Mejoras arranque Mediatomb Empty Re: Mejoras arranque Mediatomb

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.