Es perfectamente
posible instalar OpenHAB en una Raspberry Pi, aunque conviene que sea una
Raspberry Pi modelo 2 o 3, ya que el modelo 1 tiene un procesor bastante menos
potente y puede darnos problemas a poco que la configuración de nuestra casa
sea compleja.
Pero si se busca en
los foros, podeis comprobar que hay muchos usuarios que han instalado OpenHAB
en una Raspberry PI, asi que me compré el modelo 3, una MicroSD de 64 GB y lo
instalé.
Estaba a punto de
cambiar mi instalación actual (que se basa en un Mac Mini) a la Raspberry Pi
cuando investigando en los foros descubrí que las tarjetas de memoria tienen
un problema de desgaste: Si se escribe muchas veces sobre ellas, se estropean.
Los sistemas operativos intentan mitigar este problema utilizando todo el
espacio disponible de la tarjeta para distribuir las escrituras, por tanto con
una tarjeta de 64 GB no debería haber muchos problemas.
Pero aun así no me
quedé tranquilo y decidí utilizar una funcionalidad nueva que está disponible
de forma beta para la Raspberry Pi 3 (no para la 2 ni para la original, aunque
el enlace que hay en el paso 1 mas adelante da una pista de como puede hacerse)
y que consiste en un nuevo firmware que permite arrancar desde un disco USB.
Así que me compre
un disco USB de 120 GB de oferta (Toshiba OCZ TR150), lo instalé en una caja
SATA a USB 3.0 de Seagate que tenía de una operación de "hacking"
anterior (eso es otra historia) y me pusé a instalar todo. Desde el sistema
operativo a OpenHAB sobre este disco duro.
En esta entrada
explico como configurar e instalar una Raspberry Pi para que use un disco SSD
en lugar de una memoria MicroSD.
A continuación
teneis detallados los pasos que seguí, por si quereis emularlos, junto con el
enlace a la web original donde encontré la información por si quereis ampliar
los conocimientos y porque "al cesar lo que es del cesar".
Paso 1: Configurar
la Raspberry PI para que arranque de un disco USB
Nota: Se supone que
dispones de un disco USB externo conectable a tu Raspberry PI. Aquí no voy a
explicar como se instala un disco SSDen una caja USB como hice yo, pero no es
ciencia espacial.
Nota2: Si no vas a
utilizar esta opción y quieres seguir usando la tarjeta SD, salta al siguiente
paso.
- Coge una tarjeta
MicroSD con capacidad suficiente para instalar Raspbian (el sistema
operativo de Raspberry). En principio 4 GB son suficientes.
- Conectala a tu
ordenador con el adaptador correspondiente.
- Inicializa la tarjeta con el
formato FAT32 usando la utilidad correspondiente de tu sistema operativo
- De la página https://www.raspberrypi.org/downloads/raspbian/ descargate Raspbian Jessie
With Pixel (no te descarges la versión Lite, porque implica más trabajo).
- En mi caso me descargué la
versión 2016-09-23-raspbian-jessie
- Instala el software en la
tarjeta MicroSD.
- En Windows hay
que instalarlo con Win32DiskImager. El enlace para descargarlo y las
instrucciones están en: https://www.raspberrypi.org/documentation/installation/installing-images/windows.md
- Para Linux las
instrucciones están en https://www.raspberrypi.org/documentation/installation/installing-images/linux.md
- Para Mac (https://www.raspberrypi.org/documentation/installation/installing-images/mac.md):
- descomprime el
archivo 2016-09-23-raspbian-jessie.zip (o la versión que has
descargado). En Mac con un doble clic lo hará, en Linux gunzip
2016-09-23-raspbian-jessie.zip
- Antes de insertar la
tarjeta en el ordenador (yo usé un adaptador MicroSD a USB) ejecuta el
comando diskutil
list | grep dev
- Te aparecerá una lista mas
o menos larga con todos los discos que tiene montados el ordenador en
ese momento:
$
diskutil list | grep dev
/dev/disk0
/dev/disk1
/dev/disk2
/dev/disk3
/dev/disk4
/dev/disk5
- Conecta la
tarjeta al ordenador con el adaptador USB (si la tarjeta es nueva, es
posible que te aparezca un mensaje diciendo que si quieres inicializarla.
Pulsa Ignorar) y vuelve a ejecutar el comando diskutil
list | grep dev:
$
diskutil list | grep dev
/dev/disk0
/dev/disk1
/dev/disk2
/dev/disk3
/dev/disk4
/dev/disk5
/dev/disk6
- Observa que ahora
hay un disco adicional, /dev/disk6. Esta es la tarjeta que vamos a usar.
- Ejecuta sudo umount /dev/disk6s* sustituyendo disk6 por el
nombre que hemos averiguado en el paso anterior.
- Ahora escribe en el terminal
SIN pulsar Intro al final "sudo dd bs=1m if="
- En el Finder arrastra el
archivo con la imagen descomprimida en el paso c.i. encima de la ventana
del Terminal, verás que después de if= se rellena automaticamente el
directorio y nombre del archivo: sudo dd bs=1m
if=/Volumes/A/Users/fernando/2016-09-23-raspbian-jessie.img
- No pulses Intro
todavia. Detrás de la línea
anterior añade: of=/dev/rdisk6 Fijate en dos detalles: Primero tienes que sustituir el 6 por el
número del paso v. Segundo que en lugar de disk hay que escribir rdisk.
- La línea te quedará similar
a esta sudo dd
bs=1m if=/Volumes/A/Users/fernando/2016-09-23-raspbian-jessie.img
of=/dev/rdisk6
- Ahora ya puedes pulsar
Intro. El terminal te pedirá tu contraseña y cuando la escribas y pulses
Intro, empezará a escribir la imagen de disco en la tarjeta. Este proceso
tarda tiempo, así que aprovecha y tomate un buen capuchino.
- Una vez terminada la copia,
vuelve a ejecutar:sudo
umount /dev/disk6s*
- Extrae la tarjeta
MicroSD e insertala en tu Raspberry Pi 3.
- Conecta la Raspberry Pi a tu
televisor o monitor, enchufale tu teclado y ratón y enciendela conectando
el cargador USB.
- Una vez que haya arrancado
el sistema operativo, tienes que conectarla a Internet. La forma mas
sencilla es con un cable Ethernet entre tu router de fibra o ADSL y el
puerto Ethernet de la Raspberry Pi. Si no tienes Ethernet y/o quieres
usar la WiFi, en la parte derecha del menú superior verás un icono con
dos flechas, una para arriba y otra para abajo, pulsalo y en la lista de
redes WiFi que aparecen verás el nombre de la tuya, elígela, introduce la
contraseña correspondiente y te conectaras a la WiFi y a Internet.
- El teclado está en inglés.
Si quieres cambiarlo a Español, en el menú superior izquierdo, despliega
el icono Raspberry y en la opción Preferences elige Mouse and Keyboard
Settings
- En el diálogo que aparece
pulsa la pestaña Keyboard y a continuación el botón Keyboard Layout
- En el nuevo diálogo que
aparece elige Country Spain y Variant Spain. Pulsa OK en los dos diálogos
y ya tienes el teclado con la disposición de Españo.
- Una vez conectado a
Internet, abre una ventana de Terminal (menú superior, icono Raspberry,
despliega y en Accesories elige Terminal)
- Escribe sudo
apt-get update; sudo apt-get install rpi-update y pulsa Intro.
- Cuando acabe
ejecuta sudo BRANCH=next rpi-update
- Ahora hay que
activar el arranque desde USB en la Raspberry Pi (si, todo lo que hemos
hecho hasta ahora era solo para activar esto): echo
program_usb_boot_mode=1 | sudo tee -a /boot/config.txt
- Reinicia la
Raspberry Pi con sudo reboot
- Para comprobar que se ha
programado correctamente, después de arrancar vuelve a abrir el Terminal
y ejecuta: vcgencmd otp_dump | grep 17:
- La
salida tiene que ser 17:3020000a
- Nuestra Raspberry Pi está
finalmente preparada para usar el disco SSD.
- Conecta el disco USB a
cualquier puerto USB de la Raspberry Pi. Tal como indica en la página
indicada al principio, la tarjeta MicroSD será /dev/mmcblk0 y el primer
disco USB que conectemos será /dev/sda
- Ejecuta sudo parted /dev/sda
Aparecerá el siguiente mensaje:
GNU
Parted 3.2
Using
/dev/sda
Welcome
to GNU Parted! Type 'help' to view a list of commands.
(parted)
- Escribe
mktable msdos
- Si el disco ya ha sido usado
o tiene una estructura de archivos creada, te avisará que lo va a borrar
y que se perderán todos los datos grabados en él. Te pregunta si quieres
continuar y contesta que Yes
- A continuación
hay que crear dos particiones en el disco USB. Una primera partición de
100 Megabytes para el arranque y el resto (casi 120 GB) para el sistema
operativo en si.
- El mensaje (parted) sigue
apareciendo, escribe: mkpart primary fat32 0% 100M esto le dice que cree una
partición desde el principio del disco y que ocupe 100MB.
- Vuelve a aparecer (parted) y
ahora escribe mkpart primary ext4 100M 100% que dice que se cree una segunda partición
desde los 100 MB hasta el final del disco.
- En el siguiente (parted)
escribe print para ver que particiones se
han creado. En mi caso:
Model:
Seagate Expansion (scsi)
Disk
/dev/sda: 120GB
Sector
size (logical/physical): 512B/512B
Partition
Table: msdos
Disk
Flags:
Number
Start End Size Type File
system Flags
1
1049kB 99.6MB 98.6MB primary fat32
lba
2
99.6MB 120GB 120GB primary ext4
lba
- Seguidamente
escribe quit para salir del programa parted.
- Ahora creamos los sistemas
en las particiones que acabamos de crear:
sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
sudo mkfs.ext4 /dev/sda2
- En lugar de
volver a instalar el sistema operativo como hicimos con la tarjeta
MicroSD, la siguiente secuencia de operaciones copia todo el sistema
desde la MicroSD al disco USB. El úlitmo paso llevará bastante tiempo,
momento para un segundo café. Nota: si vas a copiar los comandos hazlo
hasta la penúltima línea, espera a que termine de ejecutarse y luego
ejecuta la última.
sudo mkdir /mnt/target
sudo mount /dev/sda2 /mnt/target/
sudo mkdir /mnt/target/boot
sudo mount /dev/sda1 /mnt/target/boot/
sudo apt-get update; sudo apt-get install rsync
sudo rsync -ax --progress / /boot /mnt/target
- La
clave SSH, la que utiliza el sistema cuando te conectas en remoto con SSH
hay que volver a regenerarla en el nuevo disco con los siguientes
comandos (puedes copiar y pegar todos los comandos en una ventana ssh de
tu Raspberry Pi):
cd /mnt/target
sudo mount --bind /dev dev
sudo mount --bind /sys sys
sudo mount --bind /proc proc
sudo chroot /mnt/target
rm /etc/ssh/ssh_host*
dpkg-reconfigure openssh-server
exit
sudo umount dev
sudo
umount sys
sudo umount proc
- Los
últimos pasos es modificar los parámetros de arranque para que se
arranque del disco USB:
sudo sed -i
"s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/target/boot/cmdline.txt
sudo sed -i "s,/dev/mmcblk0p,/dev/sda,"
/mnt/target/etc/fstab
- Para
terminar, desmonta todos los discos y apaga la Raspberry Pi:
cd ~
sudo umount /mnt/target/boot
sudo umount /mnt/target
sudo poweroff
- Hecho
esto, desconecta la Raspberry Pi
de la alimentación, extrae la tarjeta MicroSD y vuelve a conectarla. Si
todo ha ido bien, arrancará desde el disco USB.
- Queda un punto
pendiente. Si ahora haces un apt-get para actualizar el software, volverá
a modificar los archivos anteriores e intentará arrancar de la MicroSD.
Para solucionarlo ejecuta los siguientes comandos:
sudo rm /boot/.firmware_revision
sudo apt-get update && sudo apt-get -y
dist-upgrade && sudo BRANCH=next rpi-update
- Hecho
esto, el sistema seguirá arrancando desde el disco USB las siguientes
ocasiones.
Siguiente paso: instalar OpenHAB en el sistema.