The first thing I do on my SmartOS server is to create a manifest file for my new vm. This manifest file is a JSON file describing the vm, and yesterday I was going to build on Ubuntu 12 so I created a file named ubuntu12.json looking like this:
{ "brand": "kvm", "vcpus": 1, "autoboot": false, "alias": "ubuntu12", "ram": 1024, "resolvers": ["10.0.0.1"], "disks": [ { "boot": true, "model": "virtio", "size": 10240 } ], "nics": [ { "nic_tag": "admin", "model": "virtio", "ip": "10.0.0.251", "netmask": "255.255.255.0", "gateway": "10.0.0.1" } ] }
with that in place I created the virtual machine with the following command:
[root@smartos ~] # vmadm create -f ubuntu12.json Successfully created 3d09ad09-e124-4b68-90fd-53c76f05dbc0
The next thing I did was to copy the Ubunto 12.10 installation iso file to
/zones/3d09ad09-e124-4b68-90fd-53c76f05dbc0/root/cdrom.iso
, before I executed the following command:[root@smartos ~] # vmadm boot 3d09ad09-e124-4b68-90fd-53c76f05dbc0 order=cd,once=d cdrom=/cdrom.iso,ide
This boots the vm and provides a "console" to the machine over vnc. To figure out where to connect the vncviewer to complete the installation I executed:
root@smartos ~]# vmadm info 3d09ad09-e124-4b68-90fd-53c76f05dbc0 vnc { "vnc": { "host": "10.0.0.22", "port": 39944, "display": 34044 } }
With my Ubuntu 12.10 installed the first thing I did was to install some extra packages:
trond@ubuntu12:~$ sudo wget -O/etc/apt/sources.list.d/couchbase.list http://packages.couchbase.com/ubuntu/couchbase-ubuntu1204.list trond@ubuntu12:~$ wget -O- http://packages.couchbase.com/ubuntu/couchbase.key | sudo apt-key add - trond@ubuntu12:~$ sudo apt-get update trond@ubuntu12:~$ sudo apt-get install openssh-server php5-dev php5-cli libcouchbase2 libcouchbase2-libevent libcouchbase2-bin libcouchbase-dev trond@ubuntu12:~$ wget -Orepo https://git-repo.googlecode.com/files/repo-1.19 trond@ubuntu12:~$ chmod a+x repo trond@ubuntu12:~$ sudo cp repo /usr/bin
I can now build the php extension by running:
trond@ubuntu12:~$ mkdir compile trond@ubuntu12:~$ cd compile trond@ubuntu12:~/compile$ repo init -u git://github.com/trondn/manifests -m php.xml trond@ubuntu12:~/compile$ repo sync
trond@ubuntu12:~/compile$ cd php trond@ubuntu12:~/compile/php$ phpize trond@ubuntu12:~/compile/php$ ./configure trond@ubuntu12:~/compile/php$ make trond@ubuntu12:~/compile/php$ cd tests trond@ubuntu12:~/compile/php/tests$ cp couchbase.local.inc.dist couchbase.local.inc trond@ubuntu12:~/compile/php/tests$ vi couchbase.local.inc
Now you should specify the hostname of your Couchbase cluster in
COUCHBASE_CONFIG_HOST
, and clear (or specify correct values) for COUCHBASE_CONFIG_USER
and COUCHBASE_CONFIG_PASSWD
).trond@ubuntu12:~/compile/php/tests$ cd .. trond@ubuntu12:~/compile/php$ make test
Depending on your cluster configuration you might encounter some test errors (the tests are unfortunately not written fully bullet proof). If you have a one-node cluster with a replica count set to 1, the following tests will fail (because they don't check for "inconsistent" configuration):
GetReplica - GetReplica [tests/phpt/GetReplica/GetReplica.phpt]
GetReplica - GetReplicaMulti [tests/phpt/GetReplica/GetReplicaMulti.phpt]
You can now install the driver by:
GetReplica - GetReplica [tests/phpt/GetReplica/GetReplica.phpt]
GetReplica - GetReplicaMulti [tests/phpt/GetReplica/GetReplicaMulti.phpt]
You can now install the driver by:
trond@ubuntu12:~/compile/php$ sudo cp modules/couchbase.so /usr/lib/php5/20100525 trond@ubuntu12:~/compile/php$ sudo cp example/couchbase.ini /etc/php5/cli/conf.d
And verify that it is properly installed by running:
trond@ubuntu12:~/compile/php$ php -i | grep couchbase /etc/php5/cli/conf.d/couchbase.ini couchbase couchbase support => enabled couchbase.compression_factor => 1.3 => 1.3 couchbase.compression_threshold => 2000 => 2000 couchbase.compressor => none => none couchbase.durability_default_poll_interval => 100000 => 100000 couchbase.durability_default_timeout => 40000000 => 40000000 couchbase.instance.persistent => On => On couchbase.restflush => On => On couchbase.serializer => php => php couchbase.view_timeout => 75 => 75
So let's go ahead and create a small test using our driver. Create the file
test.php
with the following content:<?php try { $cb = new Couchbase("mycluster"); print "Store foo: " . $cb->set("foo", "bar") . "\n"; print "Get foo: " . $cb->get("foo") . "\n"; } catch (CouchbaseException $e) { var_dump($e); } ?>
And test it with the following command:
trond@ubuntu12:~/compile/php$ php test.php Store foo: 14566767818228433408 Get foo: bar
Happy hacking!!!
hello Trond,
ReplyDeletei couldnt go durther in PHP extension install for couchbase.
after repo init -u git://github.com/trondn/manifests -m php.xm
there is no such php directory...
Oh.. I see I've missed to add: repo sync
Delete