HighWind has tried to make the system very easy to configure. These simple step-by-step instructions will jump-start your site configuration.
Using the cyclone.conf-EXAMPLE file as a guide,
create a cyclone.conf file in
the root of the install area. In that file, create a number of "Spool"
objects to hold articles. Each "Spool" object must have a SpoolName, a Path, and a KiloBytes directive. These directives specify a
unique name, a location, and a size for each spool. We recommend
placing a large "Spool" object on each disk in your system.
For example, the following lines create a 1 GigaByte spool called "Main" that will be put in the file "/news/spool/bigSpool".
<Spool> SpoolName Main Path /news/spool/bigSpool KiloBytes 1000000 </Spool>
feeds.conf file in the top of the
install area. For each machine with which this system will exchange
news, create an empty "Feed" Object. (Comment lines begin with a '#'
character. Blank Lines are ignored.)<Feed> # First Machine </Feed> <Feed> # Second Machine </Feed>
<Feed> # First Machine (Sends news to us) IncomingHostname first.machine.com </Feed> <Feed> # Second Machine (Doesn't send news to us) </Feed>
<Feed> # First Machine (Sends and Receives news to and from us) IncomingHostname first.machine.com # first.machine.com gets "Everything but the alt hierarchy" OutgoingHostname first.machine.com Subscription *, !alt.* </Feed> <Feed> # Second Machine (Receives news from us) # second.machine.com gets "Just the comp and rec hierarchies" OutgoingHostname second.machine.com Subscription comp.*, rec.* </Feed>
first.machine.com and
a Unidirectional feed to second.machine.com. All that is
left is to run the "bin/start" command script to bootstrap the system.
When you start Cyclone for the very first time, it will create the
spools you have specified in the cyclone.conf file, do not be
alarmed if this takes a significant amount of time.
At startup, the system reads the
cyclone.conf and feeds.conf files located in
the top of the install area.
In both files, Blank lines and lines beginning with a '#' character (except #include lines) are ignored. Entries in configuration files can be continued across multiple lines by ending the lines with the '\' character. In addition, the values "True" and "Yes" and "False" and "No" are case-insensitive and interchangeable.
cyclone.confThe
cyclone.conffile specifies one or more "spool" objects. These objects determine the size and location of the article spools. Each spool object contains directives indicating the properties of that spool.On startup, Cyclone will allocate space and check the integrity of all spool objects. We recommend creating multiple spool objects with a total of at least 1 GigaByte of spool space. In addition, putting spool objects on separate disk drives will let Cyclone maximize performance by spreading the system load evenly across multiple drives.
<Spool> .... </Spool>
SpoolName
Path path_to_file
KiloBytes 1000000
Encoded FalseIn addition to the "spool" objects,cyclone.confspecifies the DEFAULT values for directives that can appear in thefeeds.conffile. The following directives are also present in thecyclone.conffile.
XrefAction
DropUnapprovedArticlesApproved: header line.
DropFilteredArticlesfeeds.conffeeds.conf file contains one or more "feed"
objects. These objects determine the sites with which this system
will exchange news. Each feed object contains directives indicating the
properties of that feed.Since a "feed" can be unidirectional or bidirectional, the incoming and outgoing directions are specified separately. This allows you (in a single "logical feed") to receive and send news from different hosts.
<Feed> .... </Feed>
#include path_to_file
IncomingHostname hostname.company.com
OutgoingHostname news.company.com
OutgoingFeedName feed_name
Subscription *, !alt.*, !soc.*cyclone.conf file provides a default
value for this directive. Review the following examples:clari.*, comp.*, rec.* Will send all articles posted to the "clari", "comp", and "rec" hierarchies. *, !alt.*, !soc.* Will send all articles except those posted to the "alt" and "soc" hierarchies. comp.*, !comp.lang.* Will send all articles posted to the "comp" hierarchy except those posted to the "comp.lang" hierarchy. alt.*, !alt.binaries.*, alt.binaries.pictures.* Will send all articles posted to the "alt" hierarchy but only those posted to the "alt.binaries.pictures" hierarchy within the "alt.binaries" hierarchy. The following characters are valid in each of the expressions: ! At the beginning of a pattern, inverses its meaning. * Matches any string, including the empty string. ? Matches any single character. \ Quotes any of the above characters.
AdditionalSubscription !clari.*
FilterSubscription !*cyclone.conf file provides a default value
for this directive.
SubjectFilter !*cyclone.conf file
provides a default value for this directive. Please remember that
these are case-sensitive Glob-style patterns. Spaces will not
be interpreted.
Aliases news.company.com, news2.company.com, news3.company.com
NumberOfStreams 1cyclone.conf
file provides a default value for this directive.
MaxIncomingNumberOfStreams 0cyclone.conf file provides a default value for this
directive.
StampIncomingIPAddress Falsecyclone.conf file provides a default value for this
directive.
IncomingExpectedPathStamp news.company.com
MaxChecks 125cyclone.conf file provides a default value for this
directive.
DelayTime 0cyclone.conf file provides a default value for this
directive.
MaxLength 524288cyclone.conf file provides a default value for this
directive.
MinLength 0cyclone.conf file provides a default value for this
directive.
MaxAge 21cyclone.conf
file provides a default value for this directive.
MinAge 0cyclone.conf
file provides a default value for this directive.
MaxHops 100cyclone.conf file provides a default value for this
directive.
MinHops 0cyclone.conf file provides a default value for this
directive.
MaxConnectionDuration 86400cyclone.conf file provides a default value for this
directive. Please remember that the GUI uses MINUTES instead of
seconds.
MaxDepth 10000cyclone.conf file
provides a default value for this directive.
We recommend increasing MaxDepth for HIGH-SPEED peers. Larger MaxDepth settings are useful for occasional network outages or slowdowns. See the Capacity Section of the Performance Guide for more details on setting MaxDepth.
MaxCrossPost 100cyclone.conf file provides a default value for this
directive.
PortNumber 119cyclone.conf file provides a default value for this
directive.
OutgoingInterface news.company.com
AllowStreaming Yescyclone.conf
file provides a default value for this directive.
AllowTryAgain Yescyclone.conf file provides a default value for
this directive.
AllowJunk Nocyclone.conf file provides a default value for this
directive.
MaxBytesPerSecond 0cyclone.conf
file provides a default value for this directive.
IncomingSubjectFilter !*cyclone.conf file provides a default value for this
directive. Please remember that these are case-sensitive
Glob-style patterns. Spaces will not be interpreted.
IncomingGroupFilter !*cyclone.conf file provides a default
value for this directive.
IncomingPathFilter !*Path: header line that matches this expression,
it will be dropped immediately. The "DefaultIncomingPathFilter"
directive in the cyclone.conf file provides a default
value for this directive.
Distribution world,usa,na,necyclone.conf
file provides a default value for this directive.
BackupHostName
main-feeder.company.comBackupPortNumber 119
BackupTimeInterval 600This feature is VERY useful when implementing fault-tolerant News systems. You can have secondary machines monitor your primary machines and only activate feeds if the primary machines become unreachable.
AuthInfoUser username
AuthInfoPass passwordADVANCED CONFIGURATION
Standard Article Filtering
Review the following examples:
<feed> # Incoming feed from news.company.com, with NO "warez" groups or "cancel" messages IncomingHostName news.company.com IncomingGroupFilter *.warez* IncomingSubjectFilter cmsg?cancel* </feed> <feed> # Outgoing feed to news.company2.com, with NO "MAKE MONEY FAST" articles OutgoingHostName news.company2.com SubjectFilter *MAKE?MONEY?FAST* </feed> <feed> # Incoming feed from news.company3.com, with NO articles passing through # the "pirates.com" domain # IncomingHostName news.company3com IncomingPathFilter *.pirates.com </feed>
Custom Article Filtering
bin directory) to the
"-program" option of cycloned.
On startup, the system will spawn a copy of the program specified by
the "-program" option. When an article is received and
ready to be considered for outgoing feeds, a copy of the header lines
terminated by a line containing ".\r\n" will be sent to
the standard input of the filtering program.
After the header is sent to the filtering program, the system will
attempt to read 5 bytes from the standard output of the filtering
program. If the 5 bytes are "335\r\n", the article will
be accepted. If the 5 bytes are "435\r\n", the article
will be discarded.
It is important to remember that the filtering program should NOT exit. In addition, since the system waits for the filtering program to make a decision about each article, speed is very important.
Here is a simple example of a filtering program. Although this example
is written in PERL, filtering programs can be written in any language.
This example is included as sample_filter.pl in the
bin directory.
#!/usr/local/bin/perl
#
$| = 1; # Flush STDOUT
$good_article = "335\r\n";
$bad_article = "435\r\n";
# Initialize
$result = $good_article;
# Loop on input
while($line = <>) {
# If the Subject contains "MAKE MONEY FAST", reject the article.
if ($line =~ /^Subject:/) {
if ($line =~ /MAKE MONEY FAST/) {
$result = $bad_article;
} else {
$result = $good_article;
}
}
if ($line eq ".\r\n") { print $result; }
}
Preventing FAKED Articles
If the above feed were to receive an article with the following "Path:" header line:<feed> # Expect "news.company.com" or "company.com" as a "Path:" Stamp # IncomingHostName news.company.com IncomingExpectedPathStamp news.company.com, company.com </feed>
Before the system began processing the article, the "Path:" line would be modified to look like:Path: news.fakecompany.com!anotherfake.com!not-for-mail!fake
Path: news.company.com.MISMATCH!news.fakecompany.com!anotherfake.com!not-for-mail!fake
Sites with Multiple NewsServers
If you are feeding a site that has multiple newsservers, you will want to specify all the newsservers at that site in the Aliases directive. This will avoid the unnecessary transmission of articles to that site by treating all the newsservers at that site as being "equivalent" to the host you are actually feeding.
In the following example, "company.com" has 3 newsservers ("news1.company.com", "news2.company.com", and "news3.company.com"). We are tasked with receiving articles from "news1.company.com" and sending the "comp" newsgroups to "news2.company.com" that have "world" or "usa" distribution.
<feed> # Take an incoming feed from news1.company.com IncomingHostName news1.company.com # Send the "comp" groups with "world" and # "usa" distribution to news2.company.com OutgoingHostName news2.company.com Subscription comp.* Distribution world, usa # Make this feed recognize all the servers at company.com Alias news1.company.com, news2.company.com, news3.company.com </feed>
Redundant Feeds and Disaster Recovery
By deploying multiple machines, you can provide a high level of redundancy, failover, and disaster recovery. By feeding each of your customers with a primary feed and one or more secondary feeds from alternate sites, you can provide uninterrupted service even in the face of catastrophic failures. Cyclone provides two ways to do this efficiently:
By using the DelayTime directive, you can "time-shift" your secondary feeds to avoid having your machines "race" each other to the customer. Because secondary feeds are "delayed", the primary feed provides the articles to the customer while secondary feeds get "Refused". Only if the primary feed becomes unreachable will secondary feed articles be accepted. Because secondary feeds are "delayed", it is a good idea to give them a much larger MaxDepth than that of the primary feed.
For even greater bandwidth efficiency, you can use the BackupHostName, BackupPortNumber, and BackupTimeInterval directives to monitor your primary feeds. Doing this will cause NO traffic from the secondary sites unless the primary site becomes unreachable.
In the following example, we show an example of how to set up a primary and secondary feeds to "news.company.com".
# Primary FULL outgoing feed to news.company.com # (on host news.highwind.com) <feed> OutgoingHostName news.company.com Subscription * MaxDepth 10000 </feed> # Example 1: On a different machine, we set up a delayed # secondary feed. We delay it by 5 minutes (300 seconds) # and doubled the MaxDepth <feed> OutgoingFeedName news.company.com-backup-using-delaytime OutgoingHostName news.company.com Subscription * DelayTime 300 MaxDepth 20000 </feed> # Example 2: On a different machine, we set up a duplicate # of the primary feed. However, we use the "Backup" directives # to tell Cyclone to only service this feed if the primary feed # (on host news.highwind.com) disappears. <feed> OutgoingFeedName news.company.com-backup-using-backuphostname OutgoingHostName news.company.com Subscription * MaxDepth 10000 # # Monitor "news.highwind.com" on port 119 every 10 minutes # BackupHostName news.highwind.com BackupPortNumber 119 BackupTimeInterval 600 </feed>
Large Configurations
If your machine feeds many sites, or your site configuration is being managed by more than one administrator, it can be desirable to partition the configuration across multiple files. This can be done via the #include directive.
In the following example, we show a sample feeds.conf
file that uses multiple #include directives to
include many configuration files. In turn, these configuration files
can include other configuration files. Using this technique, the
system configuration can be delegated to files under the control of
different administrators.
# # TOP Level feeds.conf file # # NorthEast Region Clients #include /opt/cyclone/northeast.conf # SouthEast Region Clients #include /opt/cyclone/southeast.conf # Include our local feeds.conf file #include ../local_feeds.conf # Include the NFS mounted feeds.conf file #include /nfs/news1/cyclone.feeds.conf
Article Routing and Appearance of your News Network
Large sites generally have a collection of
interconnected News machines. By default, articles passing through any
of these systems will have their Path: header line
augmented with the Fully Qualified Domain Name of the local
host. Since the presence of a hostname in the Path:
header line effects the routing of an article, controlling what goes
into that line is sometimes desirable. Administrators have two options
for controlling the way Cyclone updates the Path:
line:
-masquerade: This option tocyclonedlets the administrator use an argument name instead of the Fully Qualified Domain Name in thePath:header line.
-alias: This option tocyclonedgives the administrator a way to add an argument name to thePath:header line if it isn't already present. This option is usually used to add a common name that represents your collection of news machines.
It is worth noting that these options are simple but very powerful. Clever use of these options (including the use of multiple names separated by '!' characters) allows you to optimize the routing in your news network in ways that are not immediately obvious.
Contact HighWind Support if you would like additional assistance or advice in using these options.
GUI CONFIGURATION
Step-by-Step GUI Configuration
These instructions will guide you through the steps necessary to set up a Web-based GUI control page for each of your customers.
Using the #include directive,
organize your Cyclone configuration file into a single tier
hierarchy. That is, have a master feeds.conf file that
uses the #include directive to
include slave feed configuration files.
By using this simple hierarchy, you can isolate any customer's portion of the system configuration to a single configuration file.
Identify or install a CGI capable Web Server on a machine that has access to the Cyclone configuration file hierarchy created in the previous step. Ensure that the Web Server process has write permissions to the slave configuration files mentioned in the previous step. See the Advanced Section for other alternatives.
Read and follow the documentation inside the
modifyfeed.conf file. These instructions will give you
details on how you can control the actions of your customer's GUI.
Once this is complete, you should setup a cron(1M)
entry to run the Cyclone bin/restart command script at
regular intervals so that changes made through the GUI will take
effect. We suggest a 12 hour interval.
Advanced GUI Configuration Options
The cgi-bin/modifyfeed.cgi program
does not require a locally installed Cyclone system. For that reason,
it can be installed on any Web Server on any machine on your
network.
By exploiting this feature, you can use a central Web Server to manage
all the configuration files for every Cyclone system on your
network. If you do this, you can use rdist(1) or a
similar system to distribute the resulting configuration files out to
your Cyclone machines.
If you choose to rdist(1) your configuration files out to
remote Cyclone machines, we suggest, in addition to using
cron, modifying the bin/restart command
script to only restart the system if the configuration files have
changed. By taking the small amount of time to set this up, you can
remotely control dozens of Cyclone machines from a central console.
To protect the configuration of your Cyclone system, we recommend using Web-based password protection on each of your client Web subdirectories. In addition, using SSL or similar technology will provide further protection from unauthorized access.
![]() |
Back to Cyclone Documentation![]() |