Blob


1 # gmid quickstart guide
3 The aim of this “quickstart” guide is to get your capsule up and running.
5 gmid needs a configuration file to operate. The format is quite flexible and carefully described in the gmid.conf(5) manpage, but to start this should be enough:
7 ```sample configuration file
8 # /etc/gmid.conf
10 server "example.com" {
11 listen on * port 1965
12 cert "/etc/ssl/example.com.pem"
13 key "/etc/ssl/private/example.com.key"
15 # path to the root directory of your capsule
16 root "/var/gemini/example.com"
17 }
18 ```
20 This will have gmid listening on any address on port 1965 and serving the directory /var/gemini/example.com.
22 A TLS certificate is also needed. There are many way to obtain one (acme-client, certbot, ...) but within the Geminispace is common to use self-signed ones.
24 One way to generate self-signed certificates is to use openssl(1), but contrib/gencert is easier to use:
26 => TREE/contrib/gencert contrib/gencert
28 ```generate a certificate using contrib/gencert
29 $ ./contrib/gencert example.com
30 Generating a 4096 bit RSA private key
31 .................................................++++
32 ..........++++
33 writing new private key to './example.com.key'
34 -----
36 Generated files:
37 ./example.com.pem : certificate
38 ./example.com.key : private key
39 ```
41 Move ‘example.com.pem’ and ‘example.com.key’ to a safe place and double check that the ‘cert’ and ‘key’ options in the configuration points to these files.
43 One place could be ‘/etc/ssl/’
45 ```how to save the certificate and private key in /etc/ssl
46 # mkdir -p /etc/ssl/private
47 # chown 700 /etc/ssl/private
48 # mv example.com.pem /etc/ssl/
49 # mv example.com.key /etc/ssl/private/
50 ```
52 Then running gmid is as easy as
54 ```running gmid
55 # gmid -c /etc/gmid.conf
56 ```
58 Congratulations, your capsule is online!
61 ## Securing your gmid installation
63 gmid employs various techniques to prevent the damage caused by bugs but some steps needs to be done manually.
65 If gmid was installed from your distribution package manager chance are that it already does all of this and is also providing a service to easily run gmid (e.g. a rc script, a systemd unit file, …) Otherwise, it’s heavily suggested to create at least a dedicated user.
68 ### A dedicated user
70 Ideally, gmid should be started as root and then drop privileges. This allows to save the certificates in a directory that's readable only by root
72 For example, on OpenBSD a ‘_gmid’ user can be created with:
74 ```
75 # useradd -c gmid -d /var/empty -s /sbin/nologin _gmid
76 ```
78 while on most GNU/linux systems it's:
80 ```how to create the gmid user
81 # useradd --system --no-create-home -s /bin/nologin -c "gmid Gemini server" gmid
82 ```
84 or if you use systemd-sysusers:
86 ```how to create the gmid user, using systemd-sysusers
87 # systemd-sysusers contrib/gmid.sysusers
88 ```
90 Please consult your OS documentation for more information on the matter.
92 The configuration then needs to be adjusted to include the ‘user’ directive at the top:
94 ```how to use the ‘user’ option
95 # /etc/gmid.conf
96 user "gmid"
98 server "example.com" { … }
99 ```
101 Now gmid needs to be started with root privileges but will switch to the provided user automatically. If by accident the ‘user’ option is omitted and gmid is running as root, it will complain loudly in the logs.
104 ### chroot
106 It’s a common practice for system daemons to chroot themselves into a directory. From here on I’ll assume /var/gemini, but it can be any directory.
108 A chroot on UNIX-like OS is an operation that changes the “apparent” root directory (i.e. the “/”) from the current process and its child. Think of it like imprisoning a process into a directory and never letting it escape until it terminates.
110 Using a chroot may complicate the setup since eventual FastCGI socket or files needed for DNS resolution need to be installed or copied inside the chroot too.
112 The chroot feature requires a dedicate user, see the previous section.
114 To chroot gmid inside a directory, use the ‘chroot’ directive in the configuration file:
116 ```how to use the ‘chroot’ option
117 # /etc/gmid.conf
119 user "gmid"
121 # the given directory, /var/gemini in this case, must exists.
122 chroot "/var/gemini"
123 ```
125 Note that once ‘chroot’ is in place, every ‘root’ directive is implicitly relative to the chroot, but ‘cert’ and ‘key’ aren’t!
127 For example, given the following configuration:
129 ```example configuration using chroot
130 # /etc/gmid.conf
132 user "gmid"
133 chroot "/var/gemini"
135 server "example.com" {
136 listen on *
137 cert "/etc/ssl/example.com.pem"
138 key "/etc/ssl/example.com.key"
139 root "/example.com"
141 ```
143 The certificate and the key path are the specified ones, but the root directory of the virtual host is actually “/var/gemini/example.com/”.