]> Sergey Matveev's repositories - public-inbox.git/blobdiff - INSTALL
No ext_urls
[public-inbox.git] / INSTALL
diff --git a/INSTALL b/INSTALL
index 2dd7dcff7013303091575e3c7e818a1fd50a6c8a..aa9a502d8ac7ad7c64c85015c990ea8000c59b9c 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -2,16 +2,21 @@ 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
+Clients should use normal git-clone/git-fetch, IMAP or NNTP clients
 if they want to import mail into their personal inboxes.
 
+As of 2022, public-inbox is packaged by several OS distributions,
+listed in alphabetical order: Debian, GNU Guix, NixOS, and Void Linux.
+
 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.
+and FreeBSD.  CentOS 7.x users will likely want newer git and
+Xapian packages for better performance and v2 inbox support:
+https://public-inbox.org/meta/20210421151308.yz5hzkgm75klunpe@nitro.local/
 
 TODO: this still needs to be documented better,
 also see the scripts/ and sa_config/ directories in the source tree
@@ -23,24 +28,17 @@ 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)
+* Perl 5.12.0+
+* DBD::SQLite (needed for IMAP, 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
+Beyond that, there is one non-standard Perl package required:
 
-* URI::Escape                      deb: liburi-perl
+* URI                              deb: liburi-perl
                                    pkg: p5-URI
                                    rpm: perl-URI
                                    (for HTML/Atom generation)
@@ -67,36 +65,47 @@ 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)
+                                   (for v2, IMAP, NNTP, or gzipped mboxes)
 
-- Search::Xapian                   deb: libsearch-xapian-perl
-                                   pkg: p5-Search-Xapian
+- Search::Xapian or Xapian(.pm)    deb: libsearch-xapian-perl
+                                   pkg: p5-Search-Xapian OR p5-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)
+                                   (HTTP and IMAP search)
 
 - Inline::C                        deb: libinline-c-perl
                                    pkg: pkg-Inline-C
+                                   rpm: perl-Inline (or perl-Inline-C)
                                    (speeds up process spawning on Linux,
                                     see public-inbox-daemon(8))
 
+- Email::Address::XS               deb: libemail-address-xs-perl
+                                   pkg: pkg-Email-Address-XS
+                                   (correct parsing of tricky email
+                                    addresses, phrases and comments,
+                                    required for IMAP)
+
+- Parse::RecDescent                deb: libparse-recdescent-perl
+                                   pkg: p5-Parse-RecDescent
+                                   rpm: perl-ParseRecDescent
+                                   (optional, for public-inbox-imapd(1))
+
+- Mail::IMAPClient                 deb: libmail-imapclient-perl
+                                   pkg: p5-Mail-IMAPClient
+                                   rpm: perl-Mail-IMAPClient
+                                   (optional for lei and public-inbox-watch)
+
+- BSD::Resource                    deb: libbsd-resource-perl
+                                   pkg: p5-BSD-Resource
+                                   rpm: perl-BSD-Resource
+                                   (optional, for PSGI limiters
+                                    see public-inbox-config(5))
+
 - 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)
 
@@ -105,53 +114,34 @@ Numerous optional modules are likely to be useful as well:
                                    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:
+* curl (tool)                      deb, pkg, rpm: curl
+                                   (for HTTP(S) externals with curl)
+
+- Linux::Inotify2                  deb: liblinux-inotify2-perl
+                                   rpm: perl-Linux-Inotify2
+                                   (for lei, public-inbox-watch and -imapd
+                                    on Linux)
 
-- Email::MIME::ContentType         deb: libemail-mime-contenttype-perl
-                                   pkg: p5-Email-MIME-ContentType
-                                   rpm: perl-Email-MIME-ContentType
-                                   (pulled in by Email::MIME)
+- IO::KQueue                       pkg: p5-IO-KQueue
+                                   (for lei, public-inbox-watch and -imapd
+                                    on *BSDs)
 
-- Email::Simple                    deb: libemail-simple-perl
-                                   pkg: p5-Email-Simple
-                                   rpm: perl-Email-Simple
-                                   (pulled in by Email::MIME)
+- Net::Server                      deb: libnet-server-perl
+                                   pkg: pkg-Net-Server
+                                   rpm: perl-Net-Server
+                                   (for HTTP/IMAP/NNTP background daemons,
+                                    not needed as systemd services or
+                                    foreground servers)
 
-* Encode                           deb: libperl5.$MINOR (or libencode-perl)
-                                   pkg: perl5
-                                   rpm: perl-Encode
-                                   (likely installed with Perl)
+The following module is typically pulled in by dependencies listed
+above, so there is no need to explicitly install them:
 
 - 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:
+Uncommonly needed modules (see HACKING for development-only modules):
 
 - Socket6                          deb: libsocket6-perl
                                    pkg: p5-Socket6
@@ -165,20 +155,6 @@ Uncommonly needed modules:
                                    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)
 --------------------------------------
 
@@ -194,22 +170,45 @@ install the system (into /usr/local) with:
         make test    # see HACKING for faster tests for hackers
         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:
+symlink-install (public-inbox.git and 1.7.0+)
+---------------------------------------------
 
-        https://bugs.debian.org/808610
+For users who lack permissions and/or wish to minimize their
+installation footprint, the "symlink-install" target is available in
+public-inbox.git.  The following installs symlinks to $HOME/bin
+pointing to the source tree:
 
-For Debian 8.x (jessie), this means using Debian 8.5 or later.
+       perl Makefile.PL
+       make symlink-install prefix=$HOME
 
-public-inbox will never store unregeneratable data in Xapian
-or any other search database we might use; Xapian corruption
-will not destroy critical data.
+Other installation notes
+------------------------
+
+Debian 8.x (jessie) users, use Debian 8.5 or later if using Xapian:
+        https://bugs.debian.org/808610
+
+public-inbox-* commands will never store unregeneratable data in
+Xapian nor any other search database we might use; Xapian
+corruption will not destroy critical data.  Note: `lei' DOES store
+unregeneratable data in Xapian and SQLite.
 
 See the public-inbox-overview(7) man page for the next steps once
 the installation is complete.
 
+The following required packages are part of the Perl standard
+library.  Debian-based distros put them in "libperl5.$MINOR" or
+"perl-modules-5.$MINOR"; and FreeBSD puts them in "perl5".
+RPM-based distros split them out into separate packages:
+
+* Digest::SHA                      rpm: perl-Digest-SHA
+* Data::Dumper                     rpm: perl-Data-Dumper
+* Encode                           rpm: perl-Encode
+* IO::Compress                     rpm: perl-IO-Compress
+* Storable                         rpm: perl-Storable
+* Text::ParseWords                 rpm: perl-Text-Parsewords
+
 Copyright
 ---------
 
-Copyright 2013-2020 all contributors <meta@public-inbox.org>
+Copyright all contributors <meta@public-inbox.org>
 License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>