Solaris Mailserver

From JasonAntmanWiki
Jump to: navigation, search


Contents

Introduction

My old mail server was a Gateway PII 350MHz desktop with 128MB RAM, an ancient 40 GB HDD, and had been running continuously since its' manufacture in 1998. After almost eight years, I figured it was a time for a change - I'd just gotten two new SunBlade 150 workstations (550 MHz Sparc IIi 64-bit, 640MB RAM, etc.) and figured it would be a good exercise in learning Solaris to setup my new mail server on that machine. The packages from Blastwave.org as well as their pkg-get utility were very helpful, though I did need to do some custom work.

I know it's a bit wordy, but I wrote up the following text in realtime as I did the work, so for anyone else attempting it, this should be helpful. As I mention it a few times, the hostname of this new machine is "MAIL1".

WARNING: This article follows my full process of installation and configuration. In a number of instances, my original attempts did not work. Please read the full extent of each section before using it as a basis for your work, as I have left in the commentary on methods that ultimately failed.

Part I: Internal Configuration

After setting up my shells and the rest of my environment, as well as my .emacs, I installed pkg-get from BlastWave.org, which probably has the best set of F/OSS packages for Solaris of anything that I could find. First up was emacs, then a few of the basic utilities.

I also took the time to add the blastwave bin, sbin, and man directories (located under /opt/csw) to the appropriate paths.

The Plan

Install a good mailserver on the new Solaris box. Use Postfix as my MTA with Procmail, SpamAssassin (with Pyzor and Razor). Setup Dovecot for IMAP. In order to get my mail from my ISP's server, I'll also need Fetchmail with support for SASL. Finally, I want SMTP and IMAP over SSL for external use.

Dovecot (IMAP Server)

pkg-get dovecot

Follow Dovecot configuration info. Note that most of the default dovecot-example.conf is commented out. You will need to remove the comments for the appropriate lines. You'll also need to do a good amount of configuration by hand. Also, when generating certificates for SSL, you'll need to modify mkcerts.sh a bit.

Make sure to setup logging and specify a syslog facility.

The Blastwave package uses SMF, so disregard the init files and the PID file, just use svcadm as usual.

It may be helpful for debugging to run the dovecot binary (/opt/csw/sbin/dovecot) directly from the CLI, as it will spit any errors there.

When you finally get Dovecot running, be aware that you may have login problems. I couldn't login, but looking in /var/log/syslog (despite setting mail.* to log to /var/log/maillog in the syslog config file, it kept logging there) I found that Dovecot by default will only allow login from UIDs 500 and higher and GIDs 100 and higher. When I created my user account, it was created with UID 100 and GID 10 (staff). So, I edited dovecot.conf (copied from dovecot-example.conf) around line 352 to have the right minimum UID and GID values.

After this, Dovecot worked perfectly, even with SSL which worked out of the box after setting up the config files and certificates.

Postfix (SMTP Server / MTA)

Remove sendmail: pkgrm SUNWsndmu SUNWsndmr

Install postfix (pkg-get -i postfix) and procmail (pkg-get -i procmail).

Now, time for the hard part - configuring postfix. I opted to open both the main.cf on the new box and the corresponding file on the old box in two Emacs windows, and manually edit - I'll admit that the old config files were written about 5 years ago, and I didn't know as much about Postfix as I do now.

Next, I just did a quick review of settings in Webmin.

I really wanted to get Postfix running under Solaris 10 SMF, and was able to find a manifest from Ben Rockwood whose blog I read daily. A few modifications, and I was able to drop it in the /opt/csw/var/svc/manifest/network directory, just run svccfg import cswpostfix.xml, and magically it was running under SMF.

Now, to get it actually *working*. Step one was to figure out logging. Despite adding the line,

mail.*                                          /var/log/maillog

to my /etc/syslog.conf, all mail logging was still going to /var/log/syslog. After reading the man page for syslog.conf, I stumbled upon a piece of pure stupidity on Sun's part. The Solaris syslog supports wildcards only for facility, not level. i.e. I can use "*.crit" to send ALL critical messages somewhere, but I can't use "mail.*" to send ALL mail-related log messages somewhere. So, back to syslog.conf adding almost a dozen lines for every possible level of the mail facility. Now mail logging works right, and I can attempt to further debug Postfix.

At this point, it seems like things are moving along. I've installed Dovecot and copied my Maildir to the new server. I setup Dovecot for SSL/TLS, and I can login from my laptop and see my mail. I've setup Postfix for TLS, it seems to be listening, and I've specified Procmail as the mailbox command.

Attempting to test transport (sending a message from Thunderbird on my laptop, through the new MAIL1 server, to my local maildir there) shows an auth error - seems from the client side like it isn't accepting a password. Sure enough, in /var/log/maillog, the problem is because I enabled SASL auth. At this point, I've got some errors. My logs are looking a bit like:

Dec 30 14:44:30 MAIL1 postfix/smtpd[7186]: [ID 947731 mail.warning] warning: antmanLaptop.jasonantman.com[192.168.0.21]: SASL PLAIN authentication failed
Dec 30 14:44:30 MAIL1 postfix/smtpd[7186]: [ID 947731 mail.warning] warning:
SASL authentication problem: unable to open Berkeley db /opt/csw/etc/sasldb2:
Permission denied
Dec 30 14:44:30 MAIL1 last message repeated 5 times
Dec 30 14:44:30 MAIL1 postfix/smtpd[7186]: [ID 947731 mail.warning] warning:
antmanLaptop.jasonantman.com[192.168.0.21]: SASL LOGIN authentication failed
Dec 30 14:44:30 MAIL1 postfix/smtpd[7186]: [ID 947731 mail.warning] warning:
SASL authentication problem: unable to open Berkeley db /opt/csw/etc/sasldb2:
Permission denied
Dec 30 14:44:30 MAIL1 last message repeated 4 times
Dec 30 14:44:30 MAIL1 postfix/smtpd[7186]: [ID 947731 mail.warning] warning:
SASL authentication failure: Password verification failed
Dec 30 14:44:30 MAIL1 postfix/smtpd[7186]: [ID 947731 mail.warning] warning:
antmanLaptop.jasonantman.com[192.168.0.21]: SASL PLAIN authentication failed
Dec 30 14:44:30 MAIL1 postfix/smtpd[7186]: [ID 947731 mail.warning] warning:
SASL authentication problem: unable to open Berkeley db /opt/csw/etc/sasldb2:
Permission denied
Dec 30 14:44:30 MAIL1 last message repeated 5 times
Dec 30 14:44:30 MAIL1 postfix/smtpd[7186]: [ID 947731 mail.warning] warning:
antmanLaptop.jasonantman.com[192.168.0.21]: SASL LOGIN authentication failed
Dec 30 14:44:30 MAIL1 postfix/smtpd[7186]: [ID 947731 mail.warning] warning:
SASL authentication problem: unable to open Berkeley db /opt/csw/etc/sasldb2:
Permission denied
Dec 30 14:44:30 MAIL1 last message repeated 4 times
Dec 30 14:44:30 MAIL1 postfix/smtpd[7186]: [ID 947731 mail.warning] warning:
SASL authentication failure: Password verification failed
Dec 30 14:44:30 MAIL1 postfix/smtpd[7186]: [ID 947731 mail.warning] warning:
antmanLaptop.jasonantman.com[192.168.0.21]: SASL PLAIN authentication failed
Dec 30 14:44:30 MAIL1 postfix/smtpd[7186]: [ID 947731 mail.warning] warning:
SASL authentication problem: unable to open Berkeley db /opt/csw/etc/sasldb2:
Permission denied
Dec 30 14:44:30 MAIL1 last message repeated 5 times
Dec 30 14:44:30 MAIL1 postfix/smtpd[7186]: [ID 947731 mail.warning] warning:
antmanLaptop.jasonantman.com[192.168.0.21]: SASL LOGIN authentication failed
Dec 30 14:44:32 MAIL1 postfix/smtpd[7186]: [ID 197553 mail.info] lost
connection after AUTH from antmanLaptop.jasonantman.com[192.168.0.21]
Dec 30 14:44:32 MAIL1 postfix/smtpd[7186]: [ID 197553 mail.info] disconnect
from antmanLaptop.jasonantman.com[192.168.0.21]
Dec 30 14:44:32 MAIL1 postfix/smtpd[7186]: [ID 197553 mail.info] lost
connection after AUTH from antmanLaptop.jasonantman.com[192.168.0.21]
Dec 30 14:44:32 MAIL1 postfix/smtpd[7186]: [ID 197553 mail.info] disconnect
from antmanLaptop.jasonantman.com[192.168.0.21]

After much Googleing, I decided to give up on SASL for now. I have TLS running, so it was my understanding that this would protect auth credentials as well. I was able to successfully send mail through the host from my laptop. Unfortunately, the outgoing test message showed two problems - one, that I had addressed the mail to jantman@mail1, but it wasn't recognized. I repeated with my default address - jason@jasonantman.com. It was sent from my laptop over SMTP with TLS to MAIL1, and was delivered to my inbox on that machine (viewing through Dovecot/IMAPS). So, local delivery appears to be working. For now, I'm not going to worry about SASL - I just want to get everything working in a preliminary form.

At this point, I can't definitively test SMTP as the server is setup to relay mail for local machines. So, I setup Thunderbird and Wireshark on an offsite machine (running Windows, to boot!) and punched two holes in the firewall for IMAPS and SMTP. I got IMAP sccess perfectly, including a certificate request. I also tried sending a message over SMTP, got the certificate request, and was able to send mail. However, after looking at the packet capture logs, I could see "AUTH PLAIN=" and a string in clear text. A little bit of research, and I found that I could add "smtpd_enforce_tls = yes" to main.cf which would force clients to use TLS, and would force TLS to start before auth. For my purposes, this is fine - and even better, I don't need to worry about SASL for incoming SMTP. On the other hand, this also probably means that I'll have to setup my other LAN boxes to use TLS. But that's something to worry about later - but not too late, as Nagios needs SMTP.

Results so Far

I have Postfix setup and I've defined procmail as my mailbox command, so if I'm getting mail, *theoretically* procmail is working. At this point, the real test for Procmail will be whether SpamAssassin works or not. So my plan is to implement SpamAssassin, get everything internal working, then handle the authentication needed to relay mail externally through Verizon, and then handle Fetchmail for my Verizon account.

Finally, before going online and moving everything over, I'll get mail working from Nagios, everything else internal that needs to send mail (Eventum, everything on the web servers), the Bacula director, and everything else internal. Last, I'll check over the existing mail server config, and verify that all aliases, accounts, etc. are in place.

SpamAssassin

Well, I installed SpamAssassin and configured it in a preliminary fashion (no plugins, no pyzor or razor, etc.) and updated my procmailrc. Sending a test message revealed no Spam headers present.

With some quick thinking about the whole Blastwave software thing, and the installation into /opt/csw/, I went back to /opt/csw/etc/procmailrc (copied from the SpamAssassin wiki) and changed the line

| spamassassin
to
| /opt/csw/bin/spamassassin

Now, I have Spam headers in my mail.

Results of Part I

I'll leave the rest of the SpamAssassin configuration for later, such as Pyzor, Razor, plugins, other rulesets, stats & analysis, etc. for later. I'll also look into moving over my spam definitions from the old system (maybe) and setting up my account's sa-learn script.

Part II - The External World

Getting the new server to talk to the universe...

SASL for Relaying outgoing through ISP (Verizon)

I started up trying to setup SASL to authenticate to external servers. In doing so, I had to add the "smtpd_sasl_auth_enable = yes" line to main.cf. Doing so appears to also enable SASL for clients, so I decided to run with it. The bottom line was that the end of main.cf looked like:

smtpd_recipient_restrictions = permit_sasl_authenticated permit_mynetworks
reject_unauth_destination
smtpd_tls_cert_file = /opt/csw/etc/postfix/mail1.jasonantman.com.crt
smtpd_tls_key_file = /opt/csw/etc/postfix/mail1.jasonantman.com.key.unenc
broken_sasl_auth_clients = yes
smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_application_name = smtpd
smtpd_enforce_tls = yes

# SASL auth for relay to outgoing.verizon.net
smtpd_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

so I just ran: /opt/csw/sbin/saslpasswd2 -c -u `/opt/csw/sbin/postconf -h myhostname` jantman to setup the saslpasswd file, and then in /opt/csw/etc/postfix I created a sasl directory, and added a file called smtpd.conf containing:

# cat smtpd.conf
# custom for MAIL1.jasonantman.com
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5

At this point, SASL is working fine for clients, but my external test mail is returned undeliverable stating:

host outgoing.verizon.net[206.46.232.12] said: 550
    5.7.1 Authentication Required (in reply to MAIL FROM command)

So... Internal is working... now to figure out the External world.

I don't know how I missed this, but a look back at main.cf showed a line containing: smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd.

A quick change to smtp_sasl_password_maps = hash:/opt/csw/etc/postfix/sasl_passwd and yet another svcadm refresh cswpostfix, another test email to one of my external accounts... and wait. Another bounce, same error. I know the user name is right, since I copied it directly from the sasl_passwd file on my old server.

I tried adding smtp_sasl_security_options = noanonymous to main.cf, but still nothing. At this point, it seemed like everything was setup right, but just not working. I telnetted into outgoing.verizon.net on port 25 and gave an EHLO, finding Server ESMTP (Sun Java System Messaging Server 6.2-6.01 (built Apr 3 2006)) and 250-AUTH PLAIN LOGIN 250-AUTH=LOGIN It seems to me, theoretically (according to the Postfix docs) that adding the noanonymous line should have fixed this. Reading through some more docs (specifically this) I realized that I don't think I'd mapped the sasl_passwd file, and the main.cf parameter was calling for hash:. I attempted to run /opt/csw/sbin/postmap hash:/opt/csw/etc/postfix/sasl_passwd but was greeted with postmap: fatal: unsupported map type: hash. Wonderful. I changed the line in main.cf to smtp_sasl_password_maps = /opt/csw/etc/postfix/sasl_passwd and gave it a whirl. Once again, nothing. I also tried mapping it as a dbm file and updating main.cf but nothing.

Finally, after all of this, I decided to break out the heavy artillery.

I setup a mirror port on my switch mirroring all traffic to the new box (MAIL1) to my laptop, fired up Wireshark, and sent a test email. Looking at the traffic, I see that MAIL1 connects to verizon, gives an EHLO, gets the capabilities and auth data back, and goes right to MAIL FROM instead of giving an AUTH. At this point, I get my 550 5.7.1 from Verizon. My guess is that the sasl_passwd file isn't getting read... but there's nothing printed in the log to confirm this.

Running /opt/csw/sbin/postmap -q outgoing.verizon.net sasl_passwd shows the correct output, so the sasl_passwd file is getting mapped correctly.

The Answer to the SASL Problems

Believe it or not, after all of this, the answer was right under my nose. I should have seen it a *lot* earlier when I noticed something wasn't right. I guess I wasn't thinking. I'd added the line smtpd_sasl_auth_enable = yes to main.cf, totally ignoring the "smtpd". Replacing this with "smtp" (the client, as opposed to the daemon) fixed everything. And I didn't even have to use SASL for incoming mail, but oh well.

So, now, at this point, I have mail going out to the external world. The next step is to setup mail coming in from the external world via my ISP (Verizon).

Fetchmail

I disabled fetchmail on my current mailserver and then installed the Blastwave fetchmail package. Back at http://www.blastwave.org/smf/manifests.php I was able to find an SMF manifest for fetchmail. I used wget to grab it to /opt/csw/var/svc/manifest/network and made some changes to it. I removed all of the rc.d links from the rc.d directories, and ran a quick svccfg import cswfetchmail.xml (yes, I renamed it to agree with the rest of the Blastwave software). The most important change that I made, in addition to the naming conventions was changing the exec command to: /opt/csw/bin/fetchmail -s --daemon 60 -K --syslog --fetchmailrc /opt/csw/etc/fetchmailrc

I copied over my old fetchmailrc from the old mailserver, made a few minor changes, and gave it a shot. I did a quick refresh of the service, sent a test message from a remote account on a far-away machine, and waited. It showed up on my old server. So, two problems. First, I disabled polling of the verizon server on the old machine to make sure that wouldn't happen again. Then, I ran a quick svcs | grep fetch and saw that cswfetchmail was in maintenance mode.

In the output of that grep, I saw that the full fmri was svc:/application/cswfetchmail:default, so I ran svcs -l svc:/application/cswfetchmail:default and saw that the service logfile was /var/svc/log/application-cswfetchmail:default.log. I ran a quick "cat" and saw a whole list of errors. The newest related to permissions on fetchmailrc. After changing the perms, Fetchmail was now online.

I was still having some problems, but examining /var/log/maillog revealed a few errors like:

Dec 31 03:11:55 MAIL1 fetchmail[10850]: [ID 690536 mail.error] SMTP error: 530
Must issue a STARTTLS command first

Sure enough, requiring TLS on all Postfix connections was screwing up Fetchmail. Who knows what type of problems it would plague me with when relaying mail internally.

Anyway, I attemped to counter this by bypassing Postfix and just telling Fetchmail to use procmail with mda "/opt/csw/bin/procmail -d %T". My mail wasn't showing up, but I saw that wonderful New mail in /var/mail/jantman message. A quick correction of the mda command in fetchmailrc to mda "/opt/csw/bin/procmail -d %T DEFAULT=$HOME/Maildir/ MAILDIR=$HOME/Maildir" and... nothing.

The bottom line - I commented out smtpd_enforce_tls = yes from /opt/csw/etc/postfix/main.cf and removed the "mda" line from fetchmailrc. Now I have fetchmail working perfectly, delivering the mail through postfix, and I don't have to worry about TLS on all of my LAN machines. I just have to be smart enough to use TLS when connecting remotely.

The Final Switch-Over

At this point I also moved over all mail from the old server (my entire Maildir), made sure that fetchmail was stopped on that box, and disabled Dovecot on it. I've been working on this for the past 10 hours straight, and it's 4 AM here. So, tomorrow, I start worrying about the "internal" world, SpamAssassin, my Treo, etc.

As a result, at this point, I've moved all mail over from the old machine, and HAVE GONE LIVE. There are still a few things to figure out, but overall, I'm sending and receiving mail.

Part III - The rest of the Internal world

The next major part was making sure that mail could be relayed from hosts on the LAN through the new server, most importantly for local delivery. This only entailed SSHing into all of my servers, changing the IP address in /etc/postfix/main.cf (my servers are all assigned static IPs so that nothing is dependent on DNS) and issuing a quick service reload postfix (all SuSE boxen).

Part IV - Server Maintenance

I won't go into what I did in terms of server maintenance here, but I setup Bacula FD (File Daemon - "client") on the machine, as well as a number of Nagios check scripts (after creating a user and home directory for Nagios). I also added a few SpamAssassin plugins, did some additional configuration, setup a script running sa-learn on certain mailboxes of mine, and setup log analysis and statistics for SpamAssassin, Postfix, and Dovecot. I also setup log rotation on the system.

XML SMF Manifests

The following are my modified versions of the SMF Manifests that I'm using:

Dovecot

/opt/csw/var/svc/manifest/network/dovecot.xml

<?xml version='1.0'?>
 <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<!--

        Alex Moore 2006-09-29
        Service manifest for Dovecot
 -->

 <service_bundle type='manifest' name='CSWdovecot:dovecot'>

 <service
         name='network/cswdovecot'
         type='service'
         version='1'>
         <create_default_instance enabled='false' />
         <single_instance />


         <dependency name='fs'
                 grouping='require_all'
                 restart_on='none'
                 type='service'>
                 <service_fmri value='svc:/system/filesystem/local' />
         </dependency>

         <dependency name='net'
                 grouping='require_all'
                 restart_on='none'
                 type='service'>
                 <service_fmri value='svc:/network/loopback' />
         </dependency>

         <exec_method
                 type='method'
                 name='start'
                 exec='/opt/csw/lib/svc/method/svc-dovecot start'
                 timeout_seconds='-1'>
         </exec_method>

         <exec_method
                 type='method'
                 name='stop'
                 exec=':kill'
                 timeout_seconds='-1'>
         </exec_method>

	 <exec_method
                 type='method'
                 name='restart'
                 exec='/opt/csw/lib/svc/method/svc-dovecot restart'
                 timeout_seconds='-1'>
         </exec_method>



 </service>

 </service_bundle>

Postfix

/opt/csw/var/svc/manifest/network/cswpostfix.xml

<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">

<!-- Blastwave.org CSWPostFix Manifest by Jason Antman <jason@jasonantman.com> -->
<!-- Modified from the Postfix Manifest by Ben Rockwood - cuddletech.com -->

<service_bundle type='manifest' name='cswpostfix'>


<service
	name='network/cswpostfix'
	type='service'
	version='1'>

        <create_default_instance enabled='true'/>
        <single_instance/>

        <dependency name='config-file'
                    grouping='require_all'
                    restart_on='none'
                    type='path'>
                <service_fmri value='file:///opt/csw/etc/postfix/main.cf'/>
        </dependency>
        
	<dependency name='loopback'
		    grouping='require_all'
		    restart_on='error'
		    type='service'>
		<service_fmri value='svc:/network/loopback:default'/>
	</dependency>

	<dependency name='physical'
		    grouping='require_all'
		    restart_on='error'
		    type='service'>
		<service_fmri value='svc:/network/physical:default'/>
	</dependency>

	<dependency name='fs-local'
		    grouping='require_all'
		    restart_on='none'
		    type='service'>
		<service_fmri value='svc:/system/filesystem/local'/>
	</dependency>

	<exec_method
		type='method'
		name='start'
		exec='/opt/csw/sbin/postfix -c /opt/csw/etc/postfix/ start'
		timeout_seconds='60' />

	<exec_method
		type='method'
		name='stop'
		exec='/opt/csw/sbin/postfix -c /opt/csw/etc/postfix/ stop'
		timeout_seconds='60' />

	<exec_method
		type='method'
		name='refresh'
		exec='/opt/csw/sbin/postfix -c /opt/csw/etc/postfix/ reload'
		timeout_seconds='60' />

	<stability value='Unstable' />

	<template>
		<common_name>
			<loctext xml:lang='C'>Postfix SMTP Server</loctext>
		</common_name>
		<documentation>
			<manpage title='postfix' section='1' />
			<doc_link name='postfix.org'
				uri='http://www.postfix.org/documentation.html' />
		</documentation>
	</template>
</service>

</service_bundle>

Fetchmail

/opt/csw/var/svc/manifest/network/cswfetchmail.xml

<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<!--
	Put this in /var/svc/manifest/network
	Derek Crudgington, dacrud@gmail.com
	http://hell.jedicoder.net
-->

<service_bundle type='manifest' name='cswfetchmail:default'>

<service
	name='application/cswfetchmail'
	type='service'
	version='1'>

	<create_default_instance enabled='true' />

	<single_instance />

	<dependency
	    name='physical'
	    grouping='require_all'
	    restart_on='restart'
	    type='service'>
		<service_fmri value='svc:/network/physical' />
	</dependency>

	<dependency
	    name='loopback'
	    grouping='require_all'
	    restart_on='restart'
	    type='service'>
		<service_fmri value='svc:/network/loopback' />
	</dependency>

	<exec_method
		type='method'
		name='stop'
		exec='pkill fetchmail'
		timeout_seconds='60' >
	</exec_method>

	<exec_method
		type='method'
		name='start'
		exec='/opt/csw/bin/fetchmail -s --daemon 60 -K --syslog --fetchmailrc /opt/csw/etc/fetchmailrc'
		timeout_seconds='30' >
	</exec_method>

        <exec_method
                type='method'
                name='refresh'
                exec='pkill -HUP fetchmail'
                timeout_seconds='30' >
        </exec_method>


	<property_group
		name='startd'
		type='framework'>
		<propval name='duration' type='astring' value='transient' />
	</property_group>

	<stability value='Unstable' />

	<template>
		<common_name>
			<loctext xml:lang='C'>Fetchmail</loctext>
		</common_name>
		<description>
			<loctext xml:lang='C'>
			snmpd
			</loctext>
		</description>
		<documentation>
			<manpage title='fetchmail' section='5'
				manpath='/usr/local/man' />
		</documentation>
	</template>
</service>

</service_bundle>
Views
Notice - this is a static HTML mirror of a previous MediaWiki installation. Pages are for historical reference only, and are greatly outdated (circa 2009).