Instalando Arch Linux ARM en Raspberry Pi

Ahora que conozco qué es Raspberry Pi he estado pensando muy bien para que utilizarlo. Empecé leyendo una entrada de Xataka en la que definen muy bien diez ideas para utilizar Raspberry Pi en casa y estuve haciéndome unas pequeñas reflexiones... 

Primero ya tengo un media center, por lo que instalar OpenELEC, Raspbmc o XBian queda descartado. También tengo en mi portatil y en el del trabajo máquinas virtuales con Backtrack, así que instalar otra distribución de seguridad como Pwn Pi, Pwnpi.net o Ha(ck with Raspberry)Pi sería cuanto menos redundante (y algo enfermizo, sí).

Por otro lado siempre me ha llamado mucho la atención la domótica, y concretamente el funcionamiento de RPi con Arduino o el proyecto libre OpenDomo, si bien considero que para empezar en mi caso es demasiado pretencioso (comprar más componentes, acometer instalaciones en casa, mi chica me mata, etc.).

También he pensado en instalar varias distribuciones en la tarjeta SD con Berryboot, pero ¿por qué no empezar mejor con una multipropósito e ir instalando y personalizando lo que vaya necesitando?. Eso me lleva fundamentalmente a descartar Raspbian a favor de Arch Linux ARM, un sistema en base más simple que permite un mayor control al usuario para moldearlo según sus necesidades. Pinta bien, así que si os animáis a instalar conmigo este sistema operativo...

Obtención y escritura de la imagen del sistema operativo

Para ello simplemente descargamos la imagen de la página de la fundación. Una vez chequeada su integridad y desde Windows 7 la escribimos en la tarjeta SD con Win32 Disk Imager:
 

Acceso SSH y cambio de contraseña del root

Luego insertamos la tarjeta SD en nuestra RPi y, en mi caso como no dispongo de pantalla ni teclado :'(, comenzamos accediendo a ella a través de SSH. Por defecto obtendrá una dirección IP dinámica por DHCP así que puedes detectar su asignación por lógica predicción, escaneando tu red o viendo las concesiones del servicio DHCP del router. 

Una vez dentro, lo primero que haremos será cambiar la contraseña del root, por una con tropecientos caracteres alfanuméricos y símbolos:
login as: root
root@192.168.1.35's password:

[root@alarmpi ~]# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
 
Particionado del sistema

A continuación veremos las particiones que vienen configuradas con la imagen:
[root@alarmpi /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          1.7G  527M  1.1G  34% /
/dev/root       1.7G  527M  1.1G  34% /
devtmpfs         84M     0   84M   0% /dev
tmpfs           232M     0  232M   0% /dev/shm
tmpfs           232M  240K  232M   1% /run
tmpfs           232M     0  232M   0% /sys/fs/cgroup
tmpfs           232M     0  232M   0% /tmp
/dev/mmcblk0p1   90M   20M   71M  23% /boot
Como veis, al iniciar tenemos dos particiones en /dev/mmcblk0p1 y /dev/mmcblk0p2. La primera (100 MB) está montada en /boot y la segunda (1.7 GB por defecto) está en el directorio raíz /. Si vuestra tarjeta tiene un tamaño mayor a 2 GB, tendréis que redimensionar las particiones para aprovecharla.

Si estuviéramos ante una instalación "seria" con un servidor y servicios muy bien definidos os recomendaría además añadir otras particiones para /var, /home y swap. Pero en nuestro caso como somos unos cachondos y vamos a empezar a probar y probar para ver las posibilidades de RPi sólo incrementaremos la partición raíz para aprovechar el máximo disponible de la tarjeta. Si más adelante nos quedáramos cortos de memoria (512 MB) seguro que a esas alturas ya pensamos en reinstalar el sistema o en añadir un fichero swap...
 
[root@alarmpi /]# fdisk /dev/mmcblk0
Welcome to fdisk (util-linux 2.22.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): d
Partition number (1-4): 2
Partition 2 is deleted

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (186368-63028223, default 186368):
Using default value 186368
Last sector, +sectors or +size{K,M,G} (186368-63028223, default 63028223):
Using default value 63028223
Partition 2 of type Linux and of size 30 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
Ahora reiniciamos el sistema y ejecutamos resize2fs:
[root@alarmpi ~]# resize2fs /dev/mmcblk0p2
resize2fs 1.42.6 (21-Sep-2012)
Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2

The filesystem on /dev/mmcblk0p2 is now 7855232 blocks long.

[root@alarmpi ~]#
[root@alarmpi ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs           30G  524M   28G   2% /
/dev/root        30G  524M   28G   2% /
devtmpfs         83M     0   83M   0% /dev
tmpfs           232M     0  232M   0% /dev/shm
tmpfs           232M  244K  231M   1% /run
tmpfs           232M     0  232M   0% /sys/fs/cgroup
tmpfs           232M     0  232M   0% /tmp
/dev/mmcblk0p1   90M   20M   71M  23% /boot
[root@alarmpi ~]#
 
Configuración post-instalación

La puntualidad es una virtud de la que carezco, pero eso no significa que mi servidor no esté en hora...El siguiente paso será cambiar la zona horaria del servidor. Primero comprobamos la existencia de nuestra zona:
[root@alarmpi ~]# ls /usr/share/zoneinfo/Europe/
Amsterdam  Berlin      Chisinau    Helsinki     Kiev        Madrid     Moscow     Prague      Sarajevo    Tallinn   Vatican    Zagreb
Andorra    Bratislava  Copenhagen  Isle_of_Man  Lisbon      Malta      Nicosia    Riga        Simferopol  Tirane    Vienna     Zaporozhye
Athens     Brussels    Dublin      Istanbul     Ljubljana   Mariehamn  Oslo       Rome        Skopje      Tiraspol  Vilnius    Zurich
Belfast    Bucharest   Gibraltar   Jersey       London      Minsk      Paris      Samara      Sofia       Uzhgorod  Volgograd
Belgrade   Budapest    Guernsey    Kaliningrad  Luxembourg  Monaco     Podgorica  San_Marino  Stockholm   Vaduz     Warsaw
Y luego editamos el fichero timezone
[root@alarmpi ~]# vi /etc/timezone
Europe/Madrid
Después modificamos el nombre de host de nuestra RPi: 
[root@alarmpi ~]# vi /etc/hostname
pirobot1

[root@alarmpi ~]# vi /etc/hosts
#
# /etc/hosts: static lookup table for host names
#

#      
127.0.0.1       localhost.localdomain   localhost       pirobot1
::1             localhost.localdomain   localhost       pirobot1

# End of file
Ahora procederemos a actualizar el sistema

Para ello, primero necesitaremos generar una clave para Pacman, el famoso videojuego pero también el gestor de paquetes de Arch Linux. Después de ejecutar el comando de creación, tendremos generar algo de entropía o si no estaremos horas delante del monitor como pasmarotes. Para ello pulsaremos teclas aleatoriamente o ejecutaremos por ejemplo 'ls -R /' o 'find / -name dinero_B_Bárcenas' o 'dd if=/dev/sda8 of=/dev/tty7' en otra sesión: 
[root@pirobot1 /]# pacman-key --init
gpg: /etc/pacman.d/gnupg/trustdb.gpg: trustdb created
gpg: no ultimately trusted keys found
gpg: Generating pacman keychain master key...
gpg: key C503FACC marked as ultimately trusted
gpg: Done
==> Updating trust database...
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
[root@pirobot1 /]#
Después instalaremos mlocate para optimizar la ejecución posterior de updatedb, para acabar lanzando una actualización completa del sistema (full system upgrade):
[root@pirobot1 /]# pacman -S mlocate
resolving dependencies...
looking for inter-conflicts...

Targets (1): mlocate-0.26-1

Total Download Size:    0.07 MiB
Total Installed Size:   0.73 MiB

Proceed with installation? [Y/n]
:: Retrieving packages from core...
 mlocate-0.26-1-armv6h                                                       72.0 KiB   272K/s 00:00 [############################################################] 100%
(1/1) checking package integrity                                                                     [############################################################] 100%
(1/1) loading package files                                                                          [############################################################] 100%
(1/1) checking for file conflicts                                                                    [############################################################] 100%
(1/1) checking available disk space                                                                  [############################################################] 100%
(1/1) installing mlocate                                                                             [############################################################] 100%
[root@alarmpi /]# updatedb
[root@alarmpi /]#

[root@alarmpi /]# pacman -S pacman
warning: pacman-4.0.3-5 is up to date -- reinstalling
resolving dependencies...
looking for inter-conflicts...

Targets (1): pacman-4.0.3-5

Total Download Size:    1.00 MiB
Total Installed Size:   3.36 MiB
Net Upgrade Size:       0.00 MiB

Proceed with installation? [Y/n]
:: Retrieving packages from core...
 pacman-4.0.3-5-armv6h                                                     1020.8 KiB   566K/s 00:02 [############################################################] 100%
(1/1) checking package integrity                                                                     [############################################################] 100%
(1/1) loading package files                                                                          [############################################################] 100%
(1/1) checking for file conflicts                                                                    [############################################################] 100%
(1/1) checking available disk space                                                                  [############################################################] 100%
(1/1) upgrading pacman                                                                               [############################################################] 100%
[root@alarmpi /]#

[root@alarmpi /]# pacman -Syyuf
:: Synchronizing package databases...
 core                                                                        38.5 KiB   215K/s 00:00 [############################################################] 100%
 extra                                                                      442.6 KiB   741K/s 00:01 [############################################################] 100%
 community                                                                  460.0 KiB   583K/s 00:01 [############################################################] 100%
 alarm                                                                        6.0 KiB  1496K/s 00:00 [############################################################] 100%
 aur                                                                         14.9 KiB  1173K/s 00:00 [############################################################] 100%
:: Starting full system upgrade...
resolving dependencies...
looking for inter-conflicts...

Targets (33): acl-2.2.51-3  bash-4.2.042-3  ca-certificates-20130119-1  cracklib-2.8.22-1  curl-7.29.0-1  dash-0.5.7-3  dhcpcd-5.6.4-2  file-5.11-2  findutils-4.4.2-5
              gnupg-2.0.19-5  gpgme-1.3.1-5  grep-2.14-2  gzip-1.5-3  kbd-1.15.5-3  krb5-1.11-3  libksba-1.2.0-3  licenses-20130203-1  linux-api-headers-3.7.4-1
              linux-headers-raspberrypi-3.6.11-5  linux-raspberrypi-3.6.11-5  man-pages-3.46-1  mkinitcpio-0.13.0-1  ncurses-5.9-4  ntfs-3g-2013.1.13-1
              openssh-6.1p1-5  openssl-1.0.1.d-1  perl-5.16.2-3  reiserfsprogs-3.6.22-1  sed-4.2.2-2  shadow-4.1.5.1-4  texinfo-4.13a-8  which-2.20-6
              wpa_supplicant-2.0-1

Total Download Size:    47.61 MiB
Total Installed Size:   195.12 MiB
Net Upgrade Size:       0.38 MiB

Proceed with installation? [Y/n]
:: Retrieving packages from core...
 acl-2.2.51-3-armv6h                                                        126.5 KiB   365K/s 00:00 [############################################################] 100%
 bash-4.2.042-3-armv6h                                                      732.3 KiB   474K/s 00:02 [############################################################] 100%
 perl-5.16.2-3-armv6h                                                        11.8 MiB   982K/s 00:12 [############################################################] 100%
 openssl-1.0.1.d-1-armv6h                                                     2.3 MiB  1041K/s 00:02 [############################################################] 100%
 findutils-4.4.2-5-armv6h                                                   319.0 KiB   959K/s 00:00 [############################################################] 100%
 sed-4.2.2-2-armv6h                                                         113.7 KiB  1053K/s 00:00 [############################################################] 100%
 ca-certificates-20130119-1-any                                             133.8 KiB  1054K/s 00:00 [############################################################] 100%
 cracklib-2.8.22-1-armv6h                                                   236.2 KiB  1047K/s 00:00 [############################################################] 100%
 curl-7.29.0-1-armv6h                                                       501.8 KiB  1045K/s 00:00 [############################################################] 100%
 dash-0.5.7-3-armv6h                                                         59.5 KiB  1073K/s 00:00 [############################################################] 100%
 dhcpcd-5.6.4-2-armv6h                                                       68.0 KiB  1060K/s 00:00 [############################################################] 100%
 file-5.11-2-armv6h                                                         197.1 KiB  1049K/s 00:00 [############################################################] 100%
 libksba-1.2.0-3-armv6h                                                      95.2 KiB  1056K/s 00:00 [############################################################] 100%
 gnupg-2.0.19-5-armv6h                                                     1285.6 KiB  1042K/s 00:01 [############################################################] 100%
 gpgme-1.3.1-5-armv6h                                                       182.5 KiB  1050K/s 00:00 [############################################################] 100%
 grep-2.14-2-armv6h                                                         174.5 KiB  1050K/s 00:00 [############################################################] 100%
 gzip-1.5-3-armv6h                                                           68.8 KiB  1060K/s 00:00 [############################################################] 100%
 kbd-1.15.5-3-armv6h                                                       1013.5 KiB   806K/s 00:01 [############################################################] 100%
 krb5-1.11-3-armv6h                                                         952.1 KiB  1040K/s 00:01 [############################################################] 100%
 licenses-20130203-1-any                                                     59.3 KiB  1066K/s 00:00 [############################################################] 100%
 linux-api-headers-3.7.4-1-armv6h                                           591.7 KiB  1000K/s 00:01 [############################################################] 100%
 linux-headers-raspberrypi-3.6.11-5-armv6h                                    4.6 MiB  1038K/s 00:05 [############################################################] 100%
 linux-raspberrypi-3.6.11-5-armv6h                                           13.9 MiB  1004K/s 00:14 [############################################################] 100%
 man-pages-3.46-1-any                                                         4.4 MiB   924K/s 00:05 [############################################################] 100%
 mkinitcpio-0.13.0-1-any                                                     29.4 KiB  1086K/s 00:00 [############################################################] 100%
 ncurses-5.9-4-armv6h                                                       882.4 KiB  1043K/s 00:01 [############################################################] 100%
 openssh-6.1p1-5-armv6h                                                     454.9 KiB  1045K/s 00:00 [############################################################] 100%
 reiserfsprogs-3.6.22-1-armv6h                                              191.6 KiB  1051K/s 00:00 [############################################################] 100%
 shadow-4.1.5.1-4-armv6h                                                   1000.0 KiB  1043K/s 00:01 [############################################################] 100%
 texinfo-4.13a-8-armv6h                                                     632.5 KiB  1043K/s 00:01 [############################################################] 100%
 which-2.20-6-armv6h                                                         12.0 KiB  1188K/s 00:00 [############################################################] 100%
 wpa_supplicant-2.0-1-armv6h                                                385.2 KiB  1044K/s 00:00 [############################################################] 100%
:: Retrieving packages from extra...
 ntfs-3g-2013.1.13-1-armv6h                                                 250.5 KiB  1048K/s 00:00 [############################################################] 100%
(33/33) checking package integrity                                                                   [############################################################] 100%
(33/33) loading package files                                                                        [############################################################] 100%
(33/33) checking available disk space                                                                [############################################################] 100%
( 1/33) upgrading acl                                                                                [############################################################] 100%
( 2/33) upgrading bash                                                                               [############################################################] 100%
( 3/33) upgrading perl                                                                               [############################################################] 100%
( 4/33) upgrading openssl                                                                            [############################################################] 100%
( 5/33) upgrading findutils                                                                          [############################################################] 100%
( 6/33) upgrading sed                                                                                [############################################################] 100%
( 7/33) upgrading ca-certificates                                                                    [############################################################] 100%
( 8/33) upgrading cracklib                                                                           [############################################################] 100%
( 9/33) upgrading curl                                                                               [############################################################] 100%
(10/33) upgrading dash                                                                               [############################################################] 100%
(11/33) upgrading dhcpcd                                                                             [############################################################] 100%
(12/33) upgrading file                                                                               [############################################################] 100%
(13/33) upgrading libksba                                                                            [############################################################] 100%
(14/33) upgrading gnupg                                                                              [############################################################] 100%
(15/33) upgrading gpgme                                                                              [############################################################] 100%
(16/33) upgrading grep                                                                               [############################################################] 100%
(17/33) upgrading gzip                                                                               [############################################################] 100%
(18/33) upgrading kbd                                                                                [############################################################] 100%
(19/33) upgrading krb5                                                                               [############################################################] 100%
(20/33) upgrading licenses                                                                           [############################################################] 100%
(21/33) upgrading linux-api-headers                                                                  [############################################################] 100%
(22/33) upgrading linux-headers-raspberrypi                                                          [############################################################] 100%
(23/33) upgrading linux-raspberrypi                                                                  [############################################################] 100%
>>> Updating module dependencies. Please wait ...
(24/33) upgrading man-pages                                                                          [############################################################] 100%
(25/33) upgrading mkinitcpio                                                                         [############################################################] 100%
(26/33) upgrading ncurses                                                                            [############################################################] 100%
(27/33) upgrading ntfs-3g                                                                            [############################################################] 100%
(28/33) upgrading openssh                                                                            [############################################################] 100%
(29/33) upgrading reiserfsprogs                                                                      [############################################################] 100%
(30/33) upgrading shadow                                                                             [############################################################] 100%
(31/33) upgrading texinfo                                                                            [############################################################] 100%
(32/33) upgrading which                                                                              [############################################################] 100%
(33/33) upgrading wpa_supplicant                                                                     [############################################################] 100%
[root@alarmpi /]#

Creación de un usuario secundario

A estas alturas no vamos a explicar lo "inconveniente" que es trabajar directamente con root en Unix/Linux, por lo que finalmente necesitamos instalar sudo y añadir otro usuario:
[root@pirobot1 ~]# pacman -S sudo
resolving dependencies...
looking for inter-conflicts...

Targets (1): sudo-1.8.6.p6-1

Total Download Size:    0.55 MiB
Total Installed Size:   2.58 MiB

Proceed with installation? [Y/n]
:: Retrieving packages from core...
 sudo-1.8.6.p6-1-armv6h                                                     561.6 KiB   681K/s 00:01 [############################################################] 100%
(1/1) checking package integrity                                                                     [############################################################] 100%
(1/1) loading package files                                                                          [############################################################] 100%
(1/1) checking for file conflicts                                                                    [############################################################] 100%
(1/1) checking available disk space                                                                  [############################################################] 100%
(1/1) installing sudo                                                                                [############################################################] 100%

[root@pirobot1 ~]# visudo
## Uncomment to allow members of group wheel to execute any command
 %wheel ALL=(ALL) ALL

 
 [root@pirobot1 ~]# pacman -S adduser
resolving dependencies...
looking for inter-conflicts...

Targets (1): adduser-1.15-4

Total Download Size:    0.01 MiB
Total Installed Size:   0.04 MiB

Proceed with installation? [Y/n]
:: Retrieving packages from aur...
 adduser-1.15-4-any                                                           6.3 KiB  67.1K/s 00:00 [############################################################] 100%
(1/1) checking package integrity                                                                     [############################################################] 100%
(1/1) loading package files                                                                          [############################################################] 100%
(1/1) checking for file conflicts                                                                    [############################################################] 100%
(1/1) checking available disk space                                                                  [############################################################] 100%
(1/1) installing adduser                                                                             [############################################################] 100%


audio lp optical storage video wheel games power scanner

[root@pirobot1 ~]# adduser

Login name for new user []: usuario1

User ID ('UID') [ defaults to next available ]:

Initial group [ users ]:
Additional UNIX groups:

Users can belong to additional UNIX groups on the system.
For local users using graphical desktop login managers such
as XDM/KDM, users may need to be members of additional groups
to access the full functionality of removable media devices.

* Security implications *
Please be aware that by adding users to additional groups may
potentially give access to the removable media of other users.

If you are creating a new user for remote shell access only,
users do not need to belong to any additional groups as standard,
so you may press ENTER at the next prompt.

Press ENTER to continue without adding any additional groups
Or press the UP arrow key to add/select/edit additional groups
:  audio lp optical storage video wheel games power scanner

Home directory [ /home/usuario1 ]

Shell [ /bin/bash ]

Expiry date (YYYY-MM-DD) []:

New account will be created as follows:

---------------------------------------
Login name.......:  usuario1
UID..............:  [ Next available ]
Initial group....:  users
Additional groups:  audio,lp,optical,storage,video,wheel,games,power,scanner
Home directory...:  /home/usuario1
Shell............:  /bin/bash
Expiry date......:  [ Never ]

This is it... if you want to bail out, hit Control-C.  Otherwise, press
ENTER to go ahead and make the account.


Creating new account...


Changing finger information for usuario1.
Name []: usuario1
Office []: home
Office Phone []:
Home Phone []:

Finger information changed.
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully


Account setup complete.
Y esto es todo por ahora. En la siguiente entrada sobre Raspberry Pi veremos como fortificar un poco el sistema antes de publicar algún servicio en Internet...

7 comentarios :

  1. Siempre he querido un mail LEGO-MINDSTORMS. Puede una Raspberry Pi llegar a ofrecer funcionalidad similar mediante programación?

    ResponderEliminar
  2. claro que sí, con un poco de trabajo... por ejemplo mira este proyecto: http://www.raspberrypi.org/archives/3082

    ResponderEliminar
  3. Tienes razón, que cosas mas interesantes:

    http://www.youtube.com/watch?v=Jq5nrHz9I94




    ResponderEliminar
  4. Dios mio!!!
    Se han convertido en un sitio de gadgets! y tecnología.
    Si te hace sentir mejor, yo tampoco sabía que era, pero estuve cerca de algo similiar días atrás ( "android pc" decía la orden de compra ;D)
    Muy interesante, espero la próxima entrega....
    Sds.

    ResponderEliminar
  5. Una pregunta saben si puedo tener en una sd, una linux y android

    ResponderEliminar
  6. Si puedes, lo único que tendrás que "cocinarlo" un poco. Por ejemplo, con kpartx, mksquashfs y unos pocos pasos podrías añadir CyanogenMOD 9 en Berryboot.

    Vease "Adding your own custom operating systems to the menu" en http://www.berryterminal.com/doku.php/berryboot.

    Saludos!

    ResponderEliminar
  7. Tras hacer el upgrade he perdido el bash, posiblemente alguna modificacion del PATH...

    Alguien sabe porque ha ocurrido y como solucionarlo sin tener que reinstalar la imagen?

    ResponderEliminar