---
title: Cassandraをapt-getでインストールする
tags: []
categories: ["Middleware", "NoSQL", "Cassandra"]
date: 2010-06-23T18:03:32Z
updated: 2010-06-24T02:01:16Z
---

<p>
http://www.apache.org/dist/cassandra/debian/ にレポジトリがあったので<code>apt-get</code>してみます。<br />
動作環境はubuntu-server 10.04 64bit (on eucalyptus)です。
</p>
<p>
/etc/apt/sources.listに次の2行を追加します。
</p>
<pre class="prettyprint lang-sh">
deb http://www.apache.org/dist/cassandra/debian unstable main
deb-src http://www.apache.org/dist/cassandra/debian unstable main
</pre>
<p>
反映。
</p>
<pre class="prettyprint lang-sh">
$ sudo apt-get update
[途中略]
W: GPG error: http://www.apache.org unstable Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F758CE318D77295D
</pre>
<p>
とGPGエラーが出ました。ぐぐったところ、以下を実行するとおｋのようです（この辺詳しくないのでおかしかったら突っ込んでください）。
</p>
<pre class="prettyprint lang-sh">
$ gpg --keyserver wwwkeys.eu.pgp.net --recv-keys F758CE318D77295D
$ sudo apt-key add ~/.gnupg/pubring.gpg
$ sudo apt-get update
</pre>
<p>
これで<code>apt-get</code>できます。
</p>
<pre class="prettyprint lang-sh">
$ apt-cache search cassandra
cassandra - distributed storage system for structured data
$ sudo apt-get install cassandra
</pre>
<p>
起動は
</p>
<pre class="prettyprint lang-sh">
$ sudo /etc/init.d/cassandra start
</pre>
<p>
で。2010/06/24時点で0.6.2がインストールされます。<code>cassandra-cli</code>も使えます。<br />
</p>

<p>
<code>apt-get</code>で取得できるファイル一覧の見方を忘れたので、とりあえず<code>locate</code>の結果だけ貼っておきます。
</p>

<pre class="prettyprint lang-sh" style="height:200px;overflow:scroll;">
$ locate cassandra
/etc/cassandra
/etc/cassandra/log4j.properties
/etc/cassandra/storage-conf.xml
/etc/default/cassandra
/etc/init.d/cassandra
/etc/rc0.d/K20cassandra
/etc/rc1.d/K20cassandra
/etc/rc2.d/S20cassandra
/etc/rc3.d/S20cassandra
/etc/rc4.d/S20cassandra
/etc/rc5.d/S20cassandra
/etc/rc6.d/K20cassandra
/home/ubuntu/.cassandra.history
/usr/bin/cassandra-cli
/usr/sbin/cassandra
/usr/share/cassandra
/usr/share/cassandra/antlr-3.1.3.jar
/usr/share/cassandra/apache-cassandra-.jar
/usr/share/cassandra/apache-cassandra.jar
/usr/share/cassandra/avro-1.2.0-dev.jar
/usr/share/cassandra/cassandra.in.sh
/usr/share/cassandra/clhm-production.jar
/usr/share/cassandra/commons-cli-1.1.jar
/usr/share/cassandra/commons-codec-1.2.jar
/usr/share/cassandra/commons-collections-3.2.1.jar
/usr/share/cassandra/commons-lang-2.4.jar
/usr/share/cassandra/google-collections-1.0.jar
/usr/share/cassandra/hadoop-core-0.20.1.jar
/usr/share/cassandra/high-scale-lib.jar
/usr/share/cassandra/jackson-core-asl-1.4.0.jar
/usr/share/cassandra/jackson-mapper-asl-1.4.0.jar
/usr/share/cassandra/jline-0.9.94.jar
/usr/share/cassandra/json-simple-1.1.jar
/usr/share/cassandra/libthrift-r917130.jar
/usr/share/cassandra/log4j-1.2.14.jar
/usr/share/cassandra/slf4j-api-1.5.8.jar
/usr/share/cassandra/slf4j-log4j12-1.5.8.jar
/usr/share/doc/cassandra
/usr/share/doc/cassandra/CHANGES.txt.gz
/usr/share/doc/cassandra/DISCLAIMER.txt
/usr/share/doc/cassandra/NEWS.txt.gz
/usr/share/doc/cassandra/README.Debian
/usr/share/doc/cassandra/README.txt
/usr/share/doc/cassandra/TODO
/usr/share/doc/cassandra/changelog.gz
/usr/share/doc/cassandra/copyright
/usr/share/doc/cassandra/licenses
/usr/share/doc/cassandra/licenses/antlr-3.1.3.txt
/usr/share/doc/cassandra/licenses/avro-1.2.0-dev.txt.gz
/usr/share/doc/cassandra/licenses/clhm-production.txt.gz
/usr/share/doc/cassandra/licenses/commons-cli-1.1.txt.gz
/usr/share/doc/cassandra/licenses/commons-codec-1.2.txt.gz
/usr/share/doc/cassandra/licenses/commons-collections-3.2.1.txt.gz
/usr/share/doc/cassandra/licenses/commons-lang-2.4.txt.gz
/usr/share/doc/cassandra/licenses/google-collections-1.0.txt.gz
/usr/share/doc/cassandra/licenses/hadoop-core-0.20.1.txt.gz
/usr/share/doc/cassandra/licenses/high-scale-lib.txt
/usr/share/doc/cassandra/licenses/jackson-core-asl-1.4.0.txt.gz
/usr/share/doc/cassandra/licenses/jackson-mapper-asl-1.4.0.txt.gz
/usr/share/doc/cassandra/licenses/jline-0.9.94.txt
/usr/share/doc/cassandra/licenses/json-simple-1.1.txt.gz
/usr/share/doc/cassandra/licenses/libthrift-r917130.txt.gz
/usr/share/doc/cassandra/licenses/log4j-1.2.14.txt.gz
/usr/share/doc/cassandra/licenses/slf4j-api-1.5.8.txt
/usr/share/doc/cassandra/licenses/slf4j-log4j12-1.5.8.txt
/var/cache/apt/archives/cassandra_0.6.2_all.deb
/var/lib/cassandra
/var/lib/apt/lists/www.apache.org_dist_cassandra_debian_dists_unstable_Release
/var/lib/apt/lists/www.apache.org_dist_cassandra_debian_dists_unstable_Release.gpg
/var/lib/apt/lists/www.apache.org_dist_cassandra_debian_dists_unstable_main_binary-amd64_Packages
/var/lib/apt/lists/www.apache.org_dist_cassandra_debian_dists_unstable_main_source_Sources
/var/lib/cassandra/commitlog
/var/lib/cassandra/data
/var/lib/dpkg/info/cassandra.conffiles
/var/lib/dpkg/info/cassandra.list
/var/lib/dpkg/info/cassandra.md5sums
/var/lib/dpkg/info/cassandra.postinst
/var/lib/dpkg/info/cassandra.postrm
/var/lib/dpkg/info/cassandra.prerm
/var/lib/update-rc.d/cassandra
/var/log/cassandra
/var/log/cassandra/output.log
/var/log/cassandra/system.log
</pre>

<p>
ちなみに起動スクリプトはこんな感じ。JXMのポートが8080で決め打ちですね。。。
</p>
<pre class="prettyprint lang-sh" style="height:200px;overflow:scroll;">
#! /bin/sh
### BEGIN INIT INFO
# Provides:          cassandra
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: distributed storage system for structured data
# Description:       Cassandra is a distributed (peer-to-peer) system for
#                    the management and storage of structured data.
### END INIT INFO

# Author: Eric Evans <eevans@racklabs.com>

DESC="Cassandra"
NAME=cassandra
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
CONFDIR=/etc/cassandra
JAVA_HOME="/usr/lib/jvm/java-6-openjdk/jre"
JSVC=/usr/bin/jsvc
JVM_MAX_MEM="1G"
JVM_START_MEM="128M"

[ -e /usr/share/cassandra/apache-cassandra.jar ] || exit 0
[ -e /etc/cassandra/storage-conf.xml ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that returns the applications classpath
#
classpath()
{
    cp=
    for j in /usr/share/$NAME/*.jar; do
        [ "x$cp" = "x" ] && cp=$j || cp=$cp:$j
    done

    # Include the conf directory for purposes of log4j.properties, and
    # commons-daemon in support of the daemonization class.
    printf "$cp:$CONFDIR:/usr/share/java/commons-daemon.jar"
}

#
# Function that returns 0 if process is running, 1 if not
#
is_running()
{
    if [ -f $PIDFILE ]; then
        if ps -p `cat $PIDFILE` &> /dev/null; then
            return 0
        fi
    fi
    return 1
}

#
# Function that starts the daemon/service
#
do_start()
{
    # Return
    #   0 if daemon has been started
    #   1 if daemon was already running
    #   2 if daemon could not be started
    is_running && return 1

    $JSVC \
        -home $JAVA_HOME \
        -pidfile $PIDFILE \
        -errfile "&1" \
        -outfile /var/log/$NAME/output.log \
        -cp `classpath` \
        -Xmx$JVM_MAX_MEM \
        -Xms$JVM_START_MEM \
        -Dcassandra \
        -Dstorage-config=$CONFDIR \
        -Dcom.sun.management.jmxremote.port=8080 \
        -Dcom.sun.management.jmxremote.ssl=false \
        -Dcom.sun.management.jmxremote.authenticate=false \
        $JVM_EXTRA_OPTS \
        org.apache.cassandra.thrift.CassandraDaemon

    if ! is_running; then return 2; fi
}

#
# Function that stops the daemon/service
#
do_stop()
{
	# Return
	#   0 if daemon has been stopped
	#   1 if daemon was already stopped
	#   2 if daemon could not be stopped
	#   other if a failure occurred
    is_running || return 1
    $JSVC -stop -home $JAVA_HOME -pidfile $PIDFILE \
            org.apache.cassandra.thrift.CassandraDaemon
    is_running && return 2 || return 0
}

case "$1" in
  start)
	[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
	do_start
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
	esac
	;;
  stop)
	[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
	do_stop
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
	esac
	;;
  restart|force-reload)
	log_daemon_msg "Restarting $DESC" "$NAME"
	do_stop
	case "$?" in
	  0|1)
		do_start
		case "$?" in
			0) log_end_msg 0 ;;
			1) log_end_msg 1 ;; # Old process is still running
			*) log_end_msg 1 ;; # Failed to start
		esac
		;;
	  *)
	  	# Failed to stop
		log_end_msg 1
		;;
	esac
	;;
  *)
	echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
	exit 3
	;;
esac

:

# vi:ai sw=4 ts=4 tw=0 et
</pre>
<p>
/usr/share/cassandra/cassandra.in.shの「<code>-Dcom.sun.management.jmxremote.port=XXXX</code>」の設定を変更すれば良い？
</p>

<hr />

<p>
これでCassandraのインストールがらくちんになりました！eucalyptus上でがんがん上げてクラスタ作ってみようと思います。
</p>
