Guía para instalar Ubuntu en Raspberry Pi 3

 El sistema operativo "oficial" para Raspberry es Rapsbian, pero en cambio, si quieres instalar Ubuntu, el proceso no es muy complicado.

Pre-Requisitos:

Se asume que ya se cumplen estos requerimientos, como obtenerlos queda fuera del alcance de ésta guía.

  • Lector de memoria microSD
  • Linux y permiso de super usuario (ejemplo: sudo ó root)
  • Instalada la herramienta de descompresión xz
    • en Archlinux
      pacman -S xz
    • en Ubuntu
      sudo apt-get install xz-utils

Instalación:

 Primero debemos descargar la imagen de ubuntu para raspberry, y luego instalarla en la memoria microSD que va en la raspberry. Hay que tener en cuenta que podemos elegir la arquitectura de la imagen entre 32 y 64 bits, por la limitación de memoría en 1Gb no hay mucha diferencia en cual usar. En mi caso elegí la de 32-bit (armhf).

 La imágen la podemos descargar desde https://ubuntu.com/download/raspberry-pi, una vez descargada debemos descomprimirla con xz, el nombre del archivo al momento de escribir esto es: ubuntu-20.04.1-preinstalled-server-armhf+raspi.img.xz

 Una vez finalizada la descarga y desde una consola, nos ubicamos en el directorio donde se encuentra la imagen y procedemos a descomprimir con el comando:

unxz -kv ubuntu-20.04.1-preinstalled-server-armhf+raspi.img.xz

 Al finalizar la descompresión, tendremos un nuevo archivo mucho más grande del mismo nombre pero sin la extensión .xz, ese nuevo archivo es el que deberemos copiar a la memoria microSD, conectamos la memoria al lector microSD, revisamos y deberíamos poder ver un nuevo dispositivo parecido a: /dev/mmcblk0

 Como super usuario (sea con sudo o root) iniciamos la copia de la imagen de ubuntu a la memoria microSD con el comando dd: tener en cuenta que se deben reemplazar los parámetros de "if" y "of" con la ruta absoluta del archivo descomprimido y la ruta de la memoriaSD respectivamente.

dd bs=4M if=/../ubuntu-20.04.1-preinstalled-server-armhf+raspi.img of=/dev/mmcblk0 status=progress

 Al finalizar la copia, instalamos de nuevo la memoria en la raspberry, conectamos la fuente de energía y esperamos a que inicie el sistema operativo.


Login:

 Por defecto la instalación viene con un usuario y password por defecto, el usuario es ubuntu y la contraseña también es ubuntu, en el primer inicio de sesión se pedirá el cambio de la contraseña.

 Para iniciar sesión tenemos dos alternativas:

  • De forma local: que es conectar un teclado físico a la raspberry.
  • De forma remota: que es conectar un cable de red entre un router y la raspberry.

 De contar con disponibilidad de teclado y monitor para usar con la raspberry, la opción mas fácil es de forma local. De lo contrario deberemos hacerlo de forma remota a través de la red local, y este fue mi caso.

 Si contamos con un router y dhcp podremos conectar la raspberry mediante cable UTP/RJ45, y luego desde el administrador del router buscamos la IP entregada a la raspberry, un indicio podría ser el hostname de nombre "ubuntu". Luego que lo encontremos intentamos hacer login por ssh:

 Aceptamos el certificado e inmediatamente nos pedirá cambiar la contraseña:

ubuntu@ubuntu's password:
You are required to change your password immediately (administrator enforced)
...
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for ubuntu.
Current password:
New password:
Retype new password:
passwd: password updated successfully
Connection to ubuntu closed.

 Volvemos hacer login de la misma forma, pero con la nueva contraseña:

ssh ubuntu@ubuntu
ubuntu@ubuntu's password:
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-1015-raspi armv7l)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Mon Aug 10 03:37:55 UTC 2020

  System load:           0.08
  Usage of /:            6.1% of 28.95GB
  Memory usage:          19%
  Swap usage:            0%
  Temperature:           49.4 C
  Processes:             131
  Users logged in:       0
  IPv4 address for eth0: 192.168.1.9

 * Are you ready for Kubernetes 1.19? It's nearly here! Try RC3 with
   sudo snap install microk8s --channel=1.19/candidate --classic

   https://microk8s.io/ has docs and details.

0 updates can be installed immediately.
0 of these updates are security updates.

Configuración de red Wi-Fi:

 Para conectarse a la red usando wifi primero debemos saber cual es nuestro dispositivo de red, y los datos de acceso a la red. Hay un paquete que no viene instalado por defecto pero que es muy útil para trabajar con redes inalámbricas, se llama wireless-tools y los instalamos con:

sudo apt install wireless-tools

 Ahora listamos las interfaces de red y la activamos:

sudo iwconfig
lo        no wireless extensions.

wlan0     IEEE 802.11  ESSID:off/any
            Mode:Managed  Access Point: Not-Associated   Tx-Power=31 dBm
            Retry short limit:7   RTS thr:off   Fragment thr:off
            Encryption key:off
            Power Management:on

eth0      no wireless extensions.

 En mi caso activamos wlan0:

sudo ip link set dev wlan0 up

 Para asegurarnos que vemos nuestra red, hacemos un scan filtrando solo los nombres de las redes:

sudo iwlist wlan0 scan | grep ESSID
...
ESSID:"TP-Link_69E6"
ESSID:"Mi Casa 5.8GHz"
...

 Una vez confirmado que nuestro dispositivo wi-fi esta funcionando y que también podemos ver nuestra red, en mi caso "Mi Casa 5.8GHz", procedemos a la Configuración en el sistema para que se conecte automáticamente en cada inicio.

 Editamos el archivo de configuración /etc/netplan/50-cloud-init.yaml, veremos el contenido con algo parecido a:

network:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
    version: 2

 Agregamos la parte de "wifis" luego de "ethernets". Al ser un archivo Yaml tener cuidado en respetar la alineación de cada linea y sección.

 Dentro de wifis agregamos nuestra interfaz wlan0 con los atributos necesarios y los datos de acceso a la red wi-fi. Para conocer mas sobre la configuración de netplan visitar https://netplan.io/

network:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
    version: 2
    wifis:
        wlan0:
            dhcp4: true
            optional: false
            access-points:
                "Mi Casa 5.8GHz":
                    password: "M1 p4s5w0Rd"

 Finalizamos aplicando los cambios con:

sudo netplan apply

 Para confirmar que todo ha salido bien, verificamos que tenemos IP de nuestra red en el dispositivo wi-fi:

sudo ip address show wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.1.105/24 brd 192.168.1.255 scope global dynamic wlan0
    valid_lft 41230sec preferred_lft 41230sec

 Como vemos, ahora tenemos ip de la red local 192.168.1.105. Reiniciamos la raspberry y desconectamos el cable de red, si todo ha salido bien deberíamos poder hacer login conectados por la wi-fi.

 Y así ya tendríamos nuestra Raspberry Pi 3 funcional y conectada para nuestros trabajos y experimentos, hasta la próxima.