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