Forge Home


run a Usenet news server using INN2


5,914 latest version

4.6 quality score

Version information

  • 1.0.1 (latest)
  • 1.0.0
released Jan 23rd 2018
This version is compatible with:
  • Debian

Start using this module

  • r10k or Code Manager
  • Bolt
  • Manual installation
  • Direct download

Add this module to your Puppetfile:

mod 'tskirvin-usenet_inn2', '1.0.1'
Learn more about managing modules with a Puppetfile

Add this module to your Bolt project:

bolt module add tskirvin-usenet_inn2
Learn more about using this module with an existing project

Manually install this module globally with Puppet module tool:

puppet module install tskirvin-usenet_inn2 --version 1.0.1

Direct download is not typically how you would use a Puppet module to manage your infrastructure, but you may want to download the module in order to inspect the code.



tskirvin/usenet_inn2 — version 1.0.1 Jan 23rd 2018


This module provides the basic building blocks necessary to configure a Usenet news server. It was designed for a single news server - - but it should provide the tools necessary for other servers as necessary.

Yes, this module seems overly-complicated; but it manages a dozen or so separate configuration files, because that's how INN2 works.

Note that this is only checked-out to work on a Debian host, but it's probably fairly portable through the ::params class.


Individual documentation is included with each manifest.

Configuration Files

Each configuration file is generally managed at a top level with a single puppet manifest.


Managed with usenet_inn2::control_ctl. Individual entries are loaded with usenet_inn2::control_ctl::fragment:

usenet_inn2::control_ctl::fragment { 
    message    => 'newgroup',
    from       => 'me@internal.invalid',
    newsgroups => 'internal.*'
    action     => 'doit';
    message    => 'rmgroup',
    from       => 'me@internal.invalid',
    newsgroups => 'internal.*'
    action     => 'doit';
    message    => 'checkgroups',
    from       => 'me@internal.invalid',
    newsgroups => 'internal.*'
    action     => 'doit';


Managed with usenet_inn2::cycbuff_conf. Individual entries are loaded with usenet_inn2::cycbuff::meta and usenet_inn2::cycbuff:

usenet_inn2::cycbuff { 
    buffer => 'A01',
    size   => 100000;
    buffer => 'A02',
    size   => 100000;
usenet_inn2::cycbuff::meta { 'ALT': buffer => [ 'A01', 'A02' ] }


Managed with usenet_inn2::distrib_pats. Individual entries are loaded with usenet_inn2::distrib_pats::fragment:

usenet_inn2::distrib_pats::fragment { 'internal':
  weight  => 90,
  pattern => 'internal.*',
  value   => 'internal'


Managed with usenet_inn2::expire. Individual entries are loaded with usenet_inn2::expire::fragment:

usenet_inn2::expire::fragment { 'default':
  pattern      => '*',
  comment      => 'keep for 1-100 days, allow Expires to work',
  days_default => '100',
  days_min     => '1',
  days_max     => '365',


Managed with usenet_inn2::inn_conf.

/etc/news/incoming.conf, /etc/news/innfeed.conf, /etc/news/newsfeeds

Managed with usenet_inn2::incoming.conf, usenet_inn2::innfeed, and usenet_inn2::newsfeeds, respectfully. Individual entries are loaded with usenet_inn2::peer:

usenet_inn2::peer { 'foobar':
  comment    => 'accept everything, send everything but binaries',
  contact    => 'example@foobar.invalid',
  server_in  => 'news-out.foobar.invalid',
  server_out => 'news-in.foobar.invalid',
  incoming   => '*',
  outgoing   => '*,!alt.bainar*,@*.bina*'


Managed with usenet_inn2::nocem. You may not care about this, but if you do, look at the manifests directly.


Managed with usenet_inn2::gpg. This includes managing both the central pubring.gpg key ring and distribution of sample keys.

This is then used to authenticate control messages, and is not strictly necessary.


Managed with usenet_inn2::readers. Individual entries are loaded with usenet_inn2::readers::auth::fragment and usenet_inn2::readers::access::fragment, as so:

usenet_inn2::readers::auth::fragment { 'passwd':
  comment => 'check the local password file',
  order   => 00,
  auth    => 'ckpasswd -f /var/spool/news/db/passwd',
  access  => '<USERS>'

usenet_inn2::readers::access::fragment { 'passwd':
  comment     => 'public access',
  order       => 00,
  users       => '<USERS>',
  perlfilter  => 'false',
  groups_read => $public_read,
  groups_post => $public_post,
  access      => 'RP'


Managed with usenet_inn2::storage. Individual entries are loaded with usenet_inn2::storage::fragment:

usenet_inn2::storage::fragment {
    number     => 0,
    newsgroups => 'internal.*',
    storage    => tradspool;
    number     => 2,
    newsgroups => 'alt.*',
    options    => 'ALT',
    storage    => 'cnfs';


  • puppetlabs/concat
  • puppetlabs/stdlib