viernes, 22 de junio de 2012

Guía instalación Raspberry Pi con Arch Linux ARM (Parte II, programas)

Raspberry Pi
Nota: la última actualización de esta guía fue el 19-01-2013. Al ser Arch Linux una distribución rolling release puede que cuando la leas algunas cosas hayan cambiado aunque la mayoría seguirán siendo como esta escrito a continuación.

Después de la instalación base de Arch Linux ARM para la Raspberry Pi a partir de la Guía instalación Raspberry Pi con Arch Linux ARM (Parte I, instalación base) toca añadirle los programas que nos proporcionarán la funcionalidad que queramos. Desde luego la capacidad de la Raspberry es limitada y no podremos instalarle todo lo que deseemos, principalmente por la cantidad de memoria que tiene (256 MiB), por la velocidad de lectura desde la tarjeta SDHC que en determinados momentos es el mayor limitante notándose que se ahoga y porque el procesador no tiene la capacidad ni se puede comparar con un Intel o AMD de los que podemos encontrar estos días. Por ello, la Raspberry no será un sustituto de nuestro ordenador de escritorio o portátil aunque dicho esto hay ciertas tareas que puede cumplir a la perfección con capacidad más que suficiente.
Arch Linux ARM

Si necesitamos algo más potente podemos optar por una CuBox o una Pandaboard ES que ambas tienen 1 GiB de memoria y un procesador dual core algo más potente que el de la Raspberry, desde luego ambas funcionarán bastante mejor al ejecutar un entorno gráfico aunque probablemente tampoco sean sustitutos para reemplazar nuestro ordenador de escritorio. El punto fuerte de la Raspberry comparadas con la CuBox o la Pandaboard es su precio, de unos 45€ con gastos de envío a España, contra 99€ y 182$ sin gastos de envío respectivamente.

Volviendo a la guía, seguidamente explicaré algunas de las tareas para las que sí podemos usar la Raspberry.

Programas y servicios

Las siguientes aplicaciones de muestra son solo una idea de lo que podemos instalar. Además de las anteriores o mencionando algunas de ellas una lista no exhaustiva podría ser la siguiente:
  • Asignar dirección IP fija
  • P2P torrent (transmision-cli)
  • ftp (vsftp)
  • Servidor web (lighttpd)
  • firewall (ufw)
  • PHP
  • Git
  • Sistemas de archivos NTFS, FAT
  • Sonido (cmus)
  • SSH (certificados)
  • SSH y screen
Otras:
  • email (mutt)
  • música (cmus)
Veremos algunas de estas a continuación y la configuración del router que tendremos que hacer. Si quieres instalar todo lo que se comenta en esta quía puedes hacerlo con:


Asignar dirección IP fija

De la lista anterior de aplicaciones algunas de ellas son programas que actuan de servidor. Dado que para conectarnos a un servidor necesitamos conocer la dirección IP en la que se encuentra deberemos asignar a la Raspberry una dirección IP fija en vez de dejar al DHCP del router que le asigne una y que pueda cambiar entre diferentes sesiones, reinicios o al cabo de un tiempo. Para tener una dirección IP fija deberemos crear un servicio de systemd que al iniciarse el sistema se le asigne la que deseamos. Para asignar la dirección IP estática debemos crear el archivo /etc/conf.d/network de configuración donde indicaremos varias propiedades de la red entre ellas la dirección IP:

Y el archivo del servicio de systemd /etc/systemd/system/network.service que se ejecutará cuando se inicie el sistema y realizará las operaciones necesarias para configurar la red:

En address pondremos la dirección IP que queramos dentro de nuestra red y fuera del rango de direcciones IP que asigna el router. Finalmente debemos habilitar e iniciar el servicio network que acabamos de crear.


También deberemos modificar los archivos /etc/dhcpcd.conf y /etc/resolv.conf para que los nombres de los dominios se resuelvan a sus direcciones IP, si al hacer «ping www.google.es» obtenemos un mensaje como «ping: unknown host www.google.es» es que nos falta modificar alguno de estos archivos, poniendo la dirección IP de nuestro router probablemente nos sea suficiente sino podemos usar un servidor de nombre en internet como los que ofrece google:



P2P torrent

tranmision es uno de los programas más populares para realizar descargas P2P mediante torrent. Aparte de a través de la interfaz gráfica puede ser usado desde la linea de comandos y como esto nos es necesario para la Raspberry será el que veremos a continuación. Empezaremos instalando su paquete transmission-cli.

Para poder ejecutarlo como demonio y con un usuario específico debemos seguir los pasos indicados en la wiki de arch linux sobre transmission para el caso de usar systemd.

Siguiendo los pasos de la wiki deberemos hacer las siguientes cosas:
  • Modificar los archivos /usr/lib/systemd/system/transmission.service y /usr/lib/tmpfiles.d/transmission.conf con el usuario con el que queramos que se ejecute transmission.
  • Copiarlos en cada caso a un subdirectorio de /etc.
  • Modificar el propietario y grupo del directorio /run/transmission según el usuario que vaya a iniciar el servicio configurado en transmission.service y transmission.conf.
  • Iniciar el servicio con transmission-daemon y pararlo para que se cree el archivo de configuración.
  • Editarlo para activar la interfaz rpc y el directorio de descargas.
  • Iniciar el servicio con tranmission a través de systemd.
El directorio de descargas incompletas (incomplete-dir), el usuario (rpc-username) y password (rpc-password) para la interfaz remota web (la password la indicaremos en texto plano una vez iniciemos transmision él detectará que está en texto plano y creará un hash de ella para mayor seguridad), si deseamos autenticación en la interfaz remota (rpc-authentication-required) y si queremos un directorio donde transmission buscará archivos torrents para iniciar descargas de forma automática cuando encuentre uno (watch-dir, watch-dir-enabled). En rpc-whitelist deberemos indicar la red local a la que estamos conectados, por ejemplo, 192.168.2.*.


Una vez realizados estos pasos podemos iniciar el demonio de transmission y acceder a su interfaz web con el navegador de nuestro ordenador de escritorio o portatil en la dirección http://[ip-raspberrypi]:9091.

Mediante esta interfaz web podremos modificar algunas propiedades adicionales como los limites de velocidad tanto de bajada como de subida incluso en un horario determinado. Finalmente, mediante esta interfaz web nos aseguraremos en la pestaña Preferences > Network de que tenemos el puerto usado por transmission en estado abierto y accesible desde internet, esto nos será necesario para descargar al máximo de velocidad que dispongamos. Si no lo tenemos tendremos que modificar la configuración del router (lo veremos más adelante en la configuración del router).


FTP

FTP (File Transfer Protocol) es un protocolo para la trasnferencia de archivos entre dos máquinas y puede que nos sea de utilidad para mover archivos entre el sistema que usemos y la raspberry. Por ejemplo, si queremos copiar los archivos descargados por transmission a nuestra máquina podemos extraer la tarjeta de memoria de la raspberry insertarla en nuestro equipo y copiar los archivos, otra forma es instalar un servidor ftp en la raspberry y realizar el copiado mediante el protocolo FTP. La primera opción es más rápida (a 10 MiB/s) pero la segunda es más cómoda (a 2 MiB/s con una tarjeta clase 10) ya que no tendremos que apagar la raspberry y mover la tarjeta SD de un sistema a otro. También nos puede ser útil si queremos dejar en la Raspberry un archivo php.

Si optamos por la segunda opción podemos utilizar Very Secure FTP que ocupa muy poco y no tiene ninguna dependencia, su paquete es vsftd:

Una vez instalado debemos habilitar el servicio e iniciarlo:


Editamos también el archivo de configuración /etc/vsftpd.conf, hay un montón de propiedades pero las básicas que nos interesará modificar son anonymous_enable para permitir o no autenticación anónima, local_enable para permitir iniciar sesión con los usuarios de la raspberry y write_enable para permitir realizar operaciones de escritura como subir o eliminar archivos.

Ya en el ordenador con el que trabajemos deberemos instalar un cliente FTP para realizar las transferencias desde y a la raspberry, podemos utilizar uno de los más conocidos, filezilla.

Para conectarnos en el sitio indicaremos como protocolo SFTP, modo de acceso normal y el nombre de usuario y password de un usuario de la raspberry.

http://welcome.filezilla-project.org/welcome?type=client&category=documentation_basic&version=3.5.3
http://welcome.filezilla-project.org/welcome?type=client&category=documentation_network&version=3.5.3
http://wiki.filezilla-project.org/Documentation

Servidor web

Aunque la raspberry sea pequeña y no parezca muy indicada para actuar como servidor tiene algún punto que la hace especialmente adecuado para ello como es que tiene un consumo muy bajo, ridículo (3 watios) para un servidor mucho más potente (200 watios o más), ocupa también un espacio ridículo en comparación con un servidor más potente, tampoco necesita una refrigeración especial. Al menos para un uso personal o un entorno para un equipo de desarrollo puede ser más que suficiente.

Una muy buena opción es lighttpd, es un servidor de nueva generación de los llamados ligeros que le están ganando terreno a apache, con trasnferencias asíncronas, que ocupa apenas 1 MiB, con muy pocas dependencias. Su paquete es lighttpd. El document root por defecto está en /srv/http donde han de estar alojados los archivos que va a servir.

Me gusta más cherokee, no porque sea mejor ni peor sino porque es un proyecto liderado por un español, Álvaro López Ortega, cosa rara por estos sitios, sin embargo, en la raspberry su consola de administración tiene un funcionamiento pobre llegando a no ser usable, esto unido a que sus archivos de configuración son bastante crípticos para editarlos con un editor de texto la opción que recomiendo es lighttpd. Otra opción sería nginx.

Al igual que con vsftpd debemos habilitar el servicio e iniciarlo.



Acceso desde internet con FreeDNS

Llegados a este punto podemos disponer de un servidor web sin embargo para que sea accesible desde internet necesitamos aún un pieza fundamental en el funcionamiento de la web, un nombre de dominio nos proporcionará un identificador para nuestro servidor que no cambiará con el tiempo aunque la IP pública de nuestro router que nuestro proveedor de servicios de internet (ISP) nos asigna lo haga.

Un opción gratuita es utilizar FeeDSN que nos permitirá obtener un subdominio de ciertos dominios públicos como mooo.com. Necesitaremos crearnos una cuenta en FreeDNS y crear un subdominio. Una vez lo tengamos se nos presenta el problema de como actualizar en FreeDNS nuestra IP pública cada vez que nuestro ISP nos de una distinta. Para ello una opción sencilla es crearnos un script que con cron se ejecute cada cierto tiempo.


Primeramente necesitaremos una serie de utilidades que están contenidas en el paquete dnsutils.

Luego el script con un contenido similar al siguiente cambiando el API_KEY que nos asigne FreeDNS para el dominio:



Le cambiamos de permisos al archivo y añadimos la expresión cron con crontab:

Añadiendo el siguiente contenido para ejecutar el script cada 5 minutos:


En el archivo /var/log/crond.log podemos ver las ejecuciones y resultados del script.

http://freedns.afraid.org/dynamic/index.php
https://wiki.archlinux.org/index.php/Cron

Configuración router

Para hacer que nuestra RPi sea accesible desde internet tendremos que modificar alguna configuración del router como abrir puertos para que el router redirija el tráfico que le llega a un puerto a una determinada direccion IP y puerto de nuestra red. Esto nos será útil principalmente para el caso del servidor web (puerto 80), de transmission (puerto 51413) u otro servidor que queramos que sea accessible desde internet.

Como comentaba en la asignación de IP estática primero comprobaremos el rango de direcciones IP que asigna el servidor DHCP del router y que la dirección IP estática que hemos asignado a la RPi está fuera de ese rango.

Posteriormente abrimos los puertos, las opciones serán diferentes para cada modelo de router pero similares.

Firewall

A pesar de que el router ya hará de firewall podemos utilizar ufw en la propia RPi.



Sistemas de archivos NTFS, FAT

Puede que necesitemos instalar el soporte para acceder a sistemas de archivos con formato NTFS (que es el utilizado por windows) o FAT. Tan solo necesitaremos instalar los siguientes paquetes ntfs-3g, ntfsprogs y dosfstools.

Para realizar el montaje manualmente ejecutaremos el siguiente comando, donde /mnt es la carpeta donde queremos montar el sistema de archivos de la partición de un disco o memoria USB externos:

Si queremos que este montaje se realice de forma automática nada más conectar el cable USB a la RPi instalaremos el paquete udev-automount, que realizará el montaje en la carpeta /media.

PHP

Para instalar PHP basta con instalar los paquetes php php-cgi. Para comprobar que se han instalado correctamente podemos ejecutar:

Ahora nos quedaría integrar el soporte en el servidor web para que sea capaz de procesar los archivos php. La configuración varía en cada servidor web. Aquí explicare como configurarlo con ligthttpd. Para ello deberemos editar el archivo /etc/lighttpd/lighttpd.conf e incluir al final las siguientes lineas:

Ahora deberemos crear el archivo /etc/lighttpd/fastcgi.conf (y el directorio donde está) e incluir en él el siguiente contenido:


Sonido

Primero añadimos nuestro usuario al grupo de audio para reproducir sonidos, cargamos el módulo del sonido y reproducimos un sonido de prueba:

Si no queremos cargar el módulo manualmente cada vez que queramos reproducir sonido se puede cargar el módulo automáticamente cuando se inicie la Raspberry Pi con:

Y añadiendo a ese archivo el módulo que queremos cargar (snd-bcm2835).

Habiendo cargado el módulo snd_bcm2835 con cmus podemos reproducir mp3, ogg entre otros formatos instalando varios paquetes que son: alsa-firmware alsa-lib alsa-plugins alsa-utils cmus pulseaudio libmad libvorbis.

Una cosa que tenemos que tener en cuenta es la salida por la que se emitirá el sonido, por la salida HDMI o por el jack 3.5mm, si no oímos ningún sonido puede que necesitemos cambiar la salida a la que estemos utilizando: Podemos hacerlo con:

Después de instalar los paquetes anteriores puede que necesitemos reiniciar. Podemos probar el sonido con aplay.

Y después cmus:

Si estás interesado en escuchar música con la Raspberry puedes consultar la entrada 4 formas de escuchar música a través de internet en la que se indican varias maneras de hacerlo.

SSH con certificados

El usar SSH puede resultar incómodo ya que hay que estar constantemente introduciendo la clave, para evitarlo en otra entrada explicaré como usar SSH con una clave pública y privada para realizar la autenticación ya que es algo que seguramente sea igual para la RPi o para cualquier otro sistema.

La Raspberry con llos siguientes programas nos puede ofrecer muchas funcionalidades pero tampoco hay que esperar una capacidad igual al de un ordenador de escritorio. En las pruebas que he realizado la velocidad de transferencia que he conseguido desde la tarjeta SD y desde un disco duro externo conectado por USB a la RPi ha sido de tan solo ¡2 MiB/s!.

Utilidad de screen

Si la conexión ssh se cierra todos los programas que se iniciaron en ella se terminan con lo que si estabamos reproduciendo múscica con cmus, cmus se terminará y dejaremos de escuchar música. Para evitarlo podemos usar screen.

Referencia:
Raspberry Pi, desempaquetado («unboxing»)
Raspberry Pi, Guía instalación (Parte I) Instalación base
Dejar procesos vivos de conexión SSH con screen