gemurl


gemurl es a Gemini lo que cURL es para la Web, pero más simple.

Una herramienta de propósito general para interactuar con servidores Gemini desde la línea de comandos.

Instalación


Respositorio de gemurl en Codeberg

$ git clone https://codeberg.org/_-Caleb-_/gemurl
$ cd gemurl
$ make
$ make install

Por defecto, `make install` instala el binario en `~/.local/bin`. Esto se puede cambiar estableciendo la variable de entorno PREFIX.

Dependencias

* OpenSSL 1.1.x o 3.x (el soporte para LibreSSL está pendiente de pruebas)
* Compilador de C (GCC, Clang, etc.)
* GNU Make

Novedades en la Versión 0.2.0


Cambios Incompatibles

* Compatibilidad con OpenSSL 3.0+: La función `SSL_get_peer_certificate()` ha sido reemplazada por su equivalente moderno, requiriendo compilación condicional para mantener la compatibilidad con versiones anteriores.
* Mejora en la inicialización TLS: Se actualizaron las rutinas de inicialización para una mejor portabilidad entre versiones de OpenSSL.

Correcciones de Errores

* Corregido error de sintaxis en el análisis de metadatos (gemini.c:88)
* Añadido `#include <ctype.h>` faltante para la función `isdigit()`
* Corregida la terminación de cadenas meta para manejar correctamente finales CRLF
* Simplificados los flags del enlazador en el Makefile para una mejor compatibilidad

Mejoras

* Compilación condicional para OpenSSL 1.1.x y 3.x
* Mejor limpieza de recursos entre versiones de OpenSSL
* Actualizado a `TLS_client_method()` para una creación de contexto TLS más específica

Objetivos


* Soportar la especificación completa
* Mantener la accesibilidad del código
* Compilar en cualquier sitio con librerías TLS modernas

Justificación


Existen muchos programas que funcionan de manera similar a gemurl (gmni, gemget, gurl, gcat), pero este es el único cliente en el que todo lo siguiente es (o será) cierto:
* Obsesivamente multiplataforma
* Soportar varias implementaciones TLS (OpenSSL 1.1.x/3.x)
* Implementar la especificación completa

Progreso


Hecho:

* Compatibilidad con OpenSSL v1.1.x y 3.x
* Análisis básico de URLs
* Entrada (opción `-i`)
* Redirecciones (opción `-r`)
* Correcciones para compilación multiplataforma

Por hacer:

* Soporte para LibreSSL (necesita pruebas con los cambios de v0.2.0)
* Otras implementaciones TLS (LibTLS, GnuTLS, BearSSL, etc.)
* Certificados de cliente
* Mejoras en compatibilidad con Windows
* Distribución como librería C

Notas de Compatibilidad


Usuarios de OpenSSL 3.0: La versión 0.2.0 incluye correcciones esenciales para la compatibilidad con OpenSSL 3.0. Si usas OpenSSL 1.1.x, los cambios son compatibles con versiones anteriores.

Construir desde el código fuente:
$ git clone https://codeberg.org/_-Caleb-_/gemurl
$ cd gemurl
$ git checkout v0.2.0  # Cuando esté etiquetada
$ make clean
$ make

Solución de Problemas


Si encuentras errores de enlazado con OpenSSL:
# Comprueba tu versión de OpenSSL
$ openssl version

# Asegúrate de que las librerías de desarrollo están instaladas
# Debian/Ubuntu:
$ sudo apt install libssl-dev
# Fedora/RHEL:
$ sudo dnf install openssl-devel
# Solus
$ sudo eopkg it openssl-devel

Licencia


Puedes usar este software bajo los términos de la licencia BSD-3-Clause. Consulta LICENSE para más información.

Código Fuente (Codeberg)

---
Versión 0.2.0 - Actualizada para compatibilidad con OpenSSL 3.0+ y correcciones de errores