1 public-inbox (server-side) installation
2 ---------------------------------------
4 This is for folks who want to setup their own public-inbox instance.
5 Clients should use normal git-clone/git-fetch, or NNTP clients
6 if they want to import mail into their personal inboxes.
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.
13 Most packages are available in other GNU/Linux distributions
16 TODO: this still needs to be documented better,
17 also see the scripts/ and sa_config/ directories in the source tree
22 public-inbox requires a number of other packages to access its full
23 functionality. The core tools are, of course:
25 * Git (1.8.0+, 2.6+ for writing v2 inboxes)
27 * DBD::SQLite (needed for NNTP, message threading, and v2 inboxes)
29 To accept incoming mail into a public inbox, you'll likely want:
31 * MTA - postfix is recommended (for public-inbox-mda)
32 * SpamAssassin (spamc/spamd) (for public-inbox-watch/public-inbox-mda)
34 Beyond that, there is a long list of Perl modules required, starting with:
36 * Digest::SHA typically installed with Perl
39 * URI::Escape deb: liburi-perl
42 (for HTML/Atom generation)
44 Email::MIME will be optional as of public-inbox v1.5.0,
45 it may still be used in maintainer comparison tests:
47 * Email::MIME deb: libemail-mime-perl
51 Plack and Date::Parse are optional as of public-inbox v1.3.0,
52 but required for older releases:
54 * Plack deb: libplack-perl
56 rpm: perl-Plack, perl-Plack-Test,
57 (for HTML/Atom generation)
59 - Date::Parse deb: libtimedate-perl
62 (for broken, mostly historical emails)
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).
68 Numerous optional modules are likely to be useful as well:
70 - DBD::SQLite deb: libdbd-sqlite3-perl
73 (for v2, NNTP, or gzipped mboxes)
75 - Search::Xapian deb: libsearch-xapian-perl
77 rpm: perl-Search-Xapian
80 - Net::Server deb: libnet-server-perl
83 (for HTTP/NNTP background daemons,
84 not needed as systemd services or
87 - Inline::C deb: libinline-c-perl
89 (speeds up process spawning on Linux,
90 see public-inbox-daemon(8))
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)
97 - Plack::Middleware::ReverseProxy deb: libplack-middleware-reverseproxy-perl
98 pkg: p5-Plack-Middleware-ReverseProxy
99 rpm: perl-Plack-Middleware-ReverseProxy
100 (ensures redirects are correct when running
101 behind nginx or Varnish)
103 - Plack::Middleware::Deflater deb: libplack-middleware-deflater-perl
104 pkg: p5 -Plack-Middleware-Deflater
105 rpm: perl-Plack-Middleware-Deflater
106 (saves bandwidth on responses)
108 * highlight deb: libhighlight-perl
109 (for syntax highlighting with coderepo)
111 * xapian-compact (tool) deb: xapian-tools
114 (optional, for public-inbox-compact(1))
116 The following modules are typically pulled in by dependencies listed
117 above, so there is no need to explicitly install them:
119 * Encode deb: libperl5.$MINOR (or libencode-perl)
122 (likely installed with Perl)
124 - DBI deb: libdbi-perl
127 (pulled in by DBD::SQLite)
129 * Devel::Peek deb: libperl5.$MINOR (e.g. libperl5.24)
132 (optional for stale FD cleanup in daemons,
133 typically installed alongside Perl5)
135 - Filesys::Notify::Simple deb: libfilesys-notify-simple-perl
136 pkg: p5-Filesys-Notify-Simple
137 rpm: perl-Filesys-Notify-Simple
138 (for public-inbox-watch, pulled in by Plack)
140 - Linux::Inotify2 deb: liblinux-inotify2-perl
141 rpm: perl-Linux-Inotify2
142 (for public-inbox-watch on Linux)
144 - Filesys::Notify::KQueue pkg: p5-Filesys-Notify-KQueue
145 (for public-inbox-watch on FreeBSD)
147 - IO::Compress (::Gzip) deb: perl-modules (or libio-compress-perl)
149 rpm: perl-IO-Compress
150 (for gzipped mbox over HTTP, v2 format)
152 Uncommonly needed modules:
154 - Socket6 deb: libsocket6-perl
157 (pulled in by SpamAssassin and Net::Server,
158 only necessary if using IPv6 with
159 Plack::Middleware::AccessLog or similar
162 - Crypt::CBC deb: libcrypt-cbc-perl
164 (for PublicInbox::Unsubscribe (rarely used))
166 Optional packages testing and development:
168 - Plack::Test deb: libplack-test-perl
172 - Test::Simple deb: perl-modules-5.$MINOR
174 rpm: perl-Test-Simple
176 - XML::TreePP deb: libxml-treepp-perl
180 standard MakeMaker installation (Perl)
181 --------------------------------------
183 To use MakeMaker, you need to ensure ExtUtils::MakeMaker is available.
184 This is typically installed with Perl, but RPM-based systems will likely
185 need to install the `perl-ExtUtils-MakeMaker' package.
187 Once the dependencies are installed, you should be able to build and
188 install the system (into /usr/local) with:
192 make test # see HACKING for faster tests for hackers
193 make install # root permissions may be needed
195 When installing Search::Xapian, make sure the underlying Xapian
196 installation is not affected by an index corruption bug:
198 https://bugs.debian.org/808610
200 For Debian 8.x (jessie), this means using Debian 8.5 or later.
202 public-inbox will never store unregeneratable data in Xapian
203 or any other search database we might use; Xapian corruption
204 will not destroy critical data.
206 See the public-inbox-overview(7) man page for the next steps once
207 the installation is complete.
212 Copyright 2013-2020 all contributors <meta@public-inbox.org>
213 License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>