]> Sergey Matveev's repositories - paster.git/blob - doc/install.texi
Netstrings are simpler than bencode
[paster.git] / doc / install.texi
1 @node Install
2 @unnumbered Install
3
4 @itemize
5
6 @item
7 Install paster itself:
8
9 @example
10 $ go get go.stargrave.org/paster/v2
11 @end example
12
13 If you have got problems with your trust anchors, unwilling to
14 authenticate @code{go.stargrave.org}'s TLS connection, then clone the
15 repository from @url{git://git.stargrave.org/paster.git} and build it
16 as ordinary Go package with @code{go build}.
17
18 @item
19 Add @code{paster} user and @code{pastes} directory, also accessible by
20 HTTP service (@url{http://www.godlighty.stargrave.org/, @code{godlighty}}
21 user in current example):
22
23 @example
24 # pw useradd paster -s /usr/sbin/nologin -w no -d /path/to/pastes
25 # mkdir /path/to/pastes
26 # cat > /path/to/pastes/index.html <<EOF
27 <!DOCTYPE html>
28 <html>
29   <head><title>paster</title></head>
30   <body>Paste service.</body>
31 </html>
32 EOF
33 # chown -R paster:godlighty pastes
34 # chmod 2750 pastes
35 # chmod 640 /path/to/pastes/index.html
36 @end example
37
38 @item
39 Create @url{http://cr.yp.to/daemontools.html, daemontools} +
40 @url{https://cr.yp.to/ucspi-tcp.html, UCSPI-TCP} service:
41
42 @example
43 # mkdir -p /var/service/.paster/log/main
44
45 # cat > /var/service/.paster/run <<EOF
46 #!/bin/sh -e
47 cd /path/to/pastes
48 umask 027
49 exec setuidgid paster tcpserver -DHR -l 0 ::0 2020 \
50     timeout 1m $GOPATH/bin/paster http://paster.example.com/ 2>&1
51 EOF
52
53 # cat > /var/service/.paster/log/run <<EOF
54 #!/bin/sh -e
55 exec setuidgid paster multilog t ./main
56 EOF
57
58 # chmod +x /var/service/.paster/run /var/service/.paster/log/run
59 # chown paster /var/service/.paster/log/main
60 # mv /var/service/.paster /var/service/paster
61 @end example
62
63 @item
64 Optionally prepare X.509 certificate for TLS enabled service:
65
66 @example
67 # umask 077
68 # certtool --generate-privkey --bits 256 --ecc --outfile \
69     paster.example.com.key.pem
70
71 # tmpl=`mktemp`
72 # cat > $tmpl <<EOF
73 dn = "cn=paster.example.com"
74 expiration_days = 365
75 signing_key
76 dns_name = "paster.example.com"
77 EOF
78
79 # certtool --generate-self-signed \
80     --load-privkey paster.example.com.key.pem \
81     --template $tmpl --outfile paster.example.com.pem
82 # rm $tmpl
83
84 # chown paster:paster paster.example.com*.pem
85 # chmod 600 paster.example.com.key.pem
86 @end example
87
88 and choose from plenty of UCSPI-friendly TLS wrappers:
89 @url{http://www.fehcom.de/ipnet/ucspi-ssl.html},
90 @url{https://github.com/younix/ucspi}
91 or likely the @code{go.cypherpunks.ru/ucspi/cmd/tlss}:
92
93 @example
94 exec setuidgid paster tcpserver -DHR -l 0 ::0 2021 tlss \
95     -key paster.example.com.key.pem -cert paster.example.com.pem \
96     timeout 1m $GOPATH/bin/paster http://paster.example.com/ 2>&1
97 @end example
98
99 @item
100 Be sure that your HTTP/whatever server uses proper @code{Content-Type}
101 based on filename's extension (@code{text/plain} for @file{.txt},
102 @code{image/jxl} for @file{.jxl} and so on).
103
104 @end itemize