Blob


1 => contrib.gmi contrib
2 => /quickstart.gmi Quickstart
3 => /gmid.1.txt docs
5 # gmid
7 > A Gemini server
9 ## Features
11 * sandboxed by default on OpenBSD, FreeBSD and Linux
12 * able to reload the configuration on-the-fly without loosing connections
13 * punycode and IRI support
14 * reverse proxying
15 * CGI and FastCGI support
16 * virtual hosts and per-location rules
17 * low memory footprint
18 * event-based asynchronous I/O model
19 * rich configuration file
21 => gmid.1.txt Read the manpage.
23 ## Install
25 Some distros provide a package — thanks to the maintainers!
27 => https://repology.org/project/gmid/versions [https] Repology: packaging status for gmid
29 Source code and precompiled binaries for linux are available:
31 => https://github.com/omar-polo/gmid/releases/download/1.7.5/gmid-1.7.5.tar.gz gmid-1.7.5.tar.gz
33 => https://git.omarpolo.com/gmid/ git repository
34 => gemini://git.omarpolo.com/gmid.git/ git repository via Gemini
35 => https://github.com/omar-polo/gmid GitHub mirror
37 => https://github.com/omar-polo/gmid/releases/download/1.7.5/gmid.linux.aarch64 gmid.linux.aarch64
38 => https://github.com/omar-polo/gmid/releases/download/1.7.5/gmid.linux.amd64 gmid.linux.amd64
40 When in doubt, compile from source: it’s easy and takes less than a minute on a raspberry pi 3. The dependencies are:
42 * libevent
43 * OpenSSL/LibreSSL
44 * libtls (from either LibreSSL or LibreTLS)
45 * yacc or GNU bison
47 Once all the dependencies are installed, building is as easy as:
49 ```Example of how to compile from source
50 $ curl -LO https://github.com/omar-polo/gmid/releases/download/1.7.5/gmid-1.7.5.tar.gz
51 $ tar xzvf gmid-1.7.5.tar.gz
52 $ cd gmid-1.7.5
53 $ ./configure
54 $ make
55 $ sudo make install # eventually
56 ```
58 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.
60 => https://github.com/omar-polo/gmid/releases/download/1.7.5/SHA256 SHA256
61 => https://github.com/omar-polo/gmid/releases/download/1.7.5/SHA256 SHA256.gpg
62 => https://github.com/omar-polo/gmid/releases/download/1.7.5/SHA256.sig SHA256.sig
64 To verify the signatures with signify(1)
66 ```Example of how to verify the signature with signify
67 $ signify -C -p gmid-1.7.pub -x SHA256.sig
68 Signature Verified
69 gmid-1.7.pub: OK
70 gmid-1.7.5.tar.gz: OK
71 gmid-1.8.pub: OK
72 gmid.linux.aarch64: OK
73 gmid.linux.amd64: OK
74 ```
76 ## Change log for the last versions
78 1.7.5 “Space-dye Vest” fifth bugfix release — Released October 15, 2021
80 This version includes the following bugfix
82 * don’t die when a connection is closed before being accepted by gmid (i.e. handle ‘ECONNRESET’)
87 1.7.4 “Space-dye Vest” fourth bugfix release — Released September 24, 2021
89 This version includes the following bugfix:
91 * 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
93 and the relative regression test.
98 1.7.3 “Space-dye Vest” third bugfix release — Released September 19, 2021
100 ### Improvements
102 * follows symlinks
103 * improved documentation and added key generation example (thanks! Anna)
105 ### Bugfix
107 * fix syslog logging on FreeBSD. Reported by Karl Jeacle, thanks!
108 * don't crash if ``-c'' is missing in configtest mode (-n). Reported by heph, thanks!
109 * allow fstat64 on linux (needed by glibc on aarch64). Reported by pine, thanks!
114 1.7.2 “Space-dye Vest” second bugfix release — Released July 19, 2021
116 This version incudes the following bugfix:
118 * an un-initialized field in the configless code path leads to a crash on the first request.
120 and the relative regression test.
124 1.7.1 “Space-dye Vest” bugfix release — Released July 11, 2021
126 This version includes two bugfixes:
127 * use ${MAKE} to recursively call make.
128 * fix the misleading example in the manpage: macros may not be reserved words
132 1.7 “Space-dye Vest” — Released July 10, 2021
134 Starting from this version gmid doesn't depend on lex anymore, but yacc is still needed.
136 ### New features
138 * initial fastcgi support! (it's still young!)
139 * added user-defined macros, either via ‘-Dname=val’ or directly in the configuration file.
140 * new ‘include’ keyword to load additional configuration files.
141 * new ‘env’ rule to define environment vars for CGI scripts.
142 * new ‘alias’ rule to define hostname aliases for a server.
143 * allow ‘root’ to be specified per-location block.
144 * pidfile support with the new ‘-P’ cli flag.
145 * define ‘TLS_VERSION’, ‘TLS_CIPHER’ and ‘TLS_CIPHER_STRENGTH’ for CGI scripts.
147 ### Improvements
149 * remove limits on the number of virtual hosts and location blocks that can be defined.
150 * print the datetime when logging to stderr.
151 * use ‘text/x-patch’ for ‘.patch’ and ‘.diff’ files.
152 * sort the auto index alphabetically.
153 * various improvements to the log management.
154 * drop the dependency on lex.
155 * added ‘--help’ as synonym of ‘-h’ and ‘-V’/‘--version‘ to print the version.
156 * 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.
158 ### Bug fixes
160 * correctly handle CGI scripts that replies with the maxium header length allowed.
161 * fixed the static target.
162 * fixed recursive mkdirs for configless mode (i.e. create ‘~/.local/share/gmid’)
163 * logs sent to syslog now have proper priority (before every message ended up as LOG_CRIT). Found by Anna “CyberTailor”, thanks!
164 * ensure ‘%p’ (path) is always absolute in ‘block return’ rules.
165 * fix automatic certificate generation, it caused problems on some adroid devices. Found by Gnuserland, thanks!
166 * document the ‘log’ rule.
167 * 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!
168 * various improvements to the configure script, notified and fixed by Anna “CyberTailor”, thanks!
169 * added a timeout to the regression tests.
171 ### Breaking changes
173 * if duplicate rules are found in the configuration file, an error is now raised instead of silently using only the last value.
174 * (sort of) ‘gg’ moved to ‘regress’ as it's only used in the regression suite.
175 * (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.