Cada cierto tiempo me encuentro con que tengo que preparar una Raspberry Pi para desarrollar algún prototipo hardware utilizando Python como lenguaje de programación. La Raspberry con la que me toca jugar suele tener ya algo instalado, pero como no sé ni cuánto hace que se puso en marcha ni en que estado se quedó suelo hacer una instalación limpia.

Los pasos que describo a continuación son los que doy para preparar una Raspberry Pi con Raspbian desde cero. No es necesario conectarle ni teclado, ni ratón, ni monitor. Al terminar el proceso puedo conectar con SSH utilizando autenticación con clave pública. Estos pasos son los siguientes:

  1. Descarga la última imagen disponible del sistema operativo.

    En la web de Raspberry Pi tienen una página dedicada a Raspbian. Verás varias versiones. Aunque no es obligatorio, suelo decantarme por la primera de ellas, Raspbian with desktop and recommended software. La razón: así tengo el sistema preparado para cualquier eventualidad que se pueda presentar.

    Puedes descargar la imagen de disco por Torrent o en formato ZIP. Yo uso la primera y, además, dejo la imagen siempre disponible en mi cliente de Torrent para contribuir con mi ancho de banda a quien quiera descargar dicha imagen en el futuro. Periódicamente compruebo si hay nuevas versiones para ofrecer la más reciente.

  2. Instala Etcher en tu ordenador.

    Lo usarás para grabar la imagen de disco en la tarjeta microSD que después irá en la Raspberry Pi. Existen diferentes alternativas para instalarlo. Como yo uso macOS, la que más me gusta es Homebrew.

  3. Graba la imagen en una tarjeta microSD.

    Utiliza Etcher para grabar en una tarjeta microSD la imagen de disco que descargaste. La propia interfaz de usuario de Etcher describe los pasos necesarios a dar. Tras grabar la imagen verifica que los datos grabados sean correctos.

  4. Configura la Wi-Fi.

    Para ello crea un archivo llamado wpa_supplicant.conf. En mi caso, su contenido será similar al siguiente:

     country=ES
     ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
     update_config=1
    
     network={
         ssid="id_de_la_red"
         scan_ssid=1
         psk="contraseña_de_acceso_a_la_red"
         key_mgmt=WPA-PSK
     }
    

    Sólo tengo que cambiar el identificador de la red y la contraseña de acceso a la misma. Puede que tu caso sea algo diferente y necesites configurar el archivo de otra manera.

    Cuando lo tengas listo sólo tienes que copiar ese archivo en la partición llamada boot de la tarjeta microSD que se montará cuando la introduzcas en el ordenador.

  5. Activa el acceso por SSH.

    Tan sencillo como crear un archivo vacío llamado ssh en la partición llamada boot de la tarjeta microSD.

  6. Pon en marcha la Raspberry Pi.

    Para ello tendrás que sacar la tarjeta microSD del ordenador e introducirla en la Raspberry Pi. Conéctala después a la alimentación eléctrica. Cuando el proceso de arranque concluya deberías ser capaz de iniciar sesión por SSH.

  7. Cambia las credenciales.

    Por defecto, el usuario pi tiene la contraseña raspberry. Utiliza la orden passwd para cambiar la contraseña predeterminada y aumentar así la seguridad del sistema.

  8. Cambia el nombre predeterminado del host.

    Edita el archivo /etc/hostname y cambia el nombre predeterminado del host (raspberry) por algo que te permita identificarlo con facilidad. Aprovecha para editar el archivo /etc/hosts, comenta la línea:

     127.0.1.1      raspberrypi
    

    y añade la línea

     XXX.XXX.XXX.XXX      hostname
    

    donde XXX.XXX.XXX.XXX es la IP de tu Raspberry Pi y hostname el nombre que le hayas dado.

  9. Permite el acceso directo por SSH.

    Tan sencillo como crear una carpeta llamada .ssh en la carpeta de inicio del usuario pi y copiar la clave pública del equipo desde el que te conectes al archivo authorized_keys dentro de la carpeta que acabas de crear. Desde ese momento podrás iniciar sesión en la Raspberry sin introducir tu contraseña. Es posible que, en tu caso particular, necesites dar más pasos para conseguir este resultado.

  10. Cambia la codificación del sistema y la zona horaria.

    En mi caso utilizo en_US.UTF-8 y Europe/Madrid. Para realizar los cambios ejecuta:

    sudo raspi-config
    
  11. Actualiza el sistema.

    Aunque hayas descargado la última imagen disponible de Raspbian, desde el momento en el que se publicó hasta el momento en el que la instalases han podido actualizarse muchos paquetes. Por ejemplo, estoy escribiendo estas líneas a finales de marzo del 2019 y la última imagen disponible fue publicada en noviembre de 2018.

    Utiliza las siguientes órdenes, esperando a que la anterior termine antes de ejecutar la siguiente, para actualizar el sistema:

    sudo apt update
    sudo apt upgrade
    sudo apt dist-upgrade
    sudo apt autoremove
    sudo reboot
    
  12. Opcionalmente, instala Python 3.7.0. Esto cosa mía porque utilizo Python en varios lugares:

    • en macOS, por si solo, para crear scripts.
    • en Blender, que incluye su propia versión de Python.
    • en Raspbian.

    Quiero usar la misma versión en todas partes para no tener que perder el tiempo. Aquí la versión que más me costaría cambiar sería la del Python incluido con Blender 1, así que en todas partes estoy usando la 3.7.0.

    Por la razón que sea, Raspbian aún no incluye esta versión de Python, así que tenemos compilarla por nuestra cuenta. Sigue estos pasos para ello:

    sudo apt-get install build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev libffi-dev -y
    cd
    mkdir tmp
    cd tmp
    wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
    tar xf Python-3.7.0.tar.xz
    cd Python-3.7.0
    ./configure
    make -j 4
    sudo make altinstall
    cd
    rm -Rf tmp
    sudo pip3.7 install --upgrade pip
    sudo pip3.7 install RPi.GPIO
    

En el futuro me gustaría preparar un sencillo script con Ansible para automatizar todo el proceso en la medida de lo posible.

Los pasos aquí mostrados consiguen solucionar un caso muy particular que, obviamente, no tiene porqué ser el tuyo. Sin embargo, podría ser que algo de lo que cuento aquí te sea útil en algún momento. En cualquier caso, lo publico porque sé que a mí me va a venir bien tenerlo como referencia.

Actualización: también puedes encontrar una entrada muy similar a ésta, pero para configurar una Raspberry Pi como ordenador de escritorio, con una impresora conectada que compartir con el resto de equipos con acceso a la red de tu casa.

  1. En el momento de escribir estas líneas, Blender 2.80 (una versión beta), incluye Python 3.7.0.