
Mis notas sobre jq.
Índice
Introducción
Descubrí esta utilería por la necesidad de procesar archivos cuyo contenido fue organizado empleando la notación JSON1.
En caso de que algo en esta página o sitio resulte de su interés, para ser incluido como referencia, favor de considerar las indicaciones generales señaladas al final de ésta página, así como las recomendaciones sobre citado y atribución. Asimismo, téngase presente la declaración de responsabilidad sobre la información presentada y su utilización.
Esta página se inició con la versión 1.5, a partir de la versión 1.6 se ha decidió colocar las instrucciones de cada versión en orden descendente.
Instalación y actualización
Esencialmente hay tres formas de hacerse de esta utilería.
- La más sencilla es hacer uso de un administrador de paquetes como Homebrew o MacPorts.
- Una intermedia es descargar el binario (si está disponible) y uno mismo instalarlo en alguna ruta, debiendo uno mismo actualizar paths y registros de software (si aplica y es posible).
- La más complicada (cuestión de enfoques) consistiría en descargar los fuentes, compilar la utilería y dejar que loas scripts de
make
procedan con su instalación.
En realidad, la más simple es precisamente la que a los ojos de alguien inexperto, es la más riesgosa o complicada. De acuerdo a los puntos anteriores, ciertamente las más sencillas son aquellas que permiten tomar un binario e instalarlo para simplemente ser ejecutado, pero esto siempre trae consigo el permitir la instalación de malware o inutilizar al equipo si la instalación substituye algo que no debía ser substituido. La intermedia es, para mi gusto, la más trabajosa e igual de riesgosa, pues requiere que uno sepa dónde debe instalarlo, actualizar lo que sea necesario para que el sistema operativo sepa de la existencia de la utilería y así la administre adecuadamente (no sólo que sepa donde está para invocarla), y al final implica los mismos riesgos que la opción «más simple».
Finalmente, la opción de más trabajo (al menos en una primera vez y para ciertas cosas), es la más segura (desde mi punto de vista). Ciertamente demanda cierto conocimiento de desarrollo de software, del sistema operativo huésped y el contar con las herramientas apropiadas pero permite que uno lo instale con el mayor grado de personalización u optimización posible. Así, las descripciones abajo dadas son para la opción en la que se descarga el código fuente de la utilería y ésta es compilada.
Dependiendo de cuál ha sido la opción seleccionada en la instalación, la misma deberá ser la opción a seguir para la actualización de ésta: si se hizo vía un administrador de paquetes, deberá actualizarse de esta misma forma; si se instaló un binario, deberá buscarse el binario actualizado correspondiente; si se instaló compilando desde los fuentes, deberá actualizarse igual.
Yo he decidido seguir lo que llamé la «más complicada» y cuyos pasos y resultados es lo que se describe en los siguientes apartados.
jq v1.6
Para esta versión en particular, debido a que el equipo donde inicialmente se instaló la versión 1.5 requirió un cambio de disco duro y reinstalación del sistema operativo, se ha hecho la instalación «desde cero» («from scratch«, como dicen los gringos), junto con utilerias y librerías de soporte, razón por la que se describe la instalación de cosas con las que ya puede contarse.
macOS «Big Sur»
Idealmente, en macOS 11 «BigSur«, la instalación de jq a partir de la compilación de sus programas fuentes se esperaba fuera igual sin problemas que en Catalina. Sin embargo, parece que es el propio estado del proyecto jq el que ha causado problemas. La instalación procedió de la siguiente forma:
- Se instaló autoconf, automake y libtool.
- Se descargaron los programas fuente de la librería Oniguruma y se recompilaron:
$ autoreconf -vfi
$ ./configure
$ make
$ sudo make install
- En un primer intento, de la página del producto (no del repositorio en GitHub, que sería la del proyecto y que implicaría trabajar con una versión en desarrollo) se descargó el tarball de esta versión (buscar explícitamente por el tarball y evitar descargar binarios). La compilación de estos archivos termina con el siguiente mensaje de error:
...
CC src/builtin.lo
src/builtin.c:194:31: error: implicit declaration of function 'lgamma_r' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
jv ret = JV_ARRAY(jv_number(lgamma_r(jv_number_value(input), &sign)));
^
1 error generated.
make[2]: *** [src/builtin.lo] Error 1
...
- Así que se clonó el proyecto y se continuó a partir de esta versión:
$ git clone https://github.com/stedolan/jq.git
$ cd jq
$ autoreconf -i
$ ./configure --disable-maintainer-mode
$ make
$ sudo make install
$ jq --version
jq-1.6-145-ga9f97e9
$
macOS Catalina
Para macOS Catalina, la instalación de jq v1.6 procedió de esta forma:
- Se instaló autoconf, automake y libtool.
- Se descargaron los programas fuente de la librería Oniguruma y se recompilaron:
$ autoreconf -vfi
$ ./configure
$ make
$ sudo make install
$ - De la página del producto (no del proyecto, que sería la del correspondiente repositorio en GitHub y que contiene los últimos avances en código, que claro pueden implicar algo de inestabilidad) descargué el tarball de esta versión.
- El correspondiente archive se movió a un lugar donde se trabajará con él y se procede con los tradicionales pasos de instalación:
$ autoreconf -I
$ ./configure --disable-maintainer-mode
$ make
$ sudo make install
$ jq --version
jq-1.6
$
jq v1.5
macOS High Sierra
El procedimiento indicado para macOS «Sierra» 10.12 fue seguido en la versión 10.13.6, sin ningún cambio o consideración adicional. Todo el proceso mostró los mismos resultados (quizás algunos warnings adicionales en la compilación), siendo la única diferencia el resultado mostrado por la versión de jq.
[.../jq]$ jq --version
jq-1.6rc1-17-g0c845aa
[.../jq]$
macOS Sierra
La descripción siguiente ocurre en un equipo Macbook Pro con macOS 10.12.5.
- El primer paso es contar con las herramientas de desarrollo para Mac: XCode.
- Esta utilería requiere que se cuente con la librería Oniguruma para expresiones regulares. Para detalles sobre el proceso de adquisición e instalación de la librería, consúltese mi página de apuntes sobre ésta.
- El código fuente de la utilería se obtiene de la página… o repositorio en este caso… del proyecto: https://stedolan.github.io/jq/download/.
- Obtenido el código fuente, se desempaca en un directorio de trabajo y se procede con la compilación (este ejemplo supone que no se cuenta con la librería Oniguruma instalada aún, lo que se hace con fines de ejemplificación):
[...]$ cd .../jq/1.5/Builds/macOS/10.12.5/
[.../10.12.5]$ git clone https://github.com/stedolan/jq.git
[.../10.12.5]$ cd jq
[.../jq]$ autoreconf -i
glibtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'config'.
glibtoolize: copying file 'config/ltmain.sh'
glibtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'config/m4'.
glibtoolize: copying file 'config/m4/libtool.m4'
glibtoolize: copying file 'config/m4/ltoptions.m4'
glibtoolize: copying file 'config/m4/ltsugar.m4'
glibtoolize: copying file 'config/m4/ltversion.m4'
glibtoolize: copying file 'config/m4/lt~obsolete.m4'
configure.ac:17: installing 'config/ar-lib'
configure.ac:17: installing 'config/compile'
configure.ac:25: installing 'config/config.guess'
configure.ac:25: installing 'config/config.sub'
configure.ac:15: installing 'config/install-sh'
configure.ac:15: installing 'config/missing'
Makefile.am: installing 'config/depcomp'
configure.ac: installing 'config/ylwrap'
parallel-tests: installing 'config/test-driver'
[.../jq]$ ./configure --disable-maintainer-mode
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
...
checking for oniguruma.h... no
configure: Oniguruma was not found. Will use the packaged oniguruma.
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: executing depfiles commands
config.status: executing libtool commands
[.../jq]$
Nótese el mensaje en la parte final de la salida de la utilería de reconfiguración. Indica que no fue posible detectar la presencia del componente llamado Oniguruma. Para salvar este detalle debe procederse como se indica en el paso 2. Solucionado esto la configuración de scripts no debe tener problema alguno. - La compilación es posible que genere algunos «warnings» pero salvo esto no debe presentar mayores problemas.
[.../jq]$ make
GEN src/builtin.inc
GEN src/version.h
...
1 warning generated.
CC src/parser.lo
CCLD libjq.la
CC src/main.o
CCLD jq
GEN jq.1
[.../jq]$
- La instalación de la utilería igualmente no debe presentar problemas.
[.../jq]$ sudo make install
Password:
/Applications/Xcode.app/Contents/Developer/usr/bin/make install-recursive
config/install-sh -c -d '/usr/local/lib'
/bin/sh ./libtool --mode=install /usr/bin/install -c libjq.la '/usr/local/lib'
...
config/install-sh -c -d '/usr/local/include'
/usr/bin/install -c -m 644 src/jv.h src/jq.h '/usr/local/include'
config/install-sh -c -d '/usr/local/share/man/man1'
/usr/bin/install -c -m 644 jq.1 '/usr/local/share/man/man1'
[.../jq]$
- Ya instalada la utilería debe ser «reconocida», por lo que para su validación, basta:
[.../jq]$ jq --version
jq-1.5rc2-245-g7b81a83
[.../jq]$
Centos 7
En lo que respecta a CentOS 7, jq
fue instalado haciendo uso del administrador de paquetes de éste. Esta instalación fue hecha en una máquina virtual con VirtualBox.
yum install epel-release -y
yum install jq -y
Cookbook
Aquí algunos scripts de ejemplo y anotaciones de particularidades útiles.
Pasando el valor de una variable del shell (unix)
- Para pasar el valor de una variable del shell a
jq
debe hacerse uso de la opción--arg
.
Referencias
- «Introducing JSON«, json.org, web. Retrieved: 2017.07.14. URL: http://www.json.org/.
|
© Todos los derechos reservados. Dr. Eduardo René Rodríguez Avila |
Creación: 2017.07.13 Última actualización: 2022.08.02 |
|||
El contenido de este sitio puede ser copiado y reproducido libremente mientras no sea alterado y se cite su origen. Marcas y productos registrados son citados por referencia y sin fines de lucro o dolo. Todas las opiniones son a título personal del o los autores de éstas y, salvo sea expresado de otro modo, deben considerarse como registro y expresión de la experiencia de uso de aquello que es tratado. Para conocer más sobre la posición de privacidad y responsabilidad de lo que se presenta en este sitio web y como ha sido obtenido, consulte la declaración al respecto. |