Tag Archives: tin

Freenet: using tin for FMS

I actually had to switch back to Thunderbird to read FMS, because tin has a bug or something that prevents communicating with the FMS server.

EDIT: no it doesn’t. This was an issue with FMS. It’s fixed now. Get a newer version.

Anyway, someone made a post to group fms yeasterday, detailing how to use tin with FMS. Here it is, almost entirely. I only removed some private data.

This is to report on using tin as a news client, and
also on the fact that FMS can’t handle many pipelined
GROUP commands.


% uname -a
FreeBSD [removed] 7.0-STABLE
FreeBSD 7.0-STABLE #5: Sun Aug 10 [removed] 2008
[removed]:/usr/obj/usr/src/sys/[removed] i386

% tin -V
Reading config file…
Version: tin 1.9.3 release 20080506 (“Dalintober”) Aug 30 2008 16:27:33

FMS version 0.3.18

When tin reads the list of active articles from the NNTP
server, it sends GROUP commands, all at once – “pipelined”.
Like this:

read_newsrc_active_file() GROUP anarchism
>>> GROUP anarchism [DEBUG: put_server]
read_newsrc_active_file() GROUP de.test
>>> GROUP de.test [DEBUG: put_server]
<<< 211 5 9 324 anarchism
<<< 211 4 215 328 de.test

This breaks FMS when more than two groups are subscribed to.
(Yes, I actually did check 2, 3, 4, 5 groups – "more than two"
seems to be the right definition.)

What happens is that tin sends, say, 5 GROUP messages, FMS
receives and properly handles two of them, and the rest get
choked up somewhere. NNTPConnection::run has a do-while cycle,
this cycle is executed iteration after iteration until
the news client is disconnected.

After that, FMS "receives" all the "missing" GROUP messages.

diff file that I used to trace where all this was taking place:

[CHK link removed]

P.S. It might be related to the sockets, etc.


A temporary solution for anyone who wants to use tin is
disabling message pipelining.

Doing it in 1.9.3 (unstable):

1) add ‘#define DISABLE_PIPELINING’ in include/autoconf.h,
there is no ./configure option yet.
2) grep for PIPELINE_LIMIT, seems that a recent addition to
mail.c doesn’t check if DISABLE_PIPELINING is enabled. So,
either remove PIPELINE_LIMIT or surround it with
‘#ifdef DISABLE_PIPELINING’ and ‘#endif’.
3) make build, don’t make distclean, since it will erase
the modified include/autoconf.h


Short note on reading Usenet newsgroups in FreeBSD

A very simple setup is tin (usenet client) + leafnode (lightweight newsgroup server/proxy). You could even use just tin.

Leafnode has its own mechanism on fetching news articles (called fetchnews). It won’t fetch news from groups you haven’t shown interest in (haven’t opened/read). Which bugs me somewhat, since there are some groups I’m interested in, but which have really rare posts. So if there are no posts, I don’t open them, leafnode thinks I’m not interested, and when news do appear, leafnode doesn’t fetch them. Vicious circle.

So I might consider adding suck or something similar to the line: make it tin + leafnode + suck.

Another option I’ve considered is using inn instead of leafode. That might be a valuable experience, since inn is rich in features. But in reality, I don’t need its horsepower.