The OCSweb package allows users to post messages, read and send e-mail, and keep calendars, all via a web browser. It's friendly, easy to enable over https, and fairly robust. Unfortunately, it only runs on Linux. If you're looking for this functionality on BSD, you're pretty much out of luck.
At one point I needed this functionality on my laptop, so that I could access my e-mail from anywhere in the office, even without ssh on desktops. I could have fought with the package to make it run under Linux mode. Instead, one slow Saturday I decided to port OCSweb to FreeBSD.
Let me start off by saying I know almost nothing about code. I write scary Perl to eliminate tedious jobs, and my C makes seasoned programmers shake their heads. We all start somewhere, though.
I started by downloading the entire OCSweb package from
ftp:ftp.obsidian.co.za. The README informed me that to get an e-mail
reader on a Web site, I needed to use the ocs-base and ocs-email
modules. Fair enough. Hoping I would get very lucky, I tried the
install script. It died, complaining about
A brief reading of
install.pl showed that
pkg/makefile contained the
Make instructions. The
pkg/getversion line seemed Linux-specific,
with no FreeBSD equivalent, so I just commented it out. Similarly, I
$prefix variable from
The install script got a little further, compiling despite complaints
about a deprecated
<malloc.h>. Eventually I came to:
chgrp: no such user
Linux has a "root" group, however, which has no exact equivalent in
FreeBSD. I went through
install.pl, replacing the "root" group with
"wheel," our closest equivalent. While the script finished,
/usr/local/ocs was mostly empty.
Some more hunting through the install script turned up the file
pkg/filelist. This file contained the names of the ocsbase files,
their destinations, their owners, their groups, and their permissions.
It was chock full of
root.root entries, saying that the files would
be owned by root and in the root group. Emacs fixed that in a couple
The install script ran all the way through this time. The last bits concerned me, though.
chgrp: -R: No such file or directory ln: /usr/doc/ocs: No such file or directory chgrp: -R: No such file or directory
install.pl, I found the culprit:
`chgrp $wgrp -R $prefix/ocs`
The code to set
$wgrp doesn't work on FreeBSD. I went to
/usr/local and did
chgrp nogroup -R ocs
thinking that should do the same thing.
I wasn't worried about the docs; I have the original source, the original docs, and the tarball they came in.
Following the install instructions, I added a
entry to my
httpd.conf file so that OCSweb could work and restarted
Now, the ultimate test. I fired up the web browser and pointed it at my laptop. A nice login screen appeared. Victory!
Now, on to ocsemail. Extracting the package, I saw that the install
routine is pretty much the same as ocsbase. I edited
change the "root" group to "wheel," set
pkg/makefile to eliminate the Linux overhead, and replaced
root.root entries with
It installed cleanly, on the first try. I was quite impressed with myself, until I tried to log in. OCSweb gave a nice friendly error:
cannot share-lock cookiejar
And httpd-errors proclaimed:
chown: root: illegal group name
Root group. Who ever heard of a "root" group? (Linux. And SysV, and Solaris... Apparently FreeBSD is the odd one out here.) Muttering atrocities, I broke out the sledgehammer:
% grep -r -i root /usr/local/ocs/* > groupoffenders
I found the offending line in
lib/oio.pl and changed it.
A brief check of the OCSweb mailing list archive told me that the
OCSweb data directory needs read and write permissions for the web
server user (i.e.,
nobody/nogroup). A simple
chmod fixed that. My
login worked now, but when I clicked on the mail link I got:
-- Content-type: text/html Software error: You don't have a user called mail on the server For help, please send mail to the webmaster (email@example.com), giving this error message and the time and date of the error. --
Well, if this is the best OCSWeb can do to stop me, I'm pretty much
set. I used
vipw to copy the entry for nobody to mail, setting the
uid to 25.
Finally, I could log in. OCSmail told me that I had no mail. That's odd, as elm told me that I really ought to be answering any of the thirty or so messages I've deemed important enough to keep. Also, the graphics all showed up as broken links.
Here, Netscape's "view source" function is my friend. I could see why my mailbox appeared to be empty:
<input type=hidden name=omb value="/var/spool/mail/mwlucas">
FreeBSD stores mail under
shotgun approach served well here:
grep -R spool /usr/local/ocs/*
turned up the OCSweb e-mail configuration file,
emailcfg.pl, which I
vaguely remembered from reading the documentation. I found a few
other useful options to set here, such as the path to Fetchmail.
As I guessed, the image problem was Yet Another Permissions Issue (tm, pat. pend).
Moments later, I was calling up my mail on the Web.
Better still, OCSweb can store e-mail in classic "Mbox" format. Mail
is stored under
~home/mail. A simple edit in
mv Mail mail, and Elm and OCSweb now share the same directory; I have an
interoperable e-mail setup no matter where I'm working.
Despite numerous petty headaches, OCSweb is not that difficult to install on FreeBSD. It seems it would be fairly simple to turn into a port. In a future column, we'll do just that.
Now, all that remains is to get the OCSweb designers to put a little red daemon near the penguin in the logo.
Michael W. Lucas
Read more Big Scary Daemons columns.
Discuss this article in the O'Reilly Network Operating Systems.
Return to the BSD DevCenter.
Copyright © 2009 O'Reilly Media, Inc.