Drowsy Dog's Diary

any note, any thought

2013年5月23日
by kazoo
1 Comment

Ubuntu 唐突の Network Unreachable

1ヶ月のおひさしぶりになっちゃいました。の、わりにしょーもないメモ。

***

ローカルネットワーク内の Ubuntu12.04 で走っていた Gitlab (4.2+nginx) で、2ヶ月ほど運用したところで突然 Gitlab からのメールが飛ばなくなった。
→ SSH ログインは問題ない
→ /var/log/syslog に Network Unreachable 多数
→ 名前は引ける。$ nslookup yahoo.com はできるのに、$ ping yahoo.com デキナイ
→ なので内部ネットワークで Gitlab サービスはできてるんだけど、外部メールサーバと接続できてない
→ ローカルネットワークは疎通するが、ルータ外に出て行けない
→ ルーティング設定がおかしい?
→ デフォルトゲートウェイが引けてない?

…と、ここにいたるまでは実際こんなスムーズでなく、
ルータを疑ったり IP 重複を疑ったり火壁を疑ったりで、えらい時間食ってしまいました。

エンジニアの能力って「当たり」の付け方でわかるよね。。orz

***

で、結局のところ、直接の原因はわかってないのですが、
ずっと稼働していたサーバのデフォルトゲートウェイ設定がいつの間にか消えてしまったらしく、
route コマンドで確認すると、

ない。

Ubuntu の設定ファイルの在処がいまいちあやふやなのですが、ぐぐると
/etc/network/interfaces ちゃんと書けぃという情報があるので、

とか書いて、
$ sudo service networking restart
しても NIC にもルーティングにも反映されないのですね。うーん?

なので、同じく route コマンドで

してやって、解決しました。
いまいちしっくりこない神戸っ子のような気分だ。

で、これだけだと再起動時にまた設定を見失うらしいので、これを恒久化するには、
やはり /etc/network/interfaces に、

の一文を加えてやればよいようです。

参考:

http://www.asterisk-works.jp/wiki/index.php/%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E8%A8%AD%E5%AE%9A

2013年4月11日
by kazoo
0 comments

launchd.plistの書き方

AppStore のデイリー DL 数の取得スクリプトを CentOS の crond で走らせていたのですが、これを Mac 環境に移すことになり、crontab じゃなくてちゃんと launchd でやってみることにしました。

「(Tiger以降の)Mac では crond じゃなく launchd で」というのは聞いた事はあったのですが、そもそもこれが何なのかよくわかっていなかった。launchd が UNIX の init にあたる pid=1 のプロセスなのですね。各種プロセス・デーモンはこいつの子プロセスとして実行される。crontab の定期実行は launchd から起動されるし、イベントの監視や、inetd/xinetd の代わりにネットワークの監視もこいつが行ってくれる。
なるほど。

で、この launchd の設定ファイルが launchd.plist と呼ばれる各種 XML ファイルであり、
以下のようにファイルシステムドメインごとのディレクトリにそれぞれ存在する。1ファイルごとに1サービスの設定となる。

  • /System/Library/LaunchAgents/
  • /System/Library/LaunchDaemons/
  • /Library/LaunchAgents/
  • /Library/LaunchDaemons/
  • ~/Library/LaunchAgents/

LaunchDaemons ディレクトリにあるのはいわゆるデーモンであり、root権限で走る。(なのでユーザディレクトリには存在しない)。デーモンはログイン状態に関わらず動作する。
LaunchAgents ディレクトリにあるのはエージェントと呼ばれ、ログインしているユーザごとに起動されるプロセスである。全員共通で起動するものを /Library の方に、特定ユーザのみで動作するものを ~/Library の方に書けばよい。
/System/Library/Launch* は基本的に触らない(ハズ)。

launchd.plist はプロパティリストというルールで記述されたXML。
たとえば Adobe のアップデータはこんな感じ。

~/Library/LaunchAgents/com.adobe.AAM.Updater-1.0.plist

主要なキー一覧はこちらの表の通り。

dict タグは key タグで囲まれた要素をキーとし、その直後のタグ要素を値とする連想配列を表す。
Label と ProgramArguments のみ必須キーとなっている。

ProgramArguments は最初の配列要素が実行するプログラムのパス、以降が引数となる。
たとえば特定の ruby プログラムを 出力ディレクトリを引数に
$ ruby ~/workspace/test.rb ~/tmp/outdir
というような呼び出しをしたいとすると、

みたいな感じ。

また、StartCalendarInterval キーは、それに続く連想配列のキー Minute, Hour, Day, WeekDay(0が日曜日), Month の組み合わせで繰り返しが指定できる。Adobe の例ではこのエージェントは毎日 02:00 に実行されることになる。
crond の場合、マシンがスリープしていると実行はスキップされるが、launchd はその復帰時に実行される(複数回の実行が溜まったときは1回だけ実行される)。
また、カレンダー指定でなく単純に時間おきにインターバル実行させたいときは、

のように書くと、60秒毎に実行されるエージェント or デーモンとなる。

標準出力ログを取りたい場合は、StandardOutPath キーでファイルパスを指定してやればよい。
これを指定しなければ、/var/log/system.log にログが書かれるらしいので、それを回避したければ、

と、してやる。

最後に、設定ファイルが記述できたら launchctrl コマンドを使ってシステムにロードしてあげましょう。

このとき、OnDemand キーが true になっていると、ロード時にまず1度実行(デーモンなら最初に1度、エージェントならログインのたびに)される。

また、設定を変更したときは、一度 launchctrl unload してから再度 load する必要があるので注意!

参考:
http://www.itmedia.co.jp/enterprise/articles/0704/26/news009.html
http://www.itmedia.co.jp/enterprise/articles/0704/29/news004.html

2013年3月6日
by kazoo
0 comments

特定のファイル|ディレクトリを除いたカレント以下のファイルサイズ合計

たとえば、カレント以下から .svn/ を除いた合計サイズは?
の、ワンライナー。(OS X)

いろいろありそうですが、

に、たどり着きました。
ls のあたりもうちょっと綺麗にできそうな気がする。awk だけでできそうな気もする。けども。

こねくり回すのちょっと面白かったのでメモ。

2013年3月1日
by kazoo
0 comments

GitLab_CIによる継続的インテグレーション

なんかサーバ設定のことばかり(ry

導入

先日 EC2 上に GitLab を立ち上げたついでに、GitLab_CI も入れてみました。
GitLab_CI は、同じく GitLab チームが開発している継続的インテグレーション(CI)ツールで、要はコミットと同時にビルドを回したりテストを叩いたりなんだりができる、Jenkins おじさんの親戚です(たぶん)。

以下、インストールと設定について簡単にメモ。
とはいえこちらもほとんどオフィシャルのマニュアルに従うのみです。またこちらの gist も参考にさせていただきました。感謝。

>>>続きを読む

2013年2月19日
by kazoo
1 Comment

AmazonEC2(Ubuntu 12.04 LTS)に GitLab をインストール。

なんかサーバ設定ばかりメモってる気がするが。

GitHub / GitLab

猫も杓子も GitHub。 もはやエンジニアはこれが使えなければ人に非ずな感じの昨今ですが、GitHub では無料アカウントではプライベートリポジトリを作ることができません。また、外部サーバに成果物が保存されることが業務利用上、問題になる場合も多いです。
(とはいえ、月額たった $7 で 5 つのプライベートリポジトリを作れるので、個人あるいは所属組織で問題なければこれで十分と言えそうですが)

そこでクローズド環境で GitHub ライクなサービスを独自で構築できるようにしたものが GitLab だそうです。これもまた GitHub でオープンソース公開されています。

 

以下、これを Amazon EC2 にインストールした際のメモ。

いや、結局外部サーバやん、って突っ込みは無しで。

>>>続きを読む