2011年12月20日火曜日

The Timers-北朝鮮



きむ~

2011年12月18日日曜日

monit

何故かnginxが落ちていたので載せているawsのホストにログインしてみたら。
どうやら勝手にrebootが走った様である

$ uptime
 07:27:49 up 18:09,  4 users,  load average: 0.00, 0.01, 0.04


起動スクリプトも用意してなかったのでmonitを入れて監視をすることにした。
$ sudo yum install monit
$ cat <<EOF %gt; /etc/monit.conf
set mailserver localhost
set alert xxx@psychobil.ly
set daemon 60
include /etc/monit.d/*
EOF
$ sudo chkconfig monit on
$ cat <<EOF > /etc/monit.d/nginx
check process nginx with pidfile /usr/local/nginx/logs/nginx.pid
  group ec2-user
  start program = "/usr/local/nginx/sbin/nginx"
  stop program = "/usr/local/nginx/sbin/nginx stop"
  if failed host psychobil.ly port 80
    protocol HTTP request / then restart
EOF
$ sudo monit -t
Control file syntax OK
$ sudo monit reload
$ sudo tail /var/log/monit
[UTC Dec 18 07:24:54] info     : 'system_ip-x-x-x-x.ap-northeast-1.compute.internal' Monit reloaded

2011年12月15日木曜日

Cliff Burton Bass Solo Live



最高過ぎる

2011年12月14日水曜日

debug on paas

paas環境でのdebugって結構大変である。
bugっぽくてもログが独自だったり、用意に取得出来なかったり。
今後の運用課題になりそうである。

2011年12月11日日曜日

google app engine repository

google app enginのsvn repositoryを探してもうまく検索に引っかからないのでメモ。

google app engin のツール(appcfg.pyとか)の最新を追いかける方法
$ svn co http://googleappengine.googlecode.com/svn/trunk/python

2011年12月8日木曜日

frenzy.psychobil.ly 移植中

frenzy.psychobil.lyのストレージをopenshiftに移してapiを作成し、google app engineの負荷削減に成功。
初めてのrubyで作ったapiがまだまだbuggyなので、少しずつ修正。

openshift側にquota制限があるのか否か不明だけど、今のところ問題なさそう。

2011年12月1日木曜日

いまいち

rubyで作ったapiの精度がいまいちだけど、切り替えた。
http://frenzy.psychobil.ly/

api直叩きでキャッシュ未実装なので重い。
no.deの方でhtml生成 or openshift でキャッシュの実装も課題。

2011年11月29日火曜日

gtagsを使う

nginxのソースコードを追うことにしたので、netbeansを使うよりemacsの方が手に馴染んでいるので、
gnu-globalを使って見ることにした。

install

$ sudo apt-get install global
$ cat <<EOF >> ~/.emacs.d/init.el
;; 関数定義に飛ぶ (gtags)
(autoload 'gtags-mode "gtags" "" t)
(setq c-mode-hook
      '(lambda ()
         (gtags-mode 1)
         ))
(when (locate-library "gtags")
  (require 'gtags)
)
(global-set-key "\M-t" 'gtags-find-tag)     ;関数の定義元へ
(global-set-key "\M-r" 'gtags-find-rtag)    ;関数の参照先へ
(global-set-key "\M-s" 'gtags-find-symbol)  ;変数の定義元/参照先へ
(global-set-key "\M-p" 'gtags-find-pattern)
(global-set-key "\M-f" 'gtags-find-file)    ;ファイルにジャンプ
(global-set-key [?\C-,] 'gtags-pop-stack)   ;前のバッファに戻る
EOF
$ cd ~/src/
$ gtags

Jane's Addiction - Stop (Video)

2011年11月25日金曜日

paas mash up

google app engineのquota制限絞りで動かなくなった2ch botの改修するに辺り、幾つかの無料paas環境を繋ぐことにした。
datファイルをgetしてparseしてdbに突っ込んでapiで口を作るところにopenshiftを使用。
未だ手付かずだけど html を生成して保持するところはno.deを使用して、最終型として表示は今まで通りのgoogle app engineに。
db,storage,viewって感じの構成。

それぞれの環境がpython,ruby,javascriptで頭が混乱。
果たして形になるのか微妙だけど楽しい。

2011年11月20日日曜日

node express使う

http://expressjs.com/guide.html

$ npm install -g /tmp/sharks
$ cd /tmp/sharks
$ npm install -d
$ node app.js

no.deにmongodbをinstallする

放置していた no.de も使っていくことにした。
先ずは、mongodbが使えるようにしてみる。
ここを参照に。

$ slogin -l admin sharks.no.de
$ sudo su -
$ curl -O http://wiki.joyent.com/download/attachments/1639170/mongodbnode.sh
$ sh mongodbnode.sh 1.8.1
$ pfexec svcadm enable mongodb

2011年11月19日土曜日

yui compressor

js,cssは圧縮しましょう(余計なお世話ですが)
普段圧縮に使ってるのは yahoo の yui-compressor
debianなら
$ sudo apt-get install yui-compressor
$ yui-compressor --type js -o xxx.pack.js xxx.js
$ yui-compressor --type css -o xxx.pack.css xxx.css

jquery on emacs

js2-modeだとjqueryのコーディングが残念なことに。

解決策を探してたら良さげなのがあった。

espresso-mode

emacs23の場合

$ cd ~/.emacs.d/site-lisp
$ curl -O http://download-mirror.savannah.gnu.org/releases/espresso/espresso.el
$ cat <<eof >> ~/.emacs.d/init.el
(autoload #'espresso-mode "espresso" "Start espresso-mode" t)
(add-to-list 'auto-mode-alist '("\\.js$" . espresso-mode))
(add-to-list 'auto-mode-alist '("\\.json$" . espresso-mode))
EOF

2011年11月15日火曜日

rack on openshift

openshift上でrubyを動かしてみた。
2ちゃんランキングのrssをパースしてjson(風)のものを出力するだけ。
rubyはステップ数が短ければ短いほどカッコイイらしいので頑張ってみた(うそ)。

rackのconfig.ruにこんなのを追加して
map '/get' do
  map '/ranking' do
    run Get2chRanking.new
  end
end

2ch.rbってのにこんなのを書いて
require 'rubygems'
require 'rack'
require 'rss'
require 'json'
require 'parsedate'

$ranking = 'http://2ch-ranking.net/rss/zenban.rdf'
class Get2chRanking
  def call(env)
    rss = open($ranking){ |file| RSS::Parser.parse(file.read) }

    links = []

    rss.items.each do |item|
      url = item.link.gsub(/^\s*http:\/\/.+\?thread=([^\/]+)\/(.+)\s*$/, '\1/test/read.cgi/\2')
      title = item.title.strip.gsub(/\s{2,}/, " ")
      mtime = ParseDate::parsedate(item.dc_date.to_s)
      links.push(Hash["title" => title, "url" => url, "mtime" => mtime])
    end
    links.sort! {|a, b|
      a["mtime"] <=> b["mtime"]
    }
    response = Hash["links" => links]
    [200, {"Content-Type" => "application/json"}, response.to_json]
  end
end

git push
して確認。
一応、それっぽいのが動くようになった。

http://hooligans-psychobilly.rhcloud.com/get/ranking/

と思ったら500エラーが出るようになっている。

debug時にはリモートからtailが出来るのも便利
$ rhc-tail-files --app hooligans

Highliners- Henry the Wasp.avi

king kurt - gather your limbs - live 1984

The Rapids - The Raid (Live 1985)

2011年11月13日日曜日

The Pogues- Fairytale of New York



nice

Mucky Pup, "Batman" Reunion April 2009, NJ




おっさん頑張ってるなー
来日しないかな
次batmanの映画作るならこの曲を使って欲しい、俺ならそうする。

2011年11月11日金曜日

rack

openshiftの問題が解決したのでrackでapplicationを立ち上げて初めてのruby webアプリ作成開始。

最近gaeの制限が厳しくなってデータストア系を別のところに移動させようと考えてたので、そんなapiを作る。

先ずは、rackなるものを勉強。

http://route477.net/w/?RackReferenceJa

ruby reference

openshiftでgit cloneできなかった原因

openshiftはじめる でgit cloneが出来なかった原因が判明。
登録している鍵は dsa で作成してたのだけど、 rsa で作成したものに変更したら、この
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: The remote end hung up unexpectedly
Error in git clone
エラーが解消されて git clone 出来るようになった。

2011年11月8日火曜日

debianでpackageがインストール済みか判定する方法

インストール済みか否かは dpkg -l の戻り値で判定をすればokかと思っていたら違った。 落とし穴があった。 インストールしてたものを削除した場合、configなどが残っていたら 戻り値が 0 になる (--purge付けないでの削除)。 正確に判定するには、dpkg -l 出力結果の 頭に付いているフラグを確認するのが正しそう。 例えば、不要な nano を消してとしても、
$ dpkg -l nano ; echo $?
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                              Version                           Description
+++-=================================-=================================-==================================================================================
un  nano                                                          (no description available)
0
となる。 先頭のフラグの意味は、dpkg -l の出力に書いてあるのも気付かなかった(意識して見てなかった)。 先頭が i ならインストール済みなので判定は、
$ dpkg -l nano | grep -E "^i.+[ \t]+nano"; echo $?
1
とするのが良さそうである。

2011年11月2日水曜日

iptablesでsshdを許可する

既存の状態確認
$ sudo /sbin/service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
4    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
sshdのルールをREJECTの上に追加

$ sudo /sbin/iptables -I INPUT 4 -m state --state NEW -p tcp -m tcp --dport 22 -j ACCEPT

確認

$ sudo /sbin/service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
設定保存
$ sudo /sbin/service iptables save
$ sudo /sbin/service iptables restart

2011年11月1日火曜日

最新のnginxを追いかける


#!/usr/bin/env bash

IS_HEALTHCHECK_NGINX_UPSTREAMS=false

SVN_DIR=~/svn/nginx
USR=www-data
GRP=www-data

for dir in $SVN_DIR
do
		test -d $dir || mkdir $dir
done

cd $SVN_DIR
test ! -d trunk && svn checkout svn://svn.nginx.org/nginx/trunk

for i in $(find trunk/ -name "*.orig")
do
		rm -f $i
		rm -f $(echo $i | sed 's/\.orig$//')
done

cd trunk && svn update

REVISION=$(svn info --xml | xmllint - | grep -E "\s*^<commit" | sed -r 's/\s*<commit\s+revision="([0-9]+)">\s*/\1/')

CONFIG_OPTS=

if $($IS_HEALTHCHECK_NGINX_UPSTREAMS)
then
		test -d module || mkdir module
		cd module
		git clone https://github.com/cep21/healthcheck_nginx_upstreams.git
		cd ..
		patch -p1 < module/healthcheck_nginx_upstreams/nginx.patch
		CONFIG_OPTS=${CONFIG_OPTS}" --add-module=module/healthcheck_nginx_upstreams"
fi

test -e Makefile && make clean

CFLAGS="-O3 -mtune=native -m64 -msse -msse2 -msse3 -fstrict-overflow -fopenmp" ./auto/configure \
		--prefix=/usr/local/nginx-${REVISION} \
		--pid-path=/usr/local/var/run/nginx/nginx.pid \
		--lock-path=/usr/local/var/run/nginx/nginx.lock \
		--user=$USR \
		--group=$GRP \
		--with-ipv6 \
		--with-http_ssl_module \
		--with-http_geoip_module \
		--with-http_gzip_static_module \
		--with-google_perftools_module \
		--with-debug \
		$CONFIG_OPTS

make
sudo make install

exit $(true)

Ookiya

Airs rock n roll






2011年10月30日日曜日

2011年10月26日水曜日

ユーザに unlimit -n を設定

上限設定
$ sudo su
$ cat <<EOF >> /etc/security/limits.conf
* hard  nofile 8192
* soft  nofile 8192
EOF
これだけでは反映されない様なので、/etc/pam.d/suも弄る。 suファイルのコメントには、
# Sets up user limits, please uncomment and read /etc/security/limits.conf
# to enable this functionality.  
とあるので、コメントを外す
$ cp -ip /etc/pam.d/su{,.org}
$ diff /etc/pam.d/{su.org,su}
53c53
< # session    required   pam_limits.so
---
> session    required   pam_limits.so

NICのspeedを知る

ethtoolを使えば簡単
$ sudo ethtool <if> | grep -i spped:
        Speed: 1000Mb/s

ganglia install

サーバの統計情報をグラフ化するといえばrrdtool。
rrdtoolは便利なのだけど監視するサーバ台数が多くなるとツールが欲しくなる。
そこでcactiが多機能で良さげなのだけど、設定項目が多くUIがいまいち不親切だったり。
そんな中、gangliaなるものを知り試してみた。
設定も簡単で且つWeb UIもサクサク動く。
これは良い。
そんなgangliaの構成はserver client型なので監視対象にはagentを入れる必要があるがそれも楽勝。

debianのstableパッケージは若干バージョンが旧いので、この辺を参考に /etc/apt/sources.list.d/testing.list を作成する。
deb http://ftp.de.debian.org/debian/ testing main non-free contrib
deb-src http://ftp.de.debian.org/debian/ testing main non-free contrib

deb http://security.debian.org/ testing/updates main contrib non-free
deb-src http://security.debian.org/ testing/updates main contrib non-free

先ずは server(gmetad) と web UI を install
$ slogin ganglia-server
$ sudo apt-get update
$ sudo apt-get install gmetad ganglia-webfrontend

お次はclient に agent(gmond) を install
$ slogin ganglia-client
$ sudo apt-get update
$ sudo apt-get install ganglia-monitor

2011年10月21日金曜日

openshiftはじめる

openshiftの使い方がいまいち良く分からないので不明なところを一つ一つ潰していく。

webから登録したdomain,applicationをどうやってcheckoutするか?

ユーザ情報を確認する
$OSP
$ rhc-user-info -l email -p password
OK

環境をチェックする
$ rhc-chk -l email -p password
OK

working directory作成
repositoryの確認
$ git clone ssh:@-.rhcloud.com/~/git/.git/ 
NG

checkout方法が不明

2011年10月19日水曜日

gnu screen

真面目にscreenを使おうことにした。
先ずは縦割りが可能なパッチを充てたバージョンをコンパイルする。

$ git clone git://git.savannah.gnu.org/screen.git
$ cd screen/src
$ curl http://vsp4sdl.yuggoth.org/wrp_vertical_split_0.3_4.0.2.diff.bz2 | bzip2 -cd - | patch -p1
# ↑不要
$ sh autogen.sh
$ CFLAGS="-O3 -mtune=native -m64 -msse -msse2 -msse3 -fstrict-overflow -fopenmp" ./configure --prefix=/opt/local
$ make
$ sudo make install

縦割コマンド
Ctrl-A + |

2011年10月14日金曜日

google web fonts on firefox7.0.1

本日急にfirefoxでgoogle web fontsが利用できなくなった。
cssが取れなくなったのではなく、カスタムフォントが表示されなくなっている。
safariやchromeでは問題なく表示されている。

原因不明。
調査中。

twittering-mode

install


$ cd ~/.emacs.d/site-lisp
$ git clone git://github.com/hayamiz/twittering-mode.git
$ cat <> ~/.emacs.d/init.el
(require 'twittering-mode)
EOF

git url

work directoryでrepositoryのurlを知る方法

$ git remote -v show
origin url:path.git (fetch)
origin url:path.git (push)

2011年10月10日月曜日

js2-mode

install


$ cd .emacs.d/site-lisp/
$ curl -O http://js2-mode.googlecode.com/files/js2-20090723b.el
$ cat <<EOF >> ~/.emacs.d/init.el
(autoload 'js2-mode "js2" nil t)
(add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))
EOF

詳細

http://code.google.com/p/js2-mode/wiki/InstallationInstructions

dotcloud

push

$ dotcloud push cramps(app_name)

blog引越し

hatena diaryからbloggerに引越し