Blame


1 3e4749f7 2020-10-02 op
2 3e4749f7 2020-10-02 op # NAME
3 3e4749f7 2020-10-02 op
4 fab952e1 2020-10-03 op **gmid** - dead simple zero configuration gemini server
5 3e4749f7 2020-10-02 op
6 3e4749f7 2020-10-02 op # SYNOPSIS
7 3e4749f7 2020-10-02 op
8 3e4749f7 2020-10-02 op **gmid**
9 72342dc9 2020-11-06 op \[**-hx**]
10 3e4749f7 2020-10-02 op \[**-c** *cert.pem*]
11 3e4749f7 2020-10-02 op \[**-d** *docs*]
12 3e4749f7 2020-10-02 op \[**-k** *key.pem*]
13 2c3a40fa 2020-11-06 op \[**-l** *access.log*]
14 3e4749f7 2020-10-02 op
15 3e4749f7 2020-10-02 op # DESCRIPTION
16 3e4749f7 2020-10-02 op
17 3e4749f7 2020-10-02 op **gmid**
18 3e4749f7 2020-10-02 op is a very simple and minimal gemini server.
19 3e4749f7 2020-10-02 op It only supports serving static content, and strive to be as simple as
20 3e4749f7 2020-10-02 op possible.
21 3e4749f7 2020-10-02 op
22 3e4749f7 2020-10-02 op **gmid**
23 3e4749f7 2020-10-02 op will strip any sequence of
24 3e4749f7 2020-10-02 op *../*
25 3e4749f7 2020-10-02 op or trailing
26 3e4749f7 2020-10-02 op *..*
27 3e4749f7 2020-10-02 op in the requests made by clients, so it's impossible to serve content
28 3e4749f7 2020-10-02 op outside the
29 3e4749f7 2020-10-02 op *docs*
30 fab952e1 2020-10-03 op directory by mistake, and will also refuse to follow symlink.
31 6980aad6 2020-10-02 op Furthermore, on
32 6980aad6 2020-10-02 op OpenBSD,
33 6980aad6 2020-10-02 op pledge(2)
34 3e4749f7 2020-10-02 op and
35 6980aad6 2020-10-02 op unveil(2)
36 3e4749f7 2020-10-02 op are used to ensure that
37 3e4749f7 2020-10-02 op **gmid**
38 3e4749f7 2020-10-02 op dosen't do anything else than read files from the given directory and
39 3e4749f7 2020-10-02 op accept network connections.
40 3e4749f7 2020-10-02 op
41 3e4749f7 2020-10-02 op It should be noted that
42 3e4749f7 2020-10-02 op **gmid**
43 3e4749f7 2020-10-02 op is very simple in its implementation, and so it may not be appropriate
44 3e4749f7 2020-10-02 op for serving site with lots of users.
45 20f68838 2020-11-05 op After all, the code is single threaded and use a single process
46 20f68838 2020-11-05 op (multiple requests are handled concurrently thanks to async I/O.)
47 3e4749f7 2020-10-02 op
48 fab952e1 2020-10-03 op If a user request path is a directory,
49 fab952e1 2020-10-03 op **gmid**
50 fab952e1 2020-10-03 op will try to serve a
51 fab952e1 2020-10-03 op *index.gmi*
52 fab952e1 2020-10-03 op file inside that directory.
53 fab952e1 2020-10-03 op If not found, it will return an error 51 (not found) to the user.
54 fab952e1 2020-10-03 op
55 3e4749f7 2020-10-02 op The options are as follows:
56 3e4749f7 2020-10-02 op
57 3e4749f7 2020-10-02 op **-c** *cert.pem*
58 3e4749f7 2020-10-02 op
59 3e4749f7 2020-10-02 op > The certificate to use, by default is
60 fab952e1 2020-10-03 op > *cert.pem*.
61 3e4749f7 2020-10-02 op
62 3e4749f7 2020-10-02 op **-d** *docs*
63 3e4749f7 2020-10-02 op
64 3e4749f7 2020-10-02 op > The root directory to serve.
65 3e4749f7 2020-10-02 op > **gmid**
66 3e4749f7 2020-10-02 op > won't serve any file that is outside that directory.
67 3e4749f7 2020-10-02 op
68 3e4749f7 2020-10-02 op **-h**
69 3e4749f7 2020-10-02 op
70 fab952e1 2020-10-03 op > Print the usage and exit.
71 3e4749f7 2020-10-02 op
72 3e4749f7 2020-10-02 op **-k** *key.pem*
73 3e4749f7 2020-10-02 op
74 3e4749f7 2020-10-02 op > The key for the certificate, by default is
75 fab952e1 2020-10-03 op > *key.pem*.
76 3e4749f7 2020-10-02 op
77 2c3a40fa 2020-11-06 op **-l** *access.log*
78 2c3a40fa 2020-11-06 op
79 2c3a40fa 2020-11-06 op > log to the given file instead of the standard error.
80 2c3a40fa 2020-11-06 op
81 72342dc9 2020-11-06 op **-x**
82 72342dc9 2020-11-06 op
83 72342dc9 2020-11-06 op > Enable CGI scripts.
84 72342dc9 2020-11-06 op
85 72342dc9 2020-11-06 op # CGI
86 72342dc9 2020-11-06 op
87 72342dc9 2020-11-06 op If CGI scripts are enabled, when a file requested by a client is
88 72342dc9 2020-11-06 op marked as executable it is executed and its output fed to the client.
89 72342dc9 2020-11-06 op
90 72342dc9 2020-11-06 op Note that since this give the chance to anybody to execute possibly
91 72342dc9 2020-11-06 op **any file**
92 72342dc9 2020-11-06 op in the served directory, this option is disabled by default.
93 72342dc9 2020-11-06 op
94 3e4749f7 2020-10-02 op # EXAMPLES
95 3e4749f7 2020-10-02 op
96 3e4749f7 2020-10-02 op To quickly getting started
97 3e4749f7 2020-10-02 op
98 3e4749f7 2020-10-02 op $ # generate a cert and a key
99 3e4749f7 2020-10-02 op $ openssl req -x509 -newkey rsa:4096 -keyout key.pem \
100 3e4749f7 2020-10-02 op -out cert.pem -days 365 -nodes
101 3e4749f7 2020-10-02 op $ mkdir docs
102 3e4749f7 2020-10-02 op $ cat <<EOF > docs/index.gmi
103 3e4749f7 2020-10-02 op # Hello world
104 3e4749f7 2020-10-02 op test paragraph...
105 3e4749f7 2020-10-02 op EOF
106 3e4749f7 2020-10-02 op $ gmid -c cert.pem -k key.pem -d docs
107 3e4749f7 2020-10-02 op
108 6980aad6 2020-10-02 op now you can visit gemini://localhost/ with your preferred gemini client.
109 3e4749f7 2020-10-02 op
110 3e4749f7 2020-10-02 op # CAVEATS
111 3e4749f7 2020-10-02 op
112 fab952e1 2020-10-03 op * it doesn't support virtual hosts: the host part of the request URL is
113 3e4749f7 2020-10-02 op completely ignored.
114 3e4749f7 2020-10-02 op
115 3e4749f7 2020-10-02 op * it doesn't fork in the background or anything like that.
116 3e4749f7 2020-10-02 op