Configurar SSH y WiFi en RaspberryPi sin monitor

Un caso muy típico con el que nos encontramos cuando no necesitamos (o no disponemos) de un monitor a la hora de incializar una raspberry pi desde cero es querer poder conectarla a nuestra red desde el primer momento.

En algunas otros posts anteriores ya he comentado este caso, pero en esta ocasión lo actualizaré a la versión de Raspbian Buster, que a día de hoy es la oficial.

Activar SSH

Una vez tenemos la imagen de Raspbian completamente copiada a la SD, accederemos a la unidad que nos crea al insertarla en el PC, normalmente boot, y añadiremos un fichero vacío, llamado ssh. Con esto, la próxima vez que arranquemos el sistema reconocerá que deseamos activar el servicio SSH y lo gestionará, por lo que quedará correctamente configurado (eso si, por defecto) para poder iniciar sesión.

En mi caso, Windows 10:

Activar y configurar la WiFi

El siguiente caso que necesitamos cubrir es crear una configuración básica para que el sistema pueda conectarse a nuestra red privada segura al iniciar por primera vez.  De este modo la Raspi será accesible por SSH, que ya hemos configurado anteriormente.

Para ello, esta vez crearemos en la raíz boot un fichero llamado wpa_supplicant.conf con el siguiente contenido:

country=ES
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
network={
    ssid="YOUR_NETWORK_NAME"
    psk="YOUR_PASSWORD"
    key_mgmt=WPA-PSK
}

En las líneas anteriores:

  • country: el código de dos dígitos del país de vuestra WiFi, en mi caso ES (España)
  • ctrl_interface: localización de la configuración wpa_supplicant y del grupo que usará una vez iniciado el sistema (no modificar!)
  • network: configuración de vuestras credenciales
    • ssid: vuestro nombre de red
    • psk: vuestro password, dejadlo vacío o no lo indiquéis si no tenéis password
    • key_mgmt: tipo de seguridad (cambiar si tenéis otro, o inidcad NONE si no lo tenéis activado)

Arrancar y acceder

Una vez hayamos creado estos dos ficheros, ya podemos expulsar la SD del PC y arrancar en la RaspberryPi.

Ahora vuestra Raspi estará conectada a vuestra red y podréis acceder a ella mediante SSH. Para ello recordad que deberéis conocer la IP de vuestra conexión, que podréis consultar en vuestro router.

 

Espero que os haya sido útil.

Un saludo!

Jordi

Share Button

ix2-200: recuperar la conexión al nas tras un cambio de red

Muy buenas,

Recientemente cambié de compañía de telecomunicaciones en casa, y con ello me cambiaron el router. Hacía tiempo que no conectaba el NAS, un ix2-200 de Lenovo / Iomega.

Cuando fui a conectarlo hace un par de días me fue imposible conectarme… Al principio me costó entenderlo, pero claramente, el problema era el rango de red en el que estaba conectado nuestro nas en la anterior red. Ésta era 192.168.0.0, mientras que mi actual red es una 192.168.1.0. Para mas inri, mi nas tenía configurado una IP estática… La 192.168.0.2.

Bien, en este punto tenemos dos posibilidades, o bien recuperas el CD-ROM con los drivers, que nos permitía conectar el NAS al PC para configurarlo en un primer momento, o bien (como es mi caso, que no tengo ni idea de dónde paran los drivers, y tampoco los veo por la red), has de buscarte las castañas para hacerlo “manualmente”.

La solución puede parecer difícil… Nada mas lejos de la realidad.

Este método lo he implementado con un Windows 10, pero es aplicable a cualquier sistema:

  1. Antes de empezar es imprescindible conocer el rango de red anterior en el que estaba conectado el NAS (en mi caso, 192.168.0.0)
  2. Desconectad vuestro pc de la red ethernet
  3. Conectad el NAS mediante su cable al puerto Ethernet del PC
  4. Encended el NAS
  5. Una vez haya arrancado, id a configuración del adaptador de red del PC y configuradla en modo estático y con una IP dentro del rango en el que exista vuestro NAS
    • mi NAS tenía IP estática 192.168.0.2
    • pondré la IP de mi PC como 192.168.0.1
  6. Guardad la configuración y esperad unos segundos…
  7. Id al apartado Red de vuestro PC y buscad el NAS (seguramente aparecerá como dispositivo multimedia)
  8. Ahora ya estamos conectados en una red equipo a equipo con nuestro NAS!!!
  9. Aprovechad para entrar al sistema y haced los cambios que sean necesarios
  10. Aprovechad y guardad los cambios!

Con estos sencillos pasos yo he conseguido volver a entrar en mi antiguo NAS y volver a conectarlo a la red…

Espero que os haya ayudado!

 

Saludos,

Jordi

Share Button

[GIT] Eliminar todas las ramas locales

Muy buenas,

Hoy os dejo un comando que me está siendo muy útil últimamente, dado que en el proyecto en el que trabajamos tiene mucho movimiento de desarrollo, y generamos ramas constantemente. Al ser quien las valida y acepto los merge request, me veo obligado a bajarlas todas. Esto conlleva un uso de disco elevado…

Para eliminar todas las ramas locales, excepto una, podemos utilizar el siguiente comando:

$ git branch | grep -v "master" | xargs git branch -D

Dónde master, podéis indicar la rama que queréis dejar “viva”. Por defecto es master, porque es nuestra rama actual, pero podéis indicar la que os sea más útil.

Espero que os haya sido de ayuda.

 

Saludos!

Jordi

Share Button

Eclipse Ponte dockerizado: docker-ponte

Acabo de crear una imagen docker que os ayudará a testear el proyecto de Ponte, de Eclipse.

Ponte es un proyecto que integra un brocker MQTT con Mosquitto, asi como una interfaz de publicación con diversos protocolos orientados al IoT, taes como REST y CoAP. Además, ofrece también la posibilidad de integrar la capa de persistencia de forma muy sencilla (esto lo veremos más adelante).

El proyecto se encuentra aún en una fase muy poco avanzada, pero ya de saque nos ofrece una buena base para iniciarnos en este mundillo teniendo todo bastante a mano.

Os dejo la web del poryecto:

Mi repositorio git con el Dockerfile lo encontraréis en esta url: https://github.com/jormc/docker-ponte

En breve escribiré algunos tutoriales para mostrar el gran potencial de este proyecto.

Espero que os sea interesante y de gran utilidad.

Salud y fuerza en estos momentos difíciles!

Jordi

Share Button

[ACF] Campos ACF que no guardan su valor

Me vuelvo loco… como lo digo.

ACF, o Advanced Custom Fields, es uno de los mejors addons que conozco en la actualidad para WordPress. No, no lo uso en mi web, porque es tan simple que sólo uso posts simples… Pero en mis múltiples proyectos de webs para terceros, y templates para WordPress, si los uso. Y son excesivamente útiles: te permiten ampliar la lógica y el contenido de una página simple de WordPress, ampliando los horizontes del metadata de la misma…

Vale, ta está bien de texto y biblia, echadle un vistazo vosotros mismos y decidid: https://www.advancedcustomfields.com/

Y bien, después de un buen caldo de publicidad (que conste que no cobro nada!), os explico el problema: en ocasiones algunos de los campos creados en un grupo de campos ACF no guardan su valor tras actualizar la página a la que pertenecen.

Como os decía, es para volverse loco… Porque todos los demás campos guardan su valor tal cuál se espera, pero ese dichoso campo no lo hace… Le he dado mil vueltas y he grabado mil veces… He activado el log y no veo nada…

PROBLEMA: nunca llaméis a vuestro campo como “el sistema le llama internamente”… Si… ACF no sabrá acceder al campo si este se llama igual que su tipo…

Y para muestra, un botón… Cread un campo llamado “image” que sea de tipo “image”. No conseguiréis que se grabe su contenido, nunca… Y no es que sea un bug, es que esta hecho así… Al parecer confunde el dato con el tipo…

Cambiadle el nombre, y funcionará. No le llaméis “image”, sino “cimage” o como buenamente os parezca, y asunto zanjado…

Espero haberos ayudado, y que no os cueste tanto como a mi daros cuenta del dichoso problema…

Suerte!

 

Jordi

Share Button

Related Images:

[JSTL] Mostrar datos de página / session

Recientemente un compañero funcional me ha solicitado que le informe de todos los datos de la session que enviamos en una aplicación web “bastante antigua”. Para evitarme problemas con versiones de Java, he preferido usar comandos del JSTL para poder llevar a cabo esta tarea…

He hecho una pequeña página JSP en la que he añadido este código (a parte del contexto necesario, librerías de cabecera, etc…):

<h3>Page attributes:</h3>
<table>
    <c:forEach items="${pageScope}" var="p">
        <tr>
            <td>${p.key}</td>
            <td>${p.value}</td>
        </tr>
    </c:forEach>
 </table>
 
 <h3>Session attributes:</h3>
<table>
    <c:forEach items="${sessionScope}" var="p">
        <tr>
            <td>${p.key}</td>
            <td>${p.value}</td>
        </tr>
    </c:forEach>
 </table>

Con esto aparecerá una tabla para cada caso por pantalla y podréis ver los resultados. Tened en cuenta que si el valor del parámetro es un objeto, no veréis su contenido, sino su identificador dentro del entorno Java de ejecución… Deberéis añadir tratamientos especiales según el caso (listas, maps…).

Espero que os sea útil.

Un saludo.

 

Jordi

Share Button

[WEMOS] Error cargando sketch

La pasada semana, intentando realizar diversas pruebas con mi Wemos D1 Mini PRO, me llevé un buen susto… Tras cargar diversas versiones de sketches que prometían cargar y leer datos en la EEPROM, me apareció un mensaje de error del tipo:

warning: espcomm_send_command: didn't receive command response
warning: espcomm_send_command(FLASH_DOWNLOAD_BEGIN) failed
closing bootloader
flush start
setting serial port timeouts to 1 ms
setting serial port timeouts to 1000 ms
flush complete
error: espcomm_upload_mem failed

Tras esto, por mucho que intentase cargar cualquier skecth, por sencillo que fuera (incluso el básico blink), me fue imposible, siempre aparece el mismo error… Por lo tanto, llegué a la conclusión de que lo había brickeado

Por suerte no fue así… pero me llevé un buen susto. Todo apuntaba a un problema de memoria o conexión serie…

Si habéis sufrido este error (el indicado mas arriba), intentad hacer lo que yo hice (ojo, sirve para cualquier ESP8266):

  1. Conectar con usb al pc (Linux o Windows)
  2. Arrancad el Arduino IDE (no uséis el Code Online!) y verificad que podéis conectaros a la placa, seleccionando modelo y puerto (el sistema debería haberlo reconocido en cuanto lo conectasteis)
  3. Abrid el monitor serie, y conectaros a 115200 bps
  4. En la pantalla del monitor debería aparecer “algo de basura” (ya sabéis, código raros)
  5. Realizad varios reset en el Wemos, y observad qué sucede en la pantalla del monitor serie, debería ir saliendo “basura”, a demás de que el led integrado irá parpadeando en cada uno de ellos…
  6. Ahora intentad bajar la velocidad de la conexión, y comprobad que todo sigue siendo igual (es probable que en algún momento veáis por pantalla algún mensaje de versión del chipset y último flasheado, por ejemplo, cosa que es normal…)

Si habéis llegado al punto 5 / 6 sin problemas, podemos decir que, al menos, la comunicación con nuestro chip con el serial del pc es correcto, y esto ya es mucho. Nuestro ESP8266 parece que no está brickeado…

Ahora, para hacer un reset de la memoria flash, que es la que se ha “degenerado”, hay que proceder de este modo.

Validar la comunicación con el sistema:

  1. Validar que la velocidad del puerto configurada en nuestro IDE (normalmente 115200) es la misma que la que el sistema suministra en el puerto al que estamos conectados
  2. Una vez validada, si había discordancia entre ambas partes, desconectad el Wemos del PC y volvedlo a conectar
  3. Probad a cargar de nuevo el scketch

Si esto no funciona, deberemos hacer un “reset” de la memoria en tiempo de carga… para esto, procederemos del siguiente modo:

Wemos D1 Min PRO pinout

Wemos D1 Min PRO pinout

  1. Desconectar la placa de la alimentación o cable USB
  2. Conectar GPIO0 (D3) a GND
  3. Conectar SS (D8) a GND
  4. Conectar el cable USB
  5. Lanzar de nuevo la carga del scketch

De este modo lo que hemos hecho ha sido hacer un reset de la EEPROM de flasheo, y renovar su contenido por la “fuerza bruta”…

Con esto, espero que os haya cargado, esta vez si, el scketch de manera satisfatoria y por fin hayáis podido “revivir” vuestro Wemos…

 

Un saludo, y suerte!

 

Jordi

 

 

Share Button

RasPi: conectando un SAI Salicru SPS One 900VA (II)

Retomo este mini tutorial a cerca de Nut, usado con un SAI Salicru SPS One de 900VA (cabe destacar que, en un principio, sólo era una pequeña review de cómo usar NUT, pero debido a las muchas preguntas recibidas, he decidido ampliarlo un pelín mas).

Es importante destacar que no me responsabilizo de nada de lo que os pueda suceder al intentar utilizar mis apuntes con vuestros sistemas, como es normal… Si bien, no importa demasiado, porque lo que aquí comentaré no es intrusivo para el sistema…

Seguid leyendo para continuar con esta segunda entrega, y espero que os sea de gran ayuda! 😉

Continue reading ‘RasPi: conectando un SAI Salicru SPS One 900VA (II)’ »

Share Button

Instalando Oracle JDK 7 en Ubuntu 16.04

Recientemente me he encontrado con la necesidad de instalar la máquina virtual de Java, en su versión 7. En concreto, necesitaba instalar la Oracle JDK 7, en Ubuntu 16.04, para ser exactos.

El problema viene cuando intentas hacerlo de manera “automática” a través del apt install. Definitivamente, es imposible, tanto para versiones JDK 6 como 7… El motivo es que Oracle ha decidido deprecar estas versiones, y por lo tanto las ha retirado de sus respositorios…

Aquí podemos encontrar mas información a cerca de los motivos: http://www.webupd8.org/2017/06/why-oracle-java-7-and-6-installers-no.html

Para poder instalar un paquete antiguo, de este estilo, deberemos hacerlo manualmente. Es sencillo, y no requiere mas que de permisos sudoer para poder llevarlo a cabo…

Vamos a verlo.

Primero, descargamos la versión deseada de la JDK. Para este ejemplo, bajaremos la última publicación de la 7. Accederemos al respositorio de archivos de Oracle y descargamos la versión que nos interese. Yo bajé la 7u80: http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html

Guardamos el fichero en una zona temporal, como por ejemplo, nuestro home, y la movemos a la carpeta /var/cache/oracle-jdk7-installer/ (si no existe, deberéis crearla). A demás, si existe y contiene algún fichero antiguo de instalación, es recomendable eliminarlo antes…

$ sudo mkdir /var/cache/oracle-jdk7-installer/
$ sudo mv /home/jordi/jdk-7u80-linux-x64.tar.gz /var/cache/oracle-jdk7-installer/

Ahora ya tenemos el paquete listo para instalar de manera normal. Comentar que este procedimiento que hemos realizado es el mismo que apt install hace previamente a la instalación. Así que lo que estamos haciendo es bajarnos nosotros mismos el paquete tal cuál pasaría durante la fase de pre-instalación con apt…

Ahora, sólo nos queda instalarlo…

$ sudo apt-get install oracle-java7-installer

Y una vez instalado, podemos proceder a comprobar que realmente es seleccionable como defecto (yo ya disponía de la 8 en mi sistema):

$ sudo update-alternatives --config java
Existen 2 opciones para la alternativa java (que provee /usr/bin/java).

  Selección   Ruta                                     Prioridad  Estado
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-oracle/jre/bin/java   1082      modo automático
  1            /usr/lib/jvm/java-7-oracle/jre/bin/java   1082      modo manual
* 2            /usr/lib/jvm/java-8-oracle/jre/bin/java   1081      modo manual

Press <enter> to keep the current choice[*], or type selection number: 0
update-alternatives: utilizando /usr/lib/jvm/java-7-oracle/jre/bin/java para proveer /usr/bin/java (java) en modo automático

jmarques@PR170:~$ java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

Como veis, he seleccionado la versión 7 del JDK (opción 0) y a demás, una vez finalizado, hemos validado que realmente se han realizado los cambios correctamente, solicitando la versión al sistema.

Con esto, ya tenemos la versión 1.7 de la JDK de Oracle instalada normalmente en nuestro Ubuntu. Podréis hacer lo mismo con otras versiones, o incluso paquetes que necesitéis…

Por cierto, no debéis olvidar actualizar el JAVA_HOME:

$ echo $JAVA_HOME
/usr/lib/jvm/java-8-oracle

$ sudo vi /etc/environment
> JAVA_HOME=/usr/lib/jvm/java-7-oracle

$ source /etc/environment
$ echo $JAVA_HOME
/usr/lib/jvm/java-7-oracle

Espero que os haya parecido útil este post.

 

Un saludo,

Jordi

 

Share Button

[ONION] Cómo extender el almacenamiento en el Omega 2+

NOTA: Este post está basado en mi experiencia y la documentación oficial ubicada en esta url

Una de las cosas que más importan, hoy en día, es el almacenamiento, debido al gran número de datos que generamos… Nuestro Omega 2+ tiene almacenamiento interno, en concreto, monta una ROM en la que se almacena el firmware y el sistema operativo.

La imagen anterior es una captura de mi Omega 2+ recién reseteado de fábrica (suelo hacerlo mucho para hacer mis pruebas de rendimiento, configuraciones, etc). Así, es como esta la imagen que tendríais si accedéis a la consola nada más desempaquetar vuestro dispositivo.

  • Device info: indica las capacidades actuales de nuestro dispositivo
    • Procesador: 580 MHz Ralink MT-7688 MIPS
    • Memoria128MB 580MHz DDR2
    • Almacenamiento32 MB Flash Memory

Como podemos ver, las capacidades son. aunque generosas para su precio y tamaño, escasas para llevar a cabo proyectos importantes. Tan sólo 32MB de memoria flash dedicada al almacenamiento, de las cuáles, 8,5MB ya están dedicadas al sistema operativo… Llevar a cabo instalaciones de ciertos paquetes nos será bastante tedioso si no lo remediamos…

Tenemos dos opciones, ampliar solo almacenamiento (mediante USB o microsd) o bien ampliar almacenamiento y mover todo el sistema operativo y arranque al mismo. Yo seguiré la segunda opción, y es la que describiré en este post. Creo que es la mas completa y nos soluciona la vida de mejor manera…

Básicamente lo que haremos es “mover” desde la memoria flash del Omega 2+ todo el contenido del sistema operativo al nuevo soporte de almacenamiento.

La estructura básica del Omega 2+ se basa en dos carpetas:

  • /rom
    • contiene toda la información “solo lectura” del dispositivo
  • /overlay
    • contiene todos los cambios que realizamos sobre nuestro Omega 2+, como archivos, programas instalados, etc…

En el arranque, se combinan ambas carpetas y conseguimos la estructura lógica / desde dónde podemos acceder a todo el contenido (como en cualquier sistema Linux). Lo que haremos es mover todo el contenido del /overlay sobre nuestro nuevo soporte de almacenamiento, con lo que conseguiremos que toda nuestra información, al final, resida sobre dicho soporte, y podamos así extenderlo.

Material necesario

  • Omega 2+ con firmware >= 0.1.9 b149
  • Dock USB para Omega 2+
  • Cable USB
  • Micro sd del tamaño que creáis oportuno para vuestras necesidades (yo no pasaría de 16Gb, podéis ver su guía de memorias en esta url)

Arrancando el sistema desde micro sd

Para poder ampliar el almacenamiento y poder arrancar desde la sd, debemos seguir estos pasos:

  1. Actualizar el repositorio de paquetes (podéis ver un ejemplo en mi anterior entrada)
  2. Actualizar a la última versión nuestro firmware (ídem que el punto anterior)
  3. Formatear la sd desde el Omega 2+
  4. Preparar la sd para montar el sistema de ficheros con permiso de lectura
  5. Traspasar todo el sistema operativo y configuración de arranque a la sd

Tened en cuenta que:

  • Una vez iniciado el proceso, eliminaremos todo el contenido actual del Omega 2+
  • Perderemos toda la configuración y software que hayáis instalado en el Omega 2+
  • Si en algún momento sacáis la sd del slot y encendéis el sistema, provocaréis un reset del mismo, y lo tendréis todo desconfigurado, volviendo al punto de partida (muy probablemente no dispongáis ni de la consola! pero puedes ver este otro post dónde te explico cómo hacerlo)

Vamos a ello…

Comprobar el estado de nuestro filesystem

Para ello podemos ejecutar el siguiente comando df:

root@Omega-ABCD:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root                 5632      5632         0 100% /rom
tmpfs                    62872       216     62656   0% /tmp
/dev/mtdblock6           25664      2800     22864  11% /overlay
overlayfs:/overlay       25664      2800     22864  11% /
tmpfs                      512         0       512   0% /dev

En mi caso, /rom está al 100% de uso (normal, no se puede escribir), y mi /overlay está al 11%. Esto significa que nos quedan libres unos 25MB de espacio… Recordemos que parto de un sistema “limpio”.

Tras nuestro nuevo procedimiento, la capacidad se verá aumentada considerablemente. No olvidéis estos datos…

Instalación de paquetes

Es probable que debido a un cambio de kernel, obtengáis un error al realizar la instalació. En tal caso, dirigiros al final de este post para seguir las instrucciones necesarias, y posteriormente podréis continuar con el apartado siguiente a la instalación

Empecemos, actualizamos el sistema e instalamos las herramientas necesarias:

root@Omega-ABCD:~# opkg update
root@Omega-ABCD:~# opkg install kmod-usb-storage-extras e2fsprogs kmod-fs-ext4
  • kmod-usb-storage-extras
  • e2fsprogs
  • kmod-fs-ext4

Es el momento de insertar la sd en la ranura (si no lo hablareis hecho antes) y verificar que realmente podemos acceder a ella.

Formateo en ext4

Necesitamos explorar los volúmenes disponibles en nuestro sistema.

Ejecutamos el comando mount:

root@Omega-ABCD:~# mount
/dev/root on /rom type squashfs (ro,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime)
/dev/mtdblock6 on /overlay type jffs2 (rw,noatime)
overlayfs:/overlay on / type overlay (rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work)
tmpfs on /dev type tmpfs (rw,nosuid,relatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600,ptmxmode=000)
debugfs on /sys/kernel/debug type debugfs (rw,noatime)
mountd(pid2059) on /tmp/run/mountd type autofs (rw,relatime,fd=5,pgrp=2057,timeout=60,minproto=5,maxproto=5,indirect)
/dev/mmcblk0p1 on /tmp/run/mountd/mmcblk0p1 type ext4 (rw,relatime,data=ordered)

Podemos ver la última entrada como /dev/mmcblk0p1, que es la que hace referencia a la tarjeta sd. Si en vez de sd usamos un stic USB, el dispositivo sería /dev/sda1. Si dispusiéramos de múltiples dispositivos, el identificador del final (1) indicaría el órden del dispositivo: sda1, sda2, sda3… mmcblk0p1, mmcblk0p2, mmcblk0p3…

Nosotros usaremos /dev/mmcblk0p1 que es nuestra tarjeta sd. En nuestro caso se trata de una micro sd de 4Gb.

A continuación, iniciamos el formateo de la tarjeta:

root@Omega-ABCD:~# mkfs.ext4 /dev/mmcblk0p1
mke2fs 1.43.3 (04-Sep-2016)
/dev/mmcblk0p1 contains a ext4 file system
        created on Thu Nov 30 11:19:33 2017
Proceed anyway? (y,n) y
Creating filesystem with 985088 4k blocks and 246512 inodes
Filesystem UUID: 2611a4ff-6706-4a6a-bb45-ae66c4b2cdf6
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

En mi ejemplo, yo ya disponía de un sistema ext4 en la sd. Decid a todo que sí, y finalizad el formato.

Ya tenemos nuestra sd formateada en ext4.

Montar el volúmen

Ahora que ya tenemos la sd formateada, es el momento de montar el nuevo volumen.

Para ello, lo que haremos será crear un nuevo directorio como punto de anclaje para el nuevo volumen, y montaremos el dispositivo lógico sobre el mismo:

root@Omega-ABCD:~# mkdir /mnt/mmcblk0p1
root@Omega-ABCD:~# mount /dev/mmcblk0p1 /mnt/mmcblk0p1

Tras lo cuál, ya tenemos disponible nuestra nueva unidad de almacenamiento. Podemos acceder a ella mediante /mnt/mmcblk0p1:

root@Omega-ABCD:~# ls /mnt/mmcblk0p1
lost+found

Si accedemos al mismo vemos que, efectivamente, es accesible y está vacío.

Duplicar la capa /overlay sobre el nuevo volumen

Ahora que ya tenemos el volumen montado y es accesible, es el momento de volcar todo nuestro /overlay sobre él, para que podamos posteriormente hacer uso del mismo de manera transparente:

root@Omega-ABCD:~# mount /dev/mmcblk0p1 /mnt/ ; tar -C /overlay -cvf - . | tar -C /mnt/ -xf - ; umount /mnt/

tras ejecutar este comando veremos cómo se procesa todo el directorio /overlay y lo asocia al nuevo volumen.

Ahora ya tenemos vinculado /overlay con /mnt/mmcblk0p1

Hacer persistente el vínculo y automontarlo en cada arranque

Ahora es el momento de hacer que el volumen sea montado en cada arranque.

Instalamos block-mount:

root@Omega-ABCD:~# opkg update
root@Omega-ABCD:~# opkg install block-mount

Persistimos los cambios en el fstab:

root@Omega-ABCD:~# block detect > /etc/config/fstab

Ahora ya lo tenemos en el fstab, y podremos arrancarlo automáticamente.

Debemos modificar algunos parámetros. Para ello editamos fstab:

root@Omega-3285:~# vi /etc/config/fstab

config 'global'
        option  anon_swap       '0'
        option  anon_mount      '0'
        option  auto_swap       '1'
        option  auto_mount      '1'
        option  delay_root      '5'
        option  check_fs        '0'

config 'mount'
        option  target  '/mnt/mmcblk0p1'
        option  uuid    '2611a4ff-6706-4a6a-bb45-ae66c4b2cdf6'
        option  enabled '0'

Y lo modificamos según este contenido:

config 'global'
        option  anon_swap       '0'
        option  anon_mount      '0'
        option  auto_swap       '1'
        option  auto_mount      '1'
        option  delay_root      '5'
        option  check_fs        '0'

config 'mount'
        option  target  '/overlay'
        option  uuid    '2611a4ff-6706-4a6a-bb45-ae66c4b2cdf6'
        option  enabled '1'

Hemos cambiado:

  • línea 10: cambiamos el punto de montaje del volumen, ahora apunta a /overlay
  • línea 12: hacemos que los cambios estén activos

Ya solo nos queda realizar un reboot al sistema:

root@Omega-ABCD:~# reboot

y cuando arranque el sistema, lo hará efectivamente desde la tarjeta de memoria…

Verificar el nuevo filesystem

Una ves reiniciado el Omega 2+, podemos volver a recuperar los datos del filesystem y comprobar que realmente estamos haciendo uso de nuestra nueva tarjeta sd como almacenamiento principal del sistema_

root@Omega-3285:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root                 5632      5632         0 100% /rom
tmpfs                    62872       216     62656   0% /tmp
/dev/mmcblk0p1         3812876     23708   3575768   1% /overlay
overlayfs:/overlay     3812876     23708   3575768   1% /
tmpfs                      512         0       512   0% /dev
/dev/mmcblk0p1         3812876     23708   3575768   1% /tmp/run/mountd/mmcblk0p1

Efectivamente, podemos comprobar que ahora nuestra /overlay está al 1%, del mismo modo que nuestra tarjeta sd montada en /dev/mmcblk0p1, que apunta a /overlay.

Y si, vemos esos casi 4Gb de espacio disponible!

 

Y hasta aquí este tutorial.

Si tenéis cualquier problema o duda, podéis dejarme un comentario e intentaré ayudaros.

 

Jordi

 


Apéndice: errores de instalación por versión del kernel

En el momento de escribir este artículo, mi Omega 2+ tenía el kernel 4.4.46.

Sin embargo, existen paquetes que ya están preparados para el 4.4.76 y por lo tanto, al intentar instalarlos mediante opkg nos devuelve un error.

A continuación os indico cómo proceder en ambos casos, porque no lo dice en su documentación actual…

Primero comprobamos nuestro kernel

root@Omega-ABCD:~# uname -r
4.4.46

Vemos que tenemos el 4.4.46, sin embargo parece ser que han empezado a lanzar paquetes que requieren el 4.4.76

Disponemos del repositorio de software en esta url, desde dónde podremos descargar las versiones de nuestro kernel: http://repo.onion.io/omega2/packages/core

El error que nos da el sistema “normal” de instalación es este:

Collected errors:
 * satisfy_dependencies_for: Cannot satisfy the following dependencies for kmod-usb-storage-extras:
 *      kernel (= 4.4.74-1-97eec485b1ee24d5b1ca0357d1dd7304) *
 * opkg_install_cmd: Cannot install package kmod-usb-storage-extras.
 * satisfy_dependencies_for: Cannot satisfy the following dependencies for kmod-fs-ext4:
 *      kernel (= 4.4.74-1-97eec485b1ee24d5b1ca0357d1dd7304) *
 * opkg_install_cmd: Cannot install package kmod-fs-ext4.

En caso de obtenerlo por pantalla, deberéis instalar los paquetes de manera manual…

Instalar manualmente kmod-fs-ext4:

root@Omega-3285:~# wget http://repo.onion.io/omega2/packages/core/kmod-fs-ext4_4.4.46-1_mipsel_24kc.ipk
root@Omega-3285:~# opkg install kmod-fs-ext4_4.4.46-1_mipsel_24kc.ipk --nodeps

Instalar manualmente kmod-usb-storage:

root@Omega-ABCD:~# opkg remove kmod-usb-storage
root@Omega-ABCD:~# http://repo.onion.io/omega2/packages/core/kmod-usb-storage-extras_4.4.46-1_mipsel_24kc.ipk
root@Omega-ABCD:~# opkg install kmod-usb-storage-extras_4.4.46-1_mipsel_24kc.ipk --nodeps

See this for more info: http://community.onion.io/topic/2472/can-not-instal-ext4-want-to-use-usb-as-root/8

Share Button

Related Images: