Mi Raspberry Pi (I): primer inicio del sistema
lun 02 febrero 2015, por Soulchainer
Índice de contenido
Hace ya unos cuantos meses que soy el afortunado poseedor de uno de estos cacharrines.
Cuando me llegó, movido por la urgencia, le instalé Raspbian (Debian para Raspberry); pero, al fin, esta semana hice ánimos y me puse a preparla con Arch Linux ARM. Así, con este empiezo una serie de artículos en los que documentaré todo el proceso de instalación de mi Raspberry, dejándola a mi gusto.
Avanzo que el uso principal que le doy ahora mismo es el de centro multimedia/NAS. Este primer artículo abarca hasta el primer inicio de sesión en el sistema (vía consola).
Componentes
Para sacar provecho a la Raspberry Pi [1] necesitamos una serie de componentes, que varían según el uso que le vayamos a dar. Yo utilizo lo siguiente:
Raspberry Pi, modelo B+.
Tarjeta micro SDHC de 8 GB, modelo Transcend TS8GUSDHC10 (Clase 10).
Cable Ultra HD HDMI 1.4a (compatible con HDMI 2.0), con ethernet y soporte 3D.
De la marca CSL-Computer. Con un metro me basta. Bueno, bonito y barato :D.
Memoria USB 3.0 de 16 GB, Transcend JetFlash 700.
Cajita transparente para la Raspberry, de OneNineDesign.
Teclado inalámbrico K400, de Logitech.
Viene con panel táctil (te ahorras el ratón), tiene bastante alcance y las pilas duran lo suyo (tiene interruptor de encendido/apagado).
Disco Duro Externo de 2.5" Canvio Basics, de Toshiba.
Un TB de capacidad. USB 3.0.
Repetidor wifi 11n TL-WA850RE, de TP-LINK. Con puerto ethernet.
Hub USB alimentado de Conceptronic, con siete puertos.
Aquí hago todas las conexiones USB.
El capricho me salió por 171.8 € puesto en casa.
¿Que no es tan barato? Pues sí, pero es que depende de si ya tienes en casa o no esos accesorios. Y de si sólo los vas a emplear para esto. Lo que más encarece es el disco duro externo, el repetidor wifi y el teclado (94.09 €). Si los tienes, te ahorras un pico. Si no, no es como si sólo pudieras usarlos para la Raspberry. Además: algunas cosas aproveché para comprarlas porque hacía tiempo que las necesitaba (como el extensor de señal wifi).
Instalación híbrida
Normalmente se instala el sistema operativo completo en la tarjeta micro SD, pero yo siempre he optado por hacer una instalación híbrida: arranque del sistema en la micro SD (no hay más narices, la Raspberry lo requiere) y el resto en una memoria USB 3.0 (sí: a pesar de que los puertos de la Raspberry son 2.0).
¿Por qué? Pues porque la memoria USB es más rápida que la tarjeta micro SDHC.
Preparación de los medios
Particionado de la memoria USB
Borramos todas las particiones de la memoria USB y creamos una partición ext4, con todo el espacio disponible. Desde consola:
$ sudo fdisk /dev/sdX
Donde X
es la letra correspondiente a nuestra memoria usb [2].
- Escribimos
o
, creando una tabla de particiones vacía. - Con
p
imprimimos la lista de particiones de la memoria, que debería de estar vacía. - Escribimos
n
y despuésp
, para crear una partición primaria, seguido de1
para indicar que será la primera partición del dispositivo. - Pulsamos entonces
ENTER
para aceptar el valor predeterminado del primer sector. Y otra vez para aceptar el valor predeterminado del último. Con esto, la partición ocupará todo el tamaño útil. - Escribimos la tabla de particiones y salimos pulsando
w
.
Y ya tenemos la memoria lista.
Particionado de la tarjeta micro SD
De forma similar, borramos todas las particiones de la tarjeta micro SD, creando en este caso dos particiones, una FAT de 100 MiB y otra ext4 con el espacio restante, que podremos usar para guardar alguna cosilla. Desde consola, de nuevo:
$ sudo fdisk /dev/sdX
Donde X
corresponde en este caso a nuestra tarjeta.
- Escribimos
o
, creando una tabla de particiones vacía y borrando todo lo anterior. - Con
p
imprimimos la lista de particiones de la tarjeta, que deberá de estar vacía. - Escribimos
n
y despuésp
, para crear una partición primaria, seguido de1
para indicar que será la primera partición del pendrive. - Pulsamos entonces
ENTER
para aceptar el valor predeterminado del primer sector. Y escribimos+100M
para el último sector. - Entonces, escribimos
t
y despuésc
para establecer la primera partición de tipo W95 FAT32 (LBA). - Volvemos a crear otra partición primaria, que será la segunda partición de la tarjeta, y le damos el resto del espacio disponible. Esta será una partición ext4. Escribimos
n
, despuésp
, seguido de2
y pulsamosENTER
un par de veces para aceptar los valores de los sectores. - Tras esto, escribimos la tabla de particiones y salimos pulsando
w
.
Montaje y volcado del sistema
Una vez creadas las particiones necesarias, tenemos que montarlas y volcar los datos para instalar el sistema.
Creamos y montamos el sistema de archivos FAT, , que contendrá el arranque, en la tarjeta:
$ sudo mkfs.vfat /dev/sdX1
$ mkdir boot
$ sudo mount /dev/sdX1 boot
Lo montamos en una carpeta boot
, que creamos a tal efecto.
Creamos también el sistema de archivos ext4 de la tarjeta. No lo montamos, porque no lo necesitamos para la instalación.
$ sudo mkfs.ext4 /dev/sdX2
Por último, creamos y montamos el sistema de archivos ext4, que contendrá el sistema operativo, en la memoria:
$ sudo mkfs.ext4 /dev/sdX1
$ mkdir root
$ sudo mount /dev/sdX1 root
Una vez montadas ambas particiones, descargamos y descomprimimos el sistema de archivos root:
$ sudo bash
# wget http://archlinuxarm.org/os/ArchLinuxARM-rpi-latest.tar.gz
# bsdtar -xpf ArchLinuxARM-rpi-latest.tar.gz -C root
# sync
Y movemos los archivos de arranque a la primera partición de la tarjeta micro SD:
# mv root/boot/* boot
Tras esto, mejor salir del modo root:
# exit
Configuración del arranque del sistema
Una vez volcados los datos, hemos de editar el archivo cmdline.txt
en
la partición FAT de la micro SD. Originalmente es algo así:
$ sudo nano boot/cmdline.txt
----------------------------
selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=noop rootwait
Y ha de quedar de esta forma:
selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=noop rootwait rootdelay=5
Ctrl + O para guardar y Ctrl + X para salir.
Explicación: la Raspberry Pi necesita una tarjeta micro SD para arrancar.
Buscará ahí el arranque, pero debemos indicarle que después de eso tiene que
buscar el sistema operativo en la memoria USB (/dev/sda1
), en lugar de
en la segunda partición de la tarjeta (mmcblk0p2
), donde acostumbra a mirar.
Configuración general de la Raspberry Pi
La configuración original es algo así:
$ sudo nano boot/config.txt
---------------------------
# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1
# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720
# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1
# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2
# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4
# uncomment for composite PAL
#sdtv_mode=2
#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800
# for more options see http://elinux.org/RPi_config.txt
## Some over clocking settings, governor already set to ondemand
##None
#arm_freq=700
#core_freq=250
#sdram_freq=400
#over_voltage=0
##Modest
#arm_freq=800
#core_freq=300
#sdram_freq=400
#over_voltage=0
##Medium
#arm_freq=900
#core_freq=333
#sdram_freq=450
#over_voltage=2
##High
#arm_freq=950
#core_freq=450
#sdram_freq=450
#over_voltage=6
##Turbo
#arm_freq=1000
#core_freq=500
#sdram_freq=500
#over_voltage=6
gpu_mem_512=64
gpu_mem_256=64
Vamos a modificar algunos aspectos de esta, que citamos a continuación:
...
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
hdmi_drive=2
...
##Medium
arm_freq=900
core_freq=333
sdram_freq=450
over_voltage=2
gpu_mem_512=128
gpu_mem_256=64
# licencia MPG2
decode_MPG2=CÓDIGO
Aquí, primero, forzamos el modo HDMI, en lugar del DVI. No debería ser
necesario, pero por si acaso. Después incrementamos la velocidad del reloj de
la Raspberry, eligiendo uno de los ajustes predefinidos. Esto mejora el
rendimiento. Y, a este nivel, es seguro.
Tras esto, ampliamos la memoria asignada a la gráfica a 128, ya que la
Raspberry funcionará sobre todo como centro multimedia. Como podemos observar,
hay dos opciones para este mismo ajuste: gpu_mem_512
y
gpu_mem_256
. La primera se aplica a las Raspberry con 512 MB de RAM
(el caso que nos ocupa), mientras que la segunda corresponde a las versiones
de 256 MB.
Por último, de forma totalmente opcional, añadimos la licencia para reproducir
vídeo MPG2 [3].
Actualización
En el transcurso de la realización de esta guía, actualicé el sistema:
$ sudo pacman -Syu
Y se actualizó el firmware de la Raspberry, generando un nuevo archivo de configuración, con muchos cambios. Este nuevo archivo, una vez integrados los citados cambios, queda como sigue:
$ sudo nano /boot/config.txt.pacnew
-----------------------------------
# Uncomment some or all of these to enable the optional hardware interfaces
# Params:
# i2c0 (default "off") Set to "on" to enable the i2c0 interface
# i2c1 (default "off") Set to "on" to enable the i2c1 interface
# i2s (default "off") Set to "on" to enable the i2s interface
# spi (default "off") Set to "on" to enable the spi interfaces
# act_led_trigger (default "mmc")
# Choose which activity the LED tracks.
# Use "heartbeat" for a nice load indicator.
# act_led_activelow (default "off")
# Set to "on" to invert the sense of the LED
# act_led_gpio (default "16" on a non-Plus board, "47" on a Plus)
# Set which GPIO pin to use for the activity LED
# (in case you want to connect it to an external
# device).
#
# N.B. It is recommended to only enable those interfaces that are needed.
# Leaving all interfaces enabled can lead to unwanted behaviour (I2C
# interfering with Pi Camera, I2S and SPI hogging GPIO pins, etc.)
#device_tree_param=i2c0=on
#device_tree_param=i2c1=on
#device_tree_param=i2s=on
#device_tree_param=spi=on
#device_tree_param=act_led_trigger=mmc
# Uncomment one of these lines to enable an audio interface
#device_tree_overlay=hifiberry-dac
#device_tree_overlay=hifiberry-dacplus
#device_tree_overlay=hifiberry-digi
#device_tree_overlay=hifiberry-amp
#device_tree_overlay=iqaudio-dac
#device_tree_overlay=iqaudio-dacplus
# Uncomment to enable the lirc-rpi module
# Params: gpio_out_pin (default "17") GPIO pin for output
# gpio_in_pin (default "18") GPIO pin for input
# gpio_in_pull (default "down") Pull up/down/off on the input pin
# sense (defaults to "-1") Override the IR receive auto-detection
# logic:
# "1" = force active high
# "0" = force active low
# "-1" = use auto-detection
# softcarrier (default "on") Turn the software carrier "on" or "off".
# invert (default "off") "on" = invert the output pin.
# debug (default "off") "on" = enable additional debug messages.
#device_tree_overlay=lirc-rpi
#device_tree_param=gpio_out_pin=17
#device_tree_param=gpio_in_pin=18
#device_tree_param=gpio_in_pull=down
# Uncomment to enable the w1-gpio Onewire interface module
# Use this overlay if you *don't* need a pin to drive an external pullup
# Params: gpiopin (default "4") GPIO pin for I/O
#device_tree_overlay=w1-gpio
#device_tree_param=gpiopin=4
# Uncomment to enable the w1-gpio Onewire interface module
# Use this overlay if you *do* need a pin to drive an external pullup
# Params: gpiopin (default "4") GPIO pin for I/O
# pullup (default "5") GPIO pin for external pullup
#device_tree_overlay=w1-gpio
#device_tree_param=gpiopin=4
#device_tree_param=pullup=5
# Uncomment to enable pps-gpio (pulse-per-second time signal via GPIO)
# Params: gpiopin (default "18") GPIO input pin
#device_tree_overlay=pps-gpio
#device_tree_param=gpiopin=18
# Uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1
# Uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1
# Uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
# Uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720
# Uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1
# Uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1
# Uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
hdmi_drive=2
# Uncomment to set monitor mode to DMT
#hdmi_group=2
# Uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4
# Uncomment for composite PAL
#sdtv_mode=2
# Uncomment to overclock the ARM core. 700 MHz is the default.
#arm_freq=800
# for more options see http://elinux.org/RPi_config.txt
## Some over clocking settings, governor already set to ondemand
##None
#arm_freq=700
#core_freq=250
#sdram_freq=400
#over_voltage=0
##Modest
#arm_freq=800
#core_freq=300
#sdram_freq=400
#over_voltage=0
##Medium
arm_freq=900
core_freq=333
sdram_freq=450
over_voltage=2
##High
#arm_freq=950
#core_freq=450
#sdram_freq=450
#over_voltage=6
##Turbo
#arm_freq=1000
#core_freq=500
#sdram_freq=500
#over_voltage=6
gpu_mem_512=128
gpu_mem_256=64
# licencia MPG2
decode_MPG2=CODIGO
Como podemos apreciar, el archivo se llama config.txt.pacnew
. Esto
ocurre siempre que actualizamos un fichero de configuración y ya tenemos uno
anterior modificado, para no sobrescribir nuestras configuraciones. Una vez
editemos el nuevo archivo a nuestro gusto, tendremos que renombrarlo
adecuadamente para empezar a usarlo. Para ello, aconsejo hacer:
$ sudo mv /boot/config.txt /boot/config.txt.backup
$ sudo mv /boot/config.txt.pacnew /boot/config.txt
Con la primera línea, guardamos la configuración actual en
/boot/config.txt.backup
, por si acaso la nueva configuración no llega
a funcionar, o por si debieramos revertir o comprobar algo en ella después.
Con la segunda línea, dejamos la configuración nueva lista para su uso. Se
aplicará cuando reiniciemos la Raspberry.
Cuando estemos listos, podemos reiniciarla con:
$ sudo reboot
Montaje automático de sistemas de archivos
Tambien hemos de cambiar el fichero /etc/fstab
en la partición de la
memoria USB.
En un principio este se ve algo así:
$ sudo nano root/etc/fstab
--------------------------
#
# /etc/fstab: static file system information
#
# <file system> <dir> <type> <options> <dump> <pass>
/dev/mmcblk0p1 /boot vfat defaults 0 0
Y vamos a dejarlo como sigue:
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/sda1 / ext4 defaults,noatime 0 1
#PARTUUID= / ext4 defaults,noatime 0 1
#PARTUUID= /mnt/Pandorica ext4 defaults,noatime 0 2
# a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that
En fstab
se detallan los sistemas de archivos a montar automáticamente
al inicio y, como puedes ver, añadimos una línea (comentada) para la
partición de la memoria USB, detallada con su PARTUUID. Para la micro SD
esto no es necesario, ya que no usaremos más de un lector SD, pero podemos
usar varios dispositivos USB y sería un problema que estos llegaran a
confundirse.
También reservo la tercera línea, comentada, para el que será mi disco duro
externo (para almacenar archivos pesados), y que montaré en la ruta
/mnt/Pandorica
.
En la última línea, dejo un comentario sobre los archivos swap (de
intercambio), que (creo) se genera automáticamente al instalar raspbian
(reutilizo este archivo de mi configuración anterior :p), cuestión de la que
hablaremos más adelante.
Tras esto, desmontamos ambas particiones y borramos las carpetas creadas a tal efecto:
$ sudo umount boot root
$ rmdir boot root
Primer inicio de sesión
Ya podemos insertar la micro SD en la Raspberry Pi, conectarla a la red cableada y a la corriente. En mi caso la alimento vía hub USB, que es donde conecto también la memoria USB con el sistema operativo y el disco duro para multimedia.
Por ahora no conectamos el disco duro externo. Lo haremos más adelante.
Una vez conectado todo, podemos empezar ya a trabajar con el sistema operativo.
La contraseña por defecto para el usuario root es root
.
Fuentes: Arch Linux ARM, Ultimate Raspbian.
[1] | Raspberry Pi y el logo de Raspberry Pi son marcas registradas de la Raspberry Pi Foundation. El presente blog no tiene conexión alguna con la Raspberry Pi Foundation. |
[2] | Podemos averiguar los sistemas de archivos montados en nuestro equipo con los comandos df y blkid . |
[3] | Esta licencia se adquiere por separado. Sirve para reproducir DVD de vídeo (ficheros .vob ). Y sí: la compré por error, ¿vale? xD. |