Spiga

Arrancando la Raspberry Pi desde un disco duro

¡Volvemos a la carga con un nuevo tutorial! Hoy os voy a enseñar a mover el sistema de ficheros de vuestra Raspberry Pi de la tarjeta SD a un disco duro, consiguiendo un mejor rendimiento general y un menor tiempo de arranque de la misma. He visto muchas entradas en el foro oficial de gente intentándolo sin éxito y la verdad es que es bastante sencillo siempre que sepas los pasos correctos.

Vamos a necesitar algunas herramientas extra, ya que no podemos realizarlo directamente desde la Raspberry. Así que los materiales que vamos a necesitar son:

  • Disco duro. No olvidéis alimentarlo de forma externa, ya que la Raspberry Pi no podrá con él. En mi caso he comprado una cajita para un disco de 3,5" que tenía abandonado en casa. La inversión ha sido de 12€.
  • Live CD de Ubuntu, por ejemplo, o cualquier Linux instalado en sistema con GParted.
  • Un ordenador al que poder conectar la SD y el disco duro. En él arrancaremos la Live CD.

Paso 1, hacer copia de seguridad de la SD:

Como no queremos llevarnos un disgusto en caso de equivocarnos, lo que haremos será crear una imagen de nuestra SD por si las moscas. Tenéis diferentes opciones desde Windows y Linux, siendo Win32DiskImager la más sencilla de todas en el primero y dd en caso de usar Linux. Si es vuestro caso es el último abrid una terminal y escribid:

dd if=/dev/sdX of=/ruta/de/imagen

Por ejemplo, en mi caso la SD es "sdb" y quiero crear la copia en mi carpeta de usuario, así que el comando me quedaría tal que:

dd if=/dev/sdb of=/home/darknsis/backup.dd

Al finalizar debe mostrarnos una pantalla similar a la siguiente:

dd tras finalizar el volcado de la SD a una imagen
 
Si os diese error al intentar ejecutar el comando, probad con sudo delante. Aunque por sencillez el primer método es mejor para los novatos, recomiendo ir acostumbrándose a las herramientas que nos brinda Linux.



Paso 2, copiar la partición:

Arrancaremos el ordenador con la Live CD, vuestra distribución Linux instalada o la opción que más os convenga. Si no tenemos instalado GParted en dicha máquina abriremos una terminal y escribiremos:

sudo apt-get install gparted

Conectamos nuestro disco duro, la SD y ya podremos ejecutar GParted. Tardará unos segundos en detectar las unidades y las particiones que hay hechas en las mismas, cuando finalice seleccionaremos el disco duro externo (ojo, no vayáis a cargaros vuestro disco de sistema!) y eliminaremos cualquier partición existente (botón derecho encima y "Eliminar"). Por ahora vamos a dejarlo completamente vacío, aunque también existe la posibilidad de tener varias particiones y dejar el espacio necesario para crear una nueva.

A continuación seleccionaremos la SD del desplegable superior derecho (en la foto veréis que tengo "/dev/sdb" que es mi SD) y marcaremos la partición de tipo "ext4", haremos clic con el botón derecho para mostrar el menú y seleccionaremos la opción "Copiar".


Captura de GParted, hay que copiar la partición ext4 de sistema
 
Volvemos ahora al disco duro en el que queremos instalar el sistema de ficheros, para ello recuerda seleccionarlo del listado desplegable superior derecho (donde aparecen identificados como "/dev/sdX"). Si está hecho todo correctamente deberéis verlo vacío y la barra de color gris. Para pegar la partición que hemos copiado hace unos segundos pincharemos en el espacio vacío, haremos clic con el botón derecho encima y de las opciones seleccionaremos "Pegar". Ahora hay que aplicar los cambios, así que iremos a "Editar" y dentro "Aplicar todas las operaciones" y esperaremos a que acabe el proceso.

Paso 3, cambiando ruta de acceso:

Prácticamente ya hemos acabado, así que vamos a dar los dos últimos pasos necesarios para que todo funcione correctamente. Lo primero es editar el fichero "cmdline.txt" que tenéis en la partición de tipo FAT en la SD (la partición que os deja ver desde Windows). Como siempre volveremos a hacer una copia de seguridad del fichero, copiándolo y renombrándolo a "cmdline.original" por ejemplo y dejando otro exactamente igual como "cmdline.txt". Una vez lo tengamos abrimos el fichero "cmdline.txt" en un editor de textos, ya sea GEdit si usamos una Live Ubuntu o con nano desde la terminal. Veréis que el contenido que tiene es el siguiente:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Lo que vamos a hacer es sustituir la oarte que pone "/dev/mmcblk0p2" por la ruta de nuestro disco duro en la Raspberry. En mi caso, como es el único disco duro conectado con una única partición, le pertenece "sda1". Si habéis seguido mis pasos y no hay más unidades conectadas vosotros deberéis tener la misma, pero aseguraros antes. Por lo tanto el fichero nos queda así:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait

Fijaros que no hemos tocado nada más del fichero que la ubicación del "root". Ahora guardarlo y vamos al último paso, que se trata de editar un fichero muy importante: fstab (File System Table). Os recomiendo encarecidamente la lectura del funcionamiento de fstab, ya que no es tan complicado como inicialmente parece.


Paso 4, modificando FSTAB:

Abrimos la partición ext4 que hay en la SD (la que no podemos ver con Windows, de ahí que estemos con un Linux haciendo todo :P) y, como no queremos llevarnos sorpresas, vamos a realizar también una copia de seguridad del fichero, procediendo de igual manera que hicimos con el "cmdline.txt". Yo he hecho una copia del mío llamándola "fstab.original". Para localizar el fichero debéis ir a "/etc/fstab". Una vez hecha la copia abrimos el fichero con un editor de textos y deberemos encontrar algo similar a lo siguiente:

Haz clic para ampliar vista de fstab original



Fíjarosen la tercera línea, hay una referencia a un sistema de ficheros ext4 en el dispositivo "mmc" que es la SD. ¿Qué haremos? Pues vamos a cambiar esa parte por la ruta de acceso de nuestro disco duro, pero ojo, no modifiquéis ninguna otra línea o de lo contrario no nos va a arrancar, ya que siempre necesitamos usar una SD para ello (y es lo que hace la línea superior) así que nos quedará de la siguiente manera:

fstab listo para cargar el sistema desde disco externo


No os preocupéis si no queda alineado todo, ya que no es importante para el buen funcionamiento del fichero. Guardamos cambios, cerramos, apagamos el sistema y sonreímos, puesto que ya hemos hecho toda la faena ;).

Ahora enchufa el disco duro a tu Raspberry Pi (recuerda que sin él no podrás arrancar a partir de ahora), introduce la SD, conecta la corriente y disfruta viendo como se enciende el LED de actividad de tu disco duro al arrancar.... contando que tenga, ¡claro! Como paso adicional puedes intentar crear una partición adicional en el disco o simplemente redimensionar la actual (que será del tamaño de tu SD). La segunda opción es tan sencilla que lo hará tu propia Pi, ¿cómo? Abrimos terminal y escribimos:

sudo raspi-config

Veremos la siguiente pantalla, que vimos la primera vez que iniciamos la Raspberry:

Pantalla de configuración de la Raspberry Pi

Y seleccionamos la opción "expand_rootfs". Dependiendo de la capacidad de tu disco será más rápido o lento el proceso, no desesperes. Personalmente prefiero hacer otra partición y guardar en ella mis ficheros, pero por facilidad para los novatos el método que os he explicado es el mejor. Tranquilos, ya tendremos tiempo de ir aprendiendo todo lo que podemos hacer y, como se suele decir, "Roma no se construyó en un día".

Espero que os sea de utilidad, ya que he priorizado el tutorial a los que tenía para Webmin. Si tenéis dudas, sugerencias o queréis enteraros de los tutoriales que voy preparando os recuerdo que mi Twitter está a vuestra disposición en @drkbcn.

¡Un saludo y hasta entonces!

Android en Raspberry Pi, cada vez más cerca

Hace unos meses se nos anunciaba que se estaba trabajando en una versión de Android para la Raspberry Pi. Incluso pudimos ver alguna captura y un vídeo que se subió que, por lo que se veía, parecía bastante funcional y, lo más importante, basada en Ice Cream Sandwich. Todos pensábamos que en apenas unas semanas podíamos tener la primera release en la calle, pero la realidad es que hasta ahora no ha visto la luz.

Han tenido que ser unos terceros, el grupo Razdroid, quienes hayan conseguido liberar la primera versión al gran público. Hay que decir que ni es estable, ni funcional al 100%, pero desde luego nos deja ir tomando contacto con Android en nuestra Pi. Otro de los inconvenientes de la versión del grupo Razdroid es que está basada en una revisión algo obsoleta: Android 2.3 Gingerbread (basada en una modificación muy conocida, CyanogenMOD), en la que algunas aplicaciones ya no dejan ejecutarse. Por lo menos es más esperanzador tener una versión que probar, que tener una de la que únicamente puedes ver vídeos y creer lo que te cuentan. Por el momento seguiremos de cerca el trabajo de estos chicos, ya que se han puesto manos en la masa con la versión correspondiente de Ice Cream Sandwich y pronto pueden darnos alguna agradable sorpresa. Os dejo con el enlace a su web:

Visitar: Android Pi Wiki

¡A disfrutar las pruebas!

Instalando Webmin (control remoto por web)

¡Ya estamos de vuelta! Hoy os traigo un tutorial que va a hacer las delicias de todos: la instalación de Webmin. En el análisis al modelo de 512 MB de la Raspberry Pi ya lo usé para enseñaros el uso de memoria y comenté que os enseñaría a instalarlo y, posteriormente, a utilizarlo.

Webmin es un configurador de sistemas Unix, a través de web, que facilita enormemente el trabajo de administración de una máquina. Entre sus ventajas destacan el poder gestionar la máquina, sin necesidad de grandes conocimientos de comandos de administración de la shell o de los ficheros implicados en determinadas configuraciones, a través de HTTPS. Lógicamente si podemos administrar y configurar a través de web, podremos hacerlo de forma remota sin necesidad de tener pantalla, estar en casa o delante de la máquina.



Entre las funciones más destacables que podremos utilizar están:
  • Conexiones SSH desde el propio Webmin
  • Subidas y bajadas remotas de ficheros
  • Tareas programadas (cronjobs)
  • Edición sencilla de fstab para automontar unidades
  • Usuarios y grupos
  • Gestor de ficheros
  • Envio de comandos a consola
  • Gestión y visualización de "logs" del sistema
  • Configuración y monitorización de red
  • Configuración de cortafuegos (iptables)
  • Configuración de servidor de correo (en mi caso de POSTFIX)
  • Etcétera
Son tantísimas las opciones de las que dispone que es difícil resumirlas en las más importantes, ya que todas lo son en su medida.

El tutorial que vamos a ver es totalmente válido para cualquier distribución basada en Debian (en mi caso voy a hacerlo en Debian Wheezy en mi Raspberry Pi) y puede realizarse de dos formas distintas: manual o automática. Personalmente me gusta más hacerlo de forma "automática", porque vamos a incluir el repositorio del programa en nuestro fichero de orígenes de software (sources.list). De otra manera deberíamos preocuparnos nosotros de buscar nuevas versiones e instalarlas, pudiendo ser vulnerables a exploits descubiertos en el programa hasta que no actualizásemos.

1.- Añadiendo orígenes:

Lo primero que vamos a hacer es añadir la clave GPG con la que está firmado el repositorio. Para ello abriremos una terminal y escribiremos lo siguiente desde nuestro directorio de usuario:

wget http://www.webmin.com/jcameron-key.asc
sudo apt-key add jcameron-key.asc
rm jcameron-key.asc

Y ahora añadiremos el repositorio a nuestro fichero de orígenes de software. Para ello, y otra vez en la terminal, escribiremos lo siguiente:

sudo nano /etc/apt/sources.list

Y al final agregamos la siguiente línea:

deb http://download.webmin.com/download/repository sarge contrib

Debería estar para Wheezy, pero únicamente tienen para Sarge (aunque funciona igual de bien :P). Ahora ya podemos actualizar e instalar los paquetes necesarios con:

sudo apt-get update
sudo apt-get install webmin

Ya tenemos Webmin instalado y corriendo en nuestra máquina. Enhorabuena.

2.- Configuración básica

Ahora que ya tenemos instalado Webmin, vamos a hacer un par de modificaciones en su configuración para que se adapte mejor a nuestras necesidades. Básicamente cambiaremos el idioma a Español y lo dejaremos preparado para los próximos tutoriales que voy a ir poniendo, que entre ellos ya estoy preparando alguno que otro muy interesante. ;)

Para entrar en Webmin de forma local (es decir, desde nuestra propia red) bastará con abrir el navegador  en otro ordenador e introducir lo siguiente:

https://ipRasperry:10000

Por ejemplo, mi Raspberry está configurada con IP 192.168.1.123, por lo tanto sería:

https://192.168.1.123:10000

Es importante usar https, ya que vamos a realizar una conexión segura en vez del protocolo plano de HTTP. Recordad que si no sabéis la IP de vuestra Raspberry podéis verla ejecutando lo siguiente en una terminal:

ifconfig

En el caso que conectáramos a través de un adaptador inalámbrico sería:

iwconfig

Por si algún despistado aún va con IP dinámica, os recuerdo que hay un fabuloso tutorial para novatos en el blog que os servirá, entre otras cosas, para fijar una IP estática a vuestra Raspberry Pi. Una vez dentro nos pedirá un nombre de usuario y contraseña. Son los mismos credenciales que usas para entrar en tu Raspberry, por lo tanto (y por defecto) son pi y raspberry si estás usando Raspbian Wheezy.

ATENCIÓN: Es muy importante que a éstas alturas tu contraseña de usuario no sea la de por defecto, de lo contrario te arriesgas a que tu Raspberry pase a ser de "dominio público". Si aún no has cambiado tu contraseña házlo de forma inmediata.

Una vez dentro veremos la siguiente pantalla:

Pantalla de inicio de Webmin


Si existe alguna actualización te recomiendo que la realices. Es tan fácil como pinchar en el mensaje que aparece justo debajo (en mi caso me dice que todos los paquetes están al día). Para hacer las cosas más fáciles vamos a poner Webmin en Español, para ello nos vamos a la columna de la izquierda y en la sección "Webmin" vamos a "Change Language and Theme". Supongo que es de lógica que para ponerlo en Español hay que seleccionarlo de la lista, pero por si acaso hay que ir a "Webmin UI language" y en "Personal choice" marcar el idioma que queráis. También existe posibilidad de cambiar el tema a través de "Webmin UI theme", pero personalmente me gusta el que lleva. Una vez que lo tengamos listo pulsaremos en "Make changes" y nos esperaremos a que todo se reinicie.

Como Webmin tiene tantísimas opciones, menús, submenús y configuraciones, lo que haré en las próximas semanas será ir viendo, a través de implementar mejoras en nuestra Raspberry, cada una de éstas opciones. La ventaja que tendremos será que no necesitaremos ser usuarios "expertos" en Linux para poder ajustar opciones como el automontado de discos en el sistema, parado y control de servicios, particionado de unidades, configuración de dispositivos, compartición por red y prácticamente todo lo que puede realizar tu Raspberry con una distribución Linux.

Por el momento os recomiendo ir mirando un poco aquellas opciones que conozcáis mejor, sin meteros demasiado a fondo o sin aplicar cambios si no sabéis qué es lo que estáis haciendo. En todo caso nunca está de más hacer una copia de seguridad de vuestra SD por si acaso. ;)

Por el momento os estoy preparando un tutorial que os va a encantar y que realizaremos con la ayuda de Webmin: montaje de disco externo automático y con permiso de escritura para usuarios y reindexado automático del contenido del mismo en el servidor DLNA que montamos hace poco, gracias a las tareas programadas. Este tutorial nos va a permitir conocer un poquito más un fichero muy importante en el arranque de nuestro sistema (fstab) y la automatización de tareas (cronjobs). No os lo perdáis, porque va a estar muy, pero que muy interesante.

Por si os ha sabido a poco os haré otro avance del segundo tutorial que haremos con Webmin: mover el sistema de ficheros (rootfs o /) a un disco duro externo consiguiendo un rendimiento muy superior al de la SD y un desgaste mínimo de la vida de ésta. Os dejo una captura de mi sistema de archivos para que veáis como he movido la raíz a un disco externo:

Root Filesystem cargado en disco externo (partición de 4 GB clonada de SD)

Recordaros antes de acabar que podéis seguirme en Twitter en @drkbcn. También os recomiendo a @TelecoBosco con los que podréis aprender más sobre Linux / Raspberry Pi y estar al día de las novedades de la misma (felicito profesores y alumnos por la iniciativa) no sin olvidarme de @Farnell_ES que me han apoyado desde el primer momento con los tutoriales y que, llevan unos días dándonos buenas noticias desde la #elec12, como la exclusividad de PiFace.

¡Gracias una vez más a todos y nos leemos de nuevo en apenas unos días!


Analizando la Raspberry Pi de 512 MB

¡Hola de nuevo a todo el mundo! Ya hace unos meses de la salida de la primera Raspberry Pi y nos encontramos en un punto caliente donde la comunidad ha aportado cantidad de soluciones, proyectos e incluso le han salido "competidores" (que han querido subirse al carro de las mini computadoras low cost, olvidándose que lo importante de la misma es el soporte que le da la propia comunidad) y sin duda podemos afirmar que tenemos una pequeña gran ganadora.

Si hacemos un poco de memoria recordaréis que el primer modelo (Raspberry Pi model B) se empezó a comercializar con 256 MB, de los que se destinaban inicialmente 128MB a partes iguales para GPU y RAM. Muchos, poco habituados al mundo de Linux, podrán pensar que dicha cantidad es insuficiente a día de hoy para poder hacer lo que haría una computadora de sobremesa, pero los chicos de la Pi Foundation han sabido jugar sus cartas, ganarse a la comunidad Linuxera y darnos como resultado una excelente máquina que ofrece una versatilidad realmente impresionante.

Justo hace unas semanas nos confirmaban desde la fundación que ampliaban la memoria de los modelos A y B al doble de lo que hasta ahora venía siendo lo habitual, quedándose el modelo A en 256 MB y el modelo B en 512 MB. ¿Ventajas? Absolutamente todas y es que tras testearlo he quedado gratamente sorprendido con el cambio. Tengo que darle las gracias al equipo de Farnell España / element14, que me han hecho llegar el nuevo modelo en apenas unos días para que os pueda contar de primera mano mis impresiones. Sin más dilación os dejo con la review:

Farnell / element 14 nos ha proporcionado el material


1.- Cambios en el exterior

Aunque de primeras puedan parecer idénticas, hay muchas diferencias destacables entre el modelo B de 256 MB y el de 512MB (de ahora en adelante revisión 2 o rev.2). Lo primero que llama la atención es la inclusión de los mounting holes en la PCB (los agujeritos con los que atornillamos las placas base de un ordenador a la caja) que hará las delicias de los modders y desarrolladores caseros, que ahora podrán fijar su RasPi con mayor facilidad a casi cualquier elemento. A su vez se han cambiado serigrafiados en placa que estaban incorrectos, como el "OK" que ahora pasa a ser "ACT" (activity) y "10M" que ahora pasa a ser "100" para el LED de estado de la tarjeta de red. Minipunto para la rev.2 en fijación.

Detalle de uno de los mounting holes y de la serigrafía LED arreglada


El segundo cambio que me ha llamado muchísimo la atención, pero que podrían haber rematado mejor, ha sido la inclusión del P6 (a la izquierda del conector HDMI) que permite hacer reset al BCM2835 y, por lo tanto, reseteando nuestra Raspberry Pi. Antes os decía que lo podrían haber rematado mejor porque les ha faltado incluir los dos pines, ya que nos encontramos simplemente los puntos de placa a los que deberemos soldar un pulsador que cortocircuite ambos pines. Esto puede ser interesante para los fabricantes de cajas, a los que si se les enciende la bombillita pueden incorporar dicho pulsador y unos pines que bajen a placa para hacer contacto, a los más estilo usuario novato para que no necesite soldaduras. Os dejo foto y os marco en rojo los dos pines:

Detalle de P6 que permite resetear la Raspberry Pi


Otro cambio a favor de la rev. 2 y por lo tanto un minipunto más.

Ya con menor importancia se observa un cambio de los conectores de HDMI, RJ45, USB -ahora rematados en plástico negro-, jack de audio 3,5 por uno azul "feote" -lo prefería negro- y de la supresión de los pines en P2 para dejar desnudos los conectores en placa. No os preocupéis porque la supresión de dichos pines (o headers, que suele decirse en el argot) no os va a afectar, ya que eran utilizados únicamente en la producción de la placa, eso sí, sigo pensando que podrían haber empleado dos de ellos para el reset de P6 ;). En este caso empate en ambas, ya que no afecta en nada al usuario ninguno de los cambios.

A la izquierda la rev. 2 y a la derecha la rev. 1



2.- Cambios en el interior

Aquí es donde viene lo realmente interesante de la revisión 2: el aumento de memoria a 512MB. Pensad el cambio que puede suponer tener asignados 128MB en RAM y 128MB en GPU (o en muchos casos menos, para no asfixiar a la máquina). Vale que muchas distribuciones pueden cargarse en 64MB de RAM, pero eso no implica que vaya a ir rápido ni que podamos hacer maravillas con ellas. De ahí que muchos hiciéramos particiones GPU/RAM del tipo 32/224MB si teníamos pensado no arrancar un sistema de ventanas o, por lo menos, no hacer uso de él como algo habitual, pero aún así si intentábamos ejecutar alguna aplicación con un gran consumo de memoria (como puede ser un cliente torrent con simultáneas conexiones y una enorme cola de espera de peers) la cosa podía acabar con un sistema totalmente colgado. Los que hayan probado LXDE también serán conscientes de lo que hablo, ya que al mover una ventana, cargar una aplicación o intentar navegar por una página con bastante contenido, se convertía en un suplicio.

Para las pruebas he utilizado dos distribuciones completamente distintas: Debian Wheezy (Raspbian) con soporte ARMHF y en el otro lado del ring Raspbmc, ambas versiones preparadas para soportar los recientes 512MB. Os recuerdo que si es vuestra primera toma de contacto podéis usar de guía el tutorial para novatos que hay en el blog. A su vez para el testeo y pruebas de rendimiento he utilizado hardinfo en Raspbian, que genera unos informes muy completos de todo el sistema. Si queréis instalarlo debéis abrir una terminal y escribir:

sudo apt-get install hardinfo


Y para ejecutarlo podéis ir a "System Tools" en vuestro menú y posteriormente a "System Profiler and Benchmark". Tras ejecutar todos los test no he encontrado ninguna diferencia apreciable, aunque es de lógica porque todos ellos son de testeo de CPU y ésta no se ve afectada en rendimiento por la cantidad de memoria. Los resultados han sido los siguientes:

Modelo 512 MB:

CPU Blowfish
This Machine    Unknown MHz    98.724
CPU CryptoHash
This Machine    Unknown MHz    9.160
CPU Fibonacci
This Machine    Unknown MHz    26.000
CPU N-Queens
This Machine    Unknown MHz    84.890
FPU FFT
This Machine    Unknown MHz    145.225
FPU Raytracing
This Machine    Unknown MHz    129.625

Modelo 256 MB:

CPU Blowfish
This Machine    Unknown MHz    98.610
CPU CryptoHash
This Machine    Unknown MHz    9.143
CPU Fibonacci
This Machine    Unknown MHz    25.991
CPU N-Queens
This Machine    Unknown MHz    84.871
FPU FFT
This Machine    Unknown MHz    145.025
FPU Raytracing
This Machine    Unknown MHz    129.327


Sorprende incluso que el modelo de 256 haya tenido menores tiempos (a menor sea el valor, mejor es el resultado) pero como dije el resultado es inapreciable y, con toda seguridad, variable en un segundo test. Por lo tanto aquellos que piensen que van a ganar un mayor rendimiento en proceso van equivocados, ¿por qué? Porque nos encontramos ante la misma CPU y por lo tanto es imposible tener mejores resultados en ese aspecto, eso sí, siempre podemos hacer un overclock/overvolt a través de la configuración y reescalar la CPU a una frecuencia mayor (800 MHz es un buen valor sin tener que recurrir al overvolt)

¿Para qué sirve entonces el extra de memoria? Pues para muchísimas cosas que no dependen de la velocidad de reloj de la CPU. Pensad que en RAM vamos a tener los programas que se estén ejecutando y los datos de éstos, por lo que si tenemos una pequeña cantidad de memoria física deberemos recurrir a la virtual.

¿Para qué sirve la memoria virtual? La memoria virtual o de intercambio (la partición swap en Linux) se utiliza para que los programas puedan seguir trabajando con normalidad cuando la memoria física de la máquina se ha "agotado", sacrificando la velocidad de acceso de ésta por una velocidad menor al ser emulada en nuestro disco duro, pero si hacemos un uso excesivo de la swap va a tener ciertos problemas en nuestra Raspberry Pi. ¿Por qué? Porque os recuerdo que trabajamos con unidades flash como sistema de almacenamiento (las tarjetas SD, vamos) y dichas unidades tienen un ciclo de vida basado en la cantidad de escrituras que hagamos en ellas, por lo tanto cada vez que estemos haciendo uso de la swap por habernos quedado sin memoria estaremos acortando la vida de nuestra tarjeta. Y aquí está una de las principales ventajas de disponer de más memoria, y es que al tener mayor capacidad vamos a tener que recurrir en contadas veces a la memoria virtual y, por lo tanto, vamos a degradar menos nuestra tarjeta. Así que otro minipunto para el modelo de 512MB.

3.- Controlando el uso de memoria con Webmin

Webmin es un sistema de administración para sistemas Unix a través de web. En breve os enseñaré a instalarlo y utilizarlo, ya que es una herramienta realmente útil para gestionar la Raspberry Pi sin necesidad de estar delante o tenerla conectada a un monitor. He puesto ambas máquinas a funcionar, navegador por Internet y a hacer distintas tareas para provocar un uso de memoria y así poder analizar los resultados. En el caso de la rev.2 el resultado ha sido el siguiente:

Click en la imagen para ampliar
Como podéis ver el uso de la memoria virtual ha sido de 0 bytes tras navegar por Internet, instalar el propio Webmin, hacer los test de CPU y varias cosas más. Como os dije esto va a ser beneficioso para la vida de nuestra tarjeta SD, ya que al no estar escribiendo en ella vamos a ahorrar ciclos de vida. Fijaros a su vez que, tras lanzar LXDE y estar a una resolución de 1080p me sobran 281.96MB de la memoria que le he asignado como RAM. Una cifra bastante buena si contamos todo lo que estamos corriendo y que nos va a permitir lanzar aplicaciones que consuman mucha memoria, como podrían ser clientes torrent o navegadores web.


Veamos ahora la captura de Webmin para el mismo procedimiento con el modelo de 256MB:
Click en la imagen para ampliar

Fijaros ahora en las estadísticas que arroja Webmin. En apenas 3 minutos de haber iniciado la máquina y haber abierto el navegador, con la página de inicio por defecto, ya hemos hecho uso de la memoria virtual (nota posterior: tras 15 minutos ya había aumentado a 512kB). A su vez tenemos una menor cantidad de procesos corriendo, que propicia un menor uso de memoria y aún así ya hemos recurrido a la swap. ¿Cuál sería entonces la solución adecuada? Restarle MB a la GPU para asignárselos a RAM. ¿Qué conlleva dicho cambio? Un menor rendimiento en las X (interfaz gráfica) y por lo tanto nos va a costar mover más los gráficos en pantalla.

En conclusión, tener más memoria física nos sirve para usar menos la partición de intercambio, mejorar el rendimiento gráfico en consecuencia y alargar la vida de nuestra tarjeta de memoria al hacer menor uso de escrituras en ella. Otro minipunto para la rev. 2.

4.- Comparativa de precios

Aquí viene la mejor parte de todas; el precio. Tal vez estaréis pensando que el aumento de memoria va a tener repercusión en el precio, pero la buena notícia es que podéis adquirir la nueva versión por el mismo precio que hasta ahora tenía la primera revisión. No creo que haga falta decirlo, pero por si acaso otro minipunto para la rev. 2.

Por si hay algún despistado (que más de uno me ha preguntado por mail dónde adquirirla) os recuerdo que la mejor opción, a mi parecer, la tenéis en Farnell / element14. En apenas 3 semanas (actualmente) tendréis vuestra Raspberry Pi en casa lista para funcionar ;).

5.- Probando como media center

Como comenté anteriormente he probado a usar la nueva versión de Raspbmc. Tras un largo periodo de instalación, que cuento que duró casi 40 minutos en total, pude arrancar el centro multimedia. Como novedad destacable está la inclusión de las librerías libCEC 2.0 que permitieron que controlase la Raspberry con el mando de mi TV a través de CEC. La verdad es que noté que usando el mando de la televisión iba mucho más fluido que si usaba el ratón y teclado, así que me armé de valor a probar ambas máquinas con contenido de YouTube.
La cantidad de memoria en ambas reproduciendo vídeos a 720p y 1080p rondó entre el 40% y el 70%, cantidad más que suficiente para que el funcionamiento fuese correcto, pero el problema de Raspbmc (o de los port que hay de XBMC a arquitecturas ARM) es el excesivo uso de la CPU. En mi caso puse ambas máquinas a funcionar a 800Mhz, haciendo así uso de 100Mhz más de lo habitual en la Raspberry, y aún así el consumo de la misma rondaba valores constantes de más del 65 y 70%. Aquí no culpo a la Raspberry, porque recuerdo haber utilizado XBMC en la Xbox original funcionando a menos de esa velocidad de CPU e ir mucho más fluido entre menús. Supongo que con el tiempo irán limando el port para ARM y tendremos versiones mucho más fluidas al moverse entre opciones o con tiempos de respuesta más cortos.
Aún así y como es de lógica funcionó notablemente mejor en el modelo de 512MB, ya que tanto GPU como RAM disponen de más MB con los que poder trabajar, consiguiendo un mayor número de FPS (frames per second) y un menor tiempo de carga de complementos, imágenes, etcétera.

Como era de esperar, otro minipunto al modelo de 512MB.


6.- Veredicto final

Aunque creo que no es ni necesario decirlo, mi veredicto es que el nuevo modelo de 512MB o revisión 2 de la Raspberry Pi es mucho más que una simple revisión o ampliación de memoria. Va a permitir alargar la vida de nuestra SD, va a reducir tiempos de carga, vamos a conseguir que la gráfica pueda rendir más, tener mayor cantidad de programas corriendo, vamos a tener la posibilidad de añadirle un botoncito de reset si queremos, podemos fijarla con los mounting holes a cualquier supercifie que se nos ocurra, etcétera, etcétera, etcétera. En resumen, que no hay motivo para no actualizarnos a este nuevo modelo y sacarle el 100% a nuestra Raspberry Pi como se merece. Sin medias tintas, sin medias memorias y por la misma cantidad de dinero. Si la pobráis me entenderéis. ;)

Una vez más agradecer al equipo de Farnell / element14 el interés mostrado y el material cedido (ánimo, que sé que tenéis faena con el Electronica 2012). En breve nos veremos con más tutoriales, análisis, ideas y cualquier sugerencia que me hagáis llegar a través de aquí o de Twitter (@drkbcn)

Servidor DLNA con la Raspberry Pi


¡Hola de nuevo a todo el mundo!

Tras un periodo de inactividad, vuelvo a la carga con un nuevo tutorial que os servirá para convertir vuestra Raspberry Pi en todo un servidor DLNA/UPnP. Muchos puede que se pregunten la utilidad de dicho servidor, pero si os digo que va a permitir compartir vuestros ficheros multimedia a través de toda la red, que si tenéis una SmartTV, videoconsola de nueva generación, smartphone, tablet, etc... os dejará acceder a dicho contenido de forma instantánea y sin tener que "descargarlo", ¿verdad que os va gustando más la idea? Pues vamos a ello.

Como siempre vamos a ir a por software libre, sencillo de usar y que gaste los mínimos recursos posibles de nuestra pequeña, así que me he decidido por
miniDLNA. Si buscáis información encontraréis muchos otros, pero en particular me gusta la sencillez de dicho software. Empezaremos arrancando nuestra Pi y escribiendo lo siguiente en la terminal:


sudo apt-get install minidlna

Así conseguimos descargar e instalar el paquete de miniDLNA, pero ahora falta configurarlo para que se adapte a nuestras necesidades y el origen de datos sea nuestra carpeta de descargas, de música o simplemente la que nos venga en gana. Sin pensárnoslo demasiado escribiremos:

sudo nano /etc/minidlna.conf

Ahora ya tenemos el fichero de configuración en pantalla así que vayamos a las secciones que realmente interesan configurar. Lo primero va a ser configurar las rutas de los directorios que queremos que indexe, en mi caso voy a decirle que me busque en un HDD externo que le tengo conectado a la Raspberry, por lo que el directorio deberéis ajustarlo a vuestra realidad. Localizamos la entrada:


media_dir=/opt

Fijaros que podemos filtrar en un directorio para que indexe únicamente un tipo de fichero mediante el uso de "A","V" y "P". Si queremos que indexe audio usaremos "A", para vídeo "V" y para fotos "P". Si por el contrario decidimos indexar todo no añadiremos letra. Lo que actualmente está haciendo ésta entrada es indexar contenido multimedia dentro de la carpeta "/opt" sin tener en cuenta el tipo al que pertenece. Como os he comentado anteriormente yo voy a indexar un disco externo que tengo montado, así que en mi caso sería:


media_dir=/mnt/disco/Descargas
media_dir=/home/pi
media_dir=A,/mnt/pendrive/Musica

Se puede añadir más de una entrada a "media_dir", por lo que podemos configurar diferentes carpetas, métodos de indexado, unidades, etc. Si analizamos las tres entrada que he puesto podemos resumirlas en:

  • Indexado de todo el contenido en "/mnt/disco/Descargas"
  • Indexado de todo el contenido en "/home/pi"
  • Indexado de audio de "/mnt/pendrive/Musica"
Espero que el ejemplo quede bastante claro e ilustrado. Lo siguiente que vamos a hacer es darle nombre al servidor, para que cuando accedamos a él desde otro dispositivo sea fácil de encontrar. Para ello bajamos unas líneas hasta que localizamos:


#friendly_name=My DLNA Server

Bastará con eliminar la amohadilla del principio para que deje de ser una línea comentada y pasaremos a poner el nombre que queramos despues del igual. En mi caso lo he dejado así:


friendly_name=RasPi DLNA

Como siempre muy sencillo, ¿verdad? A mi personalmente no me gusta tocar más elementos de la configuración, aunque para el que quiera trastearla puede mirar las distintas opciones que hay y contrastarlas con la ayuda que dispone la web de miniDLNA. El último paso para guardar nuestra configuración es presionar "Ctrl + O" para guardar el documento en "nano" y posteriormente "Ctrl + X" para salir.

Ahora ya tenemos nuestro servidor corriendo, pero debéis tener un par de cositas en cuenta:
  • Para reindexar el contenido hay que hacerlo manualmente (lo prefiero para no gastar los pocos recursos libres de mi Pi)
  • Se nos ha creado un arranque automático en "/etc/init.d/minidlna" (que es lo lógico si pretendéis que arranque con el sistema)
Por último un par de consejos para mantener miniDLNA:
  • Podemos hacer uso de "service" para iniciar (start), parar (stop), reiniciar (restart), ver el estado (status) y forzar la recarga (force-reload) del servicio. Para ello:

sudo service minidlna comando

Donde el comando son cada una de las opciones que os he puesto arriba, siendo las más comunes "start" y "stop".

  • Podemos forzar el borrado de cache con el uso de:

sudo minidlna -R

Y con esto doy por explicado el pequeño tutorial de cómo montarse un servidor DLNA/UPnP con la Raspberry Pi. 

No me despido sin antes deciros que estoy preparando una review de la nueva Raspberry Pi (rev. 2) con 512 MB de RAM, que nos han cedido los chicos de Farnell España (a los que agradezco su colaboración en todo momento) para que podáis conocer las mejoras que supone dicho incremento de memoria en la placa.

Recordad que ya podéis comprar el nuevo modelo en su web al mismo precio que el anterior modelo (todo un chollo).

¡Nos leemos muy pronto! ;)

Kernel 3.2.23 ARMHF para Raspberry Pi

 
Buenas de nuevo a todos :)

Estos días hemos estado trabajando en configurar y poner a punto nuestra Raspberry. Lo que hoy os traigo es un pequeño "Kit Kat" a los tutoriales que hemos visto hasta ahora. Se trata de un nuevo kernel, compilado con soporte para coma flotante, que agiliza bastante muchos procesos. Si lo comparamos con el 3.1.9 que trae por defecto Raspbian podremos ver que, además de una mayor rapidez en determinadas funciones, como mejoras tiene:

- Mayor cantidad de firmwares/drivers soportados
- Mayor estabilidad de la máquina

Por el momento he comprobado que soluciona los problemas de kernel panic que sufría de vez en cuando mi Raspberry cuando hacía trabajar en exceso a la CPU o en altas cargas de uso de red (esto va a servirnos para cuando veamos cómo convertirla en un cliente torrent). Aquí os dejo una captura de mi pequeña corriéndolo sin problemas:


 He intentado hacerlo algo más liviano compilándolo yo mismo, quitándole soporte para cosas que no uso, pero llevo varios días peleándome para que me funcione la imagen generada (he hecho una consulta para ver si me solucionan el problema, así que si recibo respuesta os lo cuento) 

Os dejo de momento con uno compilado, de jorisvergeer, a partir de la rama de bootc. Instalarlo es muy sencillo, así que paso a daros las instrucciones:

- Primero extrae la SD de tu Raspberry y renombra de la partición FAT el fichero "kernel.img" a "kernel.img.old" (por ejemplo)

- De la partición ext4 localiza /lib y las carpetas "modules" y "firmware". Renómbralas también añadiéndoles un ".old" al nombre (modules.old y firmware.old)

- Copia, del fichero descargado, el "kernel.img" a la partición FAT y las carpetas "modules" y "firmware" dentro de /lib en la partición ext4.

Hemos renombrado todas las carpetas y ficheros por si en algún momento queremos volver hacia atrás o no nos acaba de convencer el nuevo kernel. Para ello simplemente bastará con revertir el proceso que acabáis de hacer.

Os dejo con el enlace de descarga: Bootc Kernel 3.2.23 ARMHF

Nos vemos muy pronto con el siguiente tutorial que, como ya dije, montaremos un servidor de streaming DLNA.

Actualizar firmware, IP estática, acceso SSH + SFTP en Raspberry Pi


Como ya sabéis ésta es la segunda entrega de una serie de tutoriales que vamos a dedicar a la Raspberry Pi. Si has llegado directamente aquí, te recomiendo leer antes mi anterior tutorial: Raspberry Pi para novatos.

Para los que nos quedamos tras la primera configuración y ejecución del sistema base Raspbian os habréis dado cuenta que, tras varios inicios de vuestra máquina, la IP ha ido variando. Esto se debe a que, por defecto, Raspbian utiliza DHCP para asignar una IP a nuestra Raspberry, hecho nada recomendable si lo que pretendemos es montar algún tipo de servidor en ella, ya que dificultaría la localización de la misma en la red cada vez que se nos asignase una nueva IP. Existen dos posibles soluciones al problema:

  1. Seguir con DHCP, despreocupándonos de la configuración manual de los parámetros de red y configurar en nuestro router una asignación estática de IP, mediante DHCP, gracias a la dirección MAC de la ethernet de la Raspberry (supongo que a más de uno le habrá sonado a Chino).
  2. Editar los ficheros de configuración de red de Raspbian para que se le asigne la IP que nos interese a nosotros. No cabe decir que éste es el método que yo voy a utilizar y el que recomiendo.
Tal y como he dicho no voy a entrar en configuraciones de routers, ya que para cada modelo, fabricante, etc. es un proceso totalmente diferente y nos perderíamos. Siguiendo por lo tanto la segunda opción vamos a configurar nuestra IP para que sea estática, por lo tanto enciende tu Raspberry, haz login y prepárate.

Para empezar vamos a necesitar algunos valores, como la IP deseada, máscara de red, puerta de enlace y servidores DNS. De no conocer dichos valores escribiremos:

ifconfig

Una vez que tengamos todos los valores anotados editaremos el fichero de configuración con:
sudo nano /etc/network/interfaces

Allí deberíamos encontrarnos con el siguiente texto:


iface eth0 inet dhcp

Que básicamente lo que hace es asignarme a la interfaz eth0 una IP a través de DHCP. De tener más de una NIC irían sumando números, como por ejemplo eth1, eth2, etc. Para conseguir nuestro propósito lo que haremos será cambiar la línea por:

iface eth0 inet static
address 192.168.1.123
netmask 255.255.255.0
gateway 192.168.1.1

Debes tener en cuenta que en address vamos a poner la IP deseada para nuestra Raspberry, en mi caso 192.168.1.123 (fácil de recordar), en netmask la máscara de red y en gateway la puerta de enlace.

Ahora pasaremos a configurar los servidores DNS, para ello escribiremos:


sudo nano /etc/resolv.conf

Y borraremos lo que haya para agregar lo siguiente:

nameserver 192.168.1.1
nameserver 8.8.8.8

Con ambas líneas agregamos a la puerta de enlace como DNS primario, ya que muchos routers actúan como tal si están correctamente configurados, y con la segunda hemos agregado el servidor DNS de Google. Ambos valores pueden ser cambiados por los servidores DNS que más os gusten, ya sean los de vuestra compañía o cualquier otro (no hay problema en usar DNS que no son de nuestro propio ISP)

Ahora que ya tenemos una IP fija lista es momento de reiniciar para tomar nuevos valores. Para ello escribiremos el siguiente comando:

sudo reboot

Pasados unos segundos tendremos nuestra pequeña con su IP estática, lo que nos va a permitir tenerla bien localizada en la red en todo momento. El siguiente paso va a ser probar una conexión remota desde la propia red. Para ello encenderemos otra máquina que tengamos y accederemos mediante un cliente SSH. Tenemos dos soluciones:

Solución de acceso remoto con Windows:
Empezaremos descargando un cliente SSH, como por ejemplo PuTTy que es totalmente gratuito. Como pros son su reducido tamaño y portabilidad, puesto que no necesita instalarse y actúa como un portable. Una vez lo tengamos descargado, lo ejecutamos y le damos los valores necesarios:

PuTTy es un cliente SSH gratuito y completo para Windows

Le pinchamos a "Open" y si todo es correcto nos encontraremos con una pantalla que nos pide nuestro login y, de forma posterior, nuestra contraseña. Una vez identificado correctamente estarás dentro de la máquina pudiendo hacer lo mismo que si estuvieras delante. Para Linux es aún más sencillo, teniendo simplemente que escribir en una terminal lo siguiente:

ssh pi@192.168.1.123

O si queremos que nos importe la sesión gráfica (no os lo recomiendo, ya que si os acordáis redujimos a 32 MiB la capacidad de la GPU):


ssh -X pi@192.168.1.123

Y ahora ya podemos controlar totalmente nuestra máquina, sin necesidad de tenerla conectada a una salida de vídeo, dando servicio 24h/365 días al año, por un consumo de unos 6€ aproximados de luz. Genial, ¿verdad? Pues sigamos dándole más funcionalidades.
Ahora vamos a pasar a realizar una conexión por SFTP. Esto nos va a permitir transferir ficheros de un host determinado a nuestro "Raspberry Server". Siguiendo en la línea del software gratuito usaremos FileZilla. En Windows podéis descargarlo de aquí y para los usuarios de Linux bastará con instalarlo desde repositorios mediante:
sudo apt-get install filezilla

Arrancamos el programa y lo configuramos de la siguiente manera:

SFTP es un protocolo que transfiere ficheros en conexiones fiables

Es importante que cambiéis el puerto al 22, porque de lo contrario va a intentar conectar al puerto FTP, mientras que nosotros estamos sirviendo SFTP. Al conectar deberemos ver el contenido de la Rasp a la derecha y, al lado izquierdo, nuestro host.

FileZilla es un cliente FTP y SFTP con licencia GNU/GPL. Es multiplataforma.

Llegados a este punto ya podemos controlar remotamente, pasar ficheros y lo único que nos queda es poner al día nuestro firmware. Para ello vamos a utilizar la herramienta rpi-update de Hexxeh. Para poder utilizar vamos a necesitar hacer un par de cosas antes, así que empezaremos instalando la utilidad git, que nos permitirá utilizar el updater. Para ello escribiremos en nuestra raspberry los siguientes comandos:

sudo apt-get install git
sudo apt-get install ca-certificates
sudo wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update
sudo chmod +x /usr/bin/rpi-update

Momento de actualizar nuestros firmwares, con la pequeña diferencia que aquí no hay riesgo alguno de quedarnos con un ladrillo, ya que todo es mediante software. Para ello escribiremos en la Raspberry:

sudo rpi-update 224

Consiguiendo así actualizar en apenas unos minutos y haciendo, a su vez, la repartición de memoria en 224 MB para CPU y 32 para GPU como ya habíamos hecho antes.

Tras actualizar el firmware deberemos reiniciar para que surja efecto

Al finalizar se nos mostrará un mensaje advirtiéndonos que es necesario reiniciar para activar el nuevo firmware, así que procederemos a ello con la instrucción que vimos tras guardar los ficheros de configuración de IP estática.

Y con esto hemos acabado con el segundo tutorial de configuración básica para novatos. En el próximo personalizaremos los mensajes de bienvenida de nuestra Raspberry e instalaremos un cliente DLNA (streaming UPnP) para que sirva todo el contenido multimedia de nuestros discos o SD al resto de dispositivos compatibles en la red. Si hasta entonces quieres seguirme con mayor regularidad puedes hacerlo en mi Twitter (@drkbcn) en el que publico, entre otras cosas, noticias y proyectos interesantes relacionados con la Raspberry Pi.

¡Hasta entonces! 

PD: Gracias a la gente de Farnell España / element14 por difundir, a través de su Twitter, mis tutoriales.


Raspberry Pi para novatos

Hemos migrado (y actualizado) el contenido de esta página a:
https://www.servicio365.com/raspberry-pi-para-novatos/
¡Disculpen las molestias!