Modificar el SO en un NAS Netgear ReadyNas Pro 4 RNDP4000

El Netgear Ready Nas Pro 4 utiliza una estructura x86 al disponer de una CPU Intel Atom D510 en su interior, de forma que si disponemos de las herramientas necesarias deberíamos poder instalar cualquier sistema operativo basado en 32 y 64bits en el NAS.

Dejo una recopilación de links de interés sobre el mismo tema, pero en modelos distintos de Netgear:
https://nerdyness2012.wordpress.com/2015/03/31/installing-ubuntu-14-10-server-on-a-netgear-readynas-ultra-duo-v2/
http://www2.warwick.ac.uk/fac/sci/csc/people/computingstaff/jaroslaw_zachwieja/readynaspro-jailfix/
http://derek.trideja.com/ultra6/
http://netgear.nas-central.org/wiki/Category:RNDP4000
http://www.mb200d.nl/wordpress/2014/09/readynas-pro-6-serial-console-port/
http://home.bott.ca/webserver/?p=252

Netgear Ready Nas Pro 4

En el modelo Ready Nas Pro 6 utilizan unos pines de la placa base para sacar una conexión de vídeo VGA y poder gestionar la BIOS con un teclado y ratón USB, en otros manuales también del mismo modelo se decantan por utilizar la consola vía puerto serie (para no tener que desmontar todo el NAS), en el caso del Pro 4 no hay información al respecto.
La única opción que le veía era mediante la utilización de cable serie por consola, de todos modos me aventure a desmontarlo por completo y verificar la placa base, no disponía de ningún conector ni pines preparados para sacar una conexión de vídeo VGA, de forma que no había otra que ir por el camino de utilizar el serial vía TTL.

Si realizamos la conexión vía serie el esquema es el siguiente:
1-->GND 2-->TX 3-->RX (hay que retirar una pegatina que cubre el hueco, contamos desde el pin de la izquierda)
Podemos visualizar la consola y en ella la secuencia de arranque incluido el acceso a BIOS.
Al ver que vía serie obtenemos control completo de la BIOS, pensé, bien! con esto lo tenemos todo hecho... pero no... la placa base tiene una memoria USB Flash soldada y la BIOS que dispone la placa base solo da opción de arrancar desde este dispositivo.
En este caso el dispositivo se llama SMI USB DISK, si preparamos cualquier otro USB boteable la BIOS lo reconoce y nos muestra el nombre del mismo, pero en las opciones de boot solo nos aparece el SMI USB DISK, de forma que no podemos bootear con otro dispositivo que no sea la memoria USB Flash integrada en el NAS.

netgear readynaspro4 bios

Encontré una documentación oficial de Netgear (en una web que no esta activa, conseguí rescatar la información utilizando web-archive) esa documentación fue facilitada por un técnico del SAT en una intervención a un usuario.
Existe una manera de flashear de 0 esa memoria USB Flash integrada, pero... como lo podríamos hacer si la BIOS no acepta el arranque de otro dispositivo USB que no sea el SMI USB DISK? facil, según esa documentación si apagamos completamente el NAS, dejamos presionado el botón Backup y encendemos el NAS (dejamos presionado el botón de Backup durante unos 20 segundos) automáticamente la BIOS modifica el boto por cualquier USB bootable que le conectemos, de esta forma podemos arrancar la instalación de cualquier sistema operativo que queramos instalar en el NAS. (los Windows quedan descartados, dado que recordemos que no disponemos ninguna forma de ejecutar un entorno gráfico), lo ideal es instalar alguna distribución para el propósito de NAS como puede ser FreeNas, Nas4Free, XPenology, OpenMediaVault....

Nos podemos encontrar que una vez arrancamos desde nuestro USB perdemos la consola por serie, esto es debido a que el instalador no esta habilitado para mostrar la salida de información via serie, normalmente en cargadores tipo Syslinux es tan facil como añadir la linea SERIAL 1  en el fichero de arranque del USB.
De todas formas recomiendo leer la documentación de la distribucion a instalar para ver que parametro es el ideal para mostrar la información vía serial.

Por otro lado si queremos instalar cualquier sistema (recordemos que la única forma de bootear es desde el SMI USB DISK, desde los HDD's del NAS tampoco hay forma de bootear) debemos realizar la instalación en el propio USB que utilicemos para arrancar, pero nos encontraremos que cada vez que el NAS se reinicie o se apague se deberá de arrancar con el botón de Backup pulsado, si el sistema no pesa mas de 128MB se puede llegar a instalar en la propia memoria USB Flash integrada utilizando el comando dd (como se indica en este otro manual Instalar XPenology en NAS Netgear ReadyNas Pro 4 RNDP4000), de esa forma nos olvidamos de tener que hacer inventos para que el NAS arranque siempre desde nuestro USB.

Cliente de SMS + Modem 3G sobre contenedor OpenVZ = SMS to Mail

En este manual veremos como preparar un contenedor VZ en un entorno Proxmox para la utilización de un dongle/Modem 3G (en este caso un K3770 de Huawei) para recibir SMS dentro del contenedor VZ, y a la misma vez reenviarlos vía Email.

Me encuentro que dispongo de muchos servicios de verificación de identidad mediante código por SMS asociados a una SIM antigua y muchos de estos servicios no me permiten modificar el numero asociado, me he visto obligado a seguir conservando el antiguo numero, para facilitarme la tarea he realizado este manual que me envié por Email los SMS.

He visto varios manuales de como realizarlo sobre una raspberry, pero actualmente dispongo de un HP MicroServer trabajando sobre la plataforma Proxmox, mi idea era poder realizar esto sobre un contenedor VZ (para no tener que depender de mas equipos).

enviar sms 3g vz

 

Lo primero que necesitamos es dar de alta un contenedor VZ utilizando la template debian-7.0-standard_7.0-2_i386.tar.gz 256MB de RAM, 5GB y 1 Core sera suficiente (recordemos activar que la maquina se inicie en el boot para cuando reiniciemos la maquina física).

Maquina física

Antes de pasar al contenedor VZ debemos realizar una pequeña preparación en la maquina física Proxmox, necesitaremos tener el paquete del usbswitch instalado para que la maquina nos reconozca el USB 3G en modo modem/phone y no en MassStorage, procedemos a conectar el Modem 3G a la maquina física y realizamos un:

lsusb

Vemos que nos indica que detecta el Modem 3G, pero en modo unidad de almacenamiento

Huawei Technologies Co., Ltd. K3770 Mass Storage

Para solucionar esto debemos instalar el paquete usb mode switch

apt-get install usb-modeswitch

Una vez instalado desconectamos el Modem 3G y lo volvemos a conectar, volvemos a realizar un:

lsusb

Podemos observar que ahora nos indica que lo detecta en modo Modem

Huawei Technologies Co., Ltd. K3770 3G Modem

El ultimo paso a realizar es mapear los puertos COM que utiliza el Modem 3G hacia el contenedor VZ, revisamos el nombre de los puertos

dmesg | grep tty

usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB0
usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB1
usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB2
usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB3

Normalmente con el ttyUSB0 es suficiente (dado que el Modem 3G utiliza varios puertos para distintos servicios) pero nosotros los mapearemos todos, para realizar esto de forma manual el comando a realizar seria el siguiente

vzctl set 112 --devnodes ttyUSB0:rw --save
vzctl set 112 --devnodes ttyUSB1:rw --save
vzctl set 112 --devnodes ttyUSB2:rw --save
vzctl set 112 --devnodes ttyUSB3:rw --save

Donde 112 es el numero de container, este paso no queda de forma permanente en el fichero de configuración del contenedor, (solo almacena el ultimo comando) de forma que si queremos que se habilite de forma automática al iniciar el contenedor tendremos que aplicarlo en el fichero .conf del contenedor VZ.

nano /etc/vz/conf/112.conf

Recordando que 112 es el numero de container, añadimos las siguientes lineas al final del fichero y guardamos (si disponíamos de alguna similar la sobrescribimos)

DEVNODES="ttyUSB0:rw "
DEVNODES="ttyUSB1:rw "
DEVNODES="ttyUSB2:rw "
DEVNODES="ttyUSB3:rw "

Ya disponemos de la configuración adecuada en la maquina física para delegar la utilización del Modem 3G en el container VZ.

Contenedor VZ

Iniciamos el contenedor VZ, lo primero a realizar es actualizar los repositorios y los paquetes

aptitude update
aptitude upgrade

Procedemos a instalar los paquetes de Gammu que seran los encargados de comunicarse con el Modem 3G

aptitude install Gammu Gammu-smsd

Una vez instalado Gammu vamos a habilitar los permisos de los puertos COM en el contenedor, para ello lo que recomiendo es editar el rc.local para parar Gammu al iniciar, otorgar los permisos correctos a los puertos y volver a iniciar Gammu.

nano /etc/rc.local

Añadimos lo siguiente antes del exit 0

/etc/init.d/gammu-smsd stop
chmod a+rw /dev/ttyUSB*
/etc/init.d/gammu-smsd start

Vamos a la configuración de Gammu, editamos el fichero gammu-smsdrc para añadir la información de los puertos y habilitar el log en syslog.

nano /etc/gammu-smsdrc

Y lo dejamos con la siguiente información:

[gammu]
device = /dev/ttyUSB0
name = Phone on USB serial port (null) (null)
connection = at

[gammu1]
device = /dev/ttyUSB1
name = Phone on USB serial port (null) (null)
connection = at

[gammu2]
device = /dev/ttyUSB3
name = Phone on USB serial port (null) (null)
connection = at

# SMSD configuration, see gammu-smsdrc(5)
[smsd]
service = files
logfile = syslog
# Increase for debugging information
debuglevel = 1
RunOnReceive = /etc/enviarSMSMail.sh #Envio del SMS a Email
# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/

Procedemos a crear el script de envió de los SMS a Email, este script le hemos dicho a Gammu que ejecute al recibir un SMS, se encuentra en /etc

nano /etc/enviarSMSMail.sh

Y añadimos lo siguiente: (hay que tener en cuenta que nuestro contenedor VZ disponga de las herramientas necesarias para enviar Email, podeis consultar el anterior post para configurarlo como relay de Gmail)

cd /var/spool/gammu/inbox && cat $(ls -t | head -n 1) | mail -s "SMS Recibido" Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

Assignamos permisos de ejecución:

chmod +x /etc/enviarSMSMail.sh

Ya disponemos del contenedor VZ preparado para recibir SMS vía Gammu y enviarlos por Email con el script que hemos creado, procedemos a apagar el contenedor VZ y volverlo a encender, revisamos los logs para verificar si hay algún error en Gammu y aprovechamos para mandarnos un SMS de prueba para verificar que funciona de forma correcta

Podeis utilizar http://www.afreesms.com/freesms/ para realizar un envio de SMS de prueba.

tail -f /var/log/syslog

Vemos que inicia de forma correcta

Nov  1 17:32:40 gsm gammu-smsd[2312]: mode: Send=1, Receive=1
Nov  1 17:32:40 gsm gammu-smsd[2312]: deliveryreport = no
Nov  1 17:32:40 gsm gammu-smsd[2312]: phoneid =
Nov  1 17:32:40 gsm gammu-smsd[2312]: Inbox is "/var/spool/gammu/inbox/" with format "standard"
Nov  1 17:32:40 gsm gammu-smsd[2312]: Outbox is "/var/spool/gammu/outbox/" with format "detail" and transmission format "7bit"
Nov  1 17:32:40 gsm gammu-smsd[2312]: Sent SMS moved to "/var/spool/gammu/sent/"
Nov  1 17:32:40 gsm gammu-smsd[2312]: SMS with errors moved to "/var/spool/gammu/error/"
Nov  1 17:32:40 gsm gammu-smsd[2313]: Created POSIX RW shared memory at 0xb770c000
Nov  1 17:32:40 gsm gammu-smsd[2313]: Starting phone communication...
Nov  1 17:32:40 gsm kernel: ioctl32(gammu-smsd:625172): Unknown cmd fd(4) cmd(00005309){t:'S';sz:0} arg(00000000) on /dev/ttyUSB0

Despues de unos segundos vemos que nos entra el SMS y Gammu lanza el script para reenviarlo por Email con éxito

Nov  1 17:36:43 gsm gammu-smsd[2313]: Received message from: +16264616576
Nov  1 17:36:43 gsm gammu-smsd[2313]: Read 1 messages
Nov  1 17:36:43 gsm gammu-smsd[2313]: Received IN20151101_173639_00_+16264616576_00.txt
Nov  1 17:36:43 gsm gammu-smsd[2578]: Starting run on receive: /etc/enviarSMSMail.sh IN20151101_173639_00_+16264616576_00.txt
Nov  1 17:36:43 gsm gammu-smsd[2313]: Process finished successfully
Nov  1 17:36:43 gsm postfix/pickup[2261]: 26C94908683: uid=104 from=<gammu>
Nov  1 17:36:43 gsm postfix/cleanup[2588]: 26C94908683: message-id=<Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.;
Nov  1 17:36:43 gsm postfix/qmgr[2262]: 26C94908683: from=<Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.;, size=333, nrcpt=1 (queue active)
Nov  1 17:36:45 gsm postfix/smtp[2590]: 26C94908683: to=<cmos486Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.;, relay=smtp.gmail.com[173.194.67.109]:587, delay=2.2, delays=0.02/0.04/1.4/0.73, dsn=2.0.0, status=sent (250 2.0.0 OK 1446395805 bo7sm17670094wjb.46 - gsmtp)
Nov  1 17:36:45 gsm postfix/qmgr[2262]: 26C94908683: removed

Si por alguna razón no nos llega el Email con el SMS podemos verificar si ha llegado en el log y verificar que ha quedado guardado en /var/spool/gammu/inbox/