Announcing gmni, a line-mode gemini browser and curl-esque utility program
- 📧 Messages: 15
- 🗣️ Authors: 4
- 📅 First Message: 2020-09-21 02:12
- 📅 Last Message: 2020-09-26 19:18
1. Drew DeVault (sir (a) cmpwn.com)
- 📅 Sent: 2020-09-21 02:12
- 📧 Message 1 of 15
Hiya! I felt that the Gemini space has a lot of cool browers, but was
missing the basic works-everywhere client with few-to-no dependencies.
gmni fills that role:
https://sr.ht/~sircmpwn/gmni
Here's a recording which shows off some of its features:
https://asciinema.org/a/Y7viodM01e0AXYyf40CwSLAVA
Two tools are provided: gmni, a curl-like utility which executes Gemini
requests and writes the response to stdout, and gmnlm, a line-mode
interactive browser. The latter is demonstrated in the recording above.
The whole thing clocks in at approximately 3,000 lines of C11. It'll
grow a little bit with TOFU and client-side certificate support, but
otherwise it's pretty close to done. The only dependencies are a
POSIX-like system and OpenSSL.
The Gemini protocol implementation is pretty concise and
straightforward:
https://git.sr.ht/~sircmpwn/gmni/tree/master/include/gmni.h
https://git.sr.ht/~sircmpwn/gmni/tree/master/src/client.c
https://git.sr.ht/~sircmpwn/gmni/tree/master/src/parser.c
If there's any demand for it, I'll package these up into a library you
can link to. I also plan on writing a Gemini server in C with a similar
design approach.
Enjoy!
Link to individual message.
2. Kevin Sangeelee (kevin (a) susa.net)
- 📅 Sent: 2020-09-21 09:54
- 📧 Message 2 of 15
I get a weird sense of catharsis from stuff written in C - thanks for this.
I'm struck by the fact that URL parsing accounts for about half the code -
a stark reminder both of the effort required to handle formal
specifications properly, and of the value of the GPL.
Good stuff!
On Mon, 21 Sep 2020 at 03:30, Drew DeVault <sir at cmpwn.com> wrote:
> Hiya! I felt that the Gemini space has a lot of cool browers, but was
> missing the basic works-everywhere client with few-to-no dependencies.
>
> gmni fills that role:
>
> https://sr.ht/~sircmpwn/gmni
>
> Here's a recording which shows off some of its features:
>
> https://asciinema.org/a/Y7viodM01e0AXYyf40CwSLAVA
>
> Two tools are provided: gmni, a curl-like utility which executes Gemini
> requests and writes the response to stdout, and gmnlm, a line-mode
> interactive browser. The latter is demonstrated in the recording above.
>
> The whole thing clocks in at approximately 3,000 lines of C11. It'll
> grow a little bit with TOFU and client-side certificate support, but
> otherwise it's pretty close to done. The only dependencies are a
> POSIX-like system and OpenSSL.
>
> The Gemini protocol implementation is pretty concise and
> straightforward:
>
> https://git.sr.ht/~sircmpwn/gmni/tree/master/include/gmni.h
> https://git.sr.ht/~sircmpwn/gmni/tree/master/src/client.c
> https://git.sr.ht/~sircmpwn/gmni/tree/master/src/parser.c
>
> If there's any demand for it, I'll package these up into a library you
> can link to. I also plan on writing a Gemini server in C with a similar
> design approach.
>
> Enjoy!
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.orbitalfox.eu/archives/gemini/attachments/20200921/1d8d
ca04/attachment.htm>
Link to individual message.
3. Magnus Wild (magnus (a) kalasarn.se)
- 📅 Sent: 2020-09-21 11:01
- 📧 Message 3 of 15
On Sun, Sep 20, 2020 at 10:12:26PM -0400, Drew DeVault wrote:
> Hiya! I felt that the Gemini space has a lot of cool browers, but was
> missing the basic works-everywhere client with few-to-no dependencies.
This is cool. I managed to build it on openbsd-current with a small
modification;
--- a/src/gmnlm.c
+++ b/src/gmnlm.c
@@ -10,6 +10,7 @@
#include <sys/ioctl.h>
#include <termios.h>
#include <unistd.h>
+#include <limits.h>
#include "gmni.h"
#include "url.h"
#include "util.h"
The error I got before this modification can be seen below.
openbsd-build$ make
CC src/client.o
CC src/escape.o
CC src/gmni.o
CC src/url.o
CCLD gmni
CC src/gmnlm.o
src/gmnlm.c:127:19: error: use of undeclared identifier 'PATH_MAX'
static char path[PATH_MAX+1];
^
src/gmnlm.c:155:19: error: use of undeclared identifier 'PATH_MAX'
static char path[PATH_MAX+1];
^
src/gmnlm.c:157:18: error: use of undeclared identifier 'PATH_MAX'
static char url[PATH_MAX+1+7];
^
3 errors generated.
*** Error 1 in /home/magnus/gmni/build (Makefile:25 'src/gmnlm.o': @cc -c
-g -std=c11 -D_XOPEN_SOURCE=700 -Wall -Wextra -Werror -pedan...)
The program is really small and seems very useful. Thanks a lot for
spending time on this and sharing it!
/Magnus
Link to individual message.
4. Drew DeVault (sir (a) cmpwn.com)
- 📅 Sent: 2020-09-21 11:56
- 📧 Message 4 of 15
On Mon Sep 21, 2020 at 7:01 AM EDT, Magnus Wild wrote:
> This is cool. I managed to build it on openbsd-current with a small
> modification;
>
> --- a/src/gmnlm.c
> +++ b/src/gmnlm.c
> @@ -10,6 +10,7 @@
> #include <sys/ioctl.h>
> #include <termios.h>
> #include <unistd.h>
> +#include <limits.h>
> #include "gmni.h"
> #include "url.h"
> #include "util.h"
Thanks, I just pushed this change upstream.
> The program is really small and seems very useful. Thanks a lot for
> spending time on this and sharing it!
Cheers!
Link to individual message.
5. Magnus Wild (magnus (a) kalasarn.se)
- 📅 Sent: 2020-09-21 18:08
- 📧 Message 5 of 15
On Mon, Sep 21, 2020 at 07:56:33AM -0400, Drew DeVault wrote:
>
> Thanks, I just pushed this change upstream.
>
Nice! That was quick. Thanks a lot! :)
/Magnus
Link to individual message.
6. Terry Brennan (tcb913 (a) gmail.com)
- 📅 Sent: 2020-09-21 19:26
- 📧 Message 6 of 15
Hi! I read this message and thought I'd install the browser. To make a
long story short:
I built and installed scdoc with no problems.
I ran configure in the gmni directory with no problems.
When I ran "make" in gmni directory, I got four errors:
in client.c, line 126: implicit declaration of SSL_CTX_up_ref
in client.c, line 128: implicit declaration of TLS_method
in client.c, line 128: implicit conversion from int to pointer in
arg to SSL_CTX_new
in client.c, line 135: implicit declaration of SSL_up_ref
Seems like something's missing. I find no
BTW, you define CC as cc in config.sh. On my system cc is an alias for
gcc-5.3.0. That should not be a problem.
Terry Brennan
On 09/20/2020 10:12 PM, Drew DeVault wrote:
> Hiya! I felt that the Gemini space has a lot of cool browers, but was
> missing the basic works-everywhere client with few-to-no dependencies.
>
> gmni fills that role:
>
> https://sr.ht/~sircmpwn/gmni
>
> Here's a recording which shows off some of its features:
>
> https://asciinema.org/a/Y7viodM01e0AXYyf40CwSLAVA
>
> Two tools are provided: gmni, a curl-like utility which executes Gemini
> requests and writes the response to stdout, and gmnlm, a line-mode
> interactive browser. The latter is demonstrated in the recording above.
>
> The whole thing clocks in at approximately 3,000 lines of C11. It'll
> grow a little bit with TOFU and client-side certificate support, but
> otherwise it's pretty close to done. The only dependencies are a
> POSIX-like system and OpenSSL.
>
> The Gemini protocol implementation is pretty concise and
> straightforward:
>
> https://git.sr.ht/~sircmpwn/gmni/tree/master/include/gmni.h
> https://git.sr.ht/~sircmpwn/gmni/tree/master/src/client.c
> https://git.sr.ht/~sircmpwn/gmni/tree/master/src/parser.c
>
> If there's any demand for it, I'll package these up into a library you
> can link to. I also plan on writing a Gemini server in C with a similar
> design approach.
>
> Enjoy!
Link to individual message.
7. Drew DeVault (sir (a) cmpwn.com)
- 📅 Sent: 2020-09-21 19:28
- 📧 Message 7 of 15
That's quite bizzare. Are you perhaps using a system with LibreSSL
instead of OpenSSL?
Link to individual message.
8. Terry Brennan (tcb913 (a) gmail.com)
- 📅 Sent: 2020-09-21 20:41
- 📧 Message 8 of 15
No, definitely using openssl. Lots of library stuff, and header files.
BTW, error messages did not report missing header files.
My openssl lib is libgnutils-openssl.so.27.0.2, if this helps.
tb
On 09/21/2020 03:28 PM, Drew DeVault wrote:
> That's quite bizzare. Are you perhaps using a system with LibreSSL
> instead of OpenSSL?
Link to individual message.
9. Drew DeVault (sir (a) cmpwn.com)
- 📅 Sent: 2020-09-21 20:43
- 📧 Message 9 of 15
gnutls-openssl is not openssl.
Link to individual message.
10. Terry Brennan (tcb913 (a) gmail.com)
- 📅 Sent: 2020-09-23 12:40
- 📧 Message 10 of 15
OK.
The include files openssl/bio.h, openssl/err.h, and openssl/ssl.h are
there. Which openssl library does your Makefile want? (It's not clear,
but configure does not throw any errors.
tb
On 09/21/2020 04:43 PM, Drew DeVault wrote:
> gnutls-openssl is not openssl.
Link to individual message.
11. Drew DeVault (sir (a) cmpwn.com)
- 📅 Sent: 2020-09-23 16:40
- 📧 Message 11 of 15
On Wed Sep 23, 2020 at 8:40 AM EDT, Terry Brennan wrote:
> Which openssl library does your Makefile want? (It's not clear, but
> configure does not throw any errors.
It wants OpenSSL. This should be evident by the fact that it calls for
OpenSSL, and not for any other library.
https://www.openssl.org
Link to individual message.
12. Kevin Sangeelee (kevin (a) susa.net)
- 📅 Sent: 2020-09-24 20:22
- 📧 Message 12 of 15
Hi Terry,
As has been alluded to elsewhere, you're not actually using OpenSSL, you
have GnuTLS with an OpenSSL compatibility layer (that's not fully
compatible, as you've seen).
On Debian, I have packages 'openssl' and 'libssl-dev' installed, you may
want to try installing these and then recompile gmni. I'm assuming OpenSSL
can co-exist with GnuTLS, but I haven't tried.
Kevin
On Mon, 21 Sep 2020 at 21:42, Terry Brennan <tcb913 at gmail.com> wrote:
> No, definitely using openssl. Lots of library stuff, and header files.
>
> BTW, error messages did not report missing header files.
>
> My openssl lib is libgnutils-openssl.so.27.0.2, if this helps.
>
> tb
>
>
> On 09/21/2020 03:28 PM, Drew DeVault wrote:
> > That's quite bizzare. Are you perhaps using a system with LibreSSL
> > instead of OpenSSL?
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.orbitalfox.eu/archives/gemini/attachments/20200924/2f34
6107/attachment.htm>
Link to individual message.
13. Terry Brennan (tcb913 (a) gmail.com)
- 📅 Sent: 2020-09-25 15:27
- 📧 Message 13 of 15
Thanks, I'll try that.
tb
On 09/24/2020 04:22 PM, Kevin Sangeelee wrote:
> Hi Terry,
>
> As has been alluded to elsewhere, you're not actually using OpenSSL,
> you have GnuTLS with an OpenSSL compatibility layer (that's not fully
> compatible, as you've seen).
>
> On Debian, I have packages 'openssl' and 'libssl-dev' installed, you
> may want to try installing these and then recompile gmni. I'm assuming
> OpenSSL can co-exist with GnuTLS, but I haven't tried.
>
> Kevin
>
>
> On Mon, 21 Sep 2020 at 21:42, Terry Brennan <tcb913 at gmail.com
> <mailto:tcb913 at gmail.com>> wrote:
>
> No, definitely using openssl. Lots of library stuff, and header files.
>
> BTW, error messages did not report missing header files.
>
> My openssl lib is libgnutils-openssl.so.27.0.2, if this helps.
>
> tb
>
>
> On 09/21/2020 03:28 PM, Drew DeVault wrote:
> > That's quite bizzare. Are you perhaps using a system with LibreSSL
> > instead of OpenSSL?
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.orbitalfox.eu/archives/gemini/attachments/20200925/a88d
3b56/attachment.htm>
Link to individual message.
14. Terry Brennan (tcb913 (a) gmail.com)
- 📅 Sent: 2020-09-26 18:14
- 📧 Message 14 of 15
Kevin, thanks. I downloaded the ssl package from openssl.org, compiled
and installed it, and the compile problems disappeared.
Interesting that Slackware does not offer openssl or libressl.
Terry Brennan
On 09/24/2020 04:22 PM, Kevin Sangeelee wrote:
> Hi Terry,
>
> As has been alluded to elsewhere, you're not actually using OpenSSL,
> you have GnuTLS with an OpenSSL compatibility layer (that's not fully
> compatible, as you've seen).
>
> On Debian, I have packages 'openssl' and 'libssl-dev' installed, you
> may want to try installing these and then recompile gmni. I'm assuming
> OpenSSL can co-exist with GnuTLS, but I haven't tried.
>
> Kevin
>
>
> On Mon, 21 Sep 2020 at 21:42, Terry Brennan <tcb913 at gmail.com
> <mailto:tcb913 at gmail.com>> wrote:
>
> No, definitely using openssl. Lots of library stuff, and header files.
>
> BTW, error messages did not report missing header files.
>
> My openssl lib is libgnutils-openssl.so.27.0.2, if this helps.
>
> tb
>
>
> On 09/21/2020 03:28 PM, Drew DeVault wrote:
> > That's quite bizzare. Are you perhaps using a system with LibreSSL
> > instead of OpenSSL?
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.orbitalfox.eu/archives/gemini/attachments/20200926/a4de
7db4/attachment.htm>
Link to individual message.
15. Kevin Sangeelee (kevin (a) susa.net)
- 📅 Sent: 2020-09-26 19:18
- 📧 Message 15 of 15
Glad you got it compiled (though it was Drew who pointed you there), the
whole SSL/TLS thing is a bit of a complicated mess on lots of levels. It's
a slog to grok (I'm not sure that's even achievable!).
Kevin
On Sat, 26 Sep 2020 at 19:15, Terry Brennan <tcb913 at gmail.com> wrote:
> Kevin, thanks. I downloaded the ssl package from openssl.org, compiled
> and installed it, and the compile problems disappeared.
>
> Interesting that Slackware does not offer openssl or libressl.
>
> Terry Brennan
>
> On 09/24/2020 04:22 PM, Kevin Sangeelee wrote:
>
> Hi Terry,
>
> As has been alluded to elsewhere, you're not actually using OpenSSL, you
> have GnuTLS with an OpenSSL compatibility layer (that's not fully
> compatible, as you've seen).
>
> On Debian, I have packages 'openssl' and 'libssl-dev' installed, you may
> want to try installing these and then recompile gmni. I'm assuming OpenSSL
> can co-exist with GnuTLS, but I haven't tried.
>
> Kevin
>
>
> On Mon, 21 Sep 2020 at 21:42, Terry Brennan <tcb913 at gmail.com> wrote:
>
>> No, definitely using openssl. Lots of library stuff, and header files.
>>
>> BTW, error messages did not report missing header files.
>>
>> My openssl lib is libgnutils-openssl.so.27.0.2, if this helps.
>>
>> tb
>>
>>
>> On 09/21/2020 03:28 PM, Drew DeVault wrote:
>> > That's quite bizzare. Are you perhaps using a system with LibreSSL
>> > instead of OpenSSL?
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.orbitalfox.eu/archives/gemini/attachments/20200926/8bac
6322/attachment.htm>
Link to individual message.
---
Previous Thread: Should Gemini clients alert users upon redirect?
Next Thread: Using normal tls certificates with gemini