Ocultar totalmente Grub al arrancar en sistemas Linux

Hace poco he tenido que poner en marcha un PC industrial con un linux y necesitamos optimizar el arranque lo máximo posible puesto que va a ser un sistema de tiempo real.

Este PC llevaba instalado lubuntu con GRUB activado y una vez pasado GRUB el PC iniciaba en un tiempo bastante reducido (menos de 10 segundos) así que lo que había que hacer era ocultar GRUB al arranque para poder conseguir menor tiempo de arranque, quitarlo es realmente sencillo, ya sea mediante fichero de configuración o mediante algún programa especializado en ello.

El problema apareció cuando en determinadas pruebas de rendimiento (en donde cortabamos la corriente varias veces) GRUB seguía apareciendo y no solo eso, sino que esta vez no había un temporizador de modo que si pasan X segundos GRUB elige la entrada por defecto, es decir, GRUB no desaparecia si no era por la acción humana en estas determinadas ocasiones.

Esto solía ocurrir cuando se cortaba la corriente justo después de que apareciese la BIOS pero antes de que cargase el Sistema Operativo.

La explicación a esto es que cuando el sistema se apaga incorrectamente se activa un bit en GRUb llamado recordfail que hace que si el sistema se apaga incorrectamente se muestre GRUB y sea necesaria la acción humana para pasar de GRUB (esto lo descubrí ojeando los script de GRUB).

Estuve buscando programas que modificasen ese bit pero creo que no hubo ninguno que sirviese para tal fin. Así que lo que hice inicialmente fue modificar los script de inicio de GRUB para borrar cualquier mención a ese bit. Pero posteriormente encontré las opciones especificas para poder modificarlo desde un fichero de configuración. Para ello hay que modificar el fichero /etc/default/grub y que la primera parte coincida con:

La opción para deshabilitar el recordfail es GRUB_RECORDFAIL_TIMEOUT="0"

Después de modificar este fichero hay que ejecutar el comando:

update-grub

Bittorrent Sync y como mapear direcciones en el router D-Link DSR-500N

Hace un tiempo estuvbe configurando una red Bittorrent Sync para ver si la empresa en la que trabajo debería emplear este servicio o no.

Bittorrent Syc es parecido a Dropbox en el sentido de que la información será clonada en cada ordenador autorizado, la diferencia es que la información no es subida a la nube, simplemente será almacenada en cada ordenador que esté en posesión de la Clave Secreta.

Así que instalé el cliente de Bittorrent sync en mi ordenador del trabajo (con Windows) y en un ordenador industrial que funciona gracias a Linux. La instalación del cliente de Windows es muy simple, bajas el instalador y lo ejecutas. Sin embargo la instalación del cliente de linux es un poco más compleja (como suele pasar) pero no mucho más. Debemos bajar el fichero tar.gz para nuestra arquitectura (i386 en mi caso), después debemos extraer los ficheros (tar xvzf btsync_i386.tar.gz) y por ultimo ejecutar btsync (./btsync).

El cliente de windows tiene una interfaz de usuario de escritorio para administrar las carpetas compartidas pero el cliente lunix no tiene una interfaz de usuario de escritorio, sino que la tiene via web y se puede acceder mediante la siguiente dirección:

http://localhost:8888/gui/

Dentro de mi red local toda persona podrá acceder a dicha interfaz introduciendo la siguiente dirección en el navegador:

http://YOUR_LOCAL_IP:8888/gui/

El problema es que mi ordenador estba detrás de un router DSR-500N (Solo mi ordenador está conectado a este router, los demás trabajadores de la empresa están conectados directamente con la red de la empresa, por tanto necesito mapear la dirección IP del router con la del cliente Linux. Para conseguir esto seguí los siguientes pasos:

Paso 1: Click en la pestaña Advanced tab y selecciona Firewall Settings > Firewall Rules.

Paso 2: Click en Add.

Paso 3: Creamos una regla nueva:

From Zone: Insecure (WAN)
To Zone: Secure (LAN)
Service: HTTP
Action: Always Allow

Internal IP address: IP of local machine hosting service
Enable Port Forwarding: unchecked
Translate Port Numbers: Leave Unchecked
External IP address: Dedicated WAN

Paso 4: Click en Save Settings

Ahora los demás trabajadores pueden acceder a la interfaz web del cliente Linux.

Video streaming con VLC y HTML5

Hace un tiempo estuve investigando como hacer un streaming de video con VLC hacia una página web.

Para llevar a cabo esto necesite ejecutar VLC con el siguiente comando (ejecutado sobre linux) para poder capturar la pantalla, transcodificarla y enviarla al host local por el puerto 8181.

vlc screen:// --screen-left=67 --screen-top=53 --screen-width=800 --screen-height=600 --screen-fps=30 --sout '#transcode{vcodec=theo,vb=800,scale=0.25,width=800,height=600,acodec=none}:http{mux=ogg,dst=:8181/}' --ttl=3

 

Por otra parte necesité montar una pequeña página web para visualizar el streaming. Para hacer esto usé la etiqueta video de HTML5. Esta etiqueta tiene un atributo llamado source donde se especifica la fuente desde la que se quiere reproducir, así que especifiqué http://localhost:8181/ como fuente.

Ahora si abro http://localhost:8181/ en el navegador puedo ver mi propia pantalla en la página web.

Si quisiese visualizar video desde una tarjeta capturadora debería usar dshow:// en vez de screen:// en el comando VLC ejecutado anteriormente.