Raspberry Pi に mackerel-agent をインストールする方法 (2015年2月更新)

Raspberry Pi の armhf アーキテクチャをサポートした mackerel-agent のバイナリが提供されていないので, ソースコードからビルドすることで利用できるようにしました. テストでいくつかのエラーが出ましたが, 基本的な機能は利用できています.

また, この記事は Go 言語の利用経験の少ない者が書いているためいくつかの誤りを含む可能性があります.

環境

  • Raspberry Pi
  • Debian 8 jessie (Raspbian)
  • mackerel-agent 0.14.1
  • go 1.3.3

make 等を利用するために build-essential を, go を利用するために golang パッケージを, コードを取得するために git と mercurial をインストールします.

$ sudo apt-get install build-essential golang git mercurial

Debian 7 wheezy 以降で golang パッケージが提供されていますが, wheezy の go は古いため mackerel-agent のビルドに失敗するようです.

コードの取得

mackerel-agent のコードを GitHub から取得します.

$ git clone https://github.com/mackerelio/mackerel-agent.git

ビルド

Go のコードをビルドする際に環境変数 GOPATH を設定しておかないとエラーが発生するので,
適当なディレクトリを作成して GOPATH に設定しておきます.

$ mkdir go
$ export GOPATH=/home/pi/go
$ cd mackerel-agent/
$ make clean build

build/mackerel-agent にバイナリが出力されます.

インストールと設定

バイナリを配置します.

$ sudo cp build/mackerel-agent /usr/local/bin/

/etc/init.d/mackerel-agent に init スクリプトを配置します.
このスクリプトは deb 形式のバイナリから取得しました.

#!/bin/sh
### BEGIN INIT INFO
# Provides:          mackerel-agent
# Short-Description: 'mackerel.io agent beta'
# Description:       'mackerel.io agent beta'
# Author:            Hatena
# Required-Start:    $syslog $network $remote_fs
# Required-Stop:     $syslog $network $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

NAME=mackerel-agent                  # Introduce the short server's name here

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DAEMON=${DAEMON:="/usr/local/bin/$NAME"}
SCRIPTNAME=/etc/init.d/$NAME
LOGFILE=${LOGILE:="/var/log/$NAME.log"}
PIDFILE=${PIDFILE:="/var/run/$NAME.pid"}
ROOT=${ROOT:="/var/lib/$NAME"}

# Exit if the package is not installed
[ -x $DAEMON ] || exit 0

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

#
# Function that starts the daemon/service
#
do_start()
{
    $DAEMON ${APIBASE:+--apibase=$APIBASE} ${APIKEY:+--apikey=$APIKEY} --pidfile=$PIDFILE --root=$ROOT $OTHER_OPTS >>$LOGFILE 2>&1 &
    sleep 3
    kill -0 $(cat $PIDFILE 2>/dev/null) >/dev/null 2>&1
    return $?
}

#
# Function that stops the daemon/service
#
do_stop()
{
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    [ "$RETVAL" = 2 ] && return 2
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
    [ "$?" = 2 ] && return 2
    # Many daemons don't delete their pidfiles when they exit.
    rm -f $PIDFILE
    return "$RETVAL"
}

case "$1" in
    start)
        log_daemon_msg "Starting $NAME"
        do_start
        case "$?" in
            0) log_end_msg 0 ;;
            *) log_end_msg 1 ;;
        esac
        ;;
    stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
            0|1) log_end_msg 0 ;;
            *)   log_end_msg 1 ;;
        esac
        ;;
    status)
        status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
        ;;
    restart)
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
            0|1)
                do_start
                case "$?" in
                    0) log_end_msg 0 ;;
                    *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
            *)
                # Failed to stop
                log_end_msg 1
            ;;
        esac
        ;;
    *)
        echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
        exit 3
    ;;
esac

:

自動起動を有効化します.

$ sudo update-rc.d mackerel-agent defaults

設定ファイルをヘルプに従い /etc/mackerel-agent/mackerel-agent.conf に配置します. 設定ファイルのサンプルはソースコードにも含まれています.

agent を起動してしばらく待つと, Mackerel にグラフが表示されるようになります.

更新履歴

  • 2014/6/8 mackerel-agent 0.8.0, go 1.3 に更新
  • 2014/7/13 mackerel-agent 0.9.0 に更新
  • 2014/8/7 mackerel-agent 0.11.1 に更新
  • 2014/8/20 mackerel-agent 0.12.0, go 1.3.1 に更新
  • 2014/8/28 mackerel-agent 0.12.1 に更新
  • 2014/9/15 mackerel-agent 0.12.2 に更新
  • 2014/10/2 mackerel-agent 0.12.3 に更新
  • 2014/10/5 go 1.3.2 に更新
  • 2014/12/14 mackerel-agent 0.13.0 に更新
  • 2015/1/19 mackerel-agent 0.14.0 に更新, mercurial を追加
  • 2015/2/5 mackerel-agent 0.14.1 に更新, go 1.3.3 に更新