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

20 comentarios:

  1. Inmenso aporte. Desde que publicaste la primera parte (la cual archivé inmediatamente) esperaba ansioso esta segunda, la cual ya pensé que no iba a salir como pasa en muchos blogs en los que se van perdiendo las ganas o no se dispone del tiempo suficiente. Me he llevado una gran alegría al ver que no ha sido así. Menudo trabajo has hecho y además muy detallado. Aún no tengo el raspberry pi, principalmente porque no tenía muy claro el uso que le podía dar al final, pero gracias a este blog ahora ya tengo por dónde empezar. Una cosa, no mencionas la reproducción de vídeo en alta definición, un tema que me interesa pues sé que el raspberry viene preparado para ello y tiene salida hdmi. ¿Podría reproducirse un vídeo en una TV sin tener que instalar un servidor gráfico en el raspberry o sería imposible? Imagino que es imposible sin el X, en ese caso, ¿qué programa utilizar y que consuma pocos recursos? ¿Tú has probado la reproducción de vídeo? Muchas gracias por estos artículos. Un saludo.
    P.D. Soy usuario (y encantado, es una maravilla el rolling release y pacman) de archlinux en un portátil desde hace un año, antes tenía ubuntu. Espero ansioso la parte de ssh ;)

    ResponderEliminar
    Respuestas
    1. Hola Nacho,

      Muchas gracias por tu comentario, de vez en cuando recibir un comentario como el tuyo me anima a seguir intentando escribir entradas como esta :) y a no dejar de escribir en el blog, estas dos guías no han salido seguidas por el tiempo que entradas como estas lleva prepararlas ya que no han sido pacas cosas las que me ha tocado aprender, investigar y después escribir la entrada en el blog. A medida que vaya mirando más cosas iré actualizando las guías.

      En cuanto a la reproducción de vídeo no he comentado porque no lo he probado (las películas las veo por el momento las veo en el portátil) pero probablemente la mejor opción y más sencilla sea http://www.raspbmc.com/ (su instalación parece muy simple), están haciendo progresos y dentro de un tiempo seguro que mejoran aún mas las cosas, sobre todo en el aspecto del sonido.

      La parte de ssh es algo que tengo que mirar pero seguro que lo preparo en cuanto tenga un poco de tiempo.

      PD: yeah! cada vez somos mas archers, yo llevo usándola unos 3 años y la verdad es que es la distribución con la que más tiempo llevo y a gusto estoy después de pasar por Fedora, Debian, Ubuntu y openSUSE.

      Eliminar
    2. Le he echado un vistazo a la página de raspbmc, pinta bastante bien, y ahora tengo un dilema, jeje. Una opción sería instalar el raspbmc y como está basado en Debian luego instalar todos los servicios que quiera, la otra opción sería instalar Arch ARM como pones en la guía e intentar y buscar la manera de reproducir el vídeo, será cuestión de investigar un poco más. Aunque lo primero de todo será pedir el raspberry pi, a ver si para julio. Cuano lo haga ya te comentaré más. Un saludo y gracias por todo.

      Eliminar
    3. Otra opción es tener dos tarjetas SD/SDHC, una con Arch y la otra con raspbmc, e insertar una u otra según el rol que le quieras dar a la RPi

      Eliminar
  2. Tengo una Raspberry Pi, usaba Raspbian Wheezy, decidí probar Arch y tu guía fue muy útil como para empezar, me encanta como funciona.
    Muchas gracias por la aportación.

    ResponderEliminar
  3. Me fascinó la guia que hiciste para trabajar con el raspberry pi, seguro tuviste que leer bastante para adquirir el conocimiento.

    te queria preguntar algo: ¿ya probaste la salida rca? soy de mexico y sinceramente la tecnología ha tardado en llegarnos jajajaja aun tenemos las televisiones viejas crt, entonces me parece una exelente idea usar una como servidor de descargas, servidor de archivos y como reproductor en mi tv crt, sobretodo porque cuesta menos que un reproductor blueray o similares y realiza el trabajo completo :D no se tambien me puedas decir si puede trabajar bien con un disco duro externo usb de unos 500gb para guardar las descargas y reproducirlas.

    lo que mas me facina es la salida rca ya que las portatiles no tienen y como dije por el momento no podemos adquirir un televisor nuevo con entrada hdmi para usar el portatil

    ResponderEliminar
    Respuestas
    1. No, no he probado la salida RCA, no te puedo comentar nada, tampoco he probado la salida HDMI ni he probado a conectarlo a un televisor. En cuanto a conectar un disco duro yo tengo uno de 120 GB formateado con NTFS y no he tenido ningún problema.

      Eliminar
    2. gracias por la respuesta, voy a seguir indagando como va con la salida rca

      Eliminar
    3. Puedes usar un adaptador para conectarle un monitor DVI, no regreses al pasado con el RCA

      Eliminar
  4. HOla mi nombre es Danilo Bolaños.
    vivo en Costa Rica, me compre un raspberry pi , element 14 por ebay.
    y he estado buscando info, y te soy sincero, el blog esta muy bien explicado, muchas gracias, por ayudar!

    ResponderEliminar
  5. Buenas, lo primero, un articulo impresionante, muchas gracias, me ha ayudado muchísimo.

    Lo segundo, ¿sabes como se le puede dedicar mas ram a la CPU?, tengo el modelo de 256 Mb de ram y se que 128 van para la GPU, y me gustaría dedicar gran parte de ellos a la CPU también, pasa que todo lo que encuentro por internet ya esta anticuado y esos métodos ya no funcionan.

    Un saludo

    ResponderEliminar
    Respuestas
    1. Antes se hacia copiando un archivo del directorio /boot a /boot/start.elf tal y como explico en la primera parte de esta guía, pero ahora se hace de forma diferente, mediante la configuración de /boot/config.txt. En el siguiente enlace tienes la información de como se hace y que valores puedes dedicar a la memoria de la GPU:

      http://raspberrypi.stackexchange.com/questions/673/what-is-the-optimum-split-of-main-versus-gpu-memory

      Muchas gracias por tu comentario positivo,
      Un saludo,

      Eliminar
  6. Hola, muy buenos artículos.
    Una pregunta, he configurado la IP fija tal como dices, pero sigo teniendo también una dirección IP por DHCP (las dos a la vez), ¿como puedo evitar que me consiga esta IP y quedarme solo con la fija? Gracias.

    ResponderEliminar
    Respuestas
    1. ¿Que dirección tiene la interfaz ethernet eth0? (usa ifconfig) ¿la que le has puesto como fija o una que obtiene por DHCP? O tiene una u otra pero las dos a la vez no. No acabo de entender lo que comentas. ¿Has habilitado el servicio network? Igual es lo que me falta comentar.

      $ sudo systemctl enable network

      Eliminar
    2. Gracias por contestar, las dos IPs están activas a la vez y puedo acceder a la pi por cualquiera de ellas (la fija y la dhcp), las dos usan la misma interfaz, si hago un "ip addr show dev eth0" me salen las dos:

      inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
      inet 192.168.1.36/24 brd 192.168.1.255 scope global secondary eth0

      y el servicio network lo tengo habilitado como comentas en el articulo, para habilitar la ip fija

      Eliminar
    3. Acabo de comprobarlo con el comando «ip addr» que has puesto y a mi también me salen dos direcciones IP y a las dos responde. Supongo que será por lo que hace el servicio «/etc/systemd/system/network.service» y este comando «/sbin/ip addr add» puede tener algo que ver, pero así es como lo explican en la wiki de Arch Linux [1],

      [1] https://wiki.archlinux.org/index.php/Network_Configuration#Static_IP_address

      Eliminar
    4. Al final lo he solucionado.
      En lugar de crear un nuevo servicio para la nueva IP lo que hago es cambiar la configuración del que ya hay creado que conecta por medio de DHCP.
      Hay que editar el archivo /etc/network.d/ethernet-eth0
      Se comenta el primer bloque que es el encargado de buscar una ip por DHCP, y se descomenta y adapta a nuestras necesidades el bloque que pone "# Change for static", se reinicia el servicio o la Raspberry y ya está.

      Eliminar
    5. Vaya, más sencillo que lo que explico y además el archivo /etc/network.d/ethernet-eth0 parece preparado para ello. Gracias por el aporte ;)

      Eliminar
  7. Estoy pensando en comprar una raspberry pi b la de 500mb de ram. Principalmente para ponerla en mi cuarto para ver las pelis que tengo en el sobremesa y navegar. Realmente que utilidad se le puede dar a la raspberry esque no tengo claro para que mas sirve. Gracias de antemano porke lo explicas todo muy bien.

    ResponderEliminar
    Respuestas
    1. Yo la uso principalmente para descargar via torrent, oír música (la raspberry hace 0 ruido) y para eso es suficiente, no he probado a ver películas pero es posible con Raspbmc. Le puedes poner como servidor web, ... Para navegar me parece que irá justa principalmente porque la tarjeta SD ralentiza mucho. A día de hoy probablemente me compraría una ODROID-X2 aún siendo más cara.

      Eliminar

Related Posts Plugin for WordPress, Blogger...