X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=doc%2Fintegration.texi;h=3359a3a72b25534eaf7e419a169128928433d908;hb=4c17993ce76c6f1883e6854d826eafd4c33c1594;hp=8879d91f59f341254f8ee9e45089a139c9f254b4;hpb=917e64917aa4519cdc6aef9effcea9e65d529898;p=nncp.git diff --git a/doc/integration.texi b/doc/integration.texi index 8879d91..3359a3a 100644 --- a/doc/integration.texi +++ b/doc/integration.texi @@ -7,6 +7,7 @@ making them store-and-forward friendly. @menu * Index files for freqing: FreqIndex. * Postfix:: +* Exim:: * Web feeds: Feeds. * Web pages: WARCs. * BitTorrent and huge files: BitTorrent. @@ -147,16 +148,121 @@ effective. @end itemize +@node Exim +@section Integration with Exim + +This section is unaltered copy-paste of +@url{https://changelog.complete.org/archives/10165-asynchronous-email-exim-over-nncp-or-uucp, Asynchronous Email: Exim over NNCP (or UUCP)} +article by John Goerzen, with his permission. + +@strong{Sending from Exim to a smarthost} + +One common use for async email is from a satellite system: one that +doesn't receive mail, or have local mailboxes, but just needs to get +email out to the Internet. This is a common situation even for +conventionally-connected systems; in Exim speak, this is a "satellite +system that routes mail via a smarthost". That is, every outbound +message goes to a specific target, which then is responsible for +eventual delivery (over the Internet, LAN, whatever). + +This is fairly simple in Exim. + +We actually have two choices for how to do this: bsmtp or rmail mode. +bsmtp (batch SMTP) is the more modern way, and is essentially a +derivative of SMTP that explicitly can be queued asynchronously. +Basically it's a set of SMTP commands that can be saved in a file. The +alternative is "rmail" (which is just an alias for sendmail these days), +where the data is piped to rmail/sendmail with the recipients given on +the command line. Both can work with Exim and NNCP, but because we're +doing shiny new things, we'll use bsmtp. + +These instructions are loosely based on the +@url{https://people.debian.org/~jdg/bsmtp.html, Using outgoing BSMTP with Exim HOWTO}. +Some of these may assume Debianness in the configuration, but should be +easily enough extrapolated to other configs as well. + +First, configure Exim to use satellite mode with minimal DNS lookups +(assuming that you may not have working DNS anyhow). + +Then, in the Exim primary router section for smarthost +(@file{router/200_exim4-config_primary} in Debian split configurations), +just change @code{transport = remote_smtp_smarthost to transport = nncp}. + +Now, define the NNCP transport. If you are on Debian, you might name this +@file{transports/40_exim4-config_local_nncp}: + +@example +nncp: + debug_print = "T: nncp transport for $local_part@@$domain" + driver = pipe + user = nncp + batch_max = 100 + use_bsmtp + command = /usr/local/nncp/bin/nncp-exec -noprogress -quiet hostname_goes_here rsmtp +.ifdef REMOTE_SMTP_HEADERS_REWRITE + headers_rewrite = REMOTE_SMTP_HEADERS_REWRITE +.endif +.ifdef REMOTE_SMTP_RETURN_PATH + return_path = REMOTE_SMTP_RETURN_PATH +.endif +@end example + +This is pretty straightforward. We pipe to @command{nncp-exec}, run it +as the nncp user. @command{nncp-exec} sends it to a target node and runs +whatever that node has called @command{rsmtp} (the command to receive +bsmtp data). When the target node processes the request, it will run the +configured command and pipe the data in to it. + +@strong{More complicated: Routing to various NNCP nodes} + +Perhaps you would like to be able to send mail directly to various NNCP +nodes. There are a lot of ways to do that. + +Fundamentally, you will need a setup similar to the UUCP example in +@url{https://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_manualroute_router.html, +Exim's manualroute manual}, which lets you define how to reach various +hosts via UUCP/NNCP. Perhaps you have a star topology (every NNCP node +exchanges email with a central hub). In the NNCP world, you have two +choices of how you do this. You could, at the Exim level, make the +central hub the smarthost for all the side nodes, and let it +redistribute mail. That would work, but requires decrypting messages at +the hub to let Exim process. The other alternative is to configure NNCP +to just send to the destinations via the central hub; that takes +advantage of onion routing and doesn't require any Exim processing at +the central hub at all. + +@strong{Receiving mail from NNCP} + +On the receiving side, first you need to configure NNCP to authorize the +execution of a mail program. In the section of your receiving host where +you set the permissions for the client, include something like this: + +@example +exec: @{ + rsmtp: ["/usr/sbin/sendmail", "-bS"] +@} +@end example + +The -bS option is what tells Exim to receive BSMTP on @code{stdin}. + +Now, you need to tell Exim that nncp is a trusted user (able to set From +headers arbitrarily). Assuming you are running NNCP as the nncp user, +then add @code{MAIN_TRUSTED_USERS = nncp} to a file such as +@file{/etc/exim4/conf.d/main/01_exim4-config_local-nncp}. That's it! + +Some hosts, of course, both send and receive mail via NNCP and will need +configurations for both. + @node Feeds @section Integration with Web feeds RSS and Atom feeds could be collected using -@url{https://github.com/wking/rss2email, rss2email} program. It -converts all incoming feed entries to email messages. Read about how to -integration @ref{Postfix} with email. @command{rss2email} could be run -in a cron, to collect feeds without any user interaction. Also this -program supports ETags and won't pollute the channel if remote server -supports them too. +@url{https://github.com/wking/rss2email, rss2email} program. It converts +all incoming feed entries to email messages. Read about how to integrate +@ref{Postfix}/@ref{Exim} with email. @command{rss2email} could be run in +a cron, to collect feeds without any user interaction. Also this program +supports ETags and won't pollute the channel if remote server supports +them too. After installing @command{rss2email}, create configuration file: @@ -167,7 +273,7 @@ $ r2e new rss-robot@@address.com and add feeds you want to retrieve: @example -$ r2e add http://git.cypherpunks.ru/cgit.cgi/nncp.git/atom/?h=master +$ r2e add http://www.git.cypherpunks.ru/?p=nncp.git;a=atom @end example and run the process: