0.0.0.0の意味

時々サーバー設定で、listenするネットワークインターフェイスとポートをしていさせるのがある。

eth0とかeth1だけじゃなくて、localhostからもアクセスで来たいときなんかがあって、でも複数設定できそうな感じがしないときにどうすれば良いかというと、0.0.0.0だと全インターフェイスでlistenしてくれる。

APNS/GCMと端末間の通信

いわゆるプッシュ通知。

プッシュと言いつつ端末からプルしてるんじゃないかと思ったら、通信を張りっぱなしにするとあるので、本当にプッシュしてそうな雰囲気。

Apple / iOS / APNS

support.apple.com

IP 17.0.0.0/8 に対して、5223,2195,2196,443ポートが空いていればどうにかなりそう。 プロキシサーバーを通すと駄目とあるのが色々大変そう。

Google / Android / GCM

Implementing an HTTP Connection Server  |  Cloud Messaging  |  Google Developers

If your organization has a firewall that restricts the traffic to or from the Internet, you need to configure it to allow connectivity with GCM in order for your GCM client apps to receive messages. The ports to open are: 5228, 5229, and 5230. GCM typically only uses 5228, but it sometimes uses 5229 and 5230. GCM doesn't provide specific IPs, so you should allow your firewall to accept outgoing connections to all IP addresses contained in the IP blocks listed in Google's ASN of 15169.

ASN15169というのは詰まるところ"Googleのサーバー全部"ぐらいの意味 合いのようで、こちらなどを見ると具体的な値が判るようになっていま す。

Appleと違って指定するのがめんどそうな感じ。

Emacs25にした。

MacをEl Capitanにした辺りからか、 Emacs24で画面中央にときどきこんな感じの描画ゴミが発生するようになりまして、

f:id:kzwmsyk:20151225144159p:plain

Emacs 25にしてみたが改善せず。どうもvisible-bellでの描画処理がうまく行ってないみたいなので、

#21662 - 25.0.50; visible-bell causes display artifacts on OS X 10.11 - GNU bug report logs

(setq visible-bell nil)
(setq ring-bell-function 'ignore)

ひとまずこんな感じでベルを無効にして回避。

あと、

(set-face-background 'modeline "midnight blue")
(set-face-foreground 'modeline "white")

この行で「そんなのないよ」と怒られる。(Invalid face: modeline) どうもしばらく前からmode-lineに名前が変わってたようです。

(set-face-background 'mode-line "midnight blue")
(set-face-foreground 'mode-line "white")

これで通るように。

Zabbixをいじるのにzabbyを使うことにした(1)

20台前後のサーバーを、監視しないといけないな、仕組みを入れないとな、ということになり、色々見比べてZabbixを使うことにしました。Web UIから触るのが楽そうなので。

kazeburoさんのKurado (cloudforecastの後継)もグラフをたくさん並べて眺めるにはいいなと思ってたのですが、どうも手元の環境でRedis::Fastが上手く動かなくて深追いせずひとまず置いています。

Zabbixにもリソースのグラフを見る機能はありますが、稼働監視とリソースモニタリングとで微妙に役割が違うもののようで、機械が見るための稼働監視と、人が見るためのリソースモニタリングと言ったところでしょうか。(参考 第3回 memcachedの監視とCloudForecastによるモニタリング:memcachedの活用と運用 実践編|gihyo.jp … 技術評論社


さて、zabbix-agentを監視対象サーバーに入れ、Zabbixサーバーを立て、というところまでAnsibleでPlaybook化したのですが、(といってもyumで入れて、設定を書いて、ぐらいですが、)Zabbixサーバーに監視対象ホストとして追加して周り、監視項目をぶら下げないといけません。

Ansibleが2.0以降ならそのまま、zabbixのグループやホストをいじるモジュールがあるのですが、あいにく1.9を使っていますのと、なんだかんだでもうちょっと色々やることになりそうなので、調査。

CLIAPIから(できればRubyで)Zabbixをいじるには、 zabconというのが有名っぽいのですが、 どうもこれはRuby1.xで動き、2.xでは動かないようで難儀。

幾つか他に触ってみたのですが、zabbyというのを使ってみることにしたらこちらは動きました。

よかった。 (続く)

mysql_replicationが厳しくて動かない

stackoverflow.com

これを踏んでしまい、ansibleのmysql_replicationが、mysqlがreplication周りでwarningを出しただけで失敗する。

Sending passwords in plain text without SSL/TLS is extremely insecure.

こんなかんじで。

確かに警告が出るのも解らないではないのだけれども、かといって回避策でやると毎回設定しないといけなくなってつらい。

上のStackoverflowの中で回答として挙がっているが、少し手を入れた版があり、この辺りを使うと回避できる。

ops.kinja.com

github.com

Ansible自体のmysql_replicationを置き換えなくとも、(Best Practiceに従っているPlaybookであれば、)libraryディレクトリの中に上記から取得したmysql_replication.pyを置けば、こちらが優先して使われるようになる。

サブコマンドのあるCLIをThorで作る

gitとかvagrantみたいな一群の処理をサブコマンドとしてまとめたコマンドをスクリプトとして、rubyで書くとき、optparse(OptionParser)でもできるけどちょっと大変。

Thorを使うと、Thorのサブクラスを作ったらメソッドがそのままサブコマンドの処理になる。便利。

qiita.com

qiita.com

#! /usr/bin/env ruby
# mycommand.rb
require 'rubygems' # gemなのでこれが必要。
require 'thor'

Version = "0.0.1"

class MyCommand < Thor
  default_command :help

  map %w[--version -v] => :print_version
  desc "--version, -v", "print the version"
  def print_version
    puts "MyCommand CLI v.#{Version}"
  end

  desc 'hello', 'Hello'
  def hello(to='')
    puts "Hello #{to}"
  end

  desc 'hello-world', 'Hello World'
  def hello_world
    self.hello 'World'
  end

end

MyCommand.start(ARGV)
  • helpは自動定義される。default_commandに指定しておくと、サブコマンドを入れなかったらヘルプが表示される。
  • optparseでhelpと同じく自動定義されるバージョン表示は、上の例のように-v--versionを何かしらのサブコマンドの別名とすることで作れる。
  • 二語以上のサブコマンドは、たとえばmycommand.rb hello_worldではなくてmycommand.rb hello-worldとハイフンで繋ぎたいときものだが、素直にアンダースコア繋ぎのメソッドを定義すれば呼び出し時にThorの方で-を_に置き換えてくれる。(ドキュメントのどこにも書かれてないが、ソースを読んだらそういうことをやっている。)

vagrant環境でソースをホストに置いているとnpm周りでハマる

VirtualBoxをproviderにしたvagrant環境で、ゲストがLinuxソースコードはホスト(Mac)においてあるような場合。

  • npmをホストで動かすと、場合によりCプログラムをMac用にビルドしたりするので、それをLinuxのゲストで動かそうとするとハマる。(踏んだのはPhantomJSだった。)必ず、プログラムを動かすホストで動かす。
  • マウントのときにumaskをちゃんと設定しておかないと、パーミションの実行権限が立たなくてハマる。 config.vm.synced_folder direct_src_dir, "/home/vagrant/hoge/",:mount_options => ['umask=000']
  • リンクを張るようなビルドをするやつがいるとハマる。
  command: |
    npm install --no-bin-links
    chdir=/home/vagrant/hoge