Apuntes de Linux - Instalando Arch Linux en una "RasPi".

--

--

"Tres tristes tigres comen trigo en un trigal ...". A esto nos suena el nombre de este dispositivo llamado Raspberry Pi, a un trabalenguas. Lejos de la difícil pronunciación en algunas ocasiones tenemos delante nuestra un PC minimalístico con fines educativos y de bajo coste. Evidentemente el tamaño y el precio viene determinado por la sencillez del hardware, pero a dicho dispositivo le podemos encomendar infinidad de tareas sencillas o aplicaciones que no consuman excesivos recursos que realizaríamos con cualquier otro equipo.

Podemos descargar la imagen que deseemos instalar desde esta url:

http://www.raspberrypi.org/downloads

En este caso vamos a instalar Arch Linux ARM. ¿Porqué Arch Linux? Tiene fácil respuesta.

Bajo mi punto de vista y como impresión personal, luego cada uno que utilice lo que quiera. Un equipo de estas características técnicas debería utilizar un sistema limpio, sin excesivos servicios en el arranque y menos aún que sean dependientes unos de otros sin tener relación alguna entre ellos para un correcto inicio.

Después de esta consideración preliminar vamos al lío,

1. Instalación:

Para llevar a cabo la instalación necesitamos un lector de tarjetas SD, en mi caso utilizaré el lector de un Asus EeePC 900HA con Arch Linux (i686) instalado para escribir la imagen descargada en el correspondiente dispositivo de almacenamiento. Para este proyecto se utilizará una tarjeta con una capacidad de 8 GB.

Insertamos la tarjeta en el lector y consultamos dmesg desde un terminal. Lo habitual si sólamente tenemos un disco duro es que reconozca el medio de almacenamiento como /dev/sdb.

--

[ 1008.897980] scsi 2:0:0:0: Direct-Access Single Flash Reader 1.00 PQ: 0 ANSI: 0
[ 1009.188075] sd 2:0:0:0: [sdb] 15278080 512-byte logical blocks: (7.82 GB/7.28 GiB)
[ 1009.189155] sd 2:0:0:0: [sdb] Write Protect is off
[ 1009.189175] sd 2:0:0:0: [sdb] Mode Sense: 03 00 00 00
[ 1009.192092] sd 2:0:0:0: [sdb] No Caching mode page found
[ 1009.192109] sd 2:0:0:0: [sdb] Assuming drive cache: write through
[ 1009.198138] sd 2:0:0:0: [sdb] No Caching mode page found
[ 1009.198156] sd 2:0:0:0: [sdb] Assuming drive cache: write through
[ 1009.199487] sdb: sdb1
[ 1009.204049] sd 2:0:0:0: [sdb] No Caching mode page found
[ 1009.204072] sd 2:0:0:0: [sdb] Assuming drive cache: write through
[ 1009.204092] sd 2:0:0:0: [sdb] Attached SCSI removable disk

--

Una vez hecho esto comprobamos de que no la monte el sistema automáticamente o que la hayamos estado usando antes de llevar a cabo la instalación.

--

[txus@TITAN raspi]$ df -Th
S.ficheros Tipo Tamaño Usados Disp Uso% Montado en
/dev/sda5 ext4 19G 9,1G 8,3G 53% /
dev devtmpfs 497M 0 497M 0% /dev
run tmpfs 499M 504K 498M 1% /run
tmpfs tmpfs 499M 0 499M 0% /dev/shm
tmpfs tmpfs 499M 0 499M 0% /sys/fs/cgroup
tmpfs tmpfs 499M 4,0K 499M 1% /tmp
/dev/sda6 ext4 55G 17G 36G 32% /home
/dev/sda1 ext4 179M 32M 134M 19% /boot
/dev/sda7 ext4 72G 52M 68G 1% /mnt/datos

--

Una vez hemos comprobado de que no está la tarjeta montada accedemos al directorio donde hemos descargado y descomprimido la imagen de Arch Linux. La escribimos con la orden:

--

[txus@TITAN raspi]$ sudo dd if=archlinux-hf-2013-07-22.img of=/dev/sdb
3829760+0 registros leídos
3829760+0 registros escritos
1960837120 bytes (2,0 GB) copiados, 581,595 s, 3,4 MB/s

--

Este proceso puede llevar varios minutos, por lo cual hemos de ser pacientes hasta que esté completada la operación de escritura en el dispositivo. Cuando termine de escribir la imagen podemos retirar la tarjeta e insertarla en nuestra "RasPi".

2. Accediendo al dispositivo.

Una vez arrancada debemos buscar cual ha sido la dirección IP asignada por el router, en mi caso para tener cierto control sobre las direcciones asignadas dinámicamente (dhcp) tengo configurado el mismo para que las comience a asignar a partir de 192.168.0.100. Podemos acceder bien o a la configuración del router o mismamente buscarla utilizando nmap.

Cuando sepamos la IP que está utilizando accedemos al dispositivo a través de SSH como root, la contraseña por defecto es root:

--

[txus@VULCANO ~]$ ssh root@192.168.0.130
root@192.168.0.130's password:

--

3. Redimensionando el sistema de ficheros.

El primer paso ya que es el que considero más tedioso y que puede darnos algún tipo de problema trata de asignar todo el espacio disponible de la tarjeta SD al directorio raíz, Digo tedioso porque en las imágenes anteriores sólamente debíamos de crear y redimensionar una partición primaria. Con la nueva imagen hemos de borrar una partición extendida, crearla de nuevo y redimensionar al total de espacio disponible, así mismo realizar lo mismo creando una unidad lógica y redimensionarla.

Como es un proceso algo tedioso y quizá algo difícil de entender a usuarios que no hayan utilizado nunca fdisk lo pongo en imágenes:

--

--

Ejecutamos fdisk y seleccionamos la tarjeta SD. En este caso la identificación de la misma es /dev/mmcblk0.

--

--

Borramos la partición número 2.

--

--

Le damos órden de mostrar la tabla de particiones y creamos una nueva particion extendida. Los valores de inicio y de final serán los que nos ofrezca la aplicación por defecto generando una partición que ocupe el resto de espacio libre en la tarjeta SD.

--

--

En este paso crearemos la unidad lógica dentro de la partición extendida, también ocupara todo el espacio de la partición.

--

--

Imprimimos de nuevo la tabla de particiones para comprobar que han sido creadas correctamente.

--

--

Escribimos los cambios en las particiones y reiniciamos la Raspberry Pi.

A continuación accedemos de nuevo al dispositivo y procederemos a extender el sistema de archivos a toda la unidad lógica con la órden resize2fs e indicaremos /dev/mmcblk0p5.

--

--

4. Configuración.

El primer paso vá a ser actualizar el gestor de paquetes, instalaremos haveged que es un generador de entropía para acelerar la creación de las claves necesarias, actualizaremos Arch Linux ARM y crearemos un fichero de intercambio swap y lo activaremos. Este proceso inicial lo podemos resumir en la siguiente línea para intentar automatizar en lo posible la instalación inicial.

--

[root@alarmpi ~]# pacman -Sy pacman && pacman -S haveged && haveged -w 1024 && pacman-key --init && pkill haveged && pacman -R haveged && pacman -S archlinux-keyring && pacman-key --populate archlinux && pacman -Syu && fallocate -l 128M /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile.

Montaremos el fichero de intercambio editando /etc/fstab dejándolo de esta forma:

--

--

Como paso opcional para ir liberando espacio en la tarjeta SD ejecutamos la órden y borramos la caché de paquetes almacenados para la actualización del sistema:

--

'pacman -Scc'

--

Reiniciamos el sistema para comprobar que el fichero swap se monta correctamente con la orden:

--

'systemctl reboot'

--

El proceso de castellanización del sistema es similar a cualquier otra instalación de Arch Linux hecha de la manera habitual. Editamos el fichero /etc/locale.gen y buscamos la línea correspondiente a los locales que querramos utilizar. En este caso "es_ES@euro ISO-8859-15" y la descomentamos.

Acto seguido continuamos añadiendo la línea "LANG=es_ES@euro" al fichero /etc/locale.conf y generamos las locales con la órden "locale-gen" a través del intérprete de comandos. Después de seguir estos pasos creamos el fichero /etc/vconsole.conf y añadimos la linea "KEYMAP=es.

La elección de la zona horaria la realizamos creando un enlace simbólico a /etc/localtime de esta manera:

--

[root@alarmpi ~]# ln -s /usr/share/zoneinfo/Europe/Madrid /etc/localtime

--

Editamos el nombre de la máquina ejecutando 'echo raspi-3g > /etc/hostname' y posteriormente creamos un usuario para poder trabajar en nuestra "RasPi" sin temor a estropear nada:

--

[root@alarmpi ~]# useradd -m -G wheel,storage,power,audio,video -s /bin/bash txus && passwd txus
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

--

Ahora dependiendo del uso que le vayamos a dar, en mi caso no vá a ser utilizada de la manera habitual y además vá a precisar de bastantes permisos para ejecutar una u otra aplicación; vamos que el nivel de la política de seguridad del sistema vá a ser demasiado permisiva yo he optado por la utilización de sudo sin pedirme contraseña.

En primer lugar instalamos sudo si no aparece instalado de antemano con el comando ' pacman -S sudo' y como ya tenemos el usuario agregado al grupo "wheel" podemos hacer uso del mismo una vez editemos el fichero /etc/sudoers.

Lo habitual sería editarlo de esta manera:

--

## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL

--

En mi caso y dado lo excepcional de la situación para este proyecto mi configuración es la siguiente:

--

## Same thing without a password
%wheel ALL=(ALL) NOPASSWD: ALL

--

5. Instalación del entorno gráfico.

En este manual quería además incluír la instalación de xorg+xfce4+slim, dado que así quedaría una configuración de lo más funcional. Vamos entonces a ello.

Instalaremos todos los paquetes necesarios desde una sola ejecución de pacman:

--

pacman -S xorg-server xorg-xinit xorg-utils xorg-server-utils mesa mesa-demos xf86-video-fbdev xf86-video-vesa xfce4 xfce4-goodies slim

--

Una vez instalados todos los paquetes nos centramos en habilitar slim en systemd:

--

systemctl enable slim

--

Antes de acceder a la cuenta de usuario que hemos creado anteriormente, o también como si deseamos iniciar sesión como root debemos crear el fichero .xinitrc tanto en /root, como en nuestro directorio de usuario (/home/usuario) y añadiremos la siguiente línea:

--

exec xfce4-session

--

Podemos aprovechar la ocasión para reiniciar el sistema o bien levantar slim y acceder ya a XFCE4:

--

systemctl start slim

--

Nos daremos cuenta de que no podemos cambiar la resolución del escritorio de la manera habitual ya que sólamente nos aparece una opción que es la utilizada por defecto, para cambiarla debemos editar el fichero /boot/config.txt. Localizaremos las siguientes líneas:

--

# uncomment to force a specific HDMI mode (this will force VGA)
hdmi_group=2
hdmi_mode=16

--

Tenemos dos maneras de realizar la configuración, si pasamos el valor "1" a través de la línea hdmi_group seleccionamos la opción deseada de entre las incluídas en esta tabla en hdmi_mode sustituyendo el valor existente por el deseado:

--

hdmi_mode defines screen resolution in CEA or DMT format (for other modes not listed here have a look at this thread)
These values are valid if hdmi_group=1 (CEA)
hdmi_mode=1 VGA
hdmi_mode=2 480p 60Hz
hdmi_mode=3 480p 60Hz H
hdmi_mode=4 720p 60Hz
hdmi_mode=5 1080i 60Hz
hdmi_mode=6 480i 60Hz
hdmi_mode=7 480i 60Hz H
hdmi_mode=8 240p 60Hz
hdmi_mode=9 240p 60Hz H
hdmi_mode=10 480i 60Hz 4x
hdmi_mode=11 480i 60Hz 4x H
hdmi_mode=12 240p 60Hz 4x
hdmi_mode=13 240p 60Hz 4x H
hdmi_mode=14 480p 60Hz 2x
hdmi_mode=15 480p 60Hz 2x H
hdmi_mode=16 1080p 60Hz
hdmi_mode=17 576p 50Hz
hdmi_mode=18 576p 50Hz H
hdmi_mode=19 720p 50Hz
hdmi_mode=20 1080i 50Hz
hdmi_mode=21 576i 50Hz
hdmi_mode=22 576i 50Hz H
hdmi_mode=23 288p 50Hz
hdmi_mode=24 288p 50Hz H
hdmi_mode=25 576i 50Hz 4x
hdmi_mode=26 576i 50Hz 4x H
hdmi_mode=27 288p 50Hz 4x
hdmi_mode=28 288p 50Hz 4x H
hdmi_mode=29 576p 50Hz 2x
hdmi_mode=30 576p 50Hz 2x H
hdmi_mode=31 1080p 50Hz
hdmi_mode=32 1080p 24Hz
hdmi_mode=33 1080p 25Hz
hdmi_mode=34 1080p 30Hz
hdmi_mode=35 480p 60Hz 4x
hdmi_mode=36 480p 60Hz 4xH
hdmi_mode=37 576p 50Hz 4x
hdmi_mode=38 576p 50Hz 4x H
hdmi_mode=39 1080i 50Hz reduced blanking
hdmi_mode=40 1080i 100Hz
hdmi_mode=41 720p 100Hz
hdmi_mode=42 576p 100Hz
hdmi_mode=43 576p 100Hz H
hdmi_mode=44 576i 100Hz
hdmi_mode=45 576i 100Hz H
hdmi_mode=46 1080i 120Hz
hdmi_mode=47 720p 120Hz
hdmi_mode=48 480p 120Hz
hdmi_mode=49 480p 120Hz H
hdmi_mode=50 480i 120Hz
hdmi_mode=51 480i 120Hz H
hdmi_mode=52 576p 200Hz
hdmi_mode=53 576p 200Hz H
hdmi_mode=54 576i 200Hz
hdmi_mode=55 576i 200Hz H
hdmi_mode=56 480p 240Hz
hdmi_mode=57 480p 240Hz H
hdmi_mode=58 480i 240Hz
hdmi_mode=59 480i 240Hz H

H means 16:9 variant (of a normally 4:3 mode).
2x means pixel doubled (i.e. higher clock rate, with each pixel repeated twice)
4x means pixel quadrupled (i.e. higher clock rate, with each pixel repeated four times)

--

En el caso de pasarle el valor 2 a hdmi_group, es la manera en que configuré la salida, creo que es la más sencilla de entender y también la que generará menos confusión.

--

These values are valid if hdmi_group=2 (DMT)
Note: according to http://www.raspberrypi.org/phpBB3/viewtopic.php?f=26&t=20155&p=195417&hi...
there is a pixel clock limit which means the highest supported mode is 1920x1200 @60Hz with reduced blanking.
hdmi_mode=1 640x350 85Hz
hdmi_mode=2 640x400 85Hz
hdmi_mode=3 720x400 85Hz
hdmi_mode=4 640x480 60Hz
hdmi_mode=5 640x480 72Hz
hdmi_mode=6 640x480 75Hz
hdmi_mode=7 640x480 85Hz
hdmi_mode=8 800x600 56Hz
hdmi_mode=9 800x600 60Hz
hdmi_mode=10 800x600 72Hz
hdmi_mode=11 800x600 75Hz
hdmi_mode=12 800x600 85Hz
hdmi_mode=13 800x600 120Hz
hdmi_mode=14 848x480 60Hz
hdmi_mode=15 1024x768 43Hz DO NOT USE
hdmi_mode=16 1024x768 60Hz
hdmi_mode=17 1024x768 70Hz
hdmi_mode=18 1024x768 75Hz
hdmi_mode=19 1024x768 85Hz
hdmi_mode=20 1024x768 120Hz
hdmi_mode=21 1152x864 75Hz
hdmi_mode=22 1280x768 reduced blanking
hdmi_mode=23 1280x768 60Hz
hdmi_mode=24 1280x768 75Hz
hdmi_mode=25 1280x768 85Hz
hdmi_mode=26 1280x768 120Hz reduced blanking
hdmi_mode=27 1280x800 reduced blanking
hdmi_mode=28 1280x800 60Hz
hdmi_mode=29 1280x800 75Hz
hdmi_mode=30 1280x800 85Hz
hdmi_mode=31 1280x800 120Hz reduced blanking
hdmi_mode=32 1280x960 60Hz
hdmi_mode=33 1280x960 85Hz
hdmi_mode=34 1280x960 120Hz reduced blanking
hdmi_mode=35 1280x1024 60Hz
hdmi_mode=36 1280x1024 75Hz
hdmi_mode=37 1280x1024 85Hz
hdmi_mode=38 1280x1024 120Hz reduced blanking
hdmi_mode=39 1360x768 60Hz
hdmi_mode=40 1360x768 120Hz reduced blanking
hdmi_mode=41 1400x1050 reduced blanking
hdmi_mode=42 1400x1050 60Hz
hdmi_mode=43 1400x1050 75Hz
hdmi_mode=44 1400x1050 85Hz
hdmi_mode=45 1400x1050 120Hz reduced blanking
hdmi_mode=46 1440x900 reduced blanking
hdmi_mode=47 1440x900 60Hz
hdmi_mode=48 1440x900 75Hz
hdmi_mode=49 1440x900 85Hz
hdmi_mode=50 1440x900 120Hz reduced blanking
hdmi_mode=51 1600x1200 60Hz
hdmi_mode=52 1600x1200 65Hz
hdmi_mode=53 1600x1200 70Hz
hdmi_mode=54 1600x1200 75Hz
hdmi_mode=55 1600x1200 85Hz
hdmi_mode=56 1600x1200 120Hz reduced blanking
hdmi_mode=57 1680x1050 reduced blanking
hdmi_mode=58 1680x1050 60Hz
hdmi_mode=59 1680x1050 75Hz
hdmi_mode=60 1680x1050 85Hz
hdmi_mode=61 1680x1050 120Hz reduced blanking
hdmi_mode=62 1792x1344 60Hz
hdmi_mode=63 1792x1344 75Hz
hdmi_mode=64 1792x1344 120Hz reduced blanking
hdmi_mode=65 1856x1392 60Hz
hdmi_mode=66 1856x1392 75Hz
hdmi_mode=67 1856x1392 120Hz reduced blanking
hdmi_mode=68 1920x1200 reduced blanking
hdmi_mode=69 1920x1200 60Hz
hdmi_mode=70 1920x1200 75Hz
hdmi_mode=71 1920x1200 85Hz
hdmi_mode=72 1920x1200 120Hz reduced blanking
hdmi_mode=73 1920x1440 60Hz
hdmi_mode=74 1920x1440 75Hz
hdmi_mode=75 1920x1440 120Hz reduced blanking
hdmi_mode=76 2560x1600 reduced blanking
hdmi_mode=77 2560x1600 60Hz
hdmi_mode=78 2560x1600 75Hz
hdmi_mode=79 2560x1600 85Hz
hdmi_mode=80 2560x1600 120Hz reduced blanking
hdmi_mode=81 1366x768 60Hz
hdmi_mode=82 1080p 60Hz
hdmi_mode=83 1600x900 reduced blanking
hdmi_mode=84 2048x1152 reduced blanking
hdmi_mode=85 720p 60Hz
hdmi_mode=86 1366x768 reduced blanking

--

NOTA : Para aplicar dicha configuración es preciso reiniciar el dispositivo.

6. Mejorando el rendimiento.

Aún podemos mejorar algo el rendimiento del dispositivo dependiendo de la utilidad que le vayamos a dar. Si sólamente lo vamos a tener corriendo ciertos servicios como pueden ser SSH, FTP, Samba sin trabajar con entorno gráfico podemos deasignarle memoria a la GPU dejándola a disposición de la CPU. De utilizar la "RasPi" con entorno gráfico no lo recomiendo ya que iría a pedales. Lo primero antes de nada es saber si el dispositivo es la versión A o B. Para salir de dudas ejecutamos:

--

cat /proc/meminfo

--

De no querer usar entorno gráfico buscamos estas dos líneas:

--

gpu_mem_512=316
gpu_mem_256=128

--

En el caso de ser el modelo B bajaremos el valor asignado a gpu_mem_512 a 64, dejando así el resto de memoria a disposición de la CPU.

Aquí dejo una captura de mi Arch Linux+XFCE accediendo a través de VNC a la "RasPi".

--

--

Espero que el manual haya sido de ayuda.

That's all folks!