]> Sergey Matveev's repositories - public-inbox.git/blob - INSTALL
doc: README + INSTALL: update with -imapd info
[public-inbox.git] / INSTALL
1 public-inbox (server-side) installation
2 ---------------------------------------
3
4 This is for folks who want to setup their own public-inbox instance.
5 Clients should use normal git-clone/git-fetch, IMAP or NNTP clients
6 if they want to import mail into their personal inboxes.
7
8 public-inbox is developed on Debian GNU/Linux systems and will
9 never depend on packages outside of the "main" component of
10 the "stable" distribution, currently Debian 10.x ("buster"),
11 but older versions of Debian remain supported.
12
13 Most packages are available in other GNU/Linux distributions
14 and FreeBSD.
15
16 TODO: this still needs to be documented better,
17 also see the scripts/ and sa_config/ directories in the source tree
18
19 Requirements
20 ------------
21
22 public-inbox requires a number of other packages to access its full
23 functionality.  The core tools are, of course:
24
25 * Git (1.8.0+, 2.6+ for writing v2 inboxes)
26 * Perl 5.10.1+
27 * DBD::SQLite (needed for IMAP, NNTP, message threading, and v2 inboxes)
28
29 To accept incoming mail into a public inbox, you'll likely want:
30
31 * MTA - postfix is recommended (for public-inbox-mda)
32 * SpamAssassin (spamc/spamd)   (for public-inbox-watch/public-inbox-mda)
33
34 Beyond that, there is a long list of Perl modules required, starting with:
35
36 * Digest::SHA                      typically installed with Perl
37                                    rpm: perl-Digest-SHA
38
39 * URI::Escape                      deb: liburi-perl
40                                    pkg: p5-URI
41                                    rpm: perl-URI
42                                    (for HTML/Atom generation)
43
44 Email::MIME will be optional as of public-inbox v1.5.0,
45 it may still be used in maintainer comparison tests:
46
47 * Email::MIME                      deb: libemail-mime-perl
48                                    pkg: p5-Email-MIME
49                                    rpm: perl-Email-MIME
50
51 Plack and Date::Parse are optional as of public-inbox v1.3.0,
52 but required for older releases:
53
54 * Plack                            deb: libplack-perl
55                                    pkg: p5-Plack
56                                    rpm: perl-Plack, perl-Plack-Test,
57                                    (for HTML/Atom generation)
58
59 - Date::Parse                      deb: libtimedate-perl
60                                    pkg: p5-TimeDate
61                                    rpm: perl-TimeDate
62                                    (for broken, mostly historical emails)
63
64 Where "deb" indicates package names for Debian-derived distributions,
65 "pkg" is for the FreeBSD package (maybe other common BSDs, too), and
66 "rpm" is for RPM-based distributions (only known to work on Fedora).
67
68 Numerous optional modules are likely to be useful as well:
69
70 - DBD::SQLite                      deb: libdbd-sqlite3-perl
71                                    pkg: p5-DBD-SQLite
72                                    rpm: perl-DBD-SQLite
73                                    (for v2, IMAP, NNTP, or gzipped mboxes)
74
75 - Search::Xapian                   deb: libsearch-xapian-perl
76                                    pkg: p5-Search-Xapian
77                                    rpm: perl-Search-Xapian
78                                    (HTTP and IMAP search)
79
80 - Net::Server                      deb: libnet-server-perl
81                                    pkg: pkg-Net-Server
82                                    rpm: perl-Net-Server
83                                    (for HTTP/IMAP/NNTP background daemons,
84                                     not needed as systemd services or
85                                     foreground servers)
86
87 - Inline::C                        deb: libinline-c-perl
88                                    pkg: pkg-Inline-C
89                                    (speeds up process spawning on Linux,
90                                     see public-inbox-daemon(8))
91
92 - Email::Address::XS               deb: libemail-address-xs-perl
93                                    pkg: pkg-Email-Address-XS
94                                    (correct parsing of tricky email
95                                     addresses, phrases and comments,
96                                     required for IMAP)
97
98 - Parse::RecDescent                deb: libparse-recdescent-perl
99                                    pkg: p5-Parse-RecDescent
100                                    rpm: perl-ParseRecDescent
101                                    (optional, for public-inbox-imapd(1))
102
103
104 - Plack::Middleware::ReverseProxy  deb: libplack-middleware-reverseproxy-perl
105                                    pkg: p5-Plack-Middleware-ReverseProxy
106                                    rpm: perl-Plack-Middleware-ReverseProxy
107                                    (ensures redirects are correct when running
108                                     behind nginx or Varnish)
109
110 * highlight                        deb: libhighlight-perl
111                                    (for syntax highlighting with coderepo)
112
113 * xapian-compact (tool)            deb: xapian-tools
114                                    pkg: xapian-core
115                                    rpm: xapian-core
116                                    (optional, for public-inbox-compact(1))
117
118 The following modules are typically pulled in by dependencies listed
119 above, so there is no need to explicitly install them:
120
121 * Encode                           deb: libperl5.$MINOR (or libencode-perl)
122                                    pkg: perl5
123                                    rpm: perl-Encode
124                                    (likely installed with Perl)
125
126 - DBI                              deb: libdbi-perl
127                                    pkg: p5-DBI
128                                    rpm: perl-DBI
129                                    (pulled in by DBD::SQLite)
130
131 * Devel::Peek                      deb: libperl5.$MINOR (e.g. libperl5.24)
132                                    pkg: perl5
133                                    rpm: perl-Devel-Peek
134                                    (optional for stale FD cleanup in daemons,
135                                     typically installed alongside Perl5)
136
137 - Linux::Inotify2                  deb: liblinux-inotify2-perl
138                                    rpm: perl-Linux-Inotify2
139                                    (for public-inbox-watch and -imapd on Linux)
140
141 - IO::Compress (::Gzip)            deb: perl-modules (or libio-compress-perl)
142                                    pkg: perl5
143                                    rpm: perl-IO-Compress
144                                    (for gzipped mbox over HTTP, v2 format)
145
146 Uncommonly needed modules:
147
148 - Socket6                          deb: libsocket6-perl
149                                    pkg: p5-Socket6
150                                    rpm: perl-Socket6
151                                    (pulled in by SpamAssassin and Net::Server,
152                                     only necessary if using IPv6 with
153                                     Plack::Middleware::AccessLog or similar
154                                     on Perl <= 5.12)
155
156 - Crypt::CBC                       deb: libcrypt-cbc-perl
157                                    pkg: p5-Crypt-CBC
158                                    (for PublicInbox::Unsubscribe (rarely used))
159
160 Optional packages testing and development:
161
162 - Plack::Test                      deb: libplack-test-perl
163                                    pkg: p5-Plack
164                                    rpm: perl-Plack-Test
165
166 - Test::Simple                     deb: perl-modules-5.$MINOR
167                                    pkg: perl5
168                                    rpm: perl-Test-Simple
169
170 - XML::TreePP                      deb: libxml-treepp-perl
171                                    pkg: p5-XML-TreePP
172                                    rpm: perl-XML-TreePP
173
174 standard MakeMaker installation (Perl)
175 --------------------------------------
176
177 To use MakeMaker, you need to ensure ExtUtils::MakeMaker is available.
178 This is typically installed with Perl, but RPM-based systems will likely
179 need to install the `perl-ExtUtils-MakeMaker' package.
180
181 Once the dependencies are installed, you should be able to build and
182 install the system (into /usr/local) with:
183
184         perl Makefile.PL
185         make
186         make test    # see HACKING for faster tests for hackers
187         make install # root permissions may be needed
188
189 When installing Search::Xapian, make sure the underlying Xapian
190 installation is not affected by an index corruption bug:
191
192         https://bugs.debian.org/808610
193
194 For Debian 8.x (jessie), this means using Debian 8.5 or later.
195
196 public-inbox will never store unregeneratable data in Xapian
197 or any other search database we might use; Xapian corruption
198 will not destroy critical data.
199
200 See the public-inbox-overview(7) man page for the next steps once
201 the installation is complete.
202
203 Copyright
204 ---------
205
206 Copyright 2013-2021 all contributors <meta@public-inbox.org>
207 License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>