Hatena::ブログ(Diary)

do_akiの徒然想記 RSSフィード

2012-07-03

Scientific Linux6.2 で redmine2.0 のプロセスを monit で監視したメモ

概要

Scientific Linux6.2 に redmine2.0 を導入したメモ - do_akiの徒然想記 で構築した redmineのプロセス監視について。

1分毎にプロセスをチェックして、死んでたら起動するようにした。

ほとんど、 Scientific Linux6.2 で GrowthForecast のプロセスを monit で監視したメモ - do_akiの徒然想記 と同様なのだけど、 rvm を monit から実行する方法がなかなか見つからなくて苦労した。

redmine の起動スクリプトを作成

/home/redmine/redmine.sh

rvm-shell を利用して起動しているあたりがミソ。

こうしないと rvm 環境で動いてくれない。

unicorn の起動オプション --pid で PIDFILE を指定すると推奨されないという警告が出るので、気になる場合は unicorn の config ファイルを作り -c オプションで指定すること。


monit で redmine を監視

Scientific Linux6.2 で GrowthForecast のプロセスを monit で監視したメモ - do_akiの徒然想記 にて、 /etc/monit.d 以下に設定を追加すればよい状況にしてあるので、そこに設定を放り込む。

/etc/monit.d/redmine.conf
check process Redmine
  with pidfile /home/redmine/redmine.pid
  start program = "/home/redmine/redmine.sh start"
    as uid redmine and gid redmine
  stop program  = "/home/redmine/redmine.sh stop"
    as uid redmine and gid redmine
  if failed port 3001 within 2 cycle then alert

最後に monit で設定を読み直してやれば完了。

$ sudo /etc/init.d/monit reload

参考

2012-06-18

Scientific Linux6.2 で GrowthForecast のプロセスを monit で監視したメモ

概要

Scientific Linux6.2 に GrowthForecast を導入したメモ - do_akiの徒然想記 の続き。

当初は daemontools で監視するつもりだったのだけど、 RHEL6 系だと動かすのが面倒だという話を聞いたので(未検証です) monit を利用することに。

1分毎にプロセスをチェックして、死んでたら起動するようにした。

monit 導入

$ sudo yum install yum-conf-epel
$ sudo yum install monit

monit は epel リポジトリに含まれるので、 epel の yum 設定を追加してから install する。

ベースの設定はこんな感じ

/etc/monit.conf
# 60秒ごとにチェック / 起動後 2分経ってから監視開始
set daemon  60
    with start delay 120

set logfile /var/log/monit.log
set idfile /var/.monit.id
set statefile /var/.monit.state

# アラート通知を送るための SMTP サーバ
set mailserver localhost

# アラート送信先
set alert alert@exsample.com

# monit の web インタフェース
set httpd port 2812 and
    use address localhost # バインドアドレス
    allow localhost       # 許可する src IP

# include
include /etc/monit.d/*.conf

growthforecast の起動スクリプトを作成

perlbrew 利用しているし、コマンド一つで 起動/終了 を出来るようにしておいた方がなにかと便利なのでてきとースクリプトを用意した。

$ sudo su - growthforecast
$ mkdir $HOME/var
$ vim growthforecast.sh # 内容は下記参照
$ chmod +x growthforecast.sh
growthforecast.sh
#!/bin/sh
export HOME=/home/growthforecast
source $HOME/perl5/perlbrew/etc/bashrc
perlbrew use perl-5.14.2
 
PID_FILE=$HOME/var/growthforecast.pid
LOG_FILE=$HOME/var/growthforecast.log
 
start() {
  perl $HOME/GrowthForecast/growthforecast.pl --port=5125 --host 127.0.0.1 --front-proxy 127.0.0.1 \
    >>$LOG_FILE 2>&1 & echo $! > $PID_FILE
}
 
stop() {
  if [ -e $PID_FILE ]; then
    kill `cat $PID_FILE`
    rm -f $PID_FILE
  fi
}
 
usage() {
  echo "Usage: `basename $0`  {start|stop|restart}"
}
 
case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    *)
        usage
        ;;
esac

monit で、 growthforecast を監視

これを設置して monit を起動。

ほとんど英語なので分かりやすい。

/etc/monit.d/growthforecast.conf
check process GrowthForecast
  with pidfile /home/growthforecast/var/growthforecast.pid
  start program = "/home/growthforecast/growthforecast.sh start"
    as uid growthforecast and gid growthforecast
  stop program  = "/home/growthforecast/growthforecast.sh stop"
    as uid growthforecast and gid growthforecast
  if failed port 5125 then alert

最後に

と、こんなことしてたら、 [twitter:@kazeburo] さんが Proclet という supervisor モジュール書いてリリースした - blog.nomadscafe.jp という記事書いてた。

Proclet について詳しく見てないけど、これがGrowthForecast に導入されれば外部からの監視はほとんど必要ないのかも?

2012-06-15

Scientific Linux6.2 に Skype4Py で SkypeBot を構築したメモ(その1)

概要

社内で Skype つかっているので以前から作りたいなぁとは思っていたのですが、

最近 HDD が吹っ飛んで過去ログが見られなくなったのが相当な痛手だったので、ログをとるために導入を決意。

ついでに、BeProud さんのようなこと (no title) もできたらいいなぁと思ってみたり。

まずは、cli 環境で skype を動かすまで。


導入手順

Skype の導入
# yum install glibc.i686 alsa-lib.i686 libXv.i686 libXScrnSaver.i686 dbus-qt.i686 qt.i686 qt-x11.i686
# yum install ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts

まずは、依存パッケージの導入。結果的にこの辺を入れることになった。

これらに依存したパッケージを含めると、50以上導入される。

環境は x86_64 だったのだけど、動かすには i686 パッケージが必要になることに注意。

x86_64 入れても、 RPM のインストールは出来るものの、起動できないのです。

IPA Font については、日本語環境なら入れておいた方がよさげ。

なくても動くし、 LANG=en_US.UTF-8 とかで Skype を動かすのであれば必要ない。

# wget http://www.skype.com/go/getskype-linux-beta-fc10
# rpm -ivh skype-2.2.0.35-fedora.i586.rpm

Skype のサイト( Download Skype | Free calls | Chat app )に行くと、 Fedora13 以上用のRPM パッケージがあるので、こいつを利用。


仮想的なX環境とVNCを準備
# yum install Xvfb
# yum install yum-conf-epel
# yum install x11vnc

Skype を実行するための X 環境(Xvfb)と、操作用のVNC サーバ(x11vnc)を導入。

GUI 環境ならば必要ないのだけど、わざわざ Skype の為だけに GUI 入れるのもねぇ、ということで。

x11vnc は epel にあるので、リポジトリ設定を追加の上、導入。

# Xvfb :0 -screen 0 800x600x16 &
# x11vnc -display :0 &

実行はこんな感じ。ディスプレイ番号は適当に。

パスワードとか設定してないので、 Warning でるけど気にしない。安全な環境でやりましょう。

vnc のために、 tcp 5900ポートを開ける必要があることに注意。

-A INPUT -p tcp --dport 5900 -j ACCEPT

iptables サービスを落とすか、

/stc/sysconfig/iptable の適当なところに上記を設定して iptables 再起動しておく必要あり。


Skype の実行
# useradd skype
# env DISPLAY=:0 LANG=en_US.UTF-8 skype

LANG=ja_JP.UTF-8 なら日本語になるので、お好みで。

ただ、一度立ち上げてしまうと、そのときの設定が保持されてしまうので、やり直したいときは .Skype ディレクトリを消しませう。


起動スクリプト

moriyoshi さんのをベースにしつつ、sl6 用に修正。

使わない認証とかは切ってしまった。

/etc/rc.d/init.d/skype に保存して、

# chmod +x /etc/rc.d/init.d/skype
# chkconfig skype on

してあげれば、起動時に自動的に立ち上がる感じ。


次は

ここまでで、 skype を Scientific Linux6.2 の CLI環境で実行する事が出来た。

次は Skypebot 構築する話。

なのだけど、これを書いてる間に Skype for Linux がベータ版じゃなくなった><

2012/06/15 時点では RPM は Fedora16 以上用 になってるので、上記のやり方だとダメかも。。。


参考

Linux上で動くSkype用のbotを作る方法 - muddy brown thang

強欲と未練: CentOS5へのSkype導入

2012-05-22

Scientific Linux6.2 に GrowthForecast を導入したメモ

概要

タイトル通り、sl6 に GrowthForecast を導入したときのメモ。

perl や cpan モジュールを、OS のパッケージに依存しない形で入れたかったので、 RPM にはせず。

growthforecast ユーザを作り、その中で perlbrew と cpanm で実行環境を構築した。

導入

コンパイルに必要なパッケージの導入
$ sudo yum groupinstall "Development Tools"
$ sudo yum install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel

RRDTool が pkgconfig glib2 gettext libxml2 pango cairo に依存する + コンパイルには devel パッケージが必要になる。


実行ユーザの作成
$ sudo useradd growthforecast

perlbrew のインストール
$ su - growthforecast
$ curl -kL http://install.perlbrew.pl | bash
$ echo '[[ -s "$HOME/perl5/perlbrew/etc/bashrc" ]] && source "$HOME/perl5/perlbrew/etc/bashrc"' >> .bash_profile
$ source $HOME/perl5/perlbrew/etc/bashrc

http://perlbrew.pl/ を参考にしつつ入れる。


perlbrew と cpanm のインストール
$ perlbrew install perl-5.14.2
$ perlbrew switch perl-5.14.2
$ perlbrew install-cpanm

このときは最新が 5.14.2 だった(既に 5.16.0 でてるけど)


RRDTool のインストール
$ wget http://search.cpan.org/CPAN/authors/id/G/GF/GFUJI/Alien-RRDtool-0.03.tar.gz
$ cpanm Alien-RRDtool-0.03.tar.gz

OS のパッケージにも RRDTool あるけど、バージョンが古いので GrowthForecast ではうまく動かないのです。


GrowthForecast のインストール
$ git clone git://github.com/kazeburo/GrowthForecast.git GrowthForecast
$ cd GrowthForecast
$ cpanm --installdeps .

GrowthForecast 自体は、 git から引っ張ってくるだけでOK。

依存パッケージは cpanm で一気に入れる。


GrowthForecast 起動
$ mkdir $HOME/log
$ perl growthforecast.pl --port=5125 >$HOME/log/growthforecast.log 2>$HOME/log/growthforecast.err &
$ disown

取り合えずはこれで、 0.0.0.0:5125 で動く。

リバースプロクシの下で動かす場合は、--front-proxy 127.0.0.1 を指定。


あとやること

続き

2012-05-17

Scientific Linux6.2 に redmine2.0 を導入したメモ

動機と概要

redmine 1.4を導入しようと思ったら、ちょうど 2.0 がリリースされたので、2.0 をインストールすることになったのでそのメモを。

いつもならRPM を作って yum で install するだけにしてしまうのだけど、依存関係を解決するのが大変だったので断念。

redmine 専用のユーザを作り、その中で redmine を http サーバ(unicorn)で動かし、フロントの apache からReverseProxy でアクセスできるようにした。

これなら他のパッケージに依存しないし、同じマシンで他のサービスを動かせるし、構成が同じマシンなら rsync するだけで動かせる(はず)。

導入手順

必要なパッケージの導入

コンパイルに必要なものは groupinstall "Development Tools" でだいたい入る。

devel 系は、一部使わないものもあるかもしれないけど、十分条件で。

mysql-server はすでに入っている前提。

(ただ、mysqld の設定で character-set-server=utf8 が指定されているかは確認。 )

$ sudo yum groupinstall "Development Tools"
$ sudo yum install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel mysql-devel httpd-devel ImageMagick-devel

mysql の設定
$ mysql -u root
mysql> CREATE DATABASE redmine DEFAULT CHARACTER SET utf8;
mysql> GRANT ALL ON redmine.* TO redmine IDENTIFIED BY '**password for redmine**';

mysql の redmine ユーザと redmine データベースを作成し、権限を割り当て。


redmine ユーザの作成
$ sudo useradd redmine
rvm のインストール

ここから先は、 redmine ユーザで行う

$ su - redmine
$ curl -L get.rvm.io | bash -s stable 
$ source .bashrc
$ source .rvm/scripts/rvm

source で読み込まずに、ログインし直しても良い。(その方が安全かな)


ruby のインストール

ruby 1.9.3p194(現時点での最新) を入れ、カレントおよびデフォルト指定

bundler も入れる

$ rvm install 1.9.3
$ rvm use --default 1.9.3
$ gem install bundler --no-rdoc --no-ri

redmine をインストール
$ svn co http://redmine.rubyforge.org/svn/branches/2.0-stable redmine-2.0
$ cd redmine-2.0
$ bundle install --without development test postgresql sqlite

現時点での最新をsvn で落とし、依存ライブラリを bundler で一気にインストール。

postgresql および sqlite は使わないので除外している。


redmine 初期設定

redmine を動かすための最低限の設定を追加。

データベース

$ cat config/database.yml
production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: **password for redmine**
  encoding: utf8

メール送信

$ cat config/configuration.yml
production:
  email_delivery:
    delivery_method: :sendmail

redmine データベースのテーブル作成
$ rake generate_secret_token
$ rake db:migrate RAILS_ENV=production

unicorn で動かす
$ gem install unicorn --no-rdoc --no-ri
$ unicorn --listen 127.0.0.1:3001 --env=production --daemonize

unicorn は、rack に対応した web アプリケーションを動かすことが出来る http サーバ。

起動すると log/production.log にログが吐かれる。


apache の設定
<VirtualHost *:80>
    ServerName redmine.exsample.com

    ProxyPass        / http://localhost:3001/
    ProxyPassReverse / http://localhost:3001/
</VirtualHost>

unicorn に対して ReverseProxy しているだけ。

動かし始めてからはまったこと

plugin は vendor/plugin 以下ではなくて plugin ディレクトリに入れる

2.0 から場所が変わったらしい。プラグインの解説ページだと古い記述のままだったりするので注意

既存の大きいリポジトリを参照するとタイムアウト

プロジェクト作ってリポジトリを設定し、参照すると、タイムアウトしてしまう。

大きなリポジトリの場合は、コンソールからリポジトリの情報を取り込んだほうが良いらしい。

$ rake redmine:fetch_changesets RAILS_ENV=production

最後に

  • DBMS には MySQL を利用したけど、 sqlite にすればディレクトリごと固めて全てをバックアップできるので便利かも。
  • 起動スクリプトを用意して、OS 起動時に自動的に立ち上がるようにしたい。

参照