Bueno, después de más de cuatro meses de penurias y fustración por fin puedo decir que he conseguido hacer cumbre, he tenido que deshacerme del minotauro y de Medusa en la travesía, pero ya está, he alcanzado el objetivo y además puedo contarlo

.
Tras romperme la cabeza y descubrir, parafraseando al gran inventor Thomas Edison, 99 formas de como no se enciende una bombilla, encontré la forma de poder iniciar un programa automáticamente al inico del SO NOOBS.
Como suele ocurrir casi como norma general en prácticamente cualquier proyecto, al final encontré la solución de pura chiripa mientras buscaba información sobre otra cosa y en la que, de forma totalmente casual, alguién explicaba un script con el dichoso formato LSB para ejecutar otro programa. Al fijarme vi que había una pequeñísima diferencia entre su script y el mío...
Tras repasarlo un par de veces y viendo que no era mucho trabajo me dije que por qué no, ya de perdidos...
Así que modifiqué mi script y simplemente ¡funcionó! Hay estaba el cliente solicitando la contraseña de acceso a la RB conectada por red. Como no me lo creía ni un ápice volví a reiniciarla un par de veces, y sí, podía conectarme directamente por red de forma remota, sin pantalla, ni teclado y ratón.
Debería haber sido un momento mágico, haberme envuelto una luz blanca y sentirme en el paraíso, pero no fue así, después de tantos quebraderos de cabeza, de que la realidad no se ajustara a la lógica y, especialmente, descubrir que el problema era una absoluta chorrada, provocó que en vez de sentirme uno con el universo se me quedara una cara de *$%*& de tres pares de narices.
Por que el asunto no es que escribiese mal alguna instrucción, que el formato del script estuviese mal o que el archivo no estuviese en el sitio correcto, ¡que va! el gran y profundo problema es que las instrucciones no llevaban la p**** orden 'sudo' delante...
Así es, tengo un script con el formato LSB, almacenado en un directorio de sistema con los permisos de creación y ejecución que he incluido con las correspondientes ordenes root en el arranque del sistema, pero no, no es suficiente para Linux.
No basta con que el archivo esté guardado en un directorio de sistema y que esté incluido en la lista de programas de inicio, no, además en el script hay que ponerle que las ordenes se realizarán en modo root.
No basta con superar al Minotauro (carpeta init.d) y a la Medusa (update-rc) que aún por encima tienes que enfrentarte a ellos solo con las armas homologadas (formato LSB).
Así que miedito me da lo que esté por venir si para ejecutar un programa de forma automática hay que hacer todo esto, que será lo que habrá que hacer para conectarse a una base de datos o algo similar...
Bien, aquí dejo el relato sobre mi hazaña, agradecer a todos los que han colaborado y me han ayudado y apiadarme de aquellos infelices que tengan que enfrentarse a este reto.
¡Saludos!
COMO INICIAR DE FORMA AUTOMÁTICA UN PROGRAMA AL ARRANCAR RASPBERRY PI 2 (RB) CON EL SISTEMA OPERATIVO (SO) NOOBS
AVISO: El método aquí descrito puede provocar que el acceso a la tarjeta por red quede abierto y las conexiones creadas no son seguras.
Utilizar sin conexión a Internet y en modo de usuario estándar, nunca como SuperUsuario / Administrador (root).
Es responsabilidad particular de cada uno seguir los métodos aquí indicados, así como de las consecuencias que puedan derivar de su puesta en práctica.
OBJETIVO
En este documento se explica como arrancar el servidor de red Tight VNC de forma automática al iniciar el SO NOOBS en una RaspBerry Pi 2.
El objetivo es no tener que depender de una pantalla con HDMI, que no están tan extendidas como las VGA, ni tener que necesitar un teclado y un ratón propios para la tarjeta, con el espacio y puertos USB que ocupan.
El servidor de red Tight VNC permite conectarse remotamente a través de una red con la tarjeta RB desde un ordenador con un cliente de red, como VNC Viewer o VNC LAN.
Así, basta con conectar el portátil y la tarjeta con un cable de red y ya se puede acceder y trabajar con la RaspBerry Pi.
PROCESO
1 – Crear el archivo de script en Bash con el formato LSB (Linux Standard Base):
El LSB es un nuevo formato estándar para ficheros de sistema de Linux creado hace unos años.
Este nuevo estándar establece un formato para todos los archivos de sistema, incluidos los archivos de script Bash, o por bloques, los cuales deben llevar un encabezado y finalizar con la orden ‘exit’, al menos los archivos simples.
A mayores, estos encabezados disponen de sus propios parámetros e instrucciones, en exit solo parámetros numéricos.
Descripción de los parámetros (en inglés) del Script en lenguaje Bash con el formato LSB:
https://wiki.debian.org/LSBInitScripts (en inglés).
Más información en
https://es.wikipedia.org/wiki/Linux_Standard_Base
En el script Bash adjunto se muestra un archivo de script Bash con un formato básico de LSB, ya que “simplemente” se va a llamar a un programa.
Ver Adjunto.
2 – Añadir el archivo Bash en la carpeta '/etc/init.d': Se debe guardar el script en esta carpeta para que se inicie el servidor al arrancar el SO.
Consejo: En caso de dificultades una buena manera de crear el archivo Bash es copiar otro Bash existente en el directorio, cambiarle el nombre y modificarlo.
2.1 – Incluir el archivo Bash en la orden de arranque de NOOBS:
No basta con crear el archivo Bash en el directorio ‘/etc/init.d’, hay que incluirlo en los programas de inicio del SO con las siguientes instrucciones (sin las comillas):
‘sudo chmod 755 /etc/init.d/nombredetuscript’
‘sudo update-rc.d NombreDelScript defaults’
ADJUNTO: ARCHIVO SCRIPT BASH CON FORMATO LSB
Code: Select all
#! /bin/sh
### BEGIN INIT INFO
# Provides: VNC
# Enconding: UTF-8
# Required-Start:
# Required-Stop:
# Should-Start:
# Default-Start: S
# Default-Stop:
# Short-Description: Prueba de inicio automatica del servidor #Tight VNC.
# Description: Se desea arrancar automaticamente el servidor
#Tight VNC para su acceso remoto para evitar tener
#que utilizar una pantalla, teclado y raton propios.
#
# X-Interactive: true
### END INIT INFO
sudo PATH=/etc; /etc/init.d; /usr; /usr/bin
sudo ./usr/bin/vncserver
exit 0
Nada de acentos, eñes ni símbolos especiales.
Muy importante: Poner 'exit' al finalizar el script y en la línea de cabecera el enconding que sea UTF-8, para que soporte diferentes idiomas, incluido el español.
El parámetro 'X-Interactive: true' establece que el programa que se ejecuta en el script tendrá ejecución interactiva con el usuario, como, por ejemplo, solicitar una contraseña, cosa que hace Tight VNC. Lo he puesto por si acaso, ya que no sé si es necesario.
'Provides' identifica al script y creo que también se utilizar para pasarle parámetros de ejecución, ya que no tiene por que tener el mismo nombre que el script.
Al igual que en los nombres de archivos, no puede haber dos scripts con el mismo nombre, de ahí que haya llamado 'vnc-2.sh' tanto al archivo como en el parámetro.
La clave es que pare arrancar el programa, cambiar de carpeta o cualquier instrucción a realizar debe llevar delante la orden ‘sudo’,
sino NO funciona.
Más información de los parámetros LSB de un archivo script Bash en:
El parámetro 'X-Interactive: true' establece que el programa que se ejecuta en el script tendrá ejecución interactiva con el usuario, como, por ejemplo, solicitar una contraseña, cosa que hace Tight VNC. Lo he puesto por si acaso, pero no sé si es necesario.
'Provides' identifica al script y creo que también se utilizar para pasarle parámetros de ejecución, ya que no tiene por que tener el mismo nombre que el script.
Al igual que en los nombres de archivos, no puede haber dos scripts con el mismo nombre, de ahí que haya llamado 'vnc-2.sh' tanto al archivo como en el parámetro.
Más información de los parámetros LSB de un archivo script Bash en:
Descripción de los parámetros (en inglés) del Script en lenguaje Bash con el formato LSB:
https://wiki.debian.org/LSBInitScripts (en inglés).
Más información en
https://es.wikipedia.org/wiki/Linux_Standard_Base
NOTAS: La cuenta de SuperUsuario / Administrador (root) dispone de la contraseña. En este caso es la estándar de RB.
Etiquetas: Iniciar, inicio, arrancar, arranque, automático, automática, automáticamente.