82 - Tu servidor en un USB

82 - Tu servidor en un USB

Monta tu servidor en un USB con una Raspberry PI Zero, un conector USB, y un par de scripts en Bash, y lleva tu servidor donde y cuando lo necesites

1:25
-3:15

No soy de los que gustan de utilizar anglicismo, mas bien todo lo contrario. Pero lo cierto es que no he encontrado un nombre para esto… los que utilizan el idioma de Shakespeare le llaman un dongle USB. Pero lo que realmente quiero es un servidor en un USB.

En español como mucho lo que he encontrado es un dispositivo USB. Pero creo que cuando lo oigas vas a pensar en una memoria USB, y no. Se trata de algo que va mucho mas allá. Se trata de llevar un servidor en un USB. Si, eso es, como llevar un servidor en un USB

Y es que el podcast de hoy trata precisamente de eso, como convertir una Raspberry Pi Zero, en un servidor USB. Un servidor que puedes llevar como cualquier otra memoria USB. Sin embargo, tiene la ventaja de que además de permitirte almacenar cualquier cosa, también es un servidor.

¿Y para que puedes querer un servidor en un USB? Te puede servir para crear tu propio entorno de trabajo. Un entorno para desarrollar tus propias páginas web, con toda la infraestructura necesaria, un servidor Nginx, un servidor de bases de datos, etc. Un lugar donde probar tus propios desplieges, o donde realizar tus propios scripts y pruebas. Pero no solo esto.

Para los mas paranoicos. Para los paranoicos de la privacidad. ¿Que te parecería tener un servidor de contraseñas en ese USB? Espectacular no?

En este nuevo episodio del podcast te voy a contar como puedes hacerlo, y disfrutar de otro de los dispositivos de la familia Raspberry.

Tu servidor en un USB

Tu servidor en un USB

Lo que he publicado esta semana

Todavía no tengo claro cual de los artículos sobre los que estoy trabajando publicaré. Lo cierto es que llevo varios entre manos, y todos son consecuencia de mis últimas actividades. Por un lado está el de nohup, por otro un para administradores de sistemas, y el objetivo es la gestión de usuarios, y el tercero de los que llevo entre manos es sobre sed una herramienta, a la que le dediqué, junto a otras herramientas, un capítulo del tutorial sobre el terminal, pero que creo que es justo que profundice sobre ella.

En este sentido, creo que la próxima semana ya cambiaré el orden, y te hablaré sobre lo publicado la semana anterior, que eso es seguro, mientras que saber con certeza lo que voy a publicar, ahora mismo es mas complicado.

Por cierto, la semana pasada, en Colaboratorio.net, publiqué un artículo muy interesantes sobre Git Stash. Esta herramienta te permite mejorar el flujo de trabajo con Git, y guardar tu sesión temporalmente para recuperarla con posterioridad a un cambio u otra circustancia.

Por otro lado estoy ultimando el siguiente capítulo del tutorial sobre scripts en Bash y que hace referencia a los diccionarios. Si, se que iba a publicar uno sobre funciones, pero he preferido dedicar un capítulo completo a los diccionarios, y asentar de esa forma los conceptos correspondientes a arrays.

Aplicaciones

Respecto a las aplicaciones, y teniendo en cuenta lo que te comenté en el podcast del pasado lunes, he decidido, y así lo estoy haciendo, subir todas las extensiones a la excelente plataforma de Canonical, a Launchpad. La estoy subiendo a un repositorio personal PPA en Launchapd, que he creado ex-profeso para ello, donde tendrás a tu disposición las últimas versiones de las extensiones para que puedas disfrutar de ellas, sin necesidad de que dependa de una tienda de aplicaciones.

Espero, que cuando publique el podcast, ya estén todas subidas, y funcionando, y que puedas disfrutar de ellas. Si es así, no dudes que publicaré un artículo en atareao.es, para que estés informado de ello. Pero sobre todo, la que me corre prisa, es la del Mundial Femenino de Fútbol, para que puedas disfrutar de esta aplicación, directamente desde el escritorio de Ubuntu. Aunque no las tengo todavía conmigo, porque hasta el momento no he probado a subir una extensión a Launchpad y ver como se instala.

Montar tu servidor en un USB

descargamos la última versión de Raspbian

Quemamos la imagen en la micro SD,

udo dd if=2019-04-08-raspbian-stretch-lite.img of=/dev/mmcblk0 bs=4M status=progress conv=fdatasync;sync

Una vez quemada, extrae la micro SD y vuelve a insertarla en el ordenador. Ahora vamos a tocar algunos archivos para que se pueda montar de inmediato como un dispositivo USB. Esto de sacar y volver a meter es para que se monten de forma automática las particiones que se han creado en la micro SD.

Una vez montado tienes que editar el archivo /media/lorenzo/boot/config.txt. Evidentemente, sustituye lorenzo por tu nombre de usuario. En este archivo, tienes que añadir al final el texto siguiente,

dtoverlay=dwc2

A continuación tienes que editar el archivo /media/lorenzo/boot/cmdline.txt. Aquí tienes que añadir modules-load=dwc2,g_ether entre las palabras rootwait y quiet. De esta forma, te quedará algo como lo que puedes ver a continuación,

wc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=c1dc39e5-02 rootfstype=ext4 elevator=deadline fsck.repair=yes   rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh

Por último tienes que crear el archivo /media/lorenzo/boot/ssh. Recuerda sustituir lorenzo por tu nombre de usuario. Para hacer esto, tan solo tienes que ejecutar la siguiente orden en un terminal,

touch /media/lorenzo/boot/ssh

Desmonta las dos particiones antes de extraer la tarjeta micro SD de tu ordenador. Para ello ejecuta las dos instrucciones siguientes,

umount /media/lorenzo/boot
umount /media/lorenzo/rootfs

A puedes extraer la tarjeta micro SD de tu ordenador y ponerla en la Raspberry Pi Zero.

A continuación conecta el dispositivo USB directamente al ordenador y espera un minuto, o un par de minutos para que se ponga en funcionamiento la Raspberry Pi Zero y puedas registrarte

Conexión con Ubuntu

Aquí viene lo que a mi me ha costado mas, pero por que muchas veces me ataranto y no leo. Abre la Configuración > Red. Verás que te ha aparecido una nueva conexión en Cableado, conforme puedes ver en la siguiente captura de pantalla.

A continuación desactiva el IPv6 conforme puedes ver en la siguiente captura de pantalla

Por último en la pestaña de IPv4 selecciona la opción Solo enlace local, tal y como puedes ver en la siguiente captura de pantalla.

Espera unos segundos y ya podrás conectarte vía ssh con la dirección pi@raspberrypi.local. Las credenciales son las habituales,

usuario: pi contraseña: raspberry

Como comento siempre, olvídate de contraseñas y utiliza tus claves público privada. Para ello, te recomiendo que sigas las instrucciones que indico en el artículo de sincronización sin contraseñas, y lo que indico en el podcast 63 sobre asegurar tu Raspberry.

Siguiendo las recomendaciones del podcast, modifica el archivo ~/.ssh/config y añade algo como lo que ves a continuación,

Host rpil
    Hostname raspberrypi.local
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes
    User pi
    Port 22

Esto te va a permitir conectarte a esta Raspberry de forma tan sencilla como escribir ssh rpil.

Recuerda expandir el tamaño usado por el sistema operativo, para ello ejecuta sudo raspi-config y a continuación selecciona la opción Advanced Options > Expand Filesystem.

Si ahora reinicias tu Raspberry Pi Zero verás que has perdido la conexión. Es mas se ha creado una nueva conexión con un nuevo nombre. Conexión cableada 2. En mi caso, con todas las pruebas he llegado a tener hasta cinco conexiones cableadas. La cuestión es que las cuatro anteriores no valen para nada. Esto es un verdadero infierno. Pero no te preocupes que un poco mas adelante te explico como resolver este problema.

Por otro lado, también te tienes que haber dado cuenta que no tienes conexión a internet desde la Raspberry Pi Zero, con lo que ni la puedes actualizar, ni puedes instalar nuevos paquetes ni nada de nada. Vamos que tienes una auténtica castaña. Pero como te digo, esto es solucionable.

Una conexión estable

Fijando la dirección IP de la Raspberry Pi Zero

Una vez ya has cambiado la conexión a red local, verás que cambia la IP, con una aspecto similar a 10.42.0.29. Si bien, cada vez que te conectas tendrá una IP, distinta. Para evitar estos cambios permanentes, tienes que editar el archivo /etc/dhcpcd.conf y añadir lo que ves a continuación,

interface usb0
static ip_address=10.42.0.29
static routers=10.42.0.1

Sin embargo, todavía tenemos un problema adicional, y es la MAC aleatoria.

El problema de la MAC aleatoria

La cuestión es que cada vez cada vez que se reinicia la Raspberry Pi Zero crea una nueva dirección MAC aleatoria. Esto hace que tu ordenador vea cada vez un dispositivo distinto, y esta es la razón de que cree una nueva conexión cableada. Esto es probablemente, lo que mas me ha traído de cabeza, y lo que me despistaba por completo. No entendía por que se creaba cada vez una nueva conexión cableada. Y cada vez tenía que reconfigurar la conexión cableada conforme te he indicado anteriormente.

Indicarte que he leído una decena de artículos, y cada uno de su solución al problema. Algunos, tienen una aproximación y otros otra, pero la realidad, es que no he conseguido resolver el problema de una forma digna.

Finalmente seguí la que puedes leer a continuación, aunque sinceramente, no creo que haya sido necesario, llevarlo a cabo. Pero por si las miscas te indico los pasos que seguí.

Primero, ejecuta ip a en el ordenador donde tienes conectada la Raspberry Pi Zero. Esto te tiene que devolver algo como lo que te muestro a continuación,

5: enp0s20u1u4c2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/ether 1e:86:4c:43:9d:60 brd ff:ff:ff:ff:ff:ff
    inet 10.42.0.1/24 brd 10.42.0.255 scope global noprefixroute enp0s20u1u4c2
       valid_lft forever preferred_lft forever
    inet6 fe80::1c86:4cff:fe43:9d60/64 scope link 
       valid_lft forever preferred_lft forever

Si te fijas, tu conexión con la Raspberry Pi Zero, está identificada con un código similar al que ves en mi ejecución enp0s20u1u4c2. Quédate con la dirección MAC que figura, que en mi caso es 1e:86:4c:43:9d:60. Ahora tienes que añadir al archivo /boot/cmdline.txt lo siguiente,

g_ether.host_addr=1e:86:4c:43:9d:60

Esta dirección MAC la tienes que coger de ejecutar ip a en tu ordenador como has visto anteriormente.

Los scripts

Para mi la solución son los dos scripts que he implementado y que me resuelven el problema. El primero de ellos, lo tienes que ejecutar antes de conectar el USB, y es el siguiente,

#!/bin/bash
uuid=$(nmcli con | grep 'enp0s20u1' | egrep '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' -o)
while [[ "$uuid" -eq 0 ]]; do
    uuid=$(nmcli con | grep 'enp0s20u1' | egrep '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' -o)
    sleep 1
    printf "."
done
printf "\n"
printf "Found Raspberry Pi Zero with UUID=$uuid\n"
printf "Deactivating connection"
nmcli con down $uuid
printf "Modifying name to PI\n"
nmcli con mod $uuid connection.id PI
printf "Modifying connection PI to \"shared to other computers\"\n";
nmcli con mod $uuid ipv4.method shared
printf "Activating connection\n"
nmcli con up $uuid
printf "Finished. Now wait 60s and try ssh pi@raspberrypi.local, password \"raspberry\" \n";

El segundo es para cuando vayas a desconectar la Raspberry Pi Zero. Su función es la de borrar la conexión cableada que deja de existir al eliminar el dispositivo.

#!/bin/bash
uuid=$(nmcli con | grep 'enp0s20u1' | egrep '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' -o)
printf "Deactivating Raspberry Pi Zero connection"
nmcli con down $uuid
printf "Deleting connection"
nmcli con del $uuid

Si estás siguiendo el tutorial de scripts en bash, esto te puede dar una idea dea las posiblidades que tienes con Bash.


Más información,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *