From ae6870fa3bf25561a3f6bd8465ba86307af5d5bb Mon Sep 17 00:00:00 2001 From: Omar Polo Date: Mon, 4 Oct 2021 10:42:35 +0000 Subject: [PATCH] import the capsule/website --- .gitignore | 3 + site/Makefile | 9 + site/README.md | 3 + site/contrib.gmi | 66 ++++++++ site/contrib.html | 210 +++++++++++++++++++++++ site/index.gmi | 165 ++++++++++++++++++ site/index.html | 367 ++++++++++++++++++++++++++++++++++++++++ site/mdoc2html.sh | 21 +++ site/vim-screenshot.png | Bin 0 -> 32164 bytes 9 files changed, 844 insertions(+) create mode 100644 site/Makefile create mode 100644 site/README.md create mode 100644 site/contrib.gmi create mode 100644 site/contrib.html create mode 100644 site/index.gmi create mode 100644 site/index.html create mode 100755 site/mdoc2html.sh create mode 100644 site/vim-screenshot.png diff --git a/.gitignore b/.gitignore index e4a5ff4..d0d7cba 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,6 @@ regress/puny-test regress/*.o regress/gg regress/gmid.pid + +site/gmid.1.html +site/gmid.1.txt diff --git a/site/Makefile b/site/Makefile new file mode 100644 index 0000000..77c7b22 --- /dev/null +++ b/site/Makefile @@ -0,0 +1,9 @@ +.PHONY: all + +all: gmid.1.html gmid.1.txt + +gmid.1.html: ../gmid.1 + ./mdoc2html.sh $? $@ + +gmid.1.txt: ../gmid.1 + MANWIDTH=72 man -Tutf8 -l $? | col -b > $@ diff --git a/site/README.md b/site/README.md new file mode 100644 index 0000000..83650fe --- /dev/null +++ b/site/README.md @@ -0,0 +1,3 @@ +# gmid website/capsule + +These are the sources for the gmid website and Gemini capsule. diff --git a/site/contrib.gmi b/site/contrib.gmi new file mode 100644 index 0000000..4f453a0 --- /dev/null +++ b/site/contrib.gmi @@ -0,0 +1,66 @@ +=> / Home +=> /gmid.1.txt docs + +# Contrib + +This directory is for additional contributed files which may be useful. + +## Dockerfile + +=> https://git.omarpolo.com/gmid/tree/contrib/Dockerfile contrib/Dockerfile + +A sample Dockerfile. The resulting image is a classic alpine linux image with a statically linked gmid installed as /bin/gmid. +To build the image: + +```instructions to build the image +# docker build -f contrib/Dockerfile -t gmid . +``` +and then run it with something along the lines of: +```instruction to run the image +# docker run --rm -it -p 1965:1965 \ + -v gmid.conf:/etc/gmid.conf:ro \ + -v path/to/keys:/tls:ro \ + -v /var/gemini:/var/gemini:ro \ + gmid -c /etc/gmid.conf +``` + +## OpenBSD rc file + +=> https://git.omarpolo.com/gmid/tree/contrib/gmid contrib/gmid + +contrib/gmid is a sample service file for OpenBSD rc(8). To install it: +```command to install the rc file +# cp contrib/gmid /etc/rc.d +``` +then the usual ‘rcctl [start|stop|enable|restart] gmid’ are available. + +## Systemd unit file + +=> https://git.omarpolo.com/gmid/tree/contrib/gmid.service gmid.service + +A simple service file for systemd. To install it +```instructions to install the system file +# cp contrib/gmid.service /lib/systemd/system/gmid.service +``` +then the usual ‘systemctl [status|start|enable|stop] gmid’ commands can be used to manage the server. + +Some things to keep in mind: +* the ExecStart path depends on the installation +* decomment “User” and “Group” to start gmid without root priviledges. It’s not needed, since gmid can lower its privileges, but may come in handy. + +## Vim syntax files + +=> https://git.omarpolo.com/gmid/tree/contrib/vim contrib/vim + +contrib/vim contains a syntax highlighting for vim. To install it, just copy the files to ~/.vim or to /usr/share/vim/vimfiles, e.g.: +```install the vim syntax highlight in your home +$ mkdir -p ~/.vim +$ cp -R contrib/vim/* ~/.vim/ +``` + +To enable Syntastic checker, add to your vimrc: +``` +let g:syntastic_gmid_checkers = ['gmid'] +``` + +=> vim-screenshot.png Screenshot of vim editing gmid.conf diff --git a/site/contrib.html b/site/contrib.html new file mode 100644 index 0000000..c9b5c2f --- /dev/null +++ b/site/contrib.html @@ -0,0 +1,210 @@ + + + + gmid | contrib + + + + + +
+ +
+

contrib

+

+ This directory is for additional contributed files which may be + useful. +

+

Contents:

+ +
+

Dockerfile

+

+ + contrib/Dockerfile + is a simple Dockerfile. The resulting image is a classic alpine + linux image with a statically linked gmid installed as + /bin/gmid. +

+

To build the image:

+
# docker build -f contrib/Dockerfile -t gmid .
+

and then run it with something along the lines of:

+
# docker run --rm -it -p 1965:1965      \
+        -v gmid.conf:/etc/gmid.conf:ro  \
+        -v path/to/keys:/tls:ro         \
+        -v /var/gemini:/var/gemini:ro   \
+        gmid -c /etc/gmid.conf
+

OpenBSD rc file

+

+ contrib/gmid + is a sample service file for OpenBSD rc(8). + To install it: +

+
# cp contrib/gmid /etc/rc.d
+

+ then the usual + rcctl [start|stop|enable|restart] gmid + are available. +

+

Systemd unit file

+

+ + contrib/gmid.service + is a simple service file for + systemd. To install it: +

+
# cp contrib/gmid.service /lib/systemd/system/gmid.service
+

+ then the usual + systemctl [status|start|enable|stop] gmid + commands can be used to manage the server. +

+

Some things to keep in mind:

+ +

Vim syntax files

+

+ + contrib/vim + contains a syntax highlighting for vim. To install it, just + copy the files to ~/.vim + or /usr/share/vim/vimfiles, e.g. +

+
$ mkdir -p ~/.vim
+$ cp -R contrib/vim/* ~/.vim/
+

To enable Syntastic checker, add to your vimrc:

+
let g:syntastic_gmid_checkers = ['gmid']
+

The end result is something like this:

+ + Screenshot of vim editing gmid.conf with syntax highlighting + + + diff --git a/site/index.gmi b/site/index.gmi new file mode 100644 index 0000000..bb7efef --- /dev/null +++ b/site/index.gmi @@ -0,0 +1,165 @@ +=> contrib.gmi contrib +=> /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 +* 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.4/gmid-1.7.4.tar.gz gmid-1.7.4.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.4/gmid.linux.aarch64 gmid.linux.aarch64 +=> https://github.com/omar-polo/gmid/releases/download/1.7.4/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.4/gmid-1.7.4.tar.gz +$ tar xzvf gmid-1.7.4.tar.gz +$ cd gmid-1.7.4 +$ ./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.4/SHA256 SHA256 +=> https://github.com/omar-polo/gmid/releases/download/1.7.4/SHA256 SHA256.gpg +=> https://github.com/omar-polo/gmid/releases/download/1.7.4/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.4.tar.gz: OK +gmid-1.8.pub: OK +gmid.linux.aarch64: OK +gmid.linux.amd64: OK +``` + +## Change log for the last versions + + +1.7.4 “Space-dye Vest” fourth bugfix release — Released September 24, 2021 + +This version incudes 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. diff --git a/site/index.html b/site/index.html new file mode 100644 index 0000000..c97b689 --- /dev/null +++ b/site/index.html @@ -0,0 +1,367 @@ + + + + gmid + + + + + +
+ +
+

gmid

+
+

A Gemini server

+
+

Features

+ +

Install

+

Some distros provide a package — thanks to the maintainers!

+

+ + Packaging status + +

+

Source code and precompiled binaries for linux are available:

+ + + +

+ When in doubt, compile from source: it’s easy and takes less + than a minute on a raspberry pi 3. The dependencies are: +

+ +

Once all the dependencies are installed, building is as easy as:

+
$ curl -LO https://github.com/omar-polo/gmid/releases/download/1.7.4/gmid-1.7.4.tar.gz
+$ tar xzvf gmid-1.7.4.tar.gz
+$ cd gmid-1.7.4
+$ ./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. +

+ +

To verify the signatures with signify(1)

+
$ signify -C -p gmid-1.7.pub -x SHA256.sig
+Signature Verified
+gmid-1.7.pub: OK
+gmid-1.7.4.tar.gz: OK
+gmid-1.8.pub: OK
+gmid.linux.aarch64: OK
+gmid.linux.amd64: OK
+

Changelog for the last versions

+

1.7.4 “Space-dye Vest” fourth bugfix release — Released September 24, 2021

+

This version includes the following bugfix:

+ +

and the relative regression test.

+
+

1.7.3 “Space-dye Vest” third bugfix release — Released September 18, 2021

+

Improvements

+ +

Bugfix

+ +
+

1.7.2 “Space-dye Vest” second bugfix release — Released July 19, 2021

+

This version includes the following bugfix:

+ +

and the relative regression test.

+
+

1.7.1 “Space-dye Vest” bugfix release — Released July 11, 2021

+

This version includes two bugfixes:

+ +
+

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

+ +

Improvements

+ +

Bug fixes

+ +

Breaking changes

+ + + diff --git a/site/mdoc2html.sh b/site/mdoc2html.sh new file mode 100755 index 0000000..fae8467 --- /dev/null +++ b/site/mdoc2html.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# +# usage: mdoc2html.sh src out +# +# converts the manpage `src' to the HTML file `out', tweaking the +# style + +set -e + +: ${1:?missing input file} +: ${2:?missing output file} + +man -Thtml -l "$1" > "$2" + +exec ed "$2" < +a + body { max-width: 960px; margin: 0 auto; } +. +wq +EOF diff --git a/site/vim-screenshot.png b/site/vim-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..8cc182e49c306faf9dffaf5af06bdf1f6fbc5096 GIT binary patch literal 32164 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 x8m~&toV#k2yR%{|{fJM2!Fd literal 0 HcmV?d00001