slackにhubotを住まわせる記事は山のようにあるが、それを「hubotを自前サーバ」「それもFreeBSDに」という条件にすると記事数が激減する。
そんななか、四苦八苦してなんとか達成したのでここに採録。
なお、そっけなく不親切に見えるのは、ここまでたどり着くのに疲労困憊したから。
ではどうぞ。
jailの作成
フッツーに。
以下ではqjailを使っているがezjailでもなんでも、好きなのを使いたまえ。
sudo qjail create hubot -4 192.168.200.1
npmのインストール
まずjailをスタートさせて中に入ろうか。
そしてnpmのインストール。
sudo qjail console ex02
pkg install npm
node, npmのバージョンを確認しておく。
問題なくインストールされているかの確認でもある。
node -v
npm -v
generatorのインストール
npm install -g yo generator-hubot
hubot用ユーザの作成
jailの中でadduserし、お好きなユーザを作る。
以下では「bot」というユーザ。
adduser bot
hubot用ユーザでhubotレポジトリ作成
su - bot
mkdir hubot
cd hubot
yo hubot --adapter slack
botホストの作業はいったんはここまで。
以降、slack側で。
slackにhubotのインストール
slackのteamメニューからApp&Integrations > Hubotをインストール
表示されるAPI Tokenを記録する。
hubotがslackへアクセスするためのトークン。
botホストで起動スクリプトの作成
再びbotホスト
/usr/local/etc/rc.d/hubotとして以下を作成。
試行錯誤で作ったから雑なスクリプトであることに注意。
それから実行権限付けるのを忘れないこと。
#! /bin/sh
#
#
# PROVIDE: hubot
# REQUIRE: DAEMON
# KEYWORD: shutdown
# $Id: hubot,v 1.3 2016/04/16 12:57:03 root Exp $
. /etc/rc.subr
name=hubot
rcvar=hubot_enable
command=/usr/home/bot/hubot/bin/hubot
command_args="--adapter slack"
hubot_user=bot
pidfile="/var/run/${name}.pid"
procname=node
start_cmd="${name}_start"
hubot_start()
{
export HUBOT_SLACK_TOKEN=xoxb-xxxx-xxxxx
export PATH="$PATH:/usr/home/bot/hubot/bin:/usr/local/bin"
cd /usr/home/bot/hubot
echo "starting hubot"
/usr/sbin/daemon -p ${pidfile} -u ${hubot_user} ${command} ${command_args}
}
load_rc_config $name
run_rc_command "$1"
起動確認
/etc/rc.confにhubot_enable=YESを記載。
service -l でhubotがリストされることを確認したら、service hubot startで起動。
以下のような表示が出ればOK。
[Sat Apr 16 2016 21:55:52 GMT+0900 (JST)] INFO Connecting...
[Sat Apr 16 2016 21:55:53 GMT+0900 (JST)] INFO Logged in as xxx of xxxxxx, but not yet connected
[Sat Apr 16 2016 21:55:54 GMT+0900 (JST)] INFO Slack client now connected
[Sat Apr 16 2016 21:55:55 GMT+0900 (JST)] ERROR hubot-heroku-alive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web-url | cut -d= -f2)`
[Sat Apr 16 2016 21:55:55 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379
ポートフォワーディングの設定。
前章の起動時メッセージ、「INFO hubot-redis-brain: Using default redis on localhost:6379」に注目。
6379でポート待ち受けている。
ご家庭のサーバで動かしている場合には、ルータでのポートフォワーディング設定を忘れずに。
なお2016/4/16現在、slackの側でサーバのIPアドレスを指定したりするような設定は不要。
slack側の確認
slackでbotを住まわせたいchannelにInvite。
botの名前の左側に在席マークが点いているのを確認し、「@<bot名> ping」とし、botからPONGと帰ってきたら成功。
もし起動時メッセージが不要であれば、以下のように/usr/sbin/daemonのオプションに-fを加えるとよい。
/usr/sbin/daemon -f -p ${pidfile} -u .....