I have been working on getting Membase up'n'running on OpenSolaris as a side project. Most of it is already in place, but there are still some Makefile issues to sort out. I thought that while we're waiting to complete that task, I could show you how to easily run moxi as a service controlled by SMF.
I've created some scripts to make it easier for you to build and install everything, so the first we need to do is to check out (or update your clone) of my tools repository:
trond@opensolaris> git clone git://github.com/trondn/tools.git
trond@opensolaris> cd tools/membase
Next up we need to create some new ZFS datasets for our moxi installation. I've created a script that creates the zfs datasets and set up the mountpoints:
trond@opensolaris> ./smf/moxi/setup.sh -u -z rpool
The -u option tells the script to create authorizations, profiles, users and groups we need, and the -z option tells the script to create the zfs filesystems in the zfs pool named rpool.
Next up we need to compile (and install) the source code. The directory /opt/membase is not writable for us, so let's change the ownership so I can install files there…:
trond@opensolaris> pfexec chown trond:staff /opt/membase
trond@opensolaris> ./setup.sh -d /opt/membase moxi
Download commit hook – Ok.
Checking out libmemcached (Bazaar) – Ok.
Checking out bucket_engine (git) – Ok.
Checking out ep-engine (git) – Ok.
Checking out libconflate (git) – Ok.
Checking out libvbucket (git) – Ok.
Checking out memcached (git) – Ok.
Checking out moxi (git) – Ok.
Checking out vbucketmigrator (git) – Ok.
Checking out membase-cli (git) – Ok.
Checking out ns_server (git) – Ok.
Checking out memcachetest (git) – Ok.
Configure build for SunOS
trond@opensolaris> cd moxi/SunOS
trond@opensolaris> make all install
Now we've got everything installed to /opt/membase, so let's change the ownership to membase:membase and install the SMF script to manage moxi:
trond@opensolaris> chown -R membase:membase /opt/membase
trond@opensolaris> cd ../../smf/moxi
trond@opensolaris> ./setup.sh -s
moxi installed as /lib/svc/method/moxi
moxi.xml installed as /var/svc/manifest/application/moxi.xml
So let's check out the configuration options we got for our new SMF service:
trond@opensolaris> svccfg
svc:> select moxi
svc:/application/database/moxi> listprop
manifestfiles                                       framework
manifestfiles/var_svc_manifest_application_moxi_xml astring /var/svc/manifest/application/moxi.xml
general                                             framework
general/action_authorization                        astring solaris.smf.manage.moxi
general/entity_stability                            astring Unstable
general/single_instance                             boolean true
general/value_authorization                         astring solaris.smf.value.moxi
multi-user-server                                   dependency
multi-user-server/entities                          fmri svc:/milestone/multi-user-server
multi-user-server/grouping                          astring require_all
multi-user-server/restart_on                        astring none
multi-user-server/type                              astring service
moxi                                                application
moxi/corepattern                                    astring /var/opt/membase/cores/core.%f.%p
moxi/downstream_max                                 astring 8
moxi/port                                           astring 11211
moxi/threads                                        astring 4
moxi/url                                           astring http://membase:8091/pools/default/bucketStreaming/default
moxi/version                                        astring 1.6.0
tm_common_name                                      template
tm_common_name/C                                   ustring Membase
tm_man_moxi                                         template
tm_man_moxi/manpath                                 astring /opt/membase/share/man
tm_man_moxi/section                                 astring 1
tm_man_moxi/title                                   astring moxi
You will most likely want to set the URL parameter to point to the bucket you want to use..
svc:/application/database/moxi> setprop moxi/url=http://myserver:8091/pools/default/bucketStreaming/default
Let's refresh the configuration and start the service:
trond@opensolaris> svccfg refresh moxi
trond@opensolaris> svcadm enable moxi
trond@opensolaris> svcs moxi
STATEÂ Â Â Â Â Â Â Â Â STIMEÂ Â Â FMRI
online         9:45:41 svc:/application/database/moxi:moxi
Â