1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
=> contrib.gmi contrib
=> /quickstart.gmi Quickstart
=> /gmid.1.txt docs
# gmid
> A Gemini server
## Features
* sandboxed by default on OpenBSD, FreeBSD and Linux
* able to reload the configuration on-the-fly without loosing connections
* punycode and IRI support
* reverse proxying
* CGI and FastCGI support
* virtual hosts and per-location rules
* low memory footprint
* event-based asynchronous I/O model
* rich configuration file
=> gmid.1.txt Read the manpage.
## Install
Some distros provide a package — thanks to the maintainers!
=> https://repology.org/project/gmid/versions [https] Repology: packaging status for gmid
Source code and precompiled binaries for linux are available:
=> https://github.com/omar-polo/gmid/releases/download/1.7.5/gmid-1.7.5.tar.gz gmid-1.7.5.tar.gz
=> https://git.omarpolo.com/gmid/ git repository
=> gemini://git.omarpolo.com/gmid.git/ git repository via Gemini
=> https://github.com/omar-polo/gmid GitHub mirror
=> https://github.com/omar-polo/gmid/releases/download/1.7.5/gmid.linux.aarch64 gmid.linux.aarch64
=> https://github.com/omar-polo/gmid/releases/download/1.7.5/gmid.linux.amd64 gmid.linux.amd64
When in doubt, compile from source: it’s easy and takes less than a minute on a raspberry pi 3. The dependencies are:
* libevent
* OpenSSL/LibreSSL
* libtls (from either LibreSSL or LibreTLS)
* yacc or GNU bison
Once all the dependencies are installed, building is as easy as:
```Example of how to compile from source
$ curl -LO https://github.com/omar-polo/gmid/releases/download/1.7.5/gmid-1.7.5.tar.gz
$ tar xzvf gmid-1.7.5.tar.gz
$ cd gmid-1.7.5
$ ./configure
$ make
$ sudo make install # eventually
```
A SHA256 file is available. However, that only checks for accidental corruption: you can use signify (SHA256.sig and the public key gmid-1.7.pub) or GPG. The hash of the signify public key is also included in the SHA256 file and thus signed with my GPG. The signify public key for the next release ‘gmid-1.8.pub’ is also included.
=> https://github.com/omar-polo/gmid/releases/download/1.7.5/SHA256 SHA256
=> https://github.com/omar-polo/gmid/releases/download/1.7.5/SHA256 SHA256.gpg
=> https://github.com/omar-polo/gmid/releases/download/1.7.5/SHA256.sig SHA256.sig
To verify the signatures with signify(1)
```Example of how to verify the signature with signify
$ signify -C -p gmid-1.7.pub -x SHA256.sig
Signature Verified
gmid-1.7.pub: OK
gmid-1.7.5.tar.gz: OK
gmid-1.8.pub: OK
gmid.linux.aarch64: OK
gmid.linux.amd64: OK
```
## Change log for the last versions
1.7.5 “Space-dye Vest” fifth bugfix release — Released October 15, 2021
This version includes the following bugfix
* don’t die when a connection is closed before being accepted by gmid (i.e. handle ‘ECONNRESET’)
1.7.4 “Space-dye Vest” fourth bugfix release — Released September 24, 2021
This version includes the following bugfix:
* fix a possible out-of-bound access when handling a request for a non-existent file in the root directory of a vhost that's matched by the cgi option
and the relative regression test.
1.7.3 “Space-dye Vest” third bugfix release — Released September 19, 2021
### Improvements
* follows symlinks
* improved documentation and added key generation example (thanks! Anna)
### Bugfix
* fix syslog logging on FreeBSD. Reported by Karl Jeacle, thanks!
* don't crash if ``-c'' is missing in configtest mode (-n). Reported by heph, thanks!
* allow fstat64 on linux (needed by glibc on aarch64). Reported by pine, thanks!
1.7.2 “Space-dye Vest” second bugfix release — Released July 19, 2021
This version incudes the following bugfix:
* an un-initialized field in the configless code path leads to a crash on the first request.
and the relative regression test.
1.7.1 “Space-dye Vest” bugfix release — Released July 11, 2021
This version includes two bugfixes:
* use ${MAKE} to recursively call make.
* fix the misleading example in the manpage: macros may not be reserved words
1.7 “Space-dye Vest” — Released July 10, 2021
Starting from this version gmid doesn't depend on lex anymore, but yacc is still needed.
### New features
* initial fastcgi support! (it's still young!)
* added user-defined macros, either via ‘-Dname=val’ or directly in the configuration file.
* new ‘include’ keyword to load additional configuration files.
* new ‘env’ rule to define environment vars for CGI scripts.
* new ‘alias’ rule to define hostname aliases for a server.
* allow ‘root’ to be specified per-location block.
* pidfile support with the new ‘-P’ cli flag.
* define ‘TLS_VERSION’, ‘TLS_CIPHER’ and ‘TLS_CIPHER_STRENGTH’ for CGI scripts.
### Improvements
* remove limits on the number of virtual hosts and location blocks that can be defined.
* print the datetime when logging to stderr.
* use ‘text/x-patch’ for ‘.patch’ and ‘.diff’ files.
* sort the auto index alphabetically.
* various improvements to the log management.
* drop the dependency on lex.
* added ‘--help’ as synonym of ‘-h’ and ‘-V’/‘--version‘ to print the version.
* c-like handling of strings in the configuration file: when two or more strings are next to each-others, are automatically joined into a single string. This is particularly useful with $-macros.
### Bug fixes
* correctly handle CGI scripts that replies with the maxium header length allowed.
* fixed the static target.
* fixed recursive mkdirs for configless mode (i.e. create ‘~/.local/share/gmid’)
* logs sent to syslog now have proper priority (before every message ended up as LOG_CRIT). Found by Anna “CyberTailor”, thanks!
* ensure ‘%p’ (path) is always absolute in ‘block return’ rules.
* fix automatic certificate generation, it caused problems on some adroid devices. Found by Gnuserland, thanks!
* document the ‘log’ rule.
* the seccomp filter was reworked and now it's known to work properly on a vast range of architectures (to be more specific: all the architectures supported by alpine linux), see github issue #4. Prompted and tested by @begss, thanks!
* various improvements to the configure script, notified and fixed by Anna “CyberTailor”, thanks!
* added a timeout to the regression tests.
### Breaking changes
* if duplicate rules are found in the configuration file, an error is now raised instead of silently using only the last value.
* (sort of) ‘gg’ moved to ‘regress’ as it's only used in the regression suite.
* (notice) the “mime "mime-type" "extension"” rule was deprecated and replaced by the new “map "mime-type" to-ext "extension"”. The ‘mime’ rule will be removed in a future version because its syntax is incompatible with the new string auto-concat mechanism.
|