BlackTie on SunOS platforms

These instructions show how to build BlackTie on a Solaris 10 platform. They may work with other SunOS releases but have only been validated on Solaris 10 update 8. The instructions are sufficiently different from the generic build instructions that a separate page is warranted.


Caveat: there are still some teething problems with running the tests and examples:- some of them fail intermittently and it currently takes multiple passes to get successful test run. You might want to track the issue via JIRA to see our progress.


Firstly, obtain a copy of Solaris 10 update 8 - I got my copy as a virtual appliance from the Oracle download center. Note that the standard VM does not come with enough disk space or swap space to run BlackTie so I'll include instructions as if you are building from such an appliance.


Add an extra disk using your virtualisation software, for example with VirtualBox use File->Virtual Media Manager to add an expandable disk of size 100 GB (that should be plenty though 10 - 20 may be enough too, but if the disk is expandable it will not matter). Boot Solaris and run format to see the device name of the new disk (format should report it as a VBOX disk of the size you chose, 100.00GB - the device name for my appliance is c0d1 because it is the second disk). Solaris comes with a nice tool for managing disks called zpool. Add the new disk to a new pool and give it a name such as data:


    zpool create data c0d1


By default a zfs filesystem is created on the new disk (the mount point defaults to the pool name).


Add more swap backed by space on the new disk. My virtual appliance came with 500 MB and a test build will definitely fail unless you add more. So, create a 1 GB swap mounted a /data/swap:


    zfs create -V 1gb data/swap


and ask the OS to use it for swapping:


    swap -a /dev/zvol/dks/data/swap


(if you want it to be permanent don't forget to add the entry to vfstab)


Solaris comes with a set of useful utilities located in /usr/sfw/bin so put this early on in your PATH. Also the standard tar and patch do not work with GNU tools, use gtar and gpatch instead (use alias if you keep forgetting: alias tar="gtar"). /usr/ccs/bin must be in you path as well. My PATH looks like this:




Much of the needed support software is not installed on Solaris so you'll need to get it from a third party such as which contains many pre-built SunOS packages for popular projects.


Important note - when using sunfreeware it is polite to use local mirrors.


I found it useful to install sudo (the sudoers file installs into /usr/local/etc):


# install sudo (as root)

# install sudo (as root)






# ACE requires GNU make
# install all of the above packages:
   gunzip *.gz
   for i in *local; do pkgadd -d $i; done
   echo "unixusername ALL=(ALL) ALL" >> /usr/local/etc/sudoers
# the APR install puts some of its includes in locations not recognised by log4cxx. As a quick fix I just copied them over:
   sudo cp /usr/local/apr/include/*.h /usr/local/apr/include/apr-1
Not all third party dependencies are available in SunOS package format so you will need to build these yourself. Use the disk you added above as a workspace:


# create a work are for building dependencies
    sudo mkdir -p /data/blacktie/util
    sudo chown -R unixusername:staff /data/blacktie
    cd blacktie/util
# log4cxx
    tar -zxf apache-log4cxx-0.10.0.tar.gz
    cd apache-log4cxx-0.10.0
    ./configure && make
    mkdir ACE+TAO-5.8.0
    tar -C ACE+TAO-5.8.0 -zxf ACE+TAO-5.8.0.tar.gz
    cd ACE+TAO-5.8.0/ACE_wrappers
#include "ace/config-sunos5.10.h" > ace/config.h
    echo "include $(ACE_ROOT)/include/makeinclude/platform_sunos5_g++.GNU" > include/makeinclude/platform_macros.GNU
    export ACE_ROOT=`pwd`
    export TAO_ROOT=`pwd`/TAO
    export LD_LIBRARY_PATH=`pwd`/lib
# ACE requires GNU make:
    export PATH=/usr/local/bin:$PATH
    cd ace; make
    cd ..; make
    cd apps/gperf/src/; make
    cd ../../../ACEXML/; make
    cd /data/blacktie/util/ACE+TAO-5.8.0/ACE_wrappers/TAO/TAO_IDL/;
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/blacktie/util/ACE+TAO-5.8.0/ACE_wrappers/TAO/TAO_IDL
    cd ../tao/; make
    cd ../orbsvcs/ImplRepo_Service/; make
    cd ../orbsvcs; make
    cd ../../../../..
# xerces C - I had to compile this as root (don't know why)
    tar -zxf xerces-c-3.1.1.tar.gz
    cd xerces-c-3.1.1; ./configure && make
    sudo chown -R mmusgrov:staff .
    cd ..
# cppunit get version 1.12.1 from sourceforge
# but it needs patching. The patch is available from
    mv ~/Desktop/solarisfinite.patch .
    gpatch -p0 -i solarisfinite.patch
    cd cppunit-1.12.1; ./configure && make


And finally you will need apache ant, maven and subversion in order to build the final dependency (stompconnect) and BlackTie itself:


# as root
    cd /usr/local
    tar -zxf apache-maven-2.2.1-bin.tar.gz
    tar -zxf apache-ant-1.8.1-bin.tar.gz
    tar -zxf ant-contrib-1.0b3-bin.tar.gz ant-contrib/ant-contrib-1.0b3.jar
    mv ant-contrib/ant-contrib-1.0b3.jar apache-ant-1.8.1/lib/
    rm *.gz; rmdir ant-contrib
    chown -R bin:bin apache-maven-2.2.1 apache-ant-1.8.1
# if the permissions get messed up fix them:
    find apache-maven-2.2.1 -type d -exec chmod 755 {} \;
    find apache-ant-1.8.1 -type d -exec chmod 755 {} \;
# subversion has a number of dependencies
    gunzip *.gz
    for i in *local; do pkgadd -d $i; done
# put apache maven and ant on the path
    export PATH=$ANT_HOME/bin:$MAVEN_HOME/bin:$PATH
Now get stompconnect and its patch:


# stompconnect
    cd to the util dir
    cd stompconnect-1.0
    gpatch -p0 -i stompconnect.patch


Use subversion to check out the BlackTie sources:


# BlackTie
# or get the sources from the project download page
# The BlackTie build is maven based and it gets its third party dependencies via maven.
# Therefore the these dependencies need to be turned into maven artifacts. Here's how to do that:
    cd trunk/blacktie-util/thirdparty
# modify to reflect the locations where you built the various dependencies. Mine looks like this:

bpa=sol10u8-x86 log4cxx.lib.dir=/data/blacktie/util/apache-log4cxx-0.10.0/src/main/cpp/.libs log4cxx.include.dir=/data/blacktie/util/apache-log4cxx-0.10.0/src/main/include/log4cxx log4cxx.version=902683 stompconnect.dir=/data/blacktie/util/stompconnect-1.0 apr-1.lib.dir=/usr/local/apr/lib apr-1.include.dir=/usr/local/apr/include/apr-1 apr-1.version=1.3.3 ace.lib.dir=/data/blacktie/util/ACE+TAO-5.8.0/ACE_wrappers/lib ace.include.dir=/data/blacktie/util/ACE+TAO-5.8.0/ACE_wrappers/ ace.version=5.8.0 tao.idl.compiler=/data/blacktie/util/ACE+TAO-5.8.0/ACE_wrappers/TAO/TAO_IDL/tao_idl ace.gperf=/data/blacktie/util/ACE+TAO-5.8.0/ACE_wrappers/bin/ace_gperf expat.lib.dir=/usr/local/lib expat.include.dir=/usr/local/include expat.version=2.0.1 cppunit.lib.dir=/data/blacktie/util/cppunit-1.12.1/src/cppunit/.libs cppunit.include.dir=/data/blacktie/util/cppunit-1.12.1/include/cppunit cppunit.version=1.12 xercesc.lib.dir=/data/blacktie/util/xerces-c-3.1.1/src/.libs xercesc.include.dir=/data/blacktie/util/xerces-c-3.1.1/src xercesc.version=3.0.1

# The ant script in the same directory will package up these dependencies and install them in the local maven repository:
    ant -Dlinux=true -Dbpa=sol10u8-x86
Build BlackTie:


# build in the main module directory   
    cd ../../blacktie
# don't forget to include the platform prefix (which the build uses to determine the correct artifacts for the current architecture):
    mvn clean -Dbpa=sol10u8-x86
    mvn install -DskipTests -Dbpa=sol10u8-x86


Follow the standard instructions for installing jboss-5.1.0.GA except that on Solaris a small fix is required:


# jboss-5.1.0.GA needs a small fix to run on Solaris which is described in this post:
# edit server/<name>/conf/bootstrap/profile.xml edit the AttachmentStore bean constructor.
# Add a class attribute (with value to the constructor parameter. So it should look like this:
#     <constructor><parameter class=""> ...
# from here you can safely follow the existing instructions for deploying and running BlackTie
# except that SunOS does not support valgrind so it needs disabling by, for example, by adding a profile to your settings.xml (or use -Duse.valgrind=false on each mvn build):




      <activation> <activeByDefault>true</activeByDefault> </activation>


        <use.valgrind> false </use.valgrind>