Install couchdb 0.9.0 and Erlang R13B from sources on ubuntu Jaunty 9.04
I wanted to play with CouchDB 0.9.0 on Ubuntu Jaunty, and to do this I had to compile it from sources, and to be in sync with CouchDBX I compiled as well erlang 13B.
This is the transcript of what I did.
Erlang
credits: ciarang.com
Dependencies
install some dev packages
sudo apt-get install build-essential m4 libssl-dev libncurses-dev
note: if you need support for odbc, jinterface or wx you need to install their dependencies
Compiling
wget http://erlang.org/download/otp_src_R13B.tar.gz
tar zxf otp_src_R13B.tar.gz
cd otp_src_R13B
./configure
make
sudo make install
CouchDB
Credits: blog.james-carr.org
Dependencies
sudo apt-get install libcurl4-openssl-dev libicu-dev libmozjs-dev
Compiling
wget http://apache.mirroring.de/couchdb/0.9.0/apache-couchdb-0.9.0.tar.gz
tar zxf apache-couchdb-0.9.0.tar.gz
cd apache-couchdb-0.9.0
./configure --sharedstatedir=/var/local --localstatedir=/var/local
make
sudo make install
System configuration
You need to create a user for couchdb
sudo useradd -d /var/local/lib/couchdb couchdb
sudo chown couchdb. /var/local/lib/couchdb
sudo chmod 750 /var/local/lib/couchdb
I prefer to have the logs in /var/log/couchdb and the pid in /var/run/couch.pid so let's edit the configuration file
in /usr/local/etc/couchdb/local.ini
edit the file so the log section looks as follows
[log]
file = /var/log/couchdb/couch.log
to edit the pid location we need to edit the file in /usr/local/etc/default/couchdb
this is how my file looks like
COUCHDB_USER=couchdb
COUCHDB_STDOUT_FILE=/dev/null
COUCHDB_STDERR_FILE=/dev/null
COUCHDB_PID_FILE=/var/run/couchdb.pid
COUCHDB_RESPAWN_TIMEOUT=5
COUCHDB_OPTIONS=
It's time to setup the init.d script
sudo cp -v /usr/local/etc/init.d/couchdb /etc/init.d/couchdb
we need to amend/etc/init.d/couchdb to set the permission of the pid file when the daemon starts
you need to find the section
if test -n "$COUCHDB_PID_FILE"; then
command="$command -p $COUCHDB_PID_FILE"
fi
and change it to
if test -n "$COUCHDB_PID_FILE"; then
touch $COUCHDB_PID_FILE
chown $COUCHDB_USER. $COUCHDB_PID_FILE
command="$command -p $COUCHDB_PID_FILE"
fi
again we need to edit /etc/init.d/couchdb because the stop command won't work as it is
you need to find the "stop_couchdb" function at the line
command="$COUCHDB -d"
and change it to
command="$COUCHDB -d"
if test -n "$COUCHDB_PID_FILE"; then
command="$command -p $COUCHDB_PID_FILE"
fi
As a last step we want to create the directory for the logs
sudo mkdir /var/log/couchdb
sudo chown couchdb. /var/log/couchdb
And consequently set the log rotation in /etc/logrotate.d/couchdb
/var/log/couchdb/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 couchdb adm
sharedscripts
postrotate
[ ! -f /var/run/couchdb.pid ] || kill -USR1 `cat /var/run/couchdb.pid`
endscript
}
And now is time to have some fun
/etc/init.d/couchdb start
curl 127.0.0.1:5984
curl 127.0.0.1:5984/test
curl -X PUT 127.0.0.1:5984/test
curl 127.0.0.1:5984/test
curl 127.0.0.1:5984/test/baz
curl -X PUT -d '{"foo":"bar"}' 127.0.0.1:5984/test/baz
curl 127.0.0.1:5984/test/baz
Note: I just finished checking this installation process with the release candidate of couchdb 0.9.1 and it works fine