<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Russell Coker's Documents &#187; Projects</title>
	<atom:link href="http://doc.coker.com.au/category/projects/feed/" rel="self" type="application/rss+xml" />
	<link>http://doc.coker.com.au</link>
	<description>Documents that are not date based</description>
	<lastBuildDate>Sat, 14 Jan 2012 08:50:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Postal</title>
		<link>http://doc.coker.com.au/projects/postal/</link>
		<comments>http://doc.coker.com.au/projects/postal/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 08:07:03 +0000</pubDate>
		<dc:creator>etbe</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://doc.coker.com.au/?p=26</guid>
		<description><![CDATA[This is a program I wrote to benchmark SMTP servers. I started work on this because I need to know which mail server will give the best performance with more than 1,000,000 users. I have decided to release it under the GPL because there is no benefit in keeping the source secret, and the world [...]]]></description>
			<content:encoded><![CDATA[<p>This is a program I wrote to benchmark SMTP servers. I started work on this because I need to know which mail server will give the best performance with more than 1,000,000 users. I have decided to release it under the GPL because there is no benefit in keeping the source secret, and the world needs to know which mail servers perform well and which don&#8217;t!</p>
<p>At the OSDC conference in 2006 I presented a paper on <a href="http://doc.coker.com.au/uncategorized/benchmarking-mail-relays-and-forwarders/">mail relay performance</a> based on the new BHM program that is now part of Postal.</p>
<p>I have a <a href="http://etbe.coker.com.au/category/postal/">Postal category on my main blog</a> that I use for a variety of news related to Postal.  This post (which will be updated periodically) will be the main reference page for the software.  Please use the comments section for bug reports and feature requests.</p>
<p>It works by taking a list of email addresses to use as FROM and TO addresses.  I originally used a template to generate the list of users because if each email address takes 30 bytes of storage then 3,000,000 accounts would take 90M of RAM which would be more than the memory in the test machine I was using at the time.  Since that time the RAM size in commodity machines has increased far faster than the size of ISP mail servers so I removed the template feature (which seemed to confuse many people).</p>
<p>When sending the mail the subject and body will be random data. A header field <b>X-Postal</b> will be used so that procmail can easily filter out such email just in case you accidentally put your own email address as one of the test addresses. ;)</p>
<p>I have now added two new programs to the suite, <b>postal-list</b>, and <b>rabid</b>. <b>Postal-list</b> will list all the possible expansions for an<br />
account name (used for creating a list of accounts to create on your test server). <b>Rabid</b> is the mad Biff, it is a POP benchmark.</p>
<p>Postal now adds a MD5 checksum in the header <b>X-PostalHash</b> to all messages it sends (checksum is over the Subject, Date, Message-ID, From, and To headers and the message body including the &#8220;\r\n&#8221; that ends each line of text in the SMTP protocol). Rabid now checks the MD5 checksum and displays error messages when it doesn&#8217;t match.</p>
<p>I have added rate limiting support in Rabid and Postal. This means that you can specify that these programs send a specific number of messages and perform a specific number of POP connections per minute respectively. This should make it easy to determine the amount of system resources that are used by a particular volume of traffic. Also if you want to run performance analysis software to determine what the bottlenecks are on your mail server then you could set Postal and Rabid to only use half the maximum speed (so the CPU and disk usage of the analysis software won&#8217;t impact on the mail server).</p>
<p>I will not release a 1.0 version until the following features are implemented:</p>
<ul>
<li>Matching email sent by Postal and mail received by BHM and Rabid to ensure that each message is delivered correctly (no repeats and no corruption)</li>
<li>IMAP support in Rabid that works</li>
<li>Support for simulating large numbers of source addresses in Postal.  This needs to support at least 2^24 addresses so it is entirely impractical to have so many IP addresses permanently assigned to the test machine.</li>
<li>Support for simulating slow servers in Postal and BHM (probably reducing TCP window size and delaying read() calls)</li>
<li>Making BHM simulate the more common anti-spam measures that are in use to determine the impact that they have on list servers</li>
<li>Determining a solution to the problem of benchmarking DNS servers.  This may mean just including documentation on how to simulate the use patterns of a mail server using someone else&#8217;s DNS benchmark, but may mean writing my own DNS benchmark.</li>
</ul>
<p>Here are links to download the source:</p>
<ul>
<li><a href="http://www.coker.com.au/postal/postal-0.72.tgz">postal-0.72.tgz</a> &#8211; made LMTP work and accept TAB as a field delimiter.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.71.tgz">postal-0.71.tgz</a> &#8211; rewrote the md5 checking code and fixed lots of little bugs.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.70.tgz">postal-0.70.tgz</a> &#8211; tidied up the man pages and made it build without SSL support.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.69.tgz">postal-0.69.tgz</a> &#8211; fixed some compile warnings, and really made it compile with GCC 4.3</li>
<li><a href="http://www.coker.com.au/postal/postal-0.68.tgz">postal-0.68.tgz</a> &#8211; fixed some compile warnings, made it compile with GCC 4.3, and I think I made it compile correctly with OpenSolaris.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.67.tgz">postal-0.67.tgz</a> &#8211; changed the license to GPL 3</li>
<li><a href="http://www.coker.com.au/postal/postal-0.66.tgz">postal-0.66.tgz</a> &#8211; made GNUTLS work in BHM and added MessageId to Postal.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.65.tgz">postal-0.65.tgz</a> &#8211; significant improvement, many new features and many bugs fixed!</li>
<li><a href="http://www.coker.com.au/postal/postal-0.62.tgz">postal-0.62.tgz</a> &#8211; Slightly improved the installation documents and made it build with GCC 3.2.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.61.tgz">postal-0.61.tgz</a> &#8211; version 0.61. Fixed the bug with optind that stopped it working on BSD systems, and a few other minor bugs.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.60.tgz">postal-0.60.tgz</a> &#8211; version 0.60. Fixed the POP deletion bug, made it compile with GCC 3.0, and added logging of all network IO to disk.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.59.tgz">postal-0.59.tgz</a> &#8211; version 0.59.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.58.tgz">postal-0.58.tgz</a> &#8211; version 0.58. Added some new autoconf stuff, RPM build support, and the first steps to OS/2 and Win32 portability.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.57.tgz">postal-0.57.tgz</a> &#8211; version 0.57. Fixed lots of trivial bugs and some BSD portability issues.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.56.tgz">postal-0.56.tgz</a> &#8211; version 0.56. Added Solaris package manager support. Made it compile without SSL. Added heaps of autoconf stuff.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.55.tgz">postal-0.55.tgz</a> &#8211; version 0.55. Made Rabid work with POP servers that support the CAPA command. Fixed some compile problems on Solaris.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.54.tgz">postal-0.54.tgz</a> &#8211; version 0.54. Added a ./configure option to turn off name expansion (for systems with buggy regex). Fixed a locking bug that allowed Rabid to access the same account through two threads.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.53.tgz">postal-0.53.tgz</a> &#8211; version 0.53. Don&#8217;t use NIS domain name etc for SMTP protocol.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.52.tgz">postal-0.52.tgz</a> &#8211; version 0.52. Better portability with <b>autoconf</b>.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.51.tgz">postal-0.51.tgz</a> &#8211; version 0.51. Supports compiling without SSL and some hacky Solaris support.</li>
<li><a href="http://www.coker.com.au/postal/postal-0.50.tgz">postal-0.50.tgz</a> &#8211; version 0.50. Adds SSL support to Postal (Rabid comes next).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://doc.coker.com.au/projects/postal/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Memlockd</title>
		<link>http://doc.coker.com.au/projects/memlockd/</link>
		<comments>http://doc.coker.com.au/projects/memlockd/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 01:50:42 +0000</pubDate>
		<dc:creator>etbe</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://doc.coker.com.au/?p=137</guid>
		<description><![CDATA[Memlockd is a daemon that locks files into memory. Then if a machine starts paging heavily the chance of being able to login successfully is significantly increased. The default configuration will lock all the files needed for login to a Debian GNU/Linux system via the console or via ssh. memlockd_1.0.tar.gz memlockd_0.05.tar.gz memlockd_0.04.tar.gz memlockd_0.03.tar.gz memlockd_0.02.tar.gz memlockd_0.01.tar.gz]]></description>
			<content:encoded><![CDATA[<p>Memlockd is a daemon that locks files into memory. Then if a machine starts paging heavily the chance of being able to login successfully is significantly increased. The default configuration will lock all the files needed for login to a Debian GNU/Linux system via the console or via ssh.</p>
<ul>
<li><a href="http://www.coker.com.au/memlockd/memlockd_1.0.tar.gz">memlockd_1.0.tar.gz</a></li>
<li><a href="http://www.coker.com.au/memlockd/memlockd_0.05.tar.gz">memlockd_0.05.tar.gz</a></li>
<li><a href="http://www.coker.com.au/memlockd/memlockd_0.04.tar.gz">memlockd_0.04.tar.gz</a></li>
<li><a href="http://www.coker.com.au/memlockd/memlockd_0.03.tar.gz">memlockd_0.03.tar.gz</a></li>
<li><a href="http://www.coker.com.au/memlockd/memlockd_0.02.tar.gz">memlockd_0.02.tar.gz</a></li>
<li><a href="http://www.coker.com.au/memlockd/memlockd_0.01.tar.gz">memlockd_0.01.tar.gz</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://doc.coker.com.au/projects/memlockd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Portslave</title>
		<link>http://doc.coker.com.au/projects/portslave/</link>
		<comments>http://doc.coker.com.au/projects/portslave/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 21:20:46 +0000</pubDate>
		<dc:creator>etbe</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://doc.coker.com.au/?p=142</guid>
		<description><![CDATA[Portslave is a getty replacement that is designed to talk to a modem and spawn PPP or SLIP when the modem connects. It authenticates the connection via RADIUS. Portslave version 2010.04.19 source Portslave version 2010.03.30 source]]></description>
			<content:encoded><![CDATA[<p>Portslave is a getty replacement that is designed to talk to a modem and spawn PPP or SLIP when the modem connects.  It authenticates the connection via RADIUS.</p>
<ul>
<li><a href="http://www.coker.com.au/portslave/portslave_2010.04.19.tar.gz">Portslave version 2010.04.19 source</a></li>
<li><a href="http://www.coker.com.au/portslave/portslave_2010.03.30.tar.gz">Portslave version 2010.03.30 source</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://doc.coker.com.au/projects/portslave/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Log Tools</title>
		<link>http://doc.coker.com.au/projects/logtools/</link>
		<comments>http://doc.coker.com.au/projects/logtools/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 06:50:51 +0000</pubDate>
		<dc:creator>etbe</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://doc.coker.com.au/?p=30</guid>
		<description><![CDATA[The Logtools package contains a number of programs for managing log files (mainly for web servers). clfmerge will merge a number of Common Logfile Format web log files into a single file while also re-ordering them in a sliding window to cope with web servers that generate log entries with the start-time of the request [...]]]></description>
			<content:encoded><![CDATA[<p>The Logtools package contains a number of programs for managing log files (mainly for web servers).</p>
<ul>
<li><b>clfmerge</b> will merge a number of Common Logfile Format web log files into a single file while also re-ordering them in a sliding window to cope with web servers that generate log entries with the start-time of the request and write them in order of completion.</li>
<li><b>logprn</b> operates like <i>tail -f</i> but will (after a specified period of inactivity) spawn a process and write the new data in the log file<br />
to it&#8217;s standard input.</li>
<li><b>clfsplit</b> will split up a single CLF format web log into a number of files based on the client&#8217;s IP address.</li>
<li><b>funnel</b> will write it&#8217;s standard-input to a number of files or processes.</li>
<li><b>clfdomainsplit</b> split a CLF format web log containing fully qualified URLs (including the host name) into separate files, one for each host.</li>
</ul>
<p>Download:</p>
<ul>
<li><a href="http://www.coker.com.au/logtools/logtools-0.13d.tgz">logtools-0.13d.tgz</a> &#8211; made it compile with GCC 4.3.</li>
<li><a href="http://www.coker.com.au/logtools/logtools-0.13c.tgz">logtools-0.13c.tgz</a> &#8211; minor documentation improvements and made it compile with recent GCC.</li>
<li><a href="http://www.coker.com.au/logtools/logtools-0.13a.tgz">logtools-0.13a.tgz</a> &#8211; made clfdomainsplit work correctly with URLs that specify the port.</li>
<li><a href="http://www.coker.com.au/logtools/logtools-0.13.tgz">logtools-0.13.tgz</a> &#8211; compiles with GCC 3.x.</li>
<li><a href="http://www.coker.com.au/logtools/logtools-0.12b.tgz">logtools-0.12b.tgz</a> &#8211; minor improvement to man pages.</li>
<li><a href="http://www.coker.com.au/logtools/logtools-0.12a.tgz">logtools-0.12a.tgz</a></li>
<li><a href="http://www.coker.com.au/logtools/logtools-0.11.tgz">logtools-0.11.tgz</a></li>
<li><a href="http://www.coker.com.au/logtools/logtools-0.10.tgz">logtools-0.10.tgz</a></li>
<li><a href="http://www.coker.com.au/logtools/logtools-0.08.tgz">logtools-0.08.tgz</a></li>
<li><a href="http://www.coker.com.au/logtools/logtools-0.07.tgz">logtools-0.07.tgz</a></li>
<li><a href="http://www.coker.com.au/logtools/logtools-0.06.tgz">logtools-0.06.tgz</a></li>
<li><a href="http://www.coker.com.au/logtools/logtools-0.05.tgz">logtools-0.05.tgz</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://doc.coker.com.au/projects/logtools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maildir Bulletin</title>
		<link>http://doc.coker.com.au/projects/maildir-bulletin/</link>
		<comments>http://doc.coker.com.au/projects/maildir-bulletin/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 02:57:24 +0000</pubDate>
		<dc:creator>etbe</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://doc.coker.com.au/?p=28</guid>
		<description><![CDATA[This program is designed to deliver bulletin messages to thousands of users on a system. If you want to deliver mail to a large number of people to be read through POP or a local email program (such as mutt) then the traditional approach has been to setup an alias to map to all the [...]]]></description>
			<content:encoded><![CDATA[<p>This program is designed to deliver bulletin messages to thousands of users on a system. If you want to deliver mail to a large number of people to be read through POP or a local email program (such as mutt) then the traditional approach has been to setup an alias to map to all the users. The problem with this is that mail delivery is very slow and even delivering to 1000 users on a fast machine can take a significant amount of time and system resources. Also if the message is large then you use a lot of disk space.</p>
<p>This program solves that problem by creating a single file with the message data and creating links to it from the ~/Maildir/new directory of every user who is in the group (it delivers mail based on Unix groups). This is fast (can deliver a bulletin to 30000 users in minutes on a slow machine), saves disk space, works with all Maildir client software, and makes it very easy to undeliver or modify a bulletin.</p>
<p>Download links:</p>
<ul>
<li><a href="http://www.coker.com.au/maildir-bulletin/maildir-bulletin-0.69.tgz">maildir-bulletin-0.69.tgz</a> &#8211; version 0.69 &#8211; fixed some Debian packaging bugs, included this web page URL in the man pages, and merged patches to make it build with GCC 4.3.</li>
<li><a href="http://www.coker.com.au/maildir-bulletin/maildir-bulletin-0.67.tgz">maildir-bulletin-0.67.tgz</a> &#8211; version 0.67 &#8211; fixed more minor warnings and compile errors with recent GCC versions.</li>
<li><a href="http://www.coker.com.au/maildir-bulletin/maildir-bulletin-0.65.tgz">maildir-bulletin-0.65.tgz</a> &#8211; version 0.65 &#8211; fixed some minor warnings and a compile error.</li>
<li><a href="http://www.coker.com.au/maildir-bulletin/maildir-bulletin-0.63.tgz">maildir-bulletin-0.63.tgz</a> &#8211; version 0.63 &#8211; fixed a minor bug in displaying errors and documented ALLOWEDSENDERS properly.</li>
<li><a href="http://www.coker.com.au/maildir-bulletin/maildir-bulletin-0.62.tgz">maildir-bulletin-0.62.tgz</a> &#8211; version 0.62 &#8211; now with autoconf.</li>
<li><a href="http://www.coker.com.au/maildir-bulletin/maildir-bulletin-0.61.tgz">maildir-bulletin-0.61.tgz</a> &#8211; version 0.61.</li>
<li><a href="http://www.coker.com.au/maildir-bulletin/maildir-bulletin-0.60.tgz">maildir-bulletin-0.60.tgz</a> &#8211; version 0.60.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://doc.coker.com.au/projects/maildir-bulletin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

