aboutsummaryrefslogtreecommitdiffstats
path: root/README.txt
blob: 95750195752d240fcf6974e5ac0921f07490fe9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

        _       _                      _                 _           
    ___(_)_ __ | |__  _   _ _ __ _ __ (_)_ __   __ _ ___(_)_ __  ___ 
   / _ \ | '_ \| '_ \| | | | '__| '_ \| | '_ \ / _` / __| | '_ \/ __|
  |  __/ | | | | | | | |_| | |  | | | | | | | | (_| \__ \ | | | \__ \
   \___|_|_| |_|_| |_|\__, |_|  |_| |_|_|_| |_|\__, |___/_|_| |_|___/
                      |___/                    |___/                 

                                                ... is einhorn in Rust!

`einhyrningsins` is a socket multiplexer featuring graceful restarts. It runs
multiple copies of a child program, each of which are passed a shared socket
(or multiple shared sockets) to bind(2) to and accept(2) connections from.
Graceful, rolling restarts enable updates of the child program with zero
downtime and no dropped connections.

`einhyrningsins` is a partially-comparible re-implementation of Einhorn (a Ruby
program) in Rust. Einhorn itself derived from Unicorn.  The word
"einhyrningsins" is Icelandic for unicorn.

Read the manual page at:
https://bnewbold.github.io/einhyrningsins/einhyrningsins.1.html

NOTE: `einhyrningsins` is a for-fun hobby project. It is not feature complete,
fully documented, or tested. See also ./TODO and unstructured notes in ./doc/.

Building and Installation
---------------------------

For now both building and installation are done with rust's cargo tool, usually
bundled with the toolchain. If you haven't used rust before, "rustup" is highly
recommended. einhyrningsins builds with the 'stable' compiler, and was
developed against version 1.12 of the toolchain (September 2016). To build:

    cargo build --release

Manpages (in both roff and HTML format) are built using the `ronn` tool, which
is available in many package managers. To build those pages, run:

    make docs

There are two ways to install. The first is user-local using the cargo tool:

    cargo install

The second is system-wide using make (this will also install the manpages):

    make build docs
    sudo make install

Differences from Einhorn
--------------------------

 * Ruby pre-loading is not possible
 * einhyrningsins does not reload *itself* on upgrades (aka restarts)
 * control socket message line format is JSON, not YAML-in-URL-encoding
 * passing control socket file descriptor is unimplemented
 * children start all-at-once, not with a delay between spawns

License
---------
einhyrningsins is Free Software, released under the GPLv3 license. See LICENSE
for full text.