public-inbox.git  about / heads / tags
an "archives first" approach to mailing lists
blob 3984df718f95684c28865fba89812d18a42b8ef9 9285 bytes (raw)
$ git show v1.4.0:INSTALL	# shows this blob on the CLI

  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
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
 
public-inbox (server-side) installation
---------------------------------------

This is for folks who want to setup their own public-inbox instance.
Clients should use normal git-clone/git-fetch, or NNTP clients
if they want to import mail into their personal inboxes.

public-inbox is developed on Debian GNU/Linux systems and will
never depend on packages outside of the "main" component of
the "stable" distribution, currently Debian 10.x ("buster"),
but older versions of Debian remain supported.

Most packages are available in other GNU/Linux distributions
and FreeBSD.

TODO: this still needs to be documented better,
also see the scripts/ and sa_config/ directories in the source tree

Requirements
------------

public-inbox requires a number of other packages to access its full
functionality.  The core tools are, of course:

* Git (1.8.0+, 2.6+ for writing v2 inboxes)
* Perl 5.10.1+
* DBD::SQLite (needed for NNTP, message threading, and v2 inboxes)

To accept incoming mail into a public inbox, you'll likely want:

* MTA - postfix is recommended (for public-inbox-mda)
* SpamAssassin (spamc/spamd)   (for public-inbox-watch/public-inbox-mda)

Beyond that, there is a long list of Perl modules required, starting with:

* Digest::SHA                      typically installed with Perl
                                   rpm: perl-Digest-SHA

* Email::MIME                      deb: libemail-mime-perl
                                   pkg: p5-Email-MIME
                                   rpm: perl-Email-MIME

* URI::Escape                      deb: liburi-perl
                                   pkg: p5-URI
                                   rpm: perl-URI
                                   (for HTML/Atom generation)

Plack and Date::Parse are optional as of public-inbox v1.3.0,
but required for older releases:

* Plack                            deb: libplack-perl
                                   pkg: p5-Plack
                                   rpm: perl-Plack, perl-Plack-Test,
                                   (for HTML/Atom generation)

- Date::Parse                      deb: libtimedate-perl
                                   pkg: p5-TimeDate
                                   rpm: perl-TimeDate
                                   (for broken, mostly historical emails)

Where "deb" indicates package names for Debian-derived distributions,
"pkg" is for the FreeBSD package (maybe other common BSDs, too), and
"rpm" is for RPM-based distributions (only known to work on Fedora).

Numerous optional modules are likely to be useful as well:

- DBD::SQLite                      deb: libdbd-sqlite3-perl
                                   pkg: p5-DBD-SQLite
                                   rpm: perl-DBD-SQLite
                                   (for v2, NNTP, or gzipped mboxes)

- Search::Xapian                   deb: libsearch-xapian-perl
                                   pkg: p5-Search-Xapian
                                   rpm: perl-Search-Xapian
                                   (HTTP search)

- Net::Server                      deb: libnet-server-perl
                                   pkg: pkg-Net-Server
                                   rpm: perl-Net-Server
                                   (for HTTP/NNTP background daemons,
                                    not needed as systemd services or
                                    foreground servers)

- Inline::C                        deb: libinline-c-perl
                                   pkg: pkg-Inline-C
                                   (speeds up process spawning on Linux,
                                    see public-inbox-daemon(8))

- Plack::Middleware::ReverseProxy  deb: libplack-middleware-reverseproxy-perl
                                   pkg: p5-Plack-Middleware-ReverseProxy
                                   rpm: perl-Plack-Middleware-ReverseProxy
                                   (ensures redirects are correct when running
                                    behind nginx or Varnish)

- Plack::Middleware::Deflater      deb: libplack-middleware-deflater-perl
                                   pkg: p5 -Plack-Middleware-Deflater
                                   rpm: perl-Plack-Middleware-Deflater
                                   (saves bandwidth on responses)

* highlight                        deb: libhighlight-perl
                                   (for syntax highlighting with coderepo)

* xapian-compact (tool)            deb: xapian-tools
                                   pkg: xapian-core
                                   rpm: xapian-core
                                   (optional, for public-inbox-compact(1))

The following modules are typically pulled in by dependencies listed
above, so there is no need to explicitly install them:

- Email::MIME::ContentType         deb: libemail-mime-contenttype-perl
                                   pkg: p5-Email-MIME-ContentType
                                   rpm: perl-Email-MIME-ContentType
                                   (pulled in by Email::MIME)

- Email::Simple                    deb: libemail-simple-perl
                                   pkg: p5-Email-Simple
                                   rpm: perl-Email-Simple
                                   (pulled in by Email::MIME)

* Encode                           deb: libperl5.$MINOR (or libencode-perl)
                                   pkg: perl5
                                   rpm: perl-Encode
                                   (likely installed with Perl)

- DBI                              deb: libdbi-perl
                                   pkg: p5-DBI
                                   rpm: perl-DBI
                                   (pulled in by DBD::SQLite)

* Devel::Peek                      deb: libperl5.$MINOR (e.g. libperl5.24)
                                   pkg: perl5
                                   rpm: perl-Devel-Peek
                                   (optional for stale FD cleanup in daemons,
                                    typically installed alongside Perl5)

- Filesys::Notify::Simple          deb: libfilesys-notify-simple-perl
                                   pkg: p5-Filesys-Notify-Simple
                                   rpm: perl-Filesys-Notify-Simple
                                   (for public-inbox-watch, pulled in by Plack)

- Linux::Inotify2                  deb: liblinux-inotify2-perl
                                   rpm: perl-Linux-Inotify2
                                   (for public-inbox-watch on Linux)

- Filesys::Notify::KQueue          pkg: p5-Filesys-Notify-KQueue
                                   (for public-inbox-watch on FreeBSD)

- IO::Compress (::Gzip)            deb: perl-modules (or libio-compress-perl)
                                   pkg: perl5
                                   rpm: perl-IO-Compress
                                   (for gzipped mbox over HTTP, v2 format)

Uncommonly needed modules:

- Socket6                          deb: libsocket6-perl
                                   pkg: p5-Socket6
                                   rpm: perl-Socket6
                                   (pulled in by SpamAssassin and Net::Server,
                                    only necessary if using IPv6 with
                                    Plack::Middleware::AccessLog or similar
                                    on Perl <= 5.12)

- Crypt::CBC                       deb: libcrypt-cbc-perl
                                   pkg: p5-Crypt-CBC
                                   (for PublicInbox::Unsubscribe (rarely used))

Optional packages testing and development:

- Plack::Test                      deb: libplack-test-perl
                                   pkg: p5-Plack
                                   rpm: perl-Plack-Test

- Test::Simple                     deb: perl-modules-5.$MINOR
                                   pkg: perl5
                                   rpm: perl-Test-Simple

- XML::TreePP                      deb: libxml-treepp-perl
                                   pkg: p5-XML-TreePP
                                   rpm: perl-XML-TreePP

standard MakeMaker installation (Perl)
--------------------------------------

To use MakeMaker, you need to ensure ExtUtils::MakeMaker is available.
This is typically installed with Perl, but RPM-based systems will likely
need to install the `perl-ExtUtils-MakeMaker' package.

Once the dependencies are installed, you should be able to build and
install the system (into /usr/local) with:

        perl Makefile.PL
        make
        make test
        make install # root permissions may be needed

When installing Search::Xapian, make sure the underlying Xapian
installation is not affected by an index corruption bug:

        https://bugs.debian.org/808610

For Debian 8.x (jessie), this means using Debian 8.5 or later.

public-inbox will never store unregeneratable data in Xapian
or any other search database we might use; Xapian corruption
will not destroy critical data.

See the public-inbox-overview(7) man page for the next steps once
the installation is complete.

Copyright
---------

Copyright 2013-2020 all contributors <meta@public-inbox.org>
License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>

git clone https://public-inbox.org/public-inbox.git
git clone http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/public-inbox.git