I put in some upstream work last summer for MongoDB to support OpenBSD, and
finally found the time to update the port to 3.2.6. Any
feedback/critiques/issues would be very much appreciated!

Caveats
=======

* No more i386 support. I can re-add this if there is demand, but running MongoDB on 32-bit systems is both niche and requires turning off WiredTiger.

* The patch is necessary to work around a OpenBSD quirk that breaks a unit test. With it, all unit tests pass. I haven't run the smoke test suite.

* There is a compilation error with the version of boost from ports, so I switched to the internal copy. I can try to work around this if there is
  demand.

* Several of the MongoDB utilities are now distributed separately as Go
  applications. They aren't included at this point, and may(?) belong in
  a separate port.

Patch
=====

commit 259a5ce12b0fd16b92515ddf29fce6f7c86c6431
Author: Andrew Aldridge <and...@river-openbsd.my.domain>
Date:   Thu Mar 31 11:21:11 2016 -0400

    Upgrade to 3.2.6

diff --git a/Makefile b/Makefile
index 8c03687..9b90aae 100644
--- a/Makefile
+++ b/Makefile
@@ -2,12 +2,12 @@

 PORTROACH =    limitw:1,even

-#atomic_int.h: error "unsupported compiler or platform" on other archs
-ONLY_FOR_ARCHS =       i386 amd64
+# WiredTiger doesn't support i386
+ONLY_FOR_ARCHS =       amd64

 COMMENT =      scalable, high-performance document-oriented database

-DISTNAME =     mongodb-src-r2.6.4
+DISTNAME =     mongodb-src-r3.2.6
 PKGNAME =      ${DISTNAME:S/src-r//}
 REVISION =     0
 CATEGORIES =   databases
@@ -17,43 +17,54 @@ HOMEPAGE =  http://www.mongodb.org/
 # Apache 2.0 + AGPLv3
 PERMIT_PACKAGE_CDROM = Yes

-WANTLIB = boost_filesystem-mt boost_program_options-mt boost_system-mt \
-               boost_thread-mt c execinfo m pcap pcre pcrecpp pthread \
-               stdc++ v8 yaml-cpp
+WANTLIB =      c execinfo kvm m pcap pcre pcrecpp pthread \
+               estdc++ yaml-cpp z

 MASTER_SITES = http://downloads.mongodb.org/src/

-MODULES =      devel/scons
+MODULES =      gcc4 devel/scons
+ALL_TARGET =   core tools
+MODSCONS_ENV = CC="egcc" \
+               CXX="eg++" \
+               CCFLAGS="${CFLAGS}" \
+               CXXFLAGS="${CXXFLAGS}" \
+               LINKFLAGS="${LDFLAGS}" \
+               CPPPATH="${LOCALBASE}/include \
+               LIBPATH="${LOCALBASE}/lib
 MODSCONS_FLAGS = --prefix="${PREFIX}" \
-                --cpppath="${LOCALBASE}/include/nspr" \
-                --extralib="pcrecpp" \
-                --usev8 \
-                --sharedclient \
-                --full \
+                --opt=on \
+                --allocator=system \
                 --use-system-pcre \
-                --use-system-boost \
-                --use-system-v8 \
-                --use-system-yaml
+                --use-system-yaml \
+                --use-system-zlib \
+                -j${MAKE_JOBS}

 MAKE_ENV +=    HOME="${HOME}" \
                TERM="${TERM}" \
-               CXXFLAGS="$(CXXFLAGS)" \
-               LIBmongoclient_VERSION="${LIBmongoclient_VERSION}"
-LIB_DEPENDS =  devel/boost \
-               devel/libexecinfo \
+               CXXFLAGS="$(CXXFLAGS)"
+ALL_TARGET =   core tools
+LIB_DEPENDS =  devel/libexecinfo \
                devel/pcre \
                devel/yaml-cpp \
-               lang/libv8
+               lang/gcc/4.9,-libs
+TEST_DEPENDS = lang/python/2.7 \
+               devel/py-virtualenv \
+               textproc/py-yaml \
+               databases/py-mongo
+
+do-install:
+       ${SETENV} ${MAKE_ENV} ${MODSCONS_BIN} -C ${WRKSRC} \
+               ${MODSCONS_ENV} ${MODSCONS_FLAGS} ${INSTALL_TARGET}
+

 post-install:
        ${INSTALL_DATA_DIR} ${PREFIX}/share/examples/mongodb
        ${INSTALL_DATA} ${FILESDIR}/mongodb.conf \
            ${PREFIX}/share/examples/mongodb

-# Regression tests require at least 256 file descriptors and ~700MB
 do-test:
        @${SETENV} ${MAKE_ENV} ${MODSCONS_BIN} -C ${WRKSRC} \
-           ${MODSCONS_ENV} ${MODSCONS_FLAGS} test && \
-           ${WRKSRC}/test --dbpath ${WRKSRC}/unittest
+           ${MODSCONS_ENV} ${MODSCONS_FLAGS} unittests
+       cd ${WRKSRC} && python2.7 buildscripts/resmoke.py --suites=unittests

 .include <bsd.port.mk>
diff --git a/distinfo b/distinfo
index 2bf23a9..1139d2f 100644
--- a/distinfo
+++ b/distinfo
@@ -1,2 +1,2 @@
-SHA256 (mongodb-src-r2.6.4.tar.gz) = B1QRpWD123QHAyuWLrtdoWoMypNuqCp9JkOUtNjLmcA=
-SIZE (mongodb-src-r2.6.4.tar.gz) = 14491215
+SHA256 (mongodb-src-r3.2.6.tar.gz) = BBWptQP2LkDSuof1VbVTdXoU+sKB0dalg9jYgLhyCSE=
+SIZE (mongodb-src-r3.2.6.tar.gz) = 29750170
diff --git a/files/mongodb.conf b/files/mongodb.conf
index 004a41e..fb7703d 100644
--- a/files/mongodb.conf
+++ b/files/mongodb.conf
@@ -1,23 +1,20 @@
 # $OpenBSD: mongodb.conf,v 1.1.1.1 2011/06/02 00:26:32 fgsch Exp $

-# Sample configuration. See mongod --help for more information.
-#
-# Note: To disable flag parameters comment them out or remove the line.
+# Sample configuration. See
+#   https://docs.mongodb.org/manual/administration/configuration/
+# for details.

-# Location of the database files.
-dbpath = /var/mongodb/data
-
-# Specific IP address that mongod will listen on.
-bind_ip = 127.0.0.1
-
-# Full filename path to where log messages will be written.
-logpath = /var/log/mongodb/mongodb.log
-
-# Append to the existing log file
-logappend =
-
-# Run in the background. Output will be redirected to logpath.
-fork =
-
-# Enable simple read-only REST interface
-rest =
+processManagement:
+  fork: true
+net:
+  # Only listen on the local network interface. Change this only if you
+  # need a public-facing instance and have turned on authorization.
+  bindIp: 127.0.0.1
+storage:
+  dbPath: /var/mongodb/data
+  journal:
+    enabled: true
+systemLog:
+  destination: file
+  path: /var/log/mongodb/mongodb.log
+  logAppend: true
diff --git a/patches/patch-SConstruct b/patches/patch-SConstruct
deleted file mode 100644
index aa4c381..0000000
--- a/patches/patch-SConstruct
+++ /dev/null
@@ -1,48 +0,0 @@
-$OpenBSD: patch-SConstruct,v 1.5 2014/12/10 19:59:29 dcoppa Exp $
-
-Fixup detection of yaml-cpp system library
-https://github.com/mongodb/mongo/commit/44b0e3591839525a0c951319540488814e5c25fd
-
---- SConstruct.orig    Fri Aug  8 15:13:51 2014
-+++ SConstruct Wed Dec 10 09:28:50 2014
-@@ -814,7 +814,6 @@ if nix:
- # -Winvalid-pch Warn if a precompiled header (see Precompiled Headers) is found in the search path but can't be used.
-     env.Append( CCFLAGS=["-fPIC",
-                          "-fno-strict-aliasing",
--                         "-ggdb",
-                          "-pthread",
-                          "-Wall",
-                          "-Wsign-compare",
-@@ -828,6 +827,7 @@ if nix:
-
-     env.Append( CPPDEFINES=["_FILE_OFFSET_BITS=64"] )
- env.Append( CXXFLAGS=["-Wnon-virtual-dtor", "-Woverloaded-virtual"] )
-+    env.Append( CXXFLAGS=os.environ['CXXFLAGS'] )
-     env.Append( LINKFLAGS=["-fPIC", "-pthread"] )
-
- # SERVER-9761: Ensure early detection of missing symbols in dependent libraries at program
-@@ -859,14 +859,9 @@ if nix:
-         env.Append( CPPDEFINES=["MONGO_GCOV"] )
-         env.Append( LINKFLAGS=" -fprofile-arcs -ftest-coverage " )
-
--    if optBuild:
--        env.Append( CCFLAGS=["-O3"] )
--    else:
--        env.Append( CCFLAGS=["-O0"] )
--
-     if debugBuild:
-         if not optBuild:
--            env.Append( CCFLAGS=["-fstack-protector"] )
-+            env.Append( CCFLAGS=["-fstack-protector", "-ggdb"] )
-             env.Append( LINKFLAGS=["-fstack-protector"] )
-             env.Append( SHLINKFLAGS=["-fstack-protector"] )
-         env['ENV']['GLIBCXX_FORCE_NEW'] = 1; # play nice with valgrind
-@@ -1352,7 +1347,7 @@ def doConfigure(myenv):
-         conf.FindSysLibDep("stemmer", ["stemmer"])
-
-     if use_system_version_of_library("yaml"):
--        conf.FindSysLibDep("yaml", ["yaml"])
-+        conf.FindSysLibDep("yaml", ["yaml-cpp"])
-
-     if use_system_version_of_library("boost"):
- if not conf.CheckCXXHeader( "boost/filesystem/operations.hpp" ): diff --git a/patches/patch-src_mongo_SConscript b/patches/patch-src_mongo_SConscript
deleted file mode 100644
index 5d006f1..0000000
--- a/patches/patch-src_mongo_SConscript
+++ /dev/null
@@ -1,12 +0,0 @@
-$OpenBSD: patch-src_mongo_SConscript,v 1.2 2014/09/16 17:28:07 jasper Exp $
---- src/mongo/SConscript.orig  Fri Aug  8 22:13:51 2014
-+++ src/mongo/SConscript       Tue Sep 16 16:08:02 2014
-@@ -1163,7 +1163,7 @@ def installBinary( e, name ):
-     if enforce_glibc:
-         e.AddPostAction( name, checkGlibc )
-
--    if (solaris or linux) and (not has_option("nostrip")):
-+    if not has_option("nostrip"):
- name = e.Command('stripped/%s' % name, name, Copy('$TARGET', '$SOURCE'))[0]
-         e.AddPostAction(name, 'strip $TARGET')
-
diff --git a/patches/patch-src_mongo_platform_random_cpp b/patches/patch-src_mongo_platform_random_cpp
deleted file mode 100644
index c3e0f34..0000000
--- a/patches/patch-src_mongo_platform_random_cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-$OpenBSD: patch-src_mongo_platform_random_cpp,v 1.1 2013/12/10 17:30:41 joshe Exp $
---- src/mongo/platform/random.cpp.orig Thu Oct 17 11:37:56 2013
-+++ src/mongo/platform/random.cpp      Mon Oct 28 20:21:29 2013
-@@ -138,6 +138,21 @@ namespace mongo {
-         return new InputStreamSecureRandom( "/dev/urandom" );
-     }
-
-+#elif defined(__OpenBSD__)
-+
-+    class ARC4SecureRandom : public SecureRandom {
-+    public:
-+        int64_t nextInt64() {
-+            int64_t n;
-+            arc4random_buf(&n, sizeof(n));
-+            return n;
-+        }
-+    };
-+
-+    SecureRandom* SecureRandom::create() {
-+        return new ARC4SecureRandom();
-+    }
-+
- #else
-     class SRandSecureRandom : public SecureRandom {
-     public:
diff --git a/patches/patch-src_mongo_shell_linenoise_utf8_h b/patches/patch-src_mongo_shell_linenoise_utf8_h
deleted file mode 100644
index 7a74852..0000000
--- a/patches/patch-src_mongo_shell_linenoise_utf8_h
+++ /dev/null
@@ -1,17 +0,0 @@
-$OpenBSD: patch-src_mongo_shell_linenoise_utf8_h,v 1.1 2015/06/29 08:13:50 jasper Exp $
-
-From 2d5d662a834fab72ee1431e3bb0a5ed5a0826177 Mon Sep 17 00:00:00 2001
-From: Mark Benvenuto <mark.benven...@mongodb.com>
-Date: Tue, 19 Aug 2014 15:07:11 -0400
-Subject: [PATCH] SERVER-8994: Boost 1.56 build fixes
-
---- src/mongo/shell/linenoise_utf8.h.orig      Sun Jun 28 22:15:05 2015
-+++ src/mongo/shell/linenoise_utf8.h   Sun Jun 28 22:15:18 2015
-@@ -16,6 +16,7 @@
-  */
-
- #include <boost/smart_ptr/scoped_array.hpp>
-+#include <algorithm>
- #include <string.h>
-
- namespace linenoise_utf8 {
diff --git a/patches/patch-src_mongo_util_signal_handlers_synchronous_cpp b/patches/patch-src_mongo_util_signal_handlers_synchronous_cpp
new file mode 100644
index 0000000..6d01e35
--- /dev/null
+++ b/patches/patch-src_mongo_util_signal_handlers_synchronous_cpp
@@ -0,0 +1,12 @@
+$OpenBSD$
+--- src/mongo/util/signal_handlers_synchronous.cpp.orig Mon Apr 25 21:44:42 2016 ++++ src/mongo/util/signal_handlers_synchronous.cpp Mon Apr 25 21:45:18 2016 +@@ -266,7 +266,7 @@ void abruptQuitWithAddrSignal(int signalNum, siginfo_t
+     MallocFreeOStreamGuard lk{};
+
+ const char* action = (signalNum == SIGSEGV || signalNum == SIGBUS) ? "access" : "operation"; +- mallocFreeOStream << "Invalid " << action << " at address: " << siginfo->si_addr; ++ mallocFreeOStream << "Invalid " << action << " at address: " << reinterpret_cast<void*>(siginfo->si_addr);
+
+ // Writing out message to log separate from the stack trace so at least that much gets + // logged. This is important because we may get here by jumping to an invalid address which diff --git a/patches/patch-src_third_party_s2_base_port_h b/patches/patch-src_third_party_s2_base_port_h
deleted file mode 100644
index 501a266..0000000
--- a/patches/patch-src_third_party_s2_base_port_h
+++ /dev/null
@@ -1,30 +0,0 @@
-$OpenBSD: patch-src_third_party_s2_base_port_h,v 1.2 2015/05/01 16:51:24 ajacoutot Exp $
---- src/third_party/s2/base/port.h.orig        Thu Oct 17 11:37:56 2013
-+++ src/third_party/s2/base/port.h     Mon Oct 28 20:57:58 2013
-@@ -100,6 +100,14 @@ typedef uint16_t u_int16_t;
- #define __LITTLE_ENDIAN LITTLE_ENDIAN
- #define __BIG_ENDIAN BIG_ENDIAN
-
-+#elif defined __OpenBSD__
-+
-+#include <endian.h>
-+/* Let's try and follow the Linux convention */
-+#define __BYTE_ORDER  BYTE_ORDER
-+#define __LITTLE_ENDIAN LITTLE_ENDIAN
-+#define __BIG_ENDIAN BIG_ENDIAN
-+
- #endif
-
- #if defined __sunos__ || defined __freebsd__
-@@ -134,6 +142,11 @@ typedef uint16_t u_int16_t;
- #define bswap_16(x) bswap16(x)
- #define bswap_32(x) bswap32(x)
- #define bswap_64(x) bswap64(x)
-+#elif defined __OpenBSD__
-+#include <endian.h>
-+#define bswap_16(x) swap16(x)
-+#define bswap_32(x) swap32(x)
-+#define bswap_64(x) swap64(x)
- #else
- #include <byteswap.h>
- #endif
diff --git a/pkg/PLIST b/pkg/PLIST
index 7c6c094..906d75e 100644
--- a/pkg/PLIST
+++ b/pkg/PLIST
@@ -1,20 +1,11 @@
 @comment $OpenBSD: PLIST,v 1.5 2014/09/16 17:28:07 jasper Exp $
 @newgroup _mongodb:670
@newuser _mongodb:670:670:daemon:MongoDB Account:/nonexistent:/sbin/nologin
-@bin bin/bsondump
 @bin bin/mongo
 @bin bin/mongod
-@bin bin/mongodump
-@bin bin/mongoexport
-@bin bin/mongofiles
-@bin bin/mongoimport
-@bin bin/mongooplog
 @bin bin/mongoperf
-@bin bin/mongorestore
 @bin bin/mongos
 @bin bin/mongosniff
-@bin bin/mongostat
-@bin bin/mongotop
 share/examples/mongodb/
 share/examples/mongodb/mongodb.conf
 @sample ${SYSCONFDIR}/mongodb.conf

Reply via email to