daemontools インストール

参考1:http://cr.yp.to/daemontools/install.html
参考2:http://www.atmarkit.co.jp/flinux/rensai/qmail09/qmail09a.html


cloudforecast やら memcached やらの自動起動&プロセス監視に deamontools を使う。

公式を参考にインストール。

# mkdir -p /package
# chmod 1755 /package
# cd /package
# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
# tar xzf daemontools-0.76.tar.gz
# rm -f daemontools-0.76.tar
# cd admin/daemontools-0.76

このままインストールしようとするとエラーがでる。
参考3:http://d.hatena.ne.jp/suzumura_ss/20081017


ので、 src/print-cc.sh を下記のように書き換える。

# echo exec "$cc" '-c ${1+"$@"}'
echo exec "$cc --include=/usr/include/errno.h " '-c ${1+"$@"}'


で、インストール。

# package/install

完了。と思いきや、Amazon Linux ではうまくsvscanboot が実行されていないっぽい。
公式を参考に、/etc/init/svscan.conf ってファイルを下記の内容で作成。

     start on runlevel [12345]
     respawn
     exec /command/svscanboot

うまく行った。
なんで、/etc/inittab を読み込まないのか調べたけど、よくわからん。
# Ubuntu9.10 だと、そもそも/etc/inittab がないらしい。
# Amazon Linux が Ubuntu9.10 をベースにしてるってことなのかな?

プロセスの起動やら停止

  • 停止
# svc -d /service/サービス名
  • 起動
# svc -u /service/サービス名
# touch /service/サービス名/down
  • プロセス削除
# svc -d /service/サービス名
# mv /service/サービス名 /service/.サービス名
# svc -x /service/.サービス名
  • サービス状態の監視
$ svstat /service/サービス名

snmp 設定

参考1:http://www.itmedia.co.jp/enterprise/special/0705/snmp/
参考2:http://www.cosmo.sci.hokudai.ac.jp/~jgn/tebiki/mrtg/snmp.html
参考3:http://www.uetyi.mydns.jp/wordpress/tag/snmp



cloudforecast を設定するに当たり、snmp について簡単に勉強したのでそのまとめ。
ほぼデフォルトの設定。アクセス元だけ制限してる。

####
# First, map the community name "public" into a "security name"

#       sec.name  source          community
com2sec notConfigUser  192.168.0.0/16       public

####
# Second, map the security name into a group name:

#       groupName      securityModel securityName
group   notConfigGroup v1            notConfigUser
group   notConfigGroup v2c           notConfigUser

####
# Third, create a view for us to let the group have rights to:

# Make at least  snmpwalk -v 1 localhost -c public system fast again.
#       name           incl/excl     subtree         mask(optional)
view    all            included   .1                 80

####
# Finally, grant the group read-only access to the systemview view.

#       group          context sec.model sec.level prefix read   write  notif
access  notConfigGroup ""      any       noauth    exact  all none none

disk / 10000
com2sec
sec.name セキュリティ名。識別子。
source 問い合わせ可能なホスト名/IP アドレス。"default" ですべてのホストから受け付け。
community コミュニティ名。パスワード的な物。
group
groupName グループ名。複数のユーザを紐付けできる?
securityModel セキュリティモデル(バージョン)の指定。v1, v2c, usm のいずれかを選択。
securityName グループにひもづけるユーザを指定。sec.nameを使用。
view
name 閲覧範囲を指定するグループ名。accessで使用?
incl/excl included または excluded を選択。用途不明。
subtree set/get を許可する MIB ツリー名。種類多すぎ。
mask(optional) MIB ツリーの指定方法を 16 進 4 桁表示したもの(らしい)。よくわからん。
access
group group で指定したグループ名。
context SNMPv1, SNMPv2c を用いる場合は空欄 ("") 。詳細不明。
sec.model セキュリティモデル名。any でおk?
sec.level セキュリティレベル。SNMPv1, SNMPv2c を用いる場合は noauth。
prefix よくわからん。exactでおk?
read/write/notif get (読みだし), set (書き込み), trap (通知)出来る範囲をviewのnameで指定。

cloudforcast について

cloudforecast で以下のようなエラーが出るが、memShared が2.6 kerne では使えないためっぽい。

2011-09-18T06:10:00 [WARN] c:Component::SNMP,h:man1,ad:man1 SNMP get failed: memShared.0.NOSUCHOBJECT.INTEGER32 error: NOSUCHOBJECT {lib/CloudForecast/Component/SNMP.pm#39}

Debian 系の snmp について

参考1:http://perltips.twinkle.cc/linux/ubuntu/snmp_remote.php
参考2:http://blog.s21g.com/articles/251

Debian では /etc/default/snmpd を読み込んで、172.0.0.1 からしか Listen しないようデフォルトで設定されている。
他のノードからアクセスする際は、/etc/default/snmpd を下記のように書き換える。

#SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'

AWS環境構築メモ

Amazon Linux AMI からインスタンスを立ち上げたときの初期設定作業メモ

  • ホスト名で他ノードを引けるように
    • /etc/hosts差し替え
  • ホスト名変更
    • /etc/sysconfig/network の HOSTNAME 変更
    • /etc/rc.d/init.d/network restart
    • 変更しなかったので、hostname で直接変更
  • rootになれるユーザを限定
    • /etc/pam.d/su の "authrequiredpam_wheel.so use_uid" をコメントイン
  • パッケージ更新
  • 開発に必要なもの一式インストール
    • yum groupinstall "Development Tools"
  • snmpd設定
  • サーバ時刻を UTC から JST に変更

あとは、screen やら vim やら シェルの設定ファイルもばらまく

Homebrew でパッケージ管理

Lion に移行した際、パッケージ管理を導入することに。
MacPorts は色々と良い話を聞かないので、Homebrew を入れることに。
Homebrew は Rubyで書かれていて、コマンドも brew だけ。
インストール先も /usr/local/ 以下だからまぁそんなもんだよねということで。


参考:http://mxcl.github.com/homebrew/

公式を参考にインストール


とりあえず、必要スペック。

App Store から Xcode をインストール。
これが今回一番時間かかった。
全部インストール終わったら下記のコマンドを実行。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

アドレスは多分Headが変わるたびにで変わるので、下記を参照。

https://github.com/mxcl/homebrew/wiki/installation

で、インストール完了。


とりあえず、wget と unrar と cpanm と bash-completion をインストール。

$ brew install wget unrar cpanm bash-completion 

sudo 付けてないのに /usr/local/ に入るのはちょっと怖いけど、快適。
bash-completion 入れたら、ついでに brew の補完スクリプト付いてきた。
さらに快適に。


ちなみに、

$ brew install git
$ brew update

で、brew 自体を更新できる。
git が必要なので、先に git も入れてやる必要がある。
# 現在、kernel.org がメンテナンス中で入れられないけど。。。


後の詳しいことは、以下のコマンドを参照する。

$ brew help

UnixTimestamp から通常の時刻へ変換

参考:http://www.math.kobe-u.ac.jp/~kodama/tips-DateTime-transform.html

変換コマンドなど

現在の UNIX time

# date
$ date +"%s"
1170604923

# ruby
$ ruby -e 'p Time.now.to_i'
1170604923

# awk
$ gawk 'BEGIN{print systime();exit}'
1170604923

# perl
$ perl -e 'print time,"\n"'
1170604923

通常の時刻から UNIX time への変換

# date
$ date -d '2007/2/5 01:02:03' +'%s'
1170604923

# ruby1
$ ruby -e 'require "time";t=Time.parse("2007/2/5 01:02:03"); p t.to_i'
1170604923

# ruby2
$ ruby -e 'require "time";t=Time.parse("2007/2/5 01:02:03 JST"); p t.to_i'
1170604923

# ruby3
$ ruby -e 'require "time";t=Time.parse("2007/2/5 01:02:03 UTC"); p t.to_i'
1170637323

UNIX time から通常の時刻への変換

# ruby1
$ ruby -e 'p Time.at(1170604923)'
Mon Feb 05 01:02:03 JST 2007

# ruby2
$ ruby -e 't=Time.at(1170604923); p t.utc; p t.localtime'
Sun Feb 04 16:02:03 UTC 2007
Mon Feb 05 01:02:03 JST 2007

# ruby3
$ ruby -e 'p Time.at(1170604923).strftime("%Y/%m/%d %H:%M:%S")'
"2007/02/05 01:02:03"

# awk1
$ gawk 'BEGIN{print strftime("%c",1170604923);exit}'
Mon Feb  5 01:02:03 2007

# awk2
$ gawk 'BEGIN{print strftime("%Y/%m/%d %H:%M:%S",1170604923);exit}'
2007/02/05 01:02:03

# perl
$ perl -e '@t=localtime(1170604923);printf("%d/%02d/%02d %02d:%02d:%02d\n",@t[5]+1900,@t[4]+1,@t[3],@t[2],@t[1],@t[0])'
2007/02/05 01:02:03