[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:

[ONION] Error de certificados conectando con Git

Hace nada os comentaba cómo instalar Git en nuestro Omega 2+.

Si lo hicisteis e intentasteis empezar a trabajar, clonando un repositorio desde git-hub, por ejemplo, seguramente os disteis cuenta de que “faltaba algo”:

root@Omega-ABCD:~/projects# git clone https://github.com/linnovate/mean.git
Cloning into 'mean'...
fatal: unable to access 'https://github.com/linnovate/mean.git/': Error reading ca cert file /etc/ssl/certs/ca-certificates.crt - mbedTLS: (-0x3E00) PK - Read/write of file failed

En este caso, estaba intentando clonar el repositorio de mean.io, y no he podido porque nos hace falta la configuración de los certificados en nuestro Omega.

Para ello, simplemente debemos actualizar el sistema e instalar el package ca-bundle.

Actualizamos el repositorio:

root@Omega-ABCD:~/projects# opkg update
Downloading http://repo.onion.io/omega2/packages/core/Packages.gz
Updated list of available packages in /var/opkg-lists/omega2_core
Downloading http://repo.onion.io/omega2/packages/core/Packages.sig
Signature check passed.
Downloading http://repo.onion.io/omega2/packages/base/Packages.gz
Updated list of available packages in /var/opkg-lists/omega2_base
Downloading http://repo.onion.io/omega2/packages/base/Packages.sig
Signature check passed.
Downloading http://repo.onion.io/omega2/packages/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/omega2_packages
Downloading http://repo.onion.io/omega2/packages/packages/Packages.sig
Signature check passed.
Downloading http://repo.onion.io/omega2/packages/onion/Packages.gz
Updated list of available packages in /var/opkg-lists/omega2_onion
Downloading http://repo.onion.io/omega2/packages/onion/Packages.sig
Signature check passed.

E instalamos el paquete:

root@Omega-ABCD:~/projects# opkg install ca-bundle
Installing ca-bundle (20161130+nmu1) to root...
Downloading http://repo.onion.io/omega2/packages/base/ca-bundle_20161130+nmu1_all.ipk
Configuring ca-bundle.

Ahora ya podemos acceder a git y clonar nuestro repositorio…


Espero que os haya sido de utilidad.

 

Jordi

Share Button

[ONION] Instalando software en el Omega 2+

Hoy he retomado mis antiguos proyectos con el Onion Omega 2+, y me he encontrado con que la última vez que lo usé, se me quedó a “cero”… Es decir, listo para ser reconfigurado…

Me he visto obligado a volver a instalar la consola, y algún que otro software adicional…

A continuación os dejo un ejemplo rápido de cómo mantener actualizado vuestro Onion Omega 2+.

Actualizar al último firmware

Algo muy importante que es imprescindible hacer cada cierto tiempo, es actualizar nuestro firmware. Para ello existe el comando oupgrade, que nos revisará la versión actual y, en caso de ser necesario, instalará la última publicada.

En el siguiente ejemplo, mi sistema indica que ya está actualizado, en concreto a la versión 0.1.10 b160. Si no lo está, os irá informando por pantalla de todo el proceso. Al final será necesario realizar un reincio, con el comando reboot.

root@Omega-ABCD:~# oupgrade
> Device Firmware Version: 0.1.10 b160
> Checking latest version online...
> Repo Firmware Version: 0.1.10 b160
> Comparing version numbers
> Device firmware is up to date!

Comprobar el software disponible

Podemos comprobar el software disponible en el repositorio para nuestro Onion Omega 2+. Dicho software está compilado y preparado para funcionar directamente y sin problemas en nuestro sistema, por lo que es el mecanismo idóneo de instalación.

El comando que nos ofrece esta posibilidad es opkg, y es muy parecido al iPKGo al archiconocido apt (Advanced Packaging Tool) para sistemas Linux.

Con el sisguiente comando, podemos ver todo el listado de software disponible:

root@Omega-ABCD:~# opkg list

Como habréis comprobado, el listado puede ser bastante extenso (por suerte!). Por lo que podemos hacer uso del típico grep para buscar según nuestras necesidades. Veámoslo en el siguiente apartado práctico.

Instalando el software

Para ver cómo funciona el comando opkg, podemos realizar varias instalaciones de utilidad en nuestro día a día como desarrolladores.

Actualizar el sistema

Antes de continuar, lo idóneo es actualizar la información del repositorio de software, para obtener los últimos cambios.

Para ello, usaremos opkg update:

root@Omega-ABCD:~/projects# opkg update
Downloading http://repo.onion.io/omega2/packages/core/Packages.gz
Updated list of available packages in /var/opkg-lists/omega2_core
Downloading http://repo.onion.io/omega2/packages/core/Packages.sig
Signature check passed.
Downloading http://repo.onion.io/omega2/packages/base/Packages.gz
Updated list of available packages in /var/opkg-lists/omega2_base
Downloading http://repo.onion.io/omega2/packages/base/Packages.sig
Signature check passed.
Downloading http://repo.onion.io/omega2/packages/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/omega2_packages
Downloading http://repo.onion.io/omega2/packages/packages/Packages.sig
Signature check passed.
Downloading http://repo.onion.io/omega2/packages/onion/Packages.gz
Updated list of available packages in /var/opkg-lists/omega2_onion
Downloading http://repo.onion.io/omega2/packages/onion/Packages.sig
Signature check passed.

Y, si fuera necesario, actualizamos el software ya instalado en nuestro sistema, con opkg upgrade [package]:

root@Omega-ABCD:~/projects# opkg upgrade git

En este caso actualizaríamos el package git.

Instalación de NodeJS

Para instalar nodejs, primero miremos qué paquetes están disponibles:

root@Omega-ABCD:~# opkg list | grep node
node-oled-exp - 0.2-1 - Node module for OLED Expansion
node-pwm-exp - 0.2-1 - Node module for Servo (PWM) Expansion
node-red-contrib-ibm-watson-iot - 0.2.8-1 - node-red-contrib-ibm-watson-iot package built for MIPS
node-red-install-tool - 0.1-1 - Script for installing node-red on automounted usb storage for Omega2
node-relay-exp - 0.2-1 - Node module for Relay Expansion
node-usb - 0.1-1 - The node-usb package cross compiled for openwrt
nodejs - v4.3.1-1 - Event-driven I/O server-side JavaScript environment based on V8
onion-console-node-red - 0.1.3-1 - Node red app fo the console
onion-node-red - 0.1-1 - Node-Red built for mips Ar971XX.
onoff-node - 0.1-1 - Onoff package built for mips.

Vemos que el listado es también muy amplio… Podemos ver la librería nodejs (línea 8, que es la que ahora nos interesa), así como algunas aplicaciones extra para Onion, como el node-usb, node-ole-exp, etc…

Instalamos nodejs:

root@Omega-ABCD:~# opkg install nodejs

A continuación os informará por pantalla un log bastante largo en el que os irá informando de todo el proceso de instalación.

Al finalizar, podemos comprobar que node se ha instalado, preguntando por su versión y una sencilla prueba de escritura por consola:

root@Omega-ABCD:~# node -v
v4.3.1
root@Omega-ABCD:~# node
> console.log("Hello World!")
Hello World!
undefined
>

No dejaremos pasar de instalar npm, del mismo modo:

root@Omega-ABCD:~# opkg list | grep npm
npm - v4.3.1-1 - Node.js Package Manager
root@Omega-ABCD:~# opkg install npm
root@Omega-ABCD:~# npm -v
2.14.12

Como vemos, lo hemos buscado, y lo hemos instalado. Posteriormente, hemos solicitado su versión para ver que realmente está instalado.

Ahora ya tenemos disponible tanto nodejs como npm.

Instalación de Git

Otra herramienta muy importante es Git, para nuestro control de versiones. Procederemos del mismo modo que para nodejs y npm:

root@Omega-ABCD:~# opkg list | grep git
git - 2.11.0-1 - Git is a free & open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
git-http - 2.11.0-1 - Git is a free & open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency.  This package allows git push/fetch over http(s) and ftp(s)
hostname-tool - 0.3-1 - Tool to properly set the Omega2's Hostname to the last 4 digits of its MAC address
libffmpeg-audio-dec - 3.2.2-1 - FFmpeg is a a software package that can record, convert and stream digital audio and video in numerous formats. . This package contains FFmpeg shared libraries for audio decoding
libfreetype - 2.5.5-2 - The FreeType project is a team of volunteers who develop free, portable and high-quality software solutions for digital typography. They specifically target embedded systems and focus on bringing small, efficient and ubiquitous products.
transmission-cli-openssl - 2.92+git-4 - CLI utilities for transmission.
transmission-daemon-openssl - 2.92+git-4 - Transmission is a simple BitTorrent client. It features a very simple, intuitive interface on top on an efficient, cross-platform back-end. This package contains the daemon itself.
transmission-remote-openssl - 2.92+git-4 - CLI remote interface for transmission.
transmission-web - 2.92+git-4 - Webinterface resources for transmission.

Vemos que hay diversas opciones, pero las que nos interesan son las dos primeras: git y git-http:

root@Omega-ABCD:~# opkg install git git-http
Package git (2.11.0-1) installed in root is up to date.
Package git-http (2.11.0-1) installed in root is up to date.

Con la anterior sentencia podemos instalar dos paquetes al mismo tiempo. A demás, os muestro qué nos diría el sistema si ya los tenemos instalados. De esta manera podemos actualizarlos, ya que si en el repositorio existiera una versión mas reciente a la nuestra, se instalaría automáticamente del mismo modo.


Y hasta aquí esta breve guía de instalación de software en nuestro Onion Omega 2+.

Confío que os haya parecido interesante.

 

Jordi

Share Button

Instalando Nodejs en RaspberryPi Zero W

Si habéis podido haceros finalmente con una Pi Zero, y os encontráis con la necesidad de utilizar Node, habréis visto que para los sistemas Arm6 la distribución se quedó en la versión oficial 4. Para según qué casos, esto se nos queda un poco pequeño, sino justo. Por ejemplo, en mi caso quiero trabajar con Angular Cli, y precisa de las últimas versiones para funcionar correctamente. Si bien indican que es preciso una 4.1 como mínimo, yo siempre prefiero estar a la última.

Que la versión de Node no esté disponible a través de la instalación con paquetes, como por ejemplo, apt, no significa que no podamos disfrutar de la última versión en nuestro sistema.

Lo primero que haremos será desinstalar por completo cualquier versión de la que dispongamos en nuestro sistema:

pi@raspberrypi:~ $ sudo apt remove --purge node nodejs npm

Una vez finalizado el proceso, podemos descargar la última versión de node desde su página oficial. En mi caso, ésta era la 8.9.1, y podréis encontrarla en esta url: https://nodejs.org/es/download.

Deberéis seleccionar la opción que indica: Linux Binaries (ARM) > ARMv6.

Si no disponéis de entorno gráfico, como es mi caso, podréis decargarla mediante wget:

pi@raspberrypi:~ $ mkdir /home/pi/downloads
pi@raspberrypi:~ $ cd/home/pi/downloads
pi@raspberrypi:~ $ wget https://nodejs.org/dist/v8.9.1/node-v8.9.1-linux-armv6l.tar.xz

Os recomiendo descargarlo en un directorio local, en vuestro home, ya que tendremos que hacer algunas con ello. En el ejemplo, lo hemos descargado en /home/pi/downloads.

Una vez descargado, lo descomprimimos:

pi@raspberrypi:~ $ sudo tar xzvf ./node-v8.9.1-linux-armv6l.tar.xz
pi@raspberrypi:~ $ sudo mv ./node-v8.9.1-linux-armv6l.tar.xz /usr/local/bin/node

Esto hará que tengamos node descomprimido en el directorio: /usr/local/bin/node

De este modo ya casi tenemos nodejs instalado de manera manual. Ahora solo nos falta hacer que quede expuesto dentro del PATH del sistema y podamos utilizarlo sin complicaciones. Para ello, lo que haremos es exponerlo del siguiente modo, en nuestro fichero de alias bash por defecto para el usuario pi:

pi@raspberrypi:~ $ vi ~/.bash_aliases

Añadir el siguiente contenido al final fichero, si fuera necesario:

export PATH=$PATH:/usr/local/bin/node

Tras esto, guardamos el fichero y reiniciamos el bash:

pi@raspberrypi:~ $ bash

Validamos las versiones de node y npm:

pi@raspberrypi:~ $ node -v
v9.2.0
pi@raspberrypi:~ $ npm -v
5.5.1

Y con esto ya hemos finalizado la instalación de node en su última versión para ARMv6, sin necesidad de tener que compilar ni rompernos la cabeza con mil configuraciones.

Eso si, tened en cuenta que no se actualizará de manera automática, y tendremos que hacerlo a mano cada vez que sea necesario… Al menos hasta que decidan volver a poner en línea con APT los paquetes mas actuales de node…

Espero que os haya parecido útil e interesante.

 

Jordi

Share Button

Sóc Català / Soy Catalán, y me odias en las redes por ello…

Por suerte, pocos, muy pocos de vosotros, os veréis identificados en mi siguiente comentario. Desgraciadamente, me veo obligado a hacerlo, y confío que alguno lo lea… (ojo que va tocho).

Querido “amigo en Facebook” (que como mínimo es lo que eres para mí, ya que ahora me estás leyendo).

Los recientes acontecimientos en mi tierra, Catalunya, me han hecho ver que para tí no significo absolutamente nada. Por tí me podrías una bomba para que desapareciera con el resto de catalanes, sean independentistas o no, harías que entrasen los tanques o incluso desearías vernos en la más pura y trágica situación, solo para tu deleite y felicidad. Solo para satisfacer ese odio que, poco a poco, vas cultivando y que, lo siento mucho por ti, jamás podrás perder, hacia mí y mis amigos, familiares y conocidos. Algo muy triste… Contra toda esa gente de Catalunya que, ya sean separatistas, centristas, de derechas, de izquierdas o sea cual sea su ideología, siguen siendo personas, y como tal, estoy seguro que en un momento difícil te harían llegar su mano para ayudarte, dejando de lado ese odio que irradias. Como digo, personas por igual, que hemos nacido, o no, en Catalunya, y que amamos nuestra tierra, cómo tú amas la tuya, y no por eso nos hace, o te hace, ser mejor, sino diferentes, pero al mismo tiempo, iguales…

Ese odio, esa rabia, esa mala educación y tu mal deseo de lo peor hacia mí o hacia cualquiera que piense distinto a ti, que te lleve la contraria… Ese sentimiento, lo llevarás siempre contigo. Y es muy triste. Porque nunca estarás feliz con nadie diferente a ti… Te carcomerá por siempre, siempre habrá alguien a quien odiar… Verdad? Bueno, a las malas, siempre habrá algún catalán…

Por suerte, creo que soy bastante tolerante con todos mis conocidos, y no conocidos. Intento siempre aplicar el “no hagas aquello que no te gustaría que te hicieran”. Jamás verás en mis redes despreciar a nadie del modo que tú lo haces, y tampoco me pondré a tu nivel… La verdad me duele ver tu muro…

Por eso, lo mejor es que tomemos una decisión… Es muy sencillo, y tenemos dos posibilidades… Tan sólo tienes que venir a mi perfil, y dar a “dejar de seguir” o incluso “bloquear”, ánimo que soy catalán!… Si ves que no sabes hacerlo, no te preocupes, dímelo, yo puedo hacerlo por ti…

¿Qué me dices? ¿Aceptas mi propuesta? Es fácil, ¿No? Creo que ambos saldremos ganando…

PD: podría haberlo hecho en otro idioma, tengo la suerte de ser bilingüe nativo, y de tener nociones de algún que otro más, pero no quiero avivar aún más ese odio que sientes ahora hacia mi…

Gracias por leerme amigo!!! 😉

Share Button