なるようにしかならん

そういうことです

be_owned_by が非推奨になっているぽい話

最近、環境の再構築やら環境移設やらでchefに戻っているワタシですが、タイトルの件でハマったのでメモしておく。
ちなみに手元のrspecは3.0.3だった。

まさに
http://inokara.hateblo.jp/entry/2013/05/04/024224
こちらなどを参考にさせていただきながら、nginxの設定ファイルをtemplateリソースを使って配置する処理に対して、

expect(chef_run).to create_template "/etc/nginx/nginx.conf"
file = chef_run.template("/etc/nginx/nginx.conf")
expect(file.mode).to eq("0644")
expect(file).to be_owned_by('root','root')

とか書いていたら、

Failure/Error: expect(file).to be_owned_by('root','root')
expected template[/etc/nginx/nginx.conf] to respond to `owned_by?`

と、怒られた。あれみんなこう書いてるんじゃないの?

調べてみると、以下の様なドキュメントがすぐに出てくる。
http://rubydoc.info/github/sethvargo/chefspec/ChefSpec/API/DeprecatedMatchers

なるほど非推奨っぽい。んで推奨の書き方は何だろ?と思ったんだけど、ぱっと見わからず。。
(ドキュメント慣れというのが必要だとこの後知った。)


なのでGitHubでソース見てたら、次のように書けとあった。

expect(chef_run).to create_template "/etc/nginx/conf.d/#{type}-proxy.conf"
file = chef_run.template("/etc/nginx/conf.d/#{type}-proxy.conf")
expect(file.mode).to eq("0644")
expect(file.owner).to eq('root')
expect(file.group).to eq('root')

これでうまくいった。

その後、公式ドキュメントのview sourceってのを開いてみると、まさに探していたものがあった。
view on GitHubの方、リンク切れてたもんで、なんだこれと思って他をあたってしまったのが時間のロスだった。。


chefspecの使い方書いてくださってる情報は結構日本語も多くて助かっていたんだけど、この辺は古いままだったりするので注意が必要すね。

UTCとJST比較する時ハマったこと

jstutcのカレンダーを取得しようとした場合は

Calendar jstCalendar = Calendar.getInstance(TimeZone.getTimeZone("JST"));
Calendar utcCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));

こうするのが多分正しくて、

Calendar jstCalendar = Calendar.getInstance(TimeZone.getTimeZone("Asia/Tokyo"));
Calendar utcCalendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/London"));

こうするとサマータイムが考慮されてしまうので一瞬びっくりした話。
すみません超常識でしたマジですみません。

UTC(とGMT)とEurope/Londonって使い分けどうすんのかなとか思ってたけどこういうことね。
そりゃそうだ。

境界値試験とかの時は気をつけたい所です。


Mr. サマータイム(Paris Match) - YouTube

sudo と su と nologin

お題

sudo -u $username "command"
sudo su - $username "command"

の違いについて。よく理解できてなかったので。

sudo -u $usernameの場合

sudo -u $username "command"


sudoコマンドを使い、$usernameで指定されたユーザーとしてcommandを実行する

sudoで必要になるパスワードは、現在このコマンドを実行しようとしているユーザーのパスワード



sudo su - $usernameの場合

sudo su - $username "command"


$usernameに切り替えて、commandを実行する(のを、rootとしてやる)

su でユーザーの変更を行う場合は、切り替え先のユーザーのパスワードが必要(なのでsudoでrootとして実行)



nologinユーザにおける挙動

  • 1.の場合

ログインシェルを切り替えないため、ログインシェルが/sbin/nologinであってもコマンドの実行が可能

  • 2.の場合

ログインシェルの切り替えを行うため、/sbin/nologinだと切り替えができず、コマンドは失敗



結論

  • 目的にあった方法を選ぶこと。
  • ログインシェルが/sbin/nologinであれば、sudo su - $usernameは上記の理由から利用が不可能なため、コマンドの実行の仕方を変更するか、そもそものユーザーの使い方から見直すこと。






って感じかなぁ。

svn2gitで移行作業途中のsvnリポジトリの変更を移行しているGitHub側に送る

タイトルが何を言いたいのかわからない感じになってしまった。。。

svn側のtrunkがブランチ扱いになっているか確認

$ git branch -r
  svn/trunk

svnのtrunkから対応するローカルブランチを作成

$ git checkout -b svn-trunk svn/trunk

GitHub側のDevelopブランチにマージしたいので、一旦Developの変更差分を取り込む

$ git pull --rebase origin develop

svn側(trunk)の変更をローカルリポジトリに取得する

$ git svn fetch
$ git merge svn/trunk

GitHub側に、今回作成したtrunk追跡用のブランチをpush

$ git push origin master

あとはGitHub側でsvn-trunkから、Developブランチにpull requesteを作ってやって取り込んでもらえればいいのかな?
教えて詳しい人。

(参考)
http://qiita.com/items/8db00b6e9eb14a4db7f7

memcache-topでクラスタ全体の統計情報を見る

memcache-topっつーのがあるってことで使ってみました。


対象のホストは、104行目あたりの@default_instancesって所で設定できたりします。
もう使うクラスタ情報が固定だバカヤロウって人は書き換えちゃってもいいかも。

# List of servers/ ports to query.
@default_instances = (
"127.0.0.1:11211", "127.0.0.1:11212"
);

もしくは--instancesオプション使って、カンマ区切りでhostを列挙する感じ。

一旦オプション列挙しておく。

- Specify instances w/ --instances (multiple times or comma separated)
- Specify default port w/ --port (defaults to 11211)
- Specify sleep time w/ --sleep (default 3)
- Specify color output w/ --color (default) or --nocolor
- Specify lifetime stats w/ --lifetime or --nolifetime (default)
   NOTE: lifetime stats break thresholds for evictions, bytes.
- Specify read and write bytes w/ --bytes (default) or --nobytes
- Specify get and set commands w/ --commands or --nocommands (default)
- Specify cumulative numbers w/ --cumulative (don't use with lifetime)

evictionの回数も見れるから、「えっ、キャッシュ溢れてる・・・・?」ってのも
一覧で見られるので、助かります。たまに設定値がデフォのとか混ざってるとすぐにわかりますね。


環境によってはしきい値(上回るとデフォルトで文字が赤くなります)を変更したいって時に
以下の項目ををいぢるといいかも。

# 'Alert' threshold values at which to color the text red.
%threshold = (
    cache_hit           => 60,          # Cache hit ratio
    usage               => 90,          # % space used
    time                => 5,           # Number of ms to run the stats query
    evictions           => 0,           # Number of evictions per second
    curr_connections    => 3500,        # Number of current connections
    bytes_read          => 1000000,     # Bytes read, per second
    bytes_written       => 1000000,     # Bytes written, per second
    limit_maxbytes      => 0,           # Total space allocated
    bytes               => 0,           # Total space used
    cmd_get             => 1000,        # Get commands
    cmd_set             => 1000,        # Set commands
);

slabs情報の取得は、これを改変してきっとすてきな人が作ってくれるはず(ぇ

curlで画像ファイルとかをpost

curl -X POST -F file=@./tori.png http://piyopiyo.com/picture

こんな感じ。fileのところはパラメータ名を指定してあげればok。
マルチパート形式で送ってくれます。

余談ですが、ヘッダを指定するときは -H 'Authorization: OAuth 12345....' って感じでoptionを追加すると、いけます。

manを読むのは、結構楽しい。

finagleのClientBuilderの設定値

int hostConnectionLimit;
int hostConnectionCoresize;
long hostConnectionIdleTime;
int hostConnectionMaxWaiters;
long hostConnectionMaxIdleTime;
long hostConnectionMaxLifeTime;

主にこのへんの値の関連とか。

  • hostConnectionLimit

ホストあたりの接続「上限」数。

  • hostConnectionCoresize

コネクションプールのcoreサイズ。この値よりプール内のコネクションの数が小さくなることはない。下限値。

  • hostConnectionIdleTime

接続がcloseされるまでの時間(?)

  • hostConnectionMaxWaiters

コネクションプール取得待ちキューサイ

  • hostConnectionMaxIdleTime

未使用(状態)のコネクションの生存期間

  • hostConnectionMaxLifeTime

占有状態に関わらない、コネクションの生存期間

で、hogehogeTimeの設定値が0の時はどうなるのかというところを調べ中。



【参考】
http://twitter.github.com/finagle/api/finagle-core/com/twitter/finagle/builder/ClientBuilder.html
https://github.com/twitter/finagle/blob/master/README.md#clients