The full context for this is just too shonky so it’s omitted here. FAM is a file monitoring system from SGI that some Linux distros link their courier-imapd
against (the SGI OSS pages for it needs some love, it’s seemingly abandoned). The ‘drop-in’ FAM replacement, gamin, doesn’t provide enough FAMness to fly:
Nov 7 14:03:45 localhost imapd: Failed to connect to socket /tmp/fam--
Nov 7 14:03:45 localhost imapd: Failed to create cache file: maildirwatch (lemon@example.com)
Nov 7 14:03:45 localhost imapd: Error: Input/output error
So we’re left with either rebuilding Courier to not link against it (this is a non-starter, no SRPMs available for this version and I can’t wholesale replace it owing to “control panel” sillyness), or installing FAM itself. For which there are no RPMs, and the source RPMs break owing to a g++
change that occurred ages ago.
/usr/lib/gcc/i386-redhat-linux/4.1.1/../../../../include/c++/4.1.1/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <x> header for the </x><x .h> header for C++ includes, or <iostream> instead of the deprecated header </iostream><iostream .h>. To disable this warning use -Wno-deprecated. ../include/BTree.h:240: error: expected constructor, destructor, or type conversion before 'BTree' ../include/BTree.h:352: error: expected constructor, destructor, or type conversion before 'BTree' ../include/BTree.h:408: error: expected constructor, destructor, or type conversion before 'BTree' ../include/BTree.h:503: error: expected constructor, destructor, or type conversion before 'BTree' ../include/BTree.h:561: error: expected constructor, destructor, or type conversion before 'BTree' ../include/BTree.h:591: error: expected constructor, destructor, or type conversion before 'BTree' make[2]: *** [Client.lo] Error 1 </iostream></x>
Struggling to remember C++ resulted in this patch:
--- fam-2.6.10.orig/fam/SmallTable.h 2003-04-15 05:21:43.000000000 +0100 +++ fam-2.6.10/fam/SmallTable.h 2007-11-07 13:50:14.000000000 +0000 @@ -98,7 +98,7 @@ } template <class Tkey, class Tvalue> -SmallTable<Tkey, Tvalue>::Closure +typename SmallTable<Tkey, Tvalue>::Closure SmallTable<Tkey, Tvalue>::position(const Tkey& key) const { unsigned l = 0, r = n; Only in fam-2.6.10/: fam-2.6.10.tar.gz diff -ur fam-2.6.10.orig/include/BTree.h fam-2.6.10/include/BTree.h --- fam-2.6.10.orig/include/BTree.h 2003-04-15 05:21:19.000000000 +0100 +++ fam-2.6.10/include/BTree.h 2007-11-07 13:55:15.000000000 +0000 @@ -236,7 +236,7 @@ // to the right and returns them. template <class Key, class Value> -BTree<Key, Value>::Closure +typename BTree<Key, Value>::Closure BTree<Key, Value>::Node::remove(unsigned j) { Key k = key[j]; @@ -348,7 +348,7 @@ } template <class Key, class Value> -BTree<Key, Value>::Closure +typename BTree<Key, Value>::Closure BTree<Key, Value>::Node::next(const Key& pred) const { if (!this) @@ -404,7 +404,7 @@ // nodes as necessary on the way back. template <class Key, class Value> -BTree<Key, Value>::Closure +typename BTree<Key, Value>::Closure BTree<Key, Value>::insert(Node *p, const Key& key, const Value& value) { if (!p) return Closure(key, value, NULL); @@ -499,7 +499,7 @@ // Returns UNDER if node p is too small afterward, OK otherwise. template <class Key, class Value> -BTree<Key, Value>::Status +typename BTree<Key, Value>::Status BTree<Key, Value>::underflow(Node *p, unsigned i) { assert(p); @@ -557,7 +557,7 @@ template <class Key, class Value> -BTree<Key, Value>::Closure +typename BTree<Key, Value>::Closure BTree<Key, Value>::remove_rightmost(Node *p) { int i = p->n; @@ -587,7 +587,7 @@ // back up. template <class Key, class Value> -BTree<Key, Value>::Status +typename BTree<Key, Value>::Status BTree<Key, Value>::remove(Node *p, const Key& key) { if (!p) diff -ur fam-2.6.10.orig/libfam/Client.c++ fam-2.6.10/libfam/Client.c++ --- fam-2.6.10.orig/libfam/Client.c++ 2003-04-15 05:21:25.000000000 +0100 +++ fam-2.6.10/libfam/Client.c++ 2007-11-07 13:24:28.000000000 +0000 @@ -34,7 +34,7 @@ #include <syslog.h> #include <errno.h> -#include <iostream.h> +#include <iostream> #include "fam.h" #include "Client.h"
Well, that was fun.
Lousy licensing click throughs:
[root@two /usr/ports-work/distfiles ] 0 # curl --referer http://www.eyesbeyond.com/freebsddom/java/JDK15JRLConfirm.html -v -d"patchset=6" -d "accept=ACCEPT" -O http://www.eyesbeyond.com/freebsddom/java/download_patchset15_jrl.cgi
Anecdotally people recommend not using libpthread
with Ruby on FreeBSD. I’ve duly always told the port to not use it, but ldd
has always shown that it’s linked. autoconf insists on configuring the build with it, despite the
--disable-pthread
flag.
My long time response to this was *shrug* – Ruby seems fine. Until a weird production problem, unrepeatable on stage, where certain Rails stacks (those running in development mode to expose some aspect of the Globalize plugin to translators) crashed badly, with SIGBUS or SIGILL.
I came across this script:
$ ruby -e 'def d(x); p x; d x+1; end; d 0'
which exposes the problem perfectly. With a pthread
’d Ruby it dumps core, with a no-thread Ruby it gracefully raises stack level too deep (SystemStackError)
Update:
I discussed this on the FreeBSD ports list, discussion here.
Seems like the problem is on its way out.
Recent articles
- Docker, SELinux, Consul, Registrator
(Wednesday, 04. 29. 2015 – No Comments) - ZFS performance on FreeBSD
(Tuesday, 09. 16. 2014 – No Comments) - Controlling Exim SMTP behaviour from Dovecot password data
(Wednesday, 09. 3. 2014 – No Comments) - Heartbleed OpenSSL vulnerability
(Tuesday, 04. 8. 2014 – No Comments)
Archives
- April 2015
- September 2014
- April 2014
- September 2013
- August 2013
- March 2013
- April 2012
- March 2012
- September 2011
- June 2011
- February 2011
- January 2011
- October 2010
- September 2010
- February 2010
- September 2009
- August 2009
- January 2009
- September 2008
- August 2008
- July 2008
- May 2008
- April 2008
- February 2008
- January 2008
- November 2007
- October 2007
- September 2007
- August 2007
- December 2006
- November 2006
- August 2006
- June 2006
- May 2006
- March 2006
- February 2006
- January 2006
- December 2005
- November 2005
- October 2005