Blob


1 => / Home
2 => contrib.gmi contrib
3 => /gmid.1.txt docs
5 # gmid quickstart
7 gmid can be run in two different “modes”:
9 * configless: a quick way to serve a directory tree from the shell, useful for testing a capsule before uploading it
10 * daemon mode: gmid reads the configuration file and runs in the background
12 To run gmid in the “configless” mode, just type:
14 ```serve a directory tree from the shell
15 $ gmid path/to/dir
16 ```
18 gmid will then generate a certificate inside ~/.local/share/gmid and serve the given directory locally.
20 ## Setting up a capsule with gmid
22 To host a Gemini capsule you need to run gmid in “daemon” mode, and so a configuration file is needed. The format of the configuration file is described in the manpage and is quite flexible, but something like the following should be enough to start:
24 ```sample configuration file
25 # /etc/gmid.conf
27 server "example.com" {
28 cert "/etc/ssl/example.com.pem"
29 key "/etc/ssl/private/example.com.key"
31 # path to the root directory of your capsule
32 root "/var/gemini/example.com"
33 }
34 ```
36 A certificate is needed for the capsule. Generate one for e.g. using contrib/gencert:
38 => https://git.omarpolo.com/gmid/tree/contrib/gencert contrib/gencert
40 ```generate a certificate using contrib/gencert
41 $ ./contrib/gencert example.com
42 Generating a 4096 bit RSA private key
43 .................................................++++
44 ..........++++
45 writing new private key to './example.com.key'
46 -----
48 Generated files:
49 ./example.com.pem : certificate
50 ./example.com.key : private key
51 ```
53 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.
55 For example, save them in ‘/etc/ssl/’ (as root)
57 ```how to save the certificate and private key in /etc/ssl
58 # mkdir -p /etc/ssl/private
59 # chown 700 /etc/ssl/private
60 # mv example.com.pem /etc/ssl/
61 # mv example.com.key /etc/ssl/private/
62 ```
64 Then running gmid is as easy as
66 ```running gmid
67 $ gmid -c /etc/gmid.conf
68 ```
70 Congratulations, your capsule is online!
73 ## Securing your gmid installation
75 gmid employs various techniques to prevent the damage caused by bugs, but some steps needs to be done manually.
77 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 run gmid automatically (e.g. a rc script, a systemd unit file, …) Otherwise, it’s heavily suggested to create at least a dedicated user.
80 ### A dedicated user
82 Ideally, gmid should be started as root and drop privileges to a local user. This way, the certificates can be readable only by root. For example, on GNU/linux systems a ‘gmid’ user can be created with:
84 ```how to create the gmid user
85 # useradd --system --no-create-home -s /bin/nologin -c "gmid Gemini server" gmid
86 ```
88 Please consult your OS documentation for more information on the matter.
90 The configuration then needs to be adjusted to include the ‘user’ directive at the top:
92 ```how to use the ‘user’ option
93 # /etc/gmid.conf
94 user "gmid"
96 server "example.com" { … }
97 ```
99 gmid then needs to be started with root privileges, but will then 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.
102 ### chroot
104 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.
106 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.
108 Using a chroot may complicate the use of CGI scripts, because then all the dependencies of the scripts (sh, perl, libraries…) need to be installed inside the chroot too. For this very reason gmid supports FastCGI.
110 The chroot feature requires a dedicate user, see the previous section.
112 To chroot gmid inside a directory, use the ‘chroot’ directive in the configuration file:
114 ```how to use the ‘chroot’ option
115 # /etc/gmid.conf
117 user "gmid"
119 # the given directory, /var/gemini in this case, must exists.
120 chroot "/var/gemini"
121 ```
123 Note that once ‘chroot’ is in place, every ‘root’ directive is implicitly relative to the chroot, but ‘cert’ and ‘key’ aren’t!
125 For example, given the following configuration:
127 ```example configuration using chroot
128 # /etc/gmid.conf
130 user "gmid"
131 chroot "/var/gemini"
133 server "example.com" {
134 cert "/etc/ssl/example.com.pem"
135 key "/etc/ssl/example.com.key"
136 root "/example.com"
138 ```
140 The certificate and the key path are the specified ones, but the root directory of the virtual host is actually “/var/gemini/example.com/”.